Move base logic here and begin working towards a centralized multi stack declaration mechanism

This commit is contained in:
2025-11-23 17:41:05 -06:00
parent c1cae5c38e
commit dd4a209ea0

View File

@@ -5,54 +5,96 @@
["child_process" :as cp]
[promesa.core :as p]
[base :as base]
[configs :refer [cfg]]))
[configs :refer [cfg]]
[utils.execution.general :as general]
[utils.execution.providers :refer [execute]]
[service-registries :refer [base-resources-definition
initialize-resources-definition
shared-resources-definition
preparation-resources-definition
deployment-resources-definition]]
)
(:require-macros [utils.execution.general :refer [p->]]))
(def base-stack (clj->js {:projectName "hetzner-k3s"
:stackName "base"
:workDir "/home/jaggar/dotfiles/iac"
:program base/quick-deploy-base}))
(defn define-stack [project-name stack-name work-dir program]
(clj->js {:projectName project-name
:stackName stack-name
:workDir work-dir
:program program}))
(def init-stack (clj->js {:projectName "hetzner-k3s"
:stackName "init"
:workDir "/home/jaggar/dotfiles/iac"
:program base/quick-deploy-init}))
(def shared-platform-stack (clj->js {:projectName "hetzner-k3s"
:stackName "shared"
:workDir "/home/jaggar/dotfiles/iac"
:program base/quick-deploy-shared}))
(def base-stack
(define-stack
"hetzner-k3s"
"base"
"/home/jaggar/dotfiles/iac"
(execute
base-resources-definition
#(#js {:kubeconfig (p-> % .-cluster "generic:execute" .-kubeconfig)}))))
(def prepare-deployment-stack (clj->js {:projectName "hetzner-k3s"
:stackName "prepare"
:workDir "/home/jaggar/dotfiles/iac"
:program base/quick-deploy-prepare}))
(def init-stack
(define-stack
"hetzner-k3s"
"init"
"/home/jaggar/dotfiles/iac"
(execute
initialize-resources-definition
#(#js {:vaultAddress (p-> % .-openbao "generic:execute" .-address)
:vaultToken (p-> % .-openbao "generic:execute" "root-token")}))))
(def shared-platform-stack
(define-stack
"hetzner-k3s"
"shared"
"/home/jaggar/dotfiles/iac"
(execute
shared-resources-definition
#(let [secrets (p-> % .-harbor "vault:prepare" "stringData")]
#js {:url (p-> secrets .-host (fn [x] (str "https://" x)))
:username (p-> secrets .-username)
:password (p-> secrets .-password)}))))
(def prepare-deployment-stack
(define-stack
"hetzner-k3s"
"prepare"
"/home/jaggar/dotfiles/iac"
(execute preparation-resources-definition (fn [output] {}))))
(def deployment-stack
(define-stack
"hetzner-k3s"
"deployment"
"/home/jaggar/dotfiles/iac"
(execute deployment-resources-definition (fn [output] {}))))
(def deployment-stack (clj->js {:projectName "hetzner-k3s"
:stackName "deployment"
:workDir "/home/jaggar/dotfiles/iac"
:program base/quick-deploy-services}))
(defn deploy-stack
([stack-definition configs]
(deploy-stack stack-definition configs 0))
([stack-definition inputs]
(deploy-stack stack-definition inputs 0))
([stack-definition configs post-delay]
([stack-definition inputs post-delay]
(p/let
[stack (.createOrSelectStack pulumi-auto/LocalWorkspace stack-definition)
_ (p/doseq [config configs]
(.setConfig stack (:name config) (clj->js (dissoc config :name))))
_ (p/doseq [input inputs]
(.setConfig stack (:name input) (clj->js (dissoc confinputig :name))))
_ (.up stack #js {:onOutput println})
outputs (.outputs stack)
_ (p/delay post-delay)]
outputs)))
(defn run []
(p/let [_ (println "Deploying cluster")
base-outputs (deploy-stack base-stack [{:name "hetzner-k3s:sshKeyName" :value (-> cfg :sshKeyName) :secret false}
{:name "hetzner-k3s:sshPersonalKeyName" :value (-> cfg :sshPersonalKeyName) :secret false}
{:name "hcloud:token" :value (-> cfg :hcloudToken) :secret true}
{:name "hetzner-k3s:privateKeySsh" :value (-> cfg :privateKeySsh) :secret true}])
base-outputs (deploy-stack
base-stack
[{:name "hetzner-k3s:sshKeyName" :value (-> cfg :sshKeyName) :secret false}
{:name "hetzner-k3s:sshPersonalKeyName" :value (-> cfg :sshPersonalKeyName) :secret false}
{:name "hcloud:token" :value (-> cfg :hcloudToken) :secret true}
{:name "hetzner-k3s:privateKeySsh" :value (-> cfg :privateKeySsh) :secret true}])
reused-configs [{:name "kubeconfig" :value (-> base-outputs (aget "kubeconfig") (.-value)) :secret true}]