38 lines
1.3 KiB
Clojure
38 lines
1.3 KiB
Clojure
(ns kube-deploy.from-yaml
|
|
(:require [yaml.core :as yaml]
|
|
[clojure.data.codec.base64 :as b64]
|
|
[kube-deploy.data :as data]
|
|
[clojure.java.shell :as sh]))
|
|
|
|
(defn decode-secret [value]
|
|
(String. (b64/decode (.getBytes value))))
|
|
|
|
(defn kube-load
|
|
([resource name]
|
|
(kube-load resource name nil nil))
|
|
([resource name kube-namespace]
|
|
(kube-load resource name kube-namespace nil))
|
|
([resource name kube-namespace kube-config]
|
|
(let [namespace-param (if (nil? kube-namespace) nil (str "--namespace=" kube-namespace))
|
|
config-param (if (nil? kube-config) nil (str "--kubeconfig=" kube-config))]
|
|
(let [res (apply sh/sh (remove nil? ["kubectl" namespace-param config-param "get" resource name "-o=yaml"]))]
|
|
(if (= (:exit res) 0)
|
|
(:out res)
|
|
(throw (Exception. (:err res))))))))
|
|
|
|
(defn fetch-secrets-yaml [namespace config]
|
|
(yaml/parse-string (kube-load "secret" "environment" namespace config)))
|
|
|
|
(defn decode-secrets [data]
|
|
(reduce-kv
|
|
(fn [m k v] (assoc m k (decode-secret v)))
|
|
{}
|
|
(:data data)))
|
|
|
|
(defn fetch-secrets [{:keys [service]}]
|
|
(let [namespace (get-in data/services [(keyword service) :namespace])
|
|
config (get-in data/services [(keyword service) :config])]
|
|
(-> (fetch-secrets-yaml namespace config)
|
|
decode-secrets
|
|
clojure.pprint/pprint)))
|