1+ #! /bin/bash
2+ #
3+ # Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights Reserved.
4+ #
5+ # Permission is hereby granted, free of charge, to any person obtaining a copy of this
6+ # software and associated documentation files (the "Software"), to deal in the Software
7+ # without restriction, including without limitation the rights to use, copy, modify,
8+ # merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
9+ # permit persons to whom the Software is furnished to do so.
10+ #
11+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
12+ # INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
13+ # PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
14+ # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
15+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
16+ # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
17+ #
18+
19+ # title keycloak-cleanup.sh
20+ # description This script cleans up keycloak related resources for Amazon Managed Grafana SAML authentication.
21+ # author Sourav Paul (@psour)
22+ # contributors @psour
23+ # date 2023-09-06
24+ # version 1.0
25+ # usage ./keycloak-cleanup.sh -c <EKS_CLUSTER_NAME> [-n|--keycloak-namespace <KEYCLOAK_NAMESPACE>] [-h|--help]
26+ # ==============================================================================
27+
28+ echo ---------------------------------------------------------------------------------------------
29+ echo " This script cleans up keycloak related resources for Amazon Managed Grafana SAML authentication."
30+ echo ---------------------------------------------------------------------------------------------
31+
32+ # ### Resolve command line arguments
33+ POSITIONAL_ARGS=()
34+
35+ while [[ $# -gt 0 ]]; do
36+ case $1 in
37+ -c|--cluster-name)
38+ CLUSTER_NAME=" $2 "
39+ shift # past argument
40+ shift # past value
41+ ;;
42+ -n|--keycloak-namespace)
43+ KEYCLOAK_NAMESPACE=" $2 "
44+ shift # past argument
45+ shift # past value
46+ ;;
47+ -h|--help)
48+ SHOW_HELP=YES
49+ shift # past argument
50+ ;;
51+ -* |--* )
52+ echo " Unknown option $1 "
53+ exit 1
54+ ;;
55+ * )
56+ POSITIONAL_ARGS+=(" $1 " ) # save positional arg
57+ shift # past argument
58+ ;;
59+ esac
60+ done
61+
62+ # ### Functions
63+ function print_usage() {
64+ echo " "
65+ echo " Options:"
66+ echo " -c, --cluster-name string Amazon EKS cluster name"
67+ echo " -n, --keycloak-namespace string Namespace for keycloak (default keycloak)"
68+ echo " -h, --help Show this help message"
69+ }
70+
71+ function handle_error() {
72+ echo " "
73+ echo $1
74+ echo " "
75+ echo " Exiting script with code: $2 ..."
76+ exit $2
77+ }
78+
79+ function handle_error_with_usage() {
80+ echo " "
81+ echo $1
82+ echo " "
83+ echo " Printing help..."
84+ print_usage
85+ echo " "
86+ echo " Exiting script with code: $2 ..."
87+ echo " "
88+ exit $2
89+ }
90+
91+ function handle_arg_help() {
92+ if [ " $SHOW_HELP " = " YES" ]; then
93+ print_usage
94+ exit 0
95+ fi
96+ }
97+
98+ function validate_arg_cluster_name() {
99+ if [ -z " $CLUSTER_NAME " ]; then
100+ handle_error_with_usage " ERROR: Amazon EKS cluster name is required." 2
101+ fi
102+ }
103+
104+ function resolve_arg_keycloak_namespace() {
105+ if [ -z " $KEYCLOAK_NAMESPACE " ]; then
106+ KEYCLOAK_NAMESPACE=keycloak
107+ fi
108+ }
109+
110+ function print_script_arguments() {
111+ echo " "
112+ echo " Script arguments:"
113+ echo " ---------------------------------------------------------------------------------------------"
114+ echo " CLUSTER_NAME........$CLUSTER_NAME "
115+ echo " KEYCLOAK_NAMESPACE..$KEYCLOAK_NAMESPACE "
116+ echo " ---------------------------------------------------------------------------------------------"
117+ echo " "
118+ }
119+
120+ function locate_eks_cluster() {
121+ echo " Searching Amazon EKS cluster with name '$CLUSTER_NAME '..."
122+ CLUSTER_META=$( aws eks describe-cluster --name $CLUSTER_NAME )
123+ CMD_RESULT=$?
124+ if [ -z " $CLUSTER_META " ] || [ $CMD_RESULT -ne 0 ] ; then
125+ handle_error " ERROR: Could not locate Amazon EKS cluster with name '$CLUSTER_NAME '. Please check error message." 3
126+ fi
127+ echo " Found Amazon EKS cluster."
128+ }
129+
130+ function uninstall_keycloak() {
131+ echo " Uninstalling application 'keycloak'..."
132+ helm uninstall keycloak --namespace $KEYCLOAK_NAMESPACE
133+ CMD_RESULT=$?
134+ if [ $CMD_RESULT -ne 0 ]; then
135+ handle_error " ERROR: Failed to uninstall application 'keycloak'." 4
136+ fi
137+
138+ echo " Deleting namespace '$KEYCLOAK_NAMESPACE '..."
139+ kubectl delete ns $KEYCLOAK_NAMESPACE
140+ CMD_RESULT=$?
141+ if [ $CMD_RESULT -ne 0 ]; then
142+ handle_error " ERROR: Failed to delete namespce '$KEYCLOAK_NAMESPACE '." 5
143+ fi
144+ }
145+
146+ function remove_helm_repo() {
147+ echo " Removing helm repo 'bitnami'..."
148+ helm repo remove bitnami
149+ CMD_RESULT=$?
150+ if [ $CMD_RESULT -ne 0 ]; then
151+ handle_error " ERROR: Failed to remove helm repo 'bitnami'." 6
152+ fi
153+ }
154+
155+ function uninstall_ebs_csi_driver_addon() {
156+ echo " Deleting EBS StorageClass..."
157+ kubectl delete -f storageclass.yaml
158+ CMD_RESULT=$?
159+ if [ $CMD_RESULT -ne 0 ]; then
160+ handle_error " ERROR: Failed to delete EBS StorageClass." 7
161+ fi
162+
163+ echo " Uninstalling EBS CSI driver addon from cluster..."
164+ eksctl delete addon \
165+ --name aws-ebs-csi-driver \
166+ --cluster $CLUSTER_NAME
167+ CMD_RESULT=$?
168+ if [ $CMD_RESULT -ne 0 ]; then
169+ handle_error " ERROR: Failed to uninstall EBS CSI driver addon from cluster." 8
170+ fi
171+
172+ echo " Waiting for EBS CSI driver addon deletion to complete..."
173+ aws eks wait addon-deleted \
174+ --cluster-name $CLUSTER_NAME \
175+ --addon-name aws-ebs-csi-driver
176+ CMD_RESULT=$?
177+ if [ $CMD_RESULT -ne 0 ]; then
178+ handle_error " ERROR: Failed to wait for EBS CSI driver addon deletion to complete." 9
179+ fi
180+
181+ echo " Deleting IRSA for EBS CSI driver addon..."
182+ eksctl delete iamserviceaccount \
183+ --name ebs-csi-controller-sa \
184+ --namespace kube-system \
185+ --cluster $CLUSTER_NAME
186+ CMD_RESULT=$?
187+ if [ $CMD_RESULT -ne 0 ]; then
188+ handle_error " ERROR: Failed to delete IRSA for EBS CSI driver addon." 10
189+ fi
190+ }
191+
192+ # ### Main ####
193+
194+ handle_arg_help
195+
196+ validate_arg_cluster_name
197+
198+ resolve_arg_keycloak_namespace
199+
200+ print_script_arguments
201+
202+ locate_eks_cluster
203+
204+ uninstall_keycloak
205+
206+ remove_helm_repo
207+
208+ uninstall_ebs_csi_driver_addon
209+
210+ echo " "
211+ echo " Cleanup done."
0 commit comments