Swap to config impl w/ exec-fn

This commit is contained in:
2025-10-07 22:23:48 -05:00
parent bffc01c5ea
commit d591aa3718

View File

@@ -18,12 +18,12 @@
(defn- get-node-ips [] (defn- get-node-ips []
(str "kubectl get nodes -o jsonpath='{range .items[*]}{.status.addresses[?(@.type==\"ExternalIP\")].address}{\"\\n\"}{end}'")) (str "kubectl get nodes -o jsonpath='{range .items[*]}{.status.addresses[?(@.type==\"ExternalIP\")].address}{\"\\n\"}{end}'"))
(defn setup-dns [cfg vault-provider] (defn setup-dns [{:keys [vault-provider pulumi-cfg]}]
(let [get-node-ips (local/Command. (let [get-node-ips (local/Command.
"get-node-ips" "get-node-ips"
(clj->js {:create (get-node-ips) (clj->js {:create (get-node-ips)
:environment {:KUBECONFIG "./kubeconfig.yaml"}})) :environment {:KUBECONFIG "./kubeconfig.yaml"}}))
token (.requireSecret cfg "apiToken") token (.requireSecret pulumi-cfg "apiToken")
cloudflare-provider (new cloudflare/Provider "cloudflare-provider" cloudflare-provider (new cloudflare/Provider "cloudflare-provider"
(clj->js {:apiToken token})) (clj->js {:apiToken token}))
service-name "dns" service-name "dns"
@@ -33,29 +33,37 @@
(clj->js {:path vault-path}) (clj->js {:path vault-path})
(clj->js {:provider vault-provider (clj->js {:provider vault-provider
:dependsOn initialize})) :dependsOn initialize}))
node-ips-output (.-stdout get-node-ips)] node-ips-output (.-stdout get-node-ips)]
(.apply node-ips-output (.apply node-ips-output
(fn [command-output] (fn [command-output]
(let [node-ips (-> command-output (let [node-ips (-> command-output
str/split-lines str/split-lines
(->> (map #(first (str/split % #" "))) (->> (map #(first (str/split % #" ")))
(filter seq)))] (filter seq)))]
(.then dns-configs-secret (.then dns-configs-secret
(fn [secret-data] (fn [secret-data]
(let [hostname-to-zone (-> (.-data secret-data) (let [hostname-to-zone (-> (.-data secret-data)
(js->clj :keywordize-keys true))] (js->clj :keywordize-keys true))]
(vec (vec
(for [[hostname zone-id] hostname-to-zone (for [[hostname zone-id] hostname-to-zone
[index ip] (map-indexed vector node-ips) [index ip] (map-indexed vector node-ips)
:when (and hostname zone-id ip)] :when (and hostname zone-id ip)]
(new cloudflare/DnsRecord (new cloudflare/DnsRecord
(str "dns-" (name hostname) "-node-" index) (str "dns-" (name hostname) "-node-" index)
(clj->js {:zoneId zone-id (clj->js {:zoneId zone-id
:name hostname :name hostname
:content ip :content ip
:type (get-record-type ip) :type (get-record-type ip)
:ttl 300}) :ttl 300})
(clj->js {:provider cloudflare-provider})))))))))))) (clj->js {:provider cloudflare-provider}))))))))))))
(def config
{:stack [:execute]
:app-name "dns"
:app-namespace "dns"
:exec-fn setup-dns})