Make base more robust for the init infra deployments

This commit is contained in:
2025-10-02 21:49:08 -05:00
parent 7ac41937a8
commit a75a415d65

View File

@@ -5,44 +5,45 @@
[infra.init :as infra]
[k8s.add-ons.csi-driver.hetzner :as hetzner-csi]
[k8s.add-ons.ingress-controller.caddy :as caddy]
[k8s.services.openbao.service :as vault-service]))
[infra.openbao :as openbao]))
(defn if-no-apps [apps then-fn & [else-fn]]
(if (nil? apps)
(then-fn)
(if else-fn (else-fn) nil)))
(defn app-deployments
"Deploy applications with proper dependency chain"
[provider config kc apps]
(let [vault-result (vault-service/deploy-vault provider)
app-results (if (nil? apps) {} (apps config provider))]
(assoc app-results :vault vault-result)))
(defn initialize [apps]
(let [cfg (pulumi/Config.)
cluster (infra/create-cluster cfg)
setup (.apply (get cluster :kubeconfig)
stack-ref (new pulumi/StackReference "init")
kubeconfig (if-no-apps apps #(infra/create-cluster cfg) #(.getOutput stack-ref "kubeconfig"))
setup (.apply kubeconfig
(fn [kc]
(js/Promise.
(fn [resolve _reject]
(let [provider (new k8s/Provider
"k8s-dynamic-provider"
(clj->js {:kubeconfig kc}))]
(caddy/deploy provider)
(hetzner-csi/deploy provider)
(clj->js {:kubeconfig kc}))]
(resolve
(if (nil? apps)
(app-deployments provider cfg kc nil)
(app-deployments provider cfg kc apps))))))))]
{:cluster cluster :setup setup}))
(if-no-apps
apps
#(let [vault-result (openbao/deploy provider)
caddy-result (caddy/deploy provider)
csi-result (hetzner-csi/deploy provider)]
{:vault vault-result
:caddy caddy-result
:csi csi-result})
#(apps stack-ref cfg provider)
)))))))]
{:kubeconfig kubeconfig :setup setup}))
(defn build-exports [init]
(let [cluster (get init :cluster)
(let [kubeconfig (get init :kubeconfig)
app-outputs (get init :setup)]
{:kubeconfig (get cluster :kubeconfig)
:masterIp (get cluster :masterIp)
:workerDeIp (get cluster :workerDeIp)
:workerUsIp (get cluster :workerUsIp)
{:kubeconfig (get kubeconfig :kubeconfig)
:vaultAddress (pulumi/output (.apply app-outputs #(get-in % [:vault :address])))
:vaultToken (pulumi/output (.apply app-outputs #(get-in % [:vault :root-token])))
}))
:vaultToken (pulumi/output (.apply app-outputs #(get-in % [:vault :root-token])))}))
(defn quick-deploy []
@@ -53,7 +54,5 @@
(defn deploy-core []
(let [init (initialize nil)]
(set! (.-exports js/module)
(clj->js (build-exports init))
)
))
(set! (.-exports js/module)
(clj->js (build-exports init)))))