-
Notifications
You must be signed in to change notification settings - Fork 0
/
task-reaper
executable file
·108 lines (83 loc) · 2.44 KB
/
task-reaper
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
#!/usr/bin/env bash
#
################################################################################
# Sanity
################################################################################
set -o errexit
set -o nounset
set -o pipefail
################################################################################
# Globals
################################################################################
# shellcheck disable=SC2155
declare -r SCRIPT_NAME="$(basename "$0")"
################################################################################
# Helpers
################################################################################
function io::print_help() {
printf '\n%s\n' "Ben's Terraform AWS Fargate on Demand Task Reaper"
printf 'Usage: %s [-h|--help] [options]\n' "$(basename "$0")"
printf '\t%s\n' "-h, --help: Prints help"
printf '\t%s\n' ""
}
function io::info() {
echo "[${SCRIPT_NAME}] INFO $*"
}
function io::die() {
local msg="${1}"
local ret="${2:-1}"
local print_help="${3:-}"
if [[ ${print_help} == "print help" ]]; then
io::print_help >&2
fi
echo "[${SCRIPT_NAME}] ERROR ${msg}"
exit "${ret}"
}
function io::die_missing_value() {
local key="${1}"
io::die "missing value for argument '${key}'"
}
################################################################################
# Main
################################################################################
function main() {
while test $# -gt 0; do
key="${1}"
shift
case "${key}" in
--help | -h)
io::print_help
exit 0
;;
*)
io::info "unsupported option: ${key}"
;;
esac
done
io::info "Fetching task metadata..."
local \
cluster \
service \
task_metadata
task_metadata="$(
curl --silent \
--fail \
--show-error \
"${ECS_CONTAINER_METADATA_URI_V4:?missing}/task"
)"
cluster="$(jq -r '.Cluster' <<<"${task_metadata}")"
service="$(jq -r '.Family' <<<"${task_metadata}")"
io::info "Cluster: ${cluster}"
io::info "Service: ${service}"
io::info "Updating ECS Service ${cluster}/${service} to Desired Count 0"
aws ecs update-service \
--cluster "${cluster}" \
--service "${service}" \
--desired-count 0 \
>/dev/null
io::info "... done"
}
################################################################################
# Entry Point
################################################################################
main "$@"