Move deploy! here and update to properly support service-registry/configs being passed thru
This commit is contained in:
@@ -1,23 +1,48 @@
|
|||||||
(ns base
|
(ns base
|
||||||
(:require
|
(:require
|
||||||
["@pulumi/pulumi" :as pulumi]
|
["@pulumi/pulumi" :as pulumi]
|
||||||
|
["@pulumi/vault" :as vault]
|
||||||
["@pulumi/kubernetes" :as k8s]
|
["@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.csi-driver.hetzner :as hetzner-csi]
|
||||||
[k8s.add-ons.ingress-controller.caddy :as caddy]
|
[utils.k8s :refer [create-ns deploy-stack]]))
|
||||||
[infra.openbao :as openbao]))
|
|
||||||
|
|
||||||
(defn if-no-apps [apps then-fn & [else-fn]]
|
(defn deploy! [{:keys [provider vault-provider pulumi-cfg service-registry namespaces?]}]
|
||||||
(if (nil? apps)
|
(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)
|
(then-fn)
|
||||||
(if else-fn (else-fn) nil)))
|
(if else-fn (else-fn) nil)))
|
||||||
|
|
||||||
|
(defn initialize [configs]
|
||||||
|
(let [pulumi-cfg (pulumi/Config.)
|
||||||
(defn initialize [apps]
|
|
||||||
(let [cfg (pulumi/Config.)
|
|
||||||
stack-ref (new pulumi/StackReference "init")
|
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
|
setup (.apply kubeconfig
|
||||||
(fn [kc]
|
(fn [kc]
|
||||||
(js/Promise.
|
(js/Promise.
|
||||||
@@ -26,15 +51,14 @@
|
|||||||
"k8s-dynamic-provider"
|
"k8s-dynamic-provider"
|
||||||
(clj->js {:kubeconfig kc}))]
|
(clj->js {:kubeconfig kc}))]
|
||||||
(resolve
|
(resolve
|
||||||
(if-no-apps
|
(if-no-configs
|
||||||
apps
|
configs
|
||||||
#(let [vault-result (openbao/deploy provider)
|
#(deploy! {:provider provider
|
||||||
caddy-result (caddy/deploy provider)
|
:vault-provider nil
|
||||||
csi-result (hetzner-csi/deploy provider)]
|
:pulumi-cfg pulumi-cfg
|
||||||
{:vault vault-result
|
:service-registry [hetzner-csi/config openbao/config]
|
||||||
:caddy caddy-result
|
:namespaces? false})
|
||||||
:csi csi-result})
|
#(apps stack-ref pulumi-cfg provider configs)
|
||||||
#(apps stack-ref cfg provider)
|
|
||||||
)))))))]
|
)))))))]
|
||||||
{:kubeconfig kubeconfig :setup setup}))
|
{:kubeconfig kubeconfig :setup setup}))
|
||||||
|
|
||||||
@@ -42,17 +66,14 @@
|
|||||||
(let [kubeconfig (get init :kubeconfig)
|
(let [kubeconfig (get init :kubeconfig)
|
||||||
app-outputs (get init :setup)]
|
app-outputs (get init :setup)]
|
||||||
{:kubeconfig (get kubeconfig :kubeconfig)
|
{:kubeconfig (get kubeconfig :kubeconfig)
|
||||||
:vaultAddress (pulumi/output (.apply app-outputs #(get-in % [:vault :address])))
|
:vaultAddress (.apply app-outputs #(-> % .-openbao .-execute .-address))
|
||||||
:vaultToken (pulumi/output (.apply app-outputs #(get-in % [:vault :root-token])))}))
|
:vaultToken (.apply app-outputs #(aget (-> % .-openbao .-execute) "root-token"))}))
|
||||||
|
|
||||||
|
(defn quick-deploy [configs exports]
|
||||||
(defn quick-deploy []
|
|
||||||
(->
|
(->
|
||||||
(initialize nil)
|
(initialize configs)
|
||||||
(build-exports)
|
(exports)
|
||||||
(clj->js)))
|
(clj->js)))
|
||||||
|
|
||||||
(defn deploy-core []
|
(defn quick-deploy-base []
|
||||||
(let [init (initialize nil)]
|
(quick-deploy nil build-exports))
|
||||||
(set! (.-exports js/module)
|
|
||||||
(clj->js (build-exports init)))))
|
|
||||||
Reference in New Issue
Block a user