Add to the README

This commit is contained in:
2025-08-29 10:11:43 -05:00
parent f1c4accf52
commit ec5e1528ff
2 changed files with 74 additions and 32 deletions

View File

@@ -1,44 +1,57 @@
(ns core
(:require
["@pulumi/kubernetes" :as k8s]
[clojure.core.async :refer [go <!]]
[clojure.core.async.interop :refer [<p!]]
["@pulumi/pulumi" :as pulumi]
[infra.init :as init]
[k8s.csi-driver.hetzner :as hetznercsi]
[k8s.services.openbao.openbao :as vault]
[k8s.services.nextcloud.nextcloud :as nextcloud]
))
[k8s.services.nextcloud.nextcloud :as nextcloud]))
(defn app-deployments [provider]
(let [
nextcloud-result (nextcloud/deploy-nextcloud-app provider)
vault-result (vault/deploy-vault provider)
]
{
:nextcloud nextcloud-result
:vault vault-result
}
))
(defn app-list [provider vault-params]
(let [nextcloud-result (nextcloud/deploy-nextcloud provider vault-params)]
{:nextcloud nextcloud-result}))
(defn app-deployments
"Deploy applications with proper dependency chain"
[provider kubeconfig apps]
(let [vault-result (vault/deploy-vault provider kubeconfig)
vault-params {:address (aget vault-result "address") :token (aget vault-result "root_token") :vault-port-forward (aget vault-result "port_forward_manager")}
app-results (if (nil? apps) {} (apps provider vault-params))
]
(assoc app-results :vault vault-result)
))
(defn init! [apps]
(let [cluster (init/create-cluster)
setup (.apply (get cluster :kubeconfig)
(fn [kc]
(js/Promise.
(fn [resolve _reject]
(let [provider (new k8s/Provider
"k8s-dynamic-provider"
(clj->js {:kubeconfig kc}))]
(hetznercsi/deploy-csi-driver provider)
(resolve (app-deployments provider kc apps)))))))]
{cluster setup}
))
(defn main! []
(let [cluster (init/create-cluster)
app-outputs (.apply (get cluster :kubeconfig)
(fn [kc]
(js/Promise.
(fn [resolve _reject]
(let [provider (k8s/Provider. "k8s-dynamic-provider" #js {:kubeconfig kc})]
(hetznercsi/deploy-csi-driver provider)
(resolve (app-deployments provider)))))))]
(let [init (init! app-list)
cluster (get init :cluster)
app-outputs (get init :setup)]
(set! (.-exports js/module)
#js {
:kubeconfig (get cluster :kubeconfig)
:masterIp (get cluster :masterIp)
:nextcloudUrl (.apply app-outputs #(get app-outputs :nextcloudUrl))})
#_(set! (.-exports js/module)
#js {:nextcloudUrl (.apply app-outputs (fn [outputs] (.-nextcloudUrl outputs)))})
))
(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])))}))))