-
Notifications
You must be signed in to change notification settings - Fork 0
/
cfn-desc-all.cljs
49 lines (40 loc) · 1.79 KB
/
cfn-desc-all.cljs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/usr/bin/env nbb
;; Copyright (c) 2024, Viasat, Inc
;; Licensed under EPL 2.0
(ns cfn-desc-all
(:require [clojure.string :as S]
[promesa.core :as P]
["fs-extra$default" :as fs]
[viasat.util :refer [parse-opts Eprintln Epprint Eprn]]
[viasat.apis.aws.cfn :as cfn]))
(def usage "
Usage:
cfn-desc-all [options] <json-stack-file>
Do CloudFormation DescribeStacks all stacks (running and deleted) and
store results as JSON in <json-stack-file>.
Options:
--debug Debug/trace output (stderr) [env: DEBUG]
--profile PROFILE AWS profile [env: PROFILE] [default: saml]
--no-profile Do not use a profile value
[env: NO_PROFILE]
--role-arn ARN of role to use assume for execution
--region REGION AWS region [env: REGION] [default: us-west-2]
--parallel JOBS Number of AWS API calls to run parallel
[default: 2]
--since DATE Only show stacks created since DATE
(up to max of 90 days ago).
")
(P/let
[cfg (parse-opts usage *command-line-args*)
_ (when (empty? cfg) (js/process.exit 2))
{:keys [json-stack-file debug parallel since]} cfg
aws-opts (select-keys cfg [:debug :profile :no-profile :region :role-arn])
_ (when debug (Eprintln "Settings:"))
_ (when debug (Epprint cfg))
filter-fn (when since #(> (:CreationTime %) (js/Date. since)))
stacks (cfn/describe-all-stacks (merge aws-opts
{:parallel parallel
:filter-fn filter-fn
:log-fn Eprintln}))]
(Eprintln "Writing JSON results to:" json-stack-file)
(fs/writeFile json-stack-file (js/JSON.stringify (clj->js stacks))))