Run all components in one namespace
[oom.git] / kubernetes / oneclick / deleteAll.bash
1 #!/bin/bash
2
3 . $(dirname "$0")/setenv.bash
4
5 delete_namespace() {
6   kubectl delete namespace $1
7 }
8
9 delete_service_account() {
10     kubectl delete clusterrolebinding $1-$2-admin-binding
11     printf "Service account $1-$2-admin-binding deleted.\n\n"
12 }
13
14 delete_registry_key() {
15   kubectl --namespace $1-$2 delete secret ${1}-docker-registry-key
16 }
17
18 delete_app_helm() {
19   helm delete $1-$2 --purge
20 }
21
22 wait_terminate() {
23   printf "Waiting for namespaces termination...\n"
24   while true; do
25     declare -i _STATUS=0
26     for i in ${HELM_APPS[@]}; do
27       kubectl get pods --namespace $1 | grep -w " $i" > /dev/null 2>&1
28       if [ "$?" -ne "0" ]; then
29         _STATUS=1
30         break
31       fi
32     done
33
34     if [ "$SINGLE_COMPONENT" == "false" ]; then
35       kubectl get namespaces $1 > /dev/null 2>&1
36       _STATUS=$?
37     fi
38     if [ "$_STATUS" -ne "0" ]; then
39       break
40     fi
41     sleep 2
42   done
43 }
44
45 usage() {
46   cat <<EOF
47 Usage: $0 [PARAMs]
48 -u                  : Display usage
49 -n [NAMESPACE]      : Kubernetes namespace (required)
50 -c                  : kubectl context (default: current context)
51 -y                  : Skip interactive confirmation (default: no)
52 -a [APP]            : Specify a specific ONAP component (default: all)
53                       from the following choices:
54                       sdc, aai ,mso, message-router, robot, vid, aaf, uui
55                       sdnc, portal, policy, appc, multicloud, clamp, consul, vnfsdk
56 -N                  : Do not wait for deletion of namespace and its objects
57 EOF
58 }
59
60 #MAINs
61 NS=
62 INCL_SVC=false
63 APP=
64 WAIT_TERMINATE=true
65 SKIP_INTERACTIVE_CONFIRMATION=no
66 KUBECTL_CONTEXT=
67 SINGLE_COMPONENT=false
68 while getopts ":c:n:u:s:a:yN" PARAM; do
69   case $PARAM in
70     u)
71       usage
72       exit 1
73       ;;
74     n)
75       NS=${OPTARG}
76       ;;
77     a)
78       APP=${OPTARG}
79       if [[ -z $APP ]]; then
80         usage
81         exit 1
82       fi
83       SINGLE_COMPONENT=true
84       ;;
85     N)
86       WAIT_TERMINATE=false
87       ;;
88     y)
89       SKIP_INTERACTIVE_CONFIRMATION=yes
90       ;;
91     c)
92       KUBECTL_CONTEXT=${OPTARG}
93       ;;
94     ?)
95       usage
96       exit
97       ;;
98   esac
99 done
100
101 if [[ -z $NS ]]; then
102   usage
103   exit 1
104 fi
105
106 if [[ "$SKIP_INTERACTIVE_CONFIRMATION" != yes ]]; then
107   current_kubectl_context=$(kubectl config get-contexts |grep "*" |awk '{print $2}')
108   if test "$KUBECTL_CONTEXT" != "$current_kubectl_context"; then
109     printf "Current kubectl context does not match context specified:\x1b[31m $current_kubectl_context\x1b[0m\n"
110     if [ ! -z "$KUBECTL_CONTEXT" -a "$KUBECTL_CONTEXT" != " " ]; then
111       read -p "Do you wish to switch context to $KUBECTL_CONTEXT and continue?" yn
112       case $yn in
113         [Yy]* ) kubectl config use-context $KUBECTL_CONTEXT;;
114         * ) printf "Skipping delete...\n"; exit;;
115       esac
116     else
117       printf "You are about to delete deployment from:\x1b[31m $current_kubectl_context\x1b[0m\n"
118       read -p "To continue enter context name: " response
119
120       if test "$response" != "$current_kubectl_context"
121       then
122         printf "Your response does not match current context! Skipping delete ...\n"
123         exit 1
124       fi
125     fi
126   fi
127 fi
128
129 if [[ ! -z "$APP" ]]; then
130   HELM_APPS=($APP)
131 fi
132
133 printf "\n********** Cleaning up ONAP: ${ONAP_APPS[*]}\n"
134
135 for i in ${HELM_APPS[@]}; do
136   delete_app_helm $NS $i
137   delete_service_account $NS $i
138 done
139
140 if [ "$SINGLE_COMPONENT" == "false" ]
141 then
142     delete_app_helm $NS "config"
143     delete_namespace $NS
144 fi
145
146 if $WAIT_TERMINATE; then
147   wait_terminate $NS
148 fi
149
150 printf "\n********** Gone **********\n"