From dc34fd8cca84bafba3d98e12c0e8075cc59f4de4 Mon Sep 17 00:00:00 2001 From: GigiaJ Date: Sat, 13 Sep 2025 18:09:06 -0500 Subject: [PATCH] Revise core to use Pulumi Automation API --- iac/src/main/core.cljs | 78 ++++++++++++++++++++++++++++++++---------- 1 file changed, 59 insertions(+), 19 deletions(-) diff --git a/iac/src/main/core.cljs b/iac/src/main/core.cljs index 5e0fc3d..7a037db 100644 --- a/iac/src/main/core.cljs +++ b/iac/src/main/core.cljs @@ -1,29 +1,69 @@ (ns core (:require ["@pulumi/pulumi" :as pulumi] + ["@pulumi/pulumi/automation" :as pulumi-auto] + ["child_process" :as cp] + [promesa.core :as p] [base :as base] - [k8s.services.nextcloud.nextcloud :as nextcloud])) + [configs :refer [cfg]] + [k8s.services.nextcloud.nextcloud :as nextcloud] + [deployments :as deployments])) -(defn app-list [provider vault-params] - (let [nextcloud-result (nextcloud/deploy-nextcloud provider vault-params)] - {:nextcloud nextcloud-result})) +(def init-stack (clj->js {:projectName "hetzner-k3s" + :stackName "cluster" + :workDir "/home/jaggar/dotfiles/iac" + :program base/quick-deploy})) + +(defn run [] + (p/let [ + _ (println "Deploying cluster") + core-stack (.createOrSelectStack pulumi-auto/LocalWorkspace + init-stack) + _ (.setConfig core-stack "hetzner-k3s:sshKeyName" #js {:value (-> cfg :sshKeyName) :secret false}) + _ (.setConfig core-stack "hetzner-k3s:sshPersonalKeyName" #js {:value (-> cfg :sshPersonalKeyName) :secret false}) + _ (.setConfig core-stack "hcloud:token" #js {:value (-> cfg :hcloudToken) :secret true}) + _ (.setConfig core-stack "hetzner-k3s:privateKeySsh" #js {:value (-> cfg :privateKeySsh) :secret true}) + _ (println "Check1?") + up-result (.up core-stack #js {:onOutput println}) + _ (println "Check2?") + + outputs (.outputs core-stack) + _ (println outputs) + ;; service-name (-> outputs (aget "serviceName") (aget "value")) + ;; namespace (-> outputs (aget "namespace") (aget "value")) + ;; _ (println (str "-> Service Name: " service-name ", Namespace: " namespace)) + + ;; Start port-forward + ;; _ (println "Starting kubectl port-forward...") + ;;port-forward (cp/spawn "kubectl" + ;; #js ["port-forward" + ;; (str "svc/" service-name) + ;; "8080:80" + ;; "-n" + ;; namespace]) + ;; _ (p/delay 3000) + + ;; Deploy Stack B + ;; _ (println "Deploying application stack") + ;;app-stack (p/await (pulumi-auto/LocalWorkspace.createOrSelectStack + ;; #js {:stackName "hetzner-k3s-cluster" + ;; :projectName "" + ;; :program #(p/promise (deployments/deploy-services))})) + ;; _ (p/await (.preview app-stack)) + ;; _ (println "Application stack deployment complete.") + + ;; Clean up + ;;_ (.kill port-forward) + ;; _ (println "Cleaned up port-forward process.") + ] + + ;; This final value is returned when the p/let chain completes + "All stacks deployed and cleaned up successfully.")) (defn main! [] - (let [init (base.init! app-list) - cluster (get init :cluster) - app-outputs (get init :setup)] + (-> (run) + (p/then #(println %)) + (p/catch #(println "An error occurred:" %)))) - (set! (.-exports js/module) - (clj->js {:kubeconfig (get cluster :kubeconfig) - :masterIp (get cluster :masterIp) - :workerDeIp (get cluster :workerDeIp) - :workerUsIp (get cluster :workerUsIp) - - :vaultAddress (.apply app-outputs #(get-in % [:vault :address])) - :vaultToken (.apply app-outputs #(get-in % [:vault :root-token])) - - :nextcloudUrl (.apply app-outputs - (fn [outputs] - (get-in outputs [:nextcloud :nextcloud-url])))})))) \ No newline at end of file