Files
iac-cljs-configs/iac/src/main/base.cljs

66 lines
2.1 KiB
Clojure

(ns base
(:require
["@pulumi/pulumi" :as pulumi]
["@pulumi/vault" :as vault]
["@pulumiverse/harbor" :as harbor]
["@pulumi/kubernetes" :as k8s]
[utils.general :as general]
[utils.providers :refer [provider-apply]]
[infra.init :as infra]
[service-registries :refer [base-resources-definition initialize-resources-definition shared-resources-definition preparation-resources-definition deployment-resources-definition]]
)
(:require-macros [utils.general :refer [p->]]))
(defn extended-exports [init]
(let [;;exports (base.build-exports init)
app-outputs (get init :setup)]
#_(assoc exports :nextcloudUrl (.apply app-outputs #(get-in % [:nextcloud :nextcloud-url])))))
(defn mod-apps [pulumi-cfg resource-configs]
"Scans the registry, builds all needed providers, and calls deploy."
(provider-apply resource-configs pulumi-cfg))
(defn mod-init [configs]
(let [pulumi-cfg (pulumi/Config.)]
(mod-apps pulumi-cfg configs)))
(defn mod-quick-deploy [configs exports]
(->
(mod-init configs)
(exports)
(clj->js)))
(defn quick-deploy-base []
(base/mod-quick-deploy
base-resources-definition
(fn [init]
(let [kcfg (p-> init .-cluster "generic:execute" .-kubeconfig)]
#js {:kubeconfig kcfg}))))
(defn quick-deploy-init []
(base/mod-quick-deploy
initialize-resources-definition
(fn [init]
(let [vaultToken (p-> init .-openbao "generic:execute" "root-token")
vaultAddress (p-> init .-openbao "generic:execute" .-address)]
#js {:vaultAddress vaultAddress
:vaultToken vaultToken}))))
(defn quick-deploy-shared []
(base/mod-quick-deploy
shared-resources-definition
(fn [init]
(let [secrets (p-> init .-harbor "vault:prepare" "stringData")]
{:url (p-> secrets .-host #(str "https://" %))
:username (p-> secrets .-username)
:password (p-> secrets .-password)}))))
(defn quick-deploy-prepare []
(base/mod-quick-deploy preparation-resources-definition extended-exports))
(defn quick-deploy-services []
(base/mod-quick-deploy deployment-resources-definition extended-exports))