aboutsummaryrefslogtreecommitdiffstats
path: root/kubernetes/oneclick/deleteAll.bash
blob: 9833af790979499760f09777b56b4ffd8ba61531 (plain)
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#!/bin/bash

. $(dirname "$0")/setenv.bash

delete_namespace() {
  kubectl delete namespace $1
}

delete_service_account() {
    kubectl delete clusterrolebinding $1-admin-binding
}

delete_registry_key() {
  kubectl --namespace $1 delete secret ${1}-docker-registry-key
}

delete_app_helm() {
  helm delete $1-$2 --purge
}

wait_terminate() {
  printf "Waiting for namespaces termination...\n"
  while true; do
    declare -i _STATUS=0
    for i in ${HELM_APPS[@]}; do
      kubectl get pods --namespace $1 | grep -w " $i" > /dev/null 2>&1
      if [ "$?" -ne "0" ]; then
        _STATUS=1
        break
      fi
    done

    if [ "$SINGLE_COMPONENT" == "false" ]; then
      kubectl get namespaces $1 > /dev/null 2>&1
      _STATUS=$?
    fi
    if [ "$_STATUS" -ne "0" ]; then
      break
    fi
    sleep 2
  done
}

usage() {
  cat <<EOF
Usage: $0 [PARAMs]
-u                  : Display usage
-n [NAMESPACE]      : Kubernetes namespace (required)
-c                  : kubectl context (default: current context)
-y                  : Skip interactive confirmation (default: no)
-a [APP]            : Specify a specific ONAP component (default: all)
                      from the following choices:
                      sdc, aai ,mso, message-router, robot, vid, aaf, uui
                      sdnc, portal, policy, appc, multicloud, clamp, consul, vnfsdk
-N                  : Do not wait for deletion of namespace and its objects
EOF
}

#MAINs
NS=
INCL_SVC=false
APP=
WAIT_TERMINATE=true
SKIP_INTERACTIVE_CONFIRMATION=no
KUBECTL_CONTEXT=
SINGLE_COMPONENT=false
while getopts ":c:n:u:s:a:yN" PARAM; do
  case $PARAM in
    u)
      usage
      exit 1
      ;;
    n)
      NS=${OPTARG}
      ;;
    a)
      APP=${OPTARG}
      if [[ -z $APP ]]; then
        usage
        exit 1
      fi
      SINGLE_COMPONENT=true
      ;;
    N)
      WAIT_TERMINATE=false
      ;;
    y)
      SKIP_INTERACTIVE_CONFIRMATION=yes
      ;;
    c)
      KUBECTL_CONTEXT=${OPTARG}
      ;;
    ?)
      usage
      exit
      ;;
  esac
done

if [[ -z $NS ]]; then
  usage
  exit 1
fi

if [[ "$SKIP_INTERACTIVE_CONFIRMATION" != yes ]]; then
  current_kubectl_context=$(kubectl config get-contexts |grep "*" |awk '{print $2}')
  if test "$KUBECTL_CONTEXT" != "$current_kubectl_context"; then
    printf "Current kubectl context does not match context specified:\x1b[31m $current_kubectl_context\x1b[0m\n"
    if [ ! -z "$KUBECTL_CONTEXT" -a "$KUBECTL_CONTEXT" != " " ]; then
      read -p "Do you wish to switch context to $KUBECTL_CONTEXT and continue?" yn
      case $yn in
        [Yy]* ) kubectl config use-context $KUBECTL_CONTEXT;;
        * ) printf "Skipping delete...\n"; exit;;
      esac
    else
      printf "You are about to delete deployment from:\x1b[31m $current_kubectl_context\x1b[0m\n"
      read -p "To continue enter context name: " response

      if test "$response" != "$current_kubectl_context"
      then
        printf "Your response does not match current context! Skipping delete ...\n"
        exit 1
      fi
    fi
  fi
fi

if [[ ! -z "$APP" ]]; then
  HELM_APPS=($APP)
fi

printf "\n********** Cleaning up ONAP: ${ONAP_APPS[*]}\n"

for i in ${HELM_APPS[@]}; do
  delete_app_helm $NS $i
done

if [ "$SINGLE_COMPONENT" == "false" ]
then
    delete_app_helm $NS "config"
    delete_namespace $NS
    delete_registry_key $NS
    delete_service_account $NS
fi

if $WAIT_TERMINATE; then
  wait_terminate $NS
fi

printf "\n********** Gone **********\n"