| #!/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" |