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] [infra.init :as infra]
[k8s.add-ons.csi-driver.hetzner :as hetzner-csi] [k8s.add-ons.csi-driver.hetzner :as hetzner-csi]
[k8s.add-ons.ingress-controller.caddy :as caddy] [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] (defn initialize [apps]
(let [cfg (pulumi/Config.) (let [cfg (pulumi/Config.)
cluster (infra/create-cluster cfg) stack-ref (new pulumi/StackReference "init")
setup (.apply (get cluster :kubeconfig) kubeconfig (if-no-apps apps #(infra/create-cluster cfg) #(.getOutput stack-ref "kubeconfig"))
setup (.apply kubeconfig
(fn [kc] (fn [kc]
(js/Promise. (js/Promise.
(fn [resolve _reject] (fn [resolve _reject]
(let [provider (new k8s/Provider (let [provider (new k8s/Provider
"k8s-dynamic-provider" "k8s-dynamic-provider"
(clj->js {:kubeconfig kc}))] (clj->js {:kubeconfig kc}))]
(caddy/deploy provider)
(hetzner-csi/deploy provider)
(resolve (resolve
(if (nil? apps) (if-no-apps
(app-deployments provider cfg kc nil) apps
(app-deployments provider cfg kc apps))))))))] #(let [vault-result (openbao/deploy provider)
{:cluster cluster :setup setup})) 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] (defn build-exports [init]
(let [cluster (get init :cluster) (let [kubeconfig (get init :kubeconfig)
app-outputs (get init :setup)] app-outputs (get init :setup)]
{:kubeconfig (get cluster :kubeconfig) {:kubeconfig (get kubeconfig :kubeconfig)
:masterIp (get cluster :masterIp)
:workerDeIp (get cluster :workerDeIp)
:workerUsIp (get cluster :workerUsIp)
:vaultAddress (pulumi/output (.apply app-outputs #(get-in % [:vault :address]))) :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 [] (defn quick-deploy []
@@ -53,7 +54,5 @@
(defn deploy-core [] (defn deploy-core []
(let [init (initialize nil)] (let [init (initialize nil)]
(set! (.-exports js/module) (set! (.-exports js/module)
(clj->js (build-exports init)) (clj->js (build-exports init)))))
)
))