Resolve stack ref dynamically

This commit is contained in:
2025-11-22 17:05:13 -06:00
parent d8f51397c0
commit 392f852081

View File

@@ -23,14 +23,22 @@
{:vault {:stack :init {:vault {:stack :init
:outputs ["vaultAddress" "vaultToken"]} :outputs ["vaultAddress" "vaultToken"]}
:harbor {:stack :shared :harbor {:stack :shared
:outputs ["username" "password" "url"]} :outputs ["username" "password" "url"]}
:k8s {:stack :init :k8s {:stack :init
:outputs ["kubeconfig"]}}) :outputs ["kubeconfig"]}})
(defn get-stack-refs []
#_(defn get-stack-refs []
{:init (new pulumi/StackReference "init") {:init (new pulumi/StackReference "init")
:shared (new pulumi/StackReference "shared")}) :shared (new pulumi/StackReference "shared")})
(defn get-stack-refs [stack-ref-array]
(into {}
(map (fn [stack-name]
[(keyword stack-name)
(new pulumi/StackReference stack-name)])
stack-ref-array)))
(defn extract-expanded-keywords [stack] (defn extract-expanded-keywords [stack]
(let [expand-chain (let [expand-chain
(fn [chain] (fn [chain]
@@ -50,8 +58,8 @@
(defn get-all-providers [service-registry] (defn get-all-providers [resource-configs]
(->> service-registry (->> resource-configs
(mapcat (comp extract-expanded-keywords :stack)) (mapcat (comp extract-expanded-keywords :stack))
(map (fn [component-key] (map (fn [component-key]
@@ -69,11 +77,13 @@
{:k8s k8s-utils/pre-deploy-rule}) {:k8s k8s-utils/pre-deploy-rule})
(defn provider-apply [service-registry pulumi-cfg] (defn provider-apply [stack-resources-definition pulumi-cfg]
(let [providers-needed (get-all-providers service-registry) (let [providers-needed (get-all-providers (:resource-configs stack-resources-definition))
provider-outputs-config (get-provider-outputs-config) provider-outputs-config (:provider-external-inputs stack-resources-definition)
stack-refs (get-stack-refs) stack-refs (get-stack-refs (:stack-references stack-resources-definition))
needed-output-configs (select-keys provider-outputs-config providers-needed) needed-output-configs (select-keys provider-outputs-config providers-needed)
;; At some point we should add the ability for Providers to be passed Pulumi configs or our config map?
;; Cloudflare and others may require or request a token.
outputs-to-fetch (reduce-kv outputs-to-fetch (reduce-kv
(fn [acc _provider-key data] (fn [acc _provider-key data]
(let [stack-key (:stack data) (let [stack-key (:stack data)
@@ -111,7 +121,7 @@
(reduce-kv (reduce-kv
(fn [acc provider-key provider-instance] (fn [acc provider-key provider-instance]
(if-let [rule-fn (get provider-rules provider-key)] (if-let [rule-fn (get provider-rules provider-key)]
(let [rule-results (rule-fn {:service-registry service-registry (let [rule-results (rule-fn {:resource-configs (:resource-configs stack-resources-definition)
:provider provider-instance})] :provider provider-instance})]
(assoc acc provider-key rule-results)) (assoc acc provider-key rule-results))
acc)) acc))
@@ -120,6 +130,6 @@
(resolve (resolve
(deploy! (deploy!
{:pulumi-cfg pulumi-cfg {:pulumi-cfg pulumi-cfg
:service-registry service-registry :resource-configs (:resource-configs stack-resources-definition)
:all-providers instantiated-providers :all-providers instantiated-providers
:pre-deploy-deps pre-deploy-results}))))))))) :pre-deploy-deps pre-deploy-results})))))))))