@@ -29,38 +29,43 @@ set -o pipefail
29
29
30
30
export DRY_RUN=false
31
31
export VERBOSE=false
32
+ export NAMESPACE=default
32
33
export KUBECONFIG=$HOME /.kube/config
33
34
34
35
debug () {
35
36
if [[ " $VERBOSE " == " true" ]]; then
36
- echo $@
37
+ echo " [debug] $@ "
37
38
fi
38
39
}
39
40
41
+ _kubectl () {
42
+ kubectl -n $NAMESPACE -o json $@
43
+ }
44
+
45
+ _cmk () {
46
+ cmk -u $CS_URL -k $CS_APIKEY -s $CS_SECRETKEY -o json $@
47
+ }
48
+
40
49
get_affinity_groups () {
41
- kubectl get cloudstackaffinitygroups -o json -A | jq -r ' .items[].metadata.name'
50
+ _kubectl get cloudstackaffinitygroups | jq -r ' .items[].metadata.name'
42
51
}
43
52
44
53
get_cluster () {
45
54
affinityGroup=$1
46
- kubectl get cloudstackaffinitygroup $affinityGroup -o json | jq -r ' .metadata.labels."cluster.x-k8s.io/cluster-name"'
55
+ _kubectl get cloudstackaffinitygroup $affinityGroup | jq -r ' .metadata.labels."cluster.x-k8s.io/cluster-name"'
47
56
}
48
57
49
58
get_cluster_credentials () {
50
59
cluster=$1
51
- kubectl get cloudstackcluster $cluster -o json | jq -r ' .spec.failureDomains[].acsEndpoint.name' | uniq
60
+ _kubectl get cloudstackcluster $cluster | jq -r ' .spec.failureDomains[].acsEndpoint.name' | uniq
52
61
}
53
62
54
63
setup_acs_credentials () {
55
64
credential=$1
56
- export CS_URL=$( kubectl get secret $credential -o json | jq -r ' .data."api-url"' | base64 -D)
57
- export CS_APIKEY=$( kubectl get secret $credential -o json | jq -r ' .data."api-key"' | base64 -D)
58
- export CS_SECRETKEY=$( kubectl get secret $credential -o json | jq -r ' .data."secret-key"' | base64 -D)
59
- debug " Using CloudStack Control Plane URL: $CS_URL and CloudStack Account: $( run_cmk list users | jq -r ' .user[] | .account + " and User: " + .username' ) "
60
- }
61
-
62
- run_cmk () {
63
- cmk -u $CS_URL -k $CS_APIKEY -s $CS_SECRETKEY -o json $@
65
+ export CS_URL=$( _kubectl get secret $credential | jq -r ' .data."api-url"' | base64 -D)
66
+ export CS_APIKEY=$( _kubectl get secret $credential | jq -r ' .data."api-key"' | base64 -D)
67
+ export CS_SECRETKEY=$( _kubectl get secret $credential | jq -r ' .data."secret-key"' | base64 -D)
68
+ debug " Using CloudStack Control Plane URL: $CS_URL and CloudStack Account: $( _cmk list users | jq -r ' .user[] | .account + " and User: " + .username' ) "
64
69
}
65
70
66
71
main () {
@@ -69,15 +74,15 @@ main() {
69
74
cluster=$( get_cluster $ag )
70
75
for credential in $( get_cluster_credentials $cluster ) ; do
71
76
setup_acs_credentials $credential
72
- CS_AG_ID=$( kubectl get cloudstackaffinitygroup $ag -o json | jq -r ' .spec.id' )
73
- CS_AG_VMS=$( run_cmk list affinitygroups id=$CS_AG_ID | jq -r ' .affinitygroup[0].virtualmachineIds' )
77
+ CS_AG_ID=$( _kubectl get cloudstackaffinitygroup $ag | jq -r ' .spec.id' )
78
+ CS_AG_VMS=$( _cmk list affinitygroups id=$CS_AG_ID | jq -r ' .affinitygroup[0].virtualmachineIds' )
74
79
if [[ " $CS_AG_VMS " == " null" ]]; then
75
80
echo " Found Affinity Group ($CS_AG_ID ) with no instances assigned:" $ag
76
81
if [[ " $DRY_RUN " == " false" ]]; then
77
- kubectl delete cloudstackaffinitygroup $ag
78
- echo " Affinity Group ($CS_AG_ID ) $ag has been removed"
82
+ _kubectl delete cloudstackaffinitygroup $ag
83
+ echo " [info] Affinity Group ($CS_AG_ID ) $ag has been removed"
79
84
else
80
- echo " [DRY RUN ] Affinity Group ($CS_AG_ID ) $ag has been removed"
85
+ echo " [dryrun ] Affinity Group ($CS_AG_ID ) $ag has been removed"
81
86
fi
82
87
fi
83
88
done
@@ -98,6 +103,7 @@ help() {
98
103
echo " Options:"
99
104
echo " -d Runs the tools in dry-run mode"
100
105
echo " -k Pass custom kube config, default: \$ HOME/.kube/config"
106
+ echo " -n Kubernetes namespace, default: default"
101
107
echo " -h Print this help"
102
108
echo " -v Verbose mode"
103
109
echo
@@ -111,6 +117,8 @@ while getopts ":dkvh" option; do
111
117
export KUBECONFIG=$OPTARG ;;
112
118
v)
113
119
export VERBOSE=true;;
120
+ n)
121
+ export NAMESPACE=$OPTARG ;;
114
122
h)
115
123
help
116
124
exit ;;
@@ -121,4 +129,26 @@ while getopts ":dkvh" option; do
121
129
esac
122
130
done
123
131
132
+ if ! command -v jq & > /dev/null
133
+ then
134
+ echo " [error] jq could not be found, please install first"
135
+ exit 1
136
+ fi
137
+
138
+ if ! command -v kubectl & > /dev/null
139
+ then
140
+ echo " [error] kubectl could not be found, please install first"
141
+ exit 1
142
+ fi
143
+
144
+ if ! command -v cmkd & > /dev/null
145
+ then
146
+ echo " [error] cmk could not be found, please install https://github.com/apache/cloudstack-cloudmonkey/releases/tag/6.4.0-rc1 or newer"
147
+ exit 1
148
+ fi
149
+
150
+ debug " [options] DRY_RUN=$DRY_RUN "
151
+ debug " [options] VERBOSE=$VERBOSE "
152
+ debug " [options] NAMESPACE=$NAMESPACE "
153
+ debug " [options] KUBECONFIG=$KUBECONFIG "
124
154
main
0 commit comments