-
-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathclear-finalizers.sh
More file actions
128 lines (118 loc) · 2.97 KB
/
clear-finalizers.sh
File metadata and controls
128 lines (118 loc) · 2.97 KB
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#! /usr/bin/env bash
#
# Environment Validation
#
validation="$(environment-validation -c -l "core" 2>&1)"
if [ -n "$validation" ]; then
echo "Validation error:" >&2
echo "$validation" >&2
exit 1
fi
#
# global defaults
#
ALL_NAMESPACES=${BASIC_SETUP_K8S_CLEAR_FINALIZERS_ALL_NAMESPACES:-""}
NAMESPACE=${BASIC_SETUP_K8S_CLEAR_FINALIZERS_NAMESPACE:-""}
SHOW_HELP=false
VERBOSITY=${BASIC_SETUP_VERBOSITY:--1}
#
# load environment variables
#
. basic-setup-set-env
#
# computed values (often can't be alphabetical)
#
if [ -z "$ALL_NAMESPACES" ]; then
ALL_NAMESPACES=${BASIC_SETUP_K8S_CLEAR_FINALIZERS_ALL_NAMESPACES:-"true"}
fi
if [ -z "$NAMESPACE" ]; then
NAMESPACE=${BASIC_SETUP_K8S_CLEAR_FINALIZERS_NAMESPACE:-"kube-system"}
fi
if (( $VERBOSITY == -1 )); then
VERBOSITY=${BASIC_SETUP_VERBOSITY:-0}
fi
#
# helper functions
#
# script help message
function help {
command_for_help="$(basename "$0")"
cat <<- EOF
----------
usage: $command_for_help <arguments>
----------
description: clear finalizers from a namespace, or all namespaces
----------
-a|--all-namespaces - (flag, current: $ALL_NAMESPACES) Clear finalizers from all namespaces, will be ignored if namespace (-n) is set, also set with \`BASIC_SETUP_K8S_CLEAR_FINALIZERS_ALL_NAMESPACES\`.
-h|--help - (flag, current: $SHOW_HELP) Print this help message and exit.
-n|--namespace - (optional, current: "$NAMESPACE") The namespace to search in, defaults to all (-a), also set with \`BASIC_SETUP_K8S_CLEAR_FINALIZERS_NAMESPACE\`.
-v|--verbose - (multi-flag, current: $VERBOSITY) Increase the verbosity by 1, also set with \`BASIC_SETUP_VERBOSITY\`.
----------
examples:
clear all finalizers - $command_for_help
clear finalizers in a namespace - $command_for_help -n "my-namespace"
----------
EOF
}
#
# CLI parsing
#
PARAMS=""
while (("$#")); do
case "$1" in
# all namespaces flag
-a | --all-namespaces)
ALL_NAMESPACES=true
shift
;;
# help flag
-h | --help)
SHOW_HELP=true
shift
;;
# namespace, optional argument
-n | --namespace)
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
NAMESPACE="$2"
shift 2
else
echo "Error: Argument for $1 is missing" >&2
help
exit 1
fi
;;
# verbosity multi-flag
-v | --verbose)
((VERBOSITY+=1))
shift
;;
# unsupported flags and arguments
-* | --*=)
echo "Error: Unsupported flag $1" >&2
help
exit 1
;;
# preserve positional arguments
*)
PARAMS="$PARAMS $1"
shift
;;
esac
done
#
# Do the work
#
[ $SHOW_HELP == true ] && help && exit 0
# set all namespaces flag
if [ -n "$NAMESPACE" ]; then
ALL_NAMESPACES=false
fi
# clear finalizers
if [ $ALL_NAMESPACES == true ]; then
namespaces="$(kubectl get ns -o jsonpath='{.items[*].metadata.name}')"
for ns in $namespaces; do
kubectl get ns $ns -o json | jq '.spec.finalizers = []' | kubectl replace --raw /api/v1/namespaces/$ns/finalize -f -
done
else
kubectl get ns $NAMESPACE -o json | jq '.spec.finalizers = []' | kubectl replace --raw /api/v1/namespaces/$NAMESPACE/finalize -f -
fi