From f81984de26eca63976f9985b439a2bf38f8776ae Mon Sep 17 00:00:00 2001 From: GigiaJ Date: Tue, 7 Oct 2025 22:28:09 -0500 Subject: [PATCH] Move deploy! here and update to properly support service-registry/configs being passed thru --- iac/src/main/base.cljs | 81 ++++++++++++++++++++++++++---------------- 1 file changed, 51 insertions(+), 30 deletions(-) diff --git a/iac/src/main/base.cljs b/iac/src/main/base.cljs index 6b8ce70..61606ba 100644 --- a/iac/src/main/base.cljs +++ b/iac/src/main/base.cljs @@ -1,23 +1,48 @@ (ns base (:require ["@pulumi/pulumi" :as pulumi] + ["@pulumi/vault" :as vault] ["@pulumi/kubernetes" :as k8s] - [infra.init :as infra] + [infra.init :as infra] + [infra.openbao :as openbao] [k8s.add-ons.csi-driver.hetzner :as hetzner-csi] - [k8s.add-ons.ingress-controller.caddy :as caddy] - [infra.openbao :as openbao])) + [utils.k8s :refer [create-ns deploy-stack]])) -(defn if-no-apps [apps then-fn & [else-fn]] - (if (nil? apps) +(defn deploy! [{:keys [provider vault-provider pulumi-cfg service-registry namespaces?]}] + (let [namespaces (->> service-registry (map :app-namespace) (set)) + _ (when namespaces? (doseq [namespace namespaces] (create-ns provider namespace))) + deployment-results + (into + {} + (for [config service-registry] + (let [{:keys [stack app-name]} config] + [app-name (apply deploy-stack (conj (vec stack) (merge config {:provider provider + :vault-provider vault-provider + :pulumi-cfg pulumi-cfg})))])))] + (clj->js deployment-results))) + +(defn apps [stack-ref pulumi-cfg provider service-registry] + (let [vault-output (pulumi/output + (clj->js {:address (.getOutput stack-ref "vaultAddress") + :token (.getOutput stack-ref "vaultToken")})) + vault-provider (new vault/Provider + "vault-provider" + (clj->js vault-output))] + (deploy! {:provider provider + :vault-provider vault-provider + :pulumi-cfg pulumi-cfg + :service-registry service-registry + :namespaces? true}))) + +(defn if-no-configs [configs then-fn & [else-fn]] + (if (nil? configs) (then-fn) (if else-fn (else-fn) nil))) - - -(defn initialize [apps] - (let [cfg (pulumi/Config.) +(defn initialize [configs] + (let [pulumi-cfg (pulumi/Config.) stack-ref (new pulumi/StackReference "init") - kubeconfig (if-no-apps apps #(infra/create-cluster cfg) #(.getOutput stack-ref "kubeconfig")) + kubeconfig (if-no-configs configs #(infra/create-cluster pulumi-cfg) #(.getOutput stack-ref "kubeconfig")) setup (.apply kubeconfig (fn [kc] (js/Promise. @@ -26,15 +51,14 @@ "k8s-dynamic-provider" (clj->js {:kubeconfig kc}))] (resolve - (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) + (if-no-configs + configs + #(deploy! {:provider provider + :vault-provider nil + :pulumi-cfg pulumi-cfg + :service-registry [hetzner-csi/config openbao/config] + :namespaces? false}) + #(apps stack-ref pulumi-cfg provider configs) )))))))] {:kubeconfig kubeconfig :setup setup})) @@ -42,17 +66,14 @@ (let [kubeconfig (get init :kubeconfig) app-outputs (get init :setup)] {: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])))})) + :vaultAddress (.apply app-outputs #(-> % .-openbao .-execute .-address)) + :vaultToken (.apply app-outputs #(aget (-> % .-openbao .-execute) "root-token"))})) - -(defn quick-deploy [] - (-> - (initialize nil) - (build-exports) +(defn quick-deploy [configs exports] + (-> + (initialize configs) + (exports) (clj->js))) -(defn deploy-core [] - (let [init (initialize nil)] - (set! (.-exports js/module) - (clj->js (build-exports init))))) \ No newline at end of file +(defn quick-deploy-base [] + (quick-deploy nil build-exports)) \ No newline at end of file