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