diff --git a/src/main/cljc/dda/k8s_keycloak/core.cljc b/src/main/cljc/dda/k8s_keycloak/core.cljc index 803e223..6a44b38 100644 --- a/src/main/cljc/dda/k8s_keycloak/core.cljc +++ b/src/main/cljc/dda/k8s_keycloak/core.cljc @@ -26,16 +26,37 @@ (def auth? (s/keys :req-un [::user-name ::user-password])) +(declare assoc-in-nested) +(declare assoc-in-nested-seq) +(declare assoc-in-nested-map) -(defn replace-values-in-map - [map keys value] -) +(defn assoc-in-nested-seq [s path n] + (map #(if (sequential? %) + (assoc-in-nested-seq % path n) + (assoc-in-nested-map % path n)) s)) + +(defn assoc-in-nested-map [m path n] + (into (empty m) + (let [p1 (first path)] + (for [[k v] m] + (if (= k p1) + [k (assoc-in-nested v (rest path) n)] + [k (assoc-in-nested v path n)]))))) + +(defn assoc-in-nested [data path n] + (if (empty? path) + n + (if (sequential? data) + (assoc-in-nested-seq data path n) + (if (map? data) + (assoc-in-nested-map data path n) + data)))) (defn generate-config [my-config my-auth] (-> (yaml/from-string (yaml/load-resource "config.yaml")) (assoc-in [:data :config.edn] (str my-config)) - (assoc-in [ :data :credentials.edn] (str my-auth)))) + (assoc-in [:data :credentials.edn] (str my-auth)))) (defn generate-deployment [my-auth] (let [{:keys [user-name user-password]} my-auth] @@ -55,11 +76,11 @@ (let [{:keys [fqdn issuer] :or {issuer :staging}} config letsencrypt-issuer (str "letsencrypt-" (name issuer) "-issuer")] - (-> - (yaml/from-string (yaml/load-resource "certificate.yaml")) - (assoc-in [:spec :commonName] fqdn) - (assoc-in [:spec :dnsNames] [fqdn]) - (assoc-in [:spec :issuerRef :name] letsencrypt-issuer)))) + (-> + (yaml/from-string (yaml/load-resource "certificate.yaml")) + (assoc-in [:spec :commonName] fqdn) + (assoc-in [:spec :dnsNames] [fqdn]) + (assoc-in [:spec :issuerRef :name] letsencrypt-issuer)))) (defn generate-ingress [config] (let [{:keys [fqdn issuer] @@ -80,8 +101,8 @@ (defn-spec generate any? [my-config config? - my-auth auth?] - (cs/join "\n" + my-auth auth?] + (cs/join "\n" [(yaml/to-string (generate-config my-config my-auth)) "---" (yaml/to-string (generate-certificate my-config)) diff --git a/src/test/cljc/dda/k8s_keycloak/core_test.cljc b/src/test/cljc/dda/k8s_keycloak/core_test.cljc index 196e80e..0e26041 100644 --- a/src/test/cljc/dda/k8s_keycloak/core_test.cljc +++ b/src/test/cljc/dda/k8s_keycloak/core_test.cljc @@ -87,14 +87,15 @@ (deftest test-vector-replace-fqdn-function (let [ingress-yaml (yaml/from-string (yaml/load-resource "ingress.yaml")) fqdn "some_host" - desired-result (-> ingress-yaml + desired-result (-> ingress-yaml (assoc-in [:spec :rules] [{:host fqdn :http {:paths [{:backend {:serviceName "keycloak" :servicePort 8080}}]}} {:host fqdn :http {:paths [{:backend {:serviceName "another_keycloak" - :servicePort 8081}}]}}]))] - (is (= desired-result (cut/replace-values-in-map ingress-yaml [:spec :rules :host] fqdn)))) + :servicePort 8081}}]}} + ]))] + (is (= desired-result (cut/assoc-in-nested ingress-yaml [:spec :rules :host] fqdn)))) )