Resolve stack ref dynamically
This commit is contained in:
@@ -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})))))))))
|
||||||
Reference in New Issue
Block a user