kube/src/kube_deploy/from_yaml.clj

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)))