(ns deploy.aws-utils (:require [clojure.data.json :as json] [clojure.string :as string] [clojure.java.shell :as shell])) (defn submap? ([a] (partial submap? a)) ([a b] (= a (select-keys b (keys a))))) (defn find-by [pred ms] (first (filter pred ms))) (defn aws [& args] (apply println "aws" args) (let [ret (apply shell/sh "aws" args)] (when (= 0 (:exit ret)) (json/read-str (:out ret) :key-fn keyword :eof-error? false)))) (defn get-stack-context [app-name] (let [app-stack (aws "cloudformation" "describe-stacks" "--query" (str "Stacks[?StackName==`" app-name "`] | [0]")) {:keys [StackId Outputs]} app-stack [_ _ _ region client-id & _] (string/split StackId #":") group (:OutputValue (find-by (submap? {:OutputKey "CodeDeployDeploymentGroup"}) Outputs))] {:client-id client-id :region region :group group}))