X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=test%2Fcommon%2Fclean_kube.sh;h=c3e774396c33fb3fc36f57ab03fc91295cb1f3b8;hb=refs%2Fchanges%2F83%2F8083%2F3;hp=8e2f676a53467d1b3acc4920c07218f896b7ab46;hpb=520b912bce8eebb3e272c9ccfa3378b01dfd200b;p=nonrtric.git diff --git a/test/common/clean_kube.sh b/test/common/clean_kube.sh index 8e2f676a..c3e77439 100755 --- a/test/common/clean_kube.sh +++ b/test/common/clean_kube.sh @@ -28,64 +28,199 @@ YELLOW="\033[33m\033[1m" EYELLOW="\033[0m" SAMELINE="\033[0K\r" -__kube_delete_all_resources() { - echo "Deleting all from namespace: "$1 +KUBECONF="" + +__kube_scale_all_resources() { + + echo " Scaling down in namespace $1 ..." namespace=$1 - resources="deployments replicaset statefulset services pods configmaps pvc pv" - deleted_resourcetypes="" + resources="deployment replicaset statefulset" for restype in $resources; do - result=$(kubectl get $restype -n $namespace -o jsonpath='{.items[?(@.metadata.labels.autotest)].metadata.name}') + result=$(kubectl $KUBECONF get $restype -n $namespace -o jsonpath='{.items[?(@.metadata.labels.autotest)].metadata.name}') if [ $? -eq 0 ] && [ ! -z "$result" ]; then - deleted_resourcetypes=$deleted_resourcetypes" "$restype for resid in $result; do - if [ $restype == "replicaset" ] || [ $restype == "statefulset" ]; then - kubectl scale $restype $resid -n $namespace --replicas=0 1> /dev/null 2> /dev/null - T_START=$SECONDS - count=1 - while [ $count -ne 0 ]; do - count=$(kubectl get $restype $resid -n $namespace -o jsonpath='{.status.replicas}' 2> /dev/null) - echo -ne " Scaling $restype $resid from namespace $namespace with label autotest to 0,count=$count....$(($SECONDS-$T_START)) seconds"$SAMELINE - if [ $? -eq 0 ] && [ ! -z "$count" ]; then - sleep 0.5 + count=$(kubectl $KUBECONF get $restype $resid -n $namespace -o jsonpath='{.status.replicas}' 2> /dev/null) + if [ $? -eq 0 ] && [ ! -z "$count" ]; then + if [ $count -ne 0 ]; then + echo " Scaling $restype $resid in namespace $namespace with label autotest to 0, current count=$count." + kubectl $KUBECONF scale $restype $resid -n $namespace --replicas=0 1> /dev/null 2> /dev/null + fi + fi + done + fi + done +} + +__kube_wait_for_zero_count() { + echo " Wait for scaling to zero in namespace $1 ..." + namespace=$1 + resources="deployment replicaset statefulset" + for restype in $resources; do + result=$(kubectl $KUBECONF get $restype -n $namespace -o jsonpath='{.items[?(@.metadata.labels.autotest)].metadata.name}') + if [ $? -eq 0 ] && [ ! -z "$result" ]; then + for resid in $result; do + T_START=$SECONDS + count=1 + scaled=0 + while [ $count -gt 0 ]; do + count=$(kubectl $KUBECONF get $restype $resid -n $namespace -o jsonpath='{.status.replicas}' 2> /dev/null) + if [ $? -eq 0 ] && [ ! -z "$count" ]; then + if [ $count -ne 0 ]; then + echo -ne " Scaling $restype $resid in namespace $namespace with label autotest to 0, current count=$count....$(($SECONDS-$T_START)) seconds"$SAMELINE + scaled=1 else - count=0 + sleep 0.5 fi - done - echo -e " Scaled $restype $resid from namespace $namespace with label $labelname=$labelid to 0,count=$count....$(($SECONDS-$T_START)) seconds$GREEN OK $EGREEN" + else + count=0 + fi + done + if [ $scaled -eq 1 ]; then + echo -e " Scaling $restype $resid in namespace $namespace with label autotest to 0, current count=$count....$(($SECONDS-$T_START)) seconds $GREEN OK $EGREEN" fi - echo -ne " Deleting $restype $resid from namespace $namespace with label autotest "$SAMELINE - kubectl delete $restype $resid -n $namespace 1> /dev/null 2> /dev/null - if [ $? -eq 0 ]; then - echo -e " Deleted $restype $resid from namespace $namespace with label autotest $GREEN OK $EGREEN" - else - echo -e " Deleted $restype $resid from namespace $namespace with label autotest $GREEN Does not exist - OK $EGREEN" - fi - #fi done fi done - if [ ! -z "$deleted_resourcetypes" ]; then - for restype in $deleted_resources; do - echo -ne " Waiting for $restype in namespace $namespace with label autotest to be deleted..."$SAMELINE - T_START=$SECONDS - result="dummy" - while [ ! -z "$result" ]; do - sleep 0.5 - result=$(kubectl get $restype -n $namespace -o jsonpath='{.items[?(@.metadata.labels.autotest)].metadata.name}') - echo -ne " Waiting for $restype in namespace $namespace with label autotest to be deleted...$(($SECONDS-$T_START)) seconds "$SAMELINE - if [ -z "$result" ]; then - echo -e " Waiting for $restype in namespace $namespace with label autotest to be deleted...$(($SECONDS-$T_START)) seconds $GREEN OK $EGREEN" - elif [ $(($SECONDS-$T_START)) -gt 300 ]; then - echo -e " Waiting for $restype in namespace $namespace with label autotest to be deleted...$(($SECONDS-$T_START)) seconds $RED Failed $ERED" - result="" - fi +} + +__kube_delete_all_resources() { + echo " Delete all in namespace $1 ..." + namespace=$1 + resources="deployments replicaset statefulset services pods configmaps pvc serviceaccounts secrets authorizationpolicies requestauthentications" + for restype in $resources; do + result=$(kubectl $KUBECONF get $restype -n $namespace -o jsonpath='{.items[?(@.metadata.labels.autotest)].metadata.name}' 2> /dev/null) + if [ $? -eq 0 ] && [ ! -z "$result" ]; then + for resid in $result; do + echo " Deleting $restype $resid in namespace $namespace with label autotest " + kubectl $KUBECONF delete --grace-period=1 $restype $resid -n $namespace 1> /dev/null 2> /dev/null + done + fi + done +} + +__kube_delete_all_pv() { + echo " Delete all non-namespaced resources ..." + resources="pv clusterrolebindings" + for restype in $resources; do + result=$(kubectl $KUBECONF get $restype -o jsonpath='{.items[?(@.metadata.labels.autotest)].metadata.name}') + if [ $? -eq 0 ] && [ ! -z "$result" ]; then + for resid in $result; do + echo " Deleting $restype $resid with label autotest " + kubectl $KUBECONF delete --grace-period=1 $restype $resid 1> /dev/null 2> /dev/null + done + fi + done +} + +__kube_wait_for_delete() { + echo " Wait for delete in namespace $1 ..." + namespace=$1 + resources="deployments replicaset statefulset services pods configmaps pvc secrets" + for restype in $resources; do + result=$(kubectl $KUBECONF get $restype -n $namespace -o jsonpath='{.items[?(@.metadata.labels.autotest)].metadata.name}') + if [ $? -eq 0 ] && [ ! -z "$result" ]; then + for resid in $result; do + echo " Deleting $restype $resid in namespace $namespace with label autotest " + kubectl $KUBECONF delete --grace-period=1 $restype $resid -n $namespace #1> /dev/null 2> /dev/null + echo -ne " Waiting for $restype $resid in namespace $namespace with label autotest to be deleted..."$SAMELINE + T_START=$SECONDS + result="dummy" + while [ ! -z "$result" ]; do + sleep 0.5 + result=$(kubectl $KUBECONF get $restype -n $namespace -o jsonpath='{.items[?(@.metadata.labels.autotest)].metadata.name}') + echo -ne " Waiting for $restype $resid in namespace $namespace with label autotest to be deleted...$(($SECONDS-$T_START)) seconds "$SAMELINE + if [ -z "$result" ]; then + echo -e " Waiting for $restype $resid in namespace $namespace with label autotest to be deleted...$(($SECONDS-$T_START)) seconds $GREEN OK $EGREEN" + elif [ $(($SECONDS-$T_START)) -gt 300 ]; then + echo -e " Waiting for $restype $resid in namespace $namespace with label autotest to be deleted...$(($SECONDS-$T_START)) seconds $RED Failed $ERED" + result="" + fi + done + done + fi + done +} + +__kube_wait_for_delete_pv() { + echo " Wait for delete pv ..." + resources="pv " + for restype in $resources; do + result=$(kubectl $KUBECONF get $restype -o jsonpath='{.items[?(@.metadata.labels.autotest)].metadata.name}') + if [ $? -eq 0 ] && [ ! -z "$result" ]; then + for resid in $result; do + echo " Deleting $restype $resid with label autotest " + kubectl $KUBECONF delete --grace-period=1 $restype $resid -n $namespace #1> /dev/null 2> /dev/null + echo -ne " Waiting for $restype $resid with label autotest to be deleted..."$SAMELINE + T_START=$SECONDS + result="dummy" + while [ ! -z "$result" ]; do + sleep 0.5 + result=$(kubectl $KUBECONF get $restype -n $namespace -o jsonpath='{.items[?(@.metadata.labels.autotest)].metadata.name}') + echo -ne " Waiting for $restype $resid with label autotest to be deleted...$(($SECONDS-$T_START)) seconds "$SAMELINE + if [ -z "$result" ]; then + echo -e " Waiting for $restype $resid with label autotest to be deleted...$(($SECONDS-$T_START)) seconds $GREEN OK $EGREEN" + elif [ $(($SECONDS-$T_START)) -gt 300 ]; then + echo -e " Waiting for $restype $resid with label autotest to be deleted...$(($SECONDS-$T_START)) seconds $RED Failed $ERED" + result="" + fi + done done - done - fi + fi + done } + + echo "Will remove all kube resources marked with label 'autotest'" -__kube_delete_all_resources nonrtric -__kube_delete_all_resources nonrtric-ft -__kube_delete_all_resources onap +print_usage() { + echo "Usage: clean_kube.sh [--kubeconfig ] | [--kubecontext ]" +} + +if [ $# -eq 0 ]; then +: +elif [ $# -eq 1 ]; then + print_usage + exit +elif [ $# -eq 2 ]; then + if [ $1 == "--kubeconfig" ]; then + if [ ! -f $2 ]; then + echo "File $2 for --kubeconfig is not found" + print_usage + exit + fi + KUBECONF="--kubeconfig $2" + elif [ $1 == "--kubecontext" ]; then + if [ -z $2 ]; then + echo "No context found for --kubecontext" + print_usage + exit + fi + KUBECONF="--context $2" + else + print_usage + exit + fi +else + print_usage + exit +fi + +# List all namespace and scale/delete per namespace +nss=$(kubectl $KUBECONF get ns -o jsonpath='{.items[*].metadata.name}') +if [ ! -z "$nss" ]; then + for ns in $nss; do + __kube_scale_all_resources $ns + done + for ns in $nss; do + __kube_wait_for_zero_count $ns + done + for ns in $nss; do + __kube_delete_all_resources $ns + done + __kube_delete_all_pv + for ns in $nss; do + __kube_wait_for_delete $ns + done + __kube_wait_for_delete_pv +fi echo "Done" \ No newline at end of file