Move base logic here and begin working towards a centralized multi stack declaration mechanism
This commit is contained in:
@@ -5,54 +5,96 @@
|
|||||||
["child_process" :as cp]
|
["child_process" :as cp]
|
||||||
[promesa.core :as p]
|
[promesa.core :as p]
|
||||||
[base :as base]
|
[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"
|
(defn define-stack [project-name stack-name work-dir program]
|
||||||
:stackName "base"
|
(clj->js {:projectName project-name
|
||||||
:workDir "/home/jaggar/dotfiles/iac"
|
:stackName stack-name
|
||||||
:program base/quick-deploy-base}))
|
: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"
|
(def base-stack
|
||||||
:stackName "shared"
|
(define-stack
|
||||||
:workDir "/home/jaggar/dotfiles/iac"
|
"hetzner-k3s"
|
||||||
:program base/quick-deploy-shared}))
|
"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"
|
(def init-stack
|
||||||
:stackName "prepare"
|
(define-stack
|
||||||
:workDir "/home/jaggar/dotfiles/iac"
|
"hetzner-k3s"
|
||||||
:program base/quick-deploy-prepare}))
|
"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
|
(defn deploy-stack
|
||||||
([stack-definition configs]
|
([stack-definition inputs]
|
||||||
(deploy-stack stack-definition configs 0))
|
(deploy-stack stack-definition inputs 0))
|
||||||
|
|
||||||
([stack-definition configs post-delay]
|
([stack-definition inputs post-delay]
|
||||||
(p/let
|
(p/let
|
||||||
[stack (.createOrSelectStack pulumi-auto/LocalWorkspace stack-definition)
|
[stack (.createOrSelectStack pulumi-auto/LocalWorkspace stack-definition)
|
||||||
_ (p/doseq [config configs]
|
_ (p/doseq [input inputs]
|
||||||
(.setConfig stack (:name config) (clj->js (dissoc config :name))))
|
(.setConfig stack (:name input) (clj->js (dissoc confinputig :name))))
|
||||||
_ (.up stack #js {:onOutput println})
|
_ (.up stack #js {:onOutput println})
|
||||||
outputs (.outputs stack)
|
outputs (.outputs stack)
|
||||||
_ (p/delay post-delay)]
|
_ (p/delay post-delay)]
|
||||||
outputs)))
|
outputs)))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(defn run []
|
(defn run []
|
||||||
(p/let [_ (println "Deploying cluster")
|
(p/let [_ (println "Deploying cluster")
|
||||||
base-outputs (deploy-stack base-stack [{:name "hetzner-k3s:sshKeyName" :value (-> cfg :sshKeyName) :secret false}
|
base-outputs (deploy-stack
|
||||||
{:name "hetzner-k3s:sshPersonalKeyName" :value (-> cfg :sshPersonalKeyName) :secret false}
|
base-stack
|
||||||
{:name "hcloud:token" :value (-> cfg :hcloudToken) :secret true}
|
[{:name "hetzner-k3s:sshKeyName" :value (-> cfg :sshKeyName) :secret false}
|
||||||
{:name "hetzner-k3s:privateKeySsh" :value (-> cfg :privateKeySsh) :secret true}])
|
{: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}]
|
reused-configs [{:name "kubeconfig" :value (-> base-outputs (aget "kubeconfig") (.-value)) :secret true}]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user