From 99d50e7af90d2e02f6598ae0e3de44da8e3846a7 Mon Sep 17 00:00:00 2001
From: David Hoese <david.hoese@ssec.wisc.edu>
Date: Fri, 24 Jul 2020 14:45:23 -0500
Subject: [PATCH] Try some fancier PVC checks

---
 .gitlab-ci.yml        |  2 +-
 helpers/create_pvc.sh | 35 +++++++++++++++++++++++++++--------
 2 files changed, 28 insertions(+), 9 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8e3e702..f954618 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -64,7 +64,7 @@ create geotiff storage:
     # copy secret kubeconfig to the mounted (pwd) directory
     - cp $kubekorner_k3s_config .
     - kubeconfig=$(basename $kubekorner_k3s_config)
-    - ./helpers/create_pvc.sh "$ns" "production/geotiff-pvc.yaml" "$kubeconfig"
+    - ./helpers/create_pvc.sh "$ns" "production/geotiff-pvc.yaml" "cspp-geo-geo2grid" "$kubeconfig"
   # this job doesn't actually need any artifacts from previous jobs
   dependencies: []
   rules:
diff --git a/helpers/create_pvc.sh b/helpers/create_pvc.sh
index bb61979..20e7dd9 100755
--- a/helpers/create_pvc.sh
+++ b/helpers/create_pvc.sh
@@ -1,16 +1,23 @@
 #!/usr/bin/env bash
 
-if [[ $# -eq 2 ]]; then
+fail() {
+    echo "$@"
+    exit 3
+}
+
+if [[ $# -eq 3 ]]; then
     ns=$1
-    pvc=$2
+    pvc_file=$2
+    pvc_name=$3
     EXTRA_ARGS="--namespace $ns"
-elif [[ $# -eq 3 ]]; then
+elif [[ $# -eq 4 ]]; then
     ns=$1
-    pvc=$2
-    kubeconfig=$3
+    pvc_file=$2
+    pvc_name=$3
+    kubeconfig=$4
     EXTRA_ARGS="--namespace $ns --kubeconfig $kubeconfig"
 else
-    echo "Usage: ./create_pvc.sh <kubernetes namespace> <PVC YAML definition> <kubernetes config file>"
+    echo "Usage: ./create_pvc.sh <kubernetes namespace> <PVC YAML definition> <PVC name> [<kubernetes config file>]"
     exit 1
 fi
 
@@ -19,11 +26,23 @@ fi
 # didn't change. Let's make sure it exists on the cluster and if so, don't
 # try to recreate it.
 if [[ $CI_PIPELINE_SOURCE == "pipeline" ]]; then
-    pvc_exists=$(kubectl $EXTRA_ARGS get pvc $pvc -o jsonpath="{.metadata.name}" || echo "")
+    pvc_exists=$(kubectl $EXTRA_ARGS get pvc $pvc_name -o jsonpath="{.metadata.name}" || echo "")
     if [[ "$pvc_exists" != "" ]]; then
         # it exists
         exit 0
     fi
 fi
 
-kubectl $EXTRA_ARGS replace -f $pvc
\ No newline at end of file
+pvc_pending=$(kubectl $EXTRA_ARGS get pvc $pvc_name -o jsonpath="{.status.phase}" || echo "")
+if [[ $pvc_pending == "" ]]; then
+    echo "PVC does not exist, creating..."
+elif [[ $pvc_pending != "Pending" ]]; then
+    echo "PVC already exists and is not pending. Manually 'helm uninstall' all bound pods"
+    exit 2
+else
+    echo "PVC exists but is pending, deleting..."
+#    kubectl $EXTRA_ARGS delete $pvc_name || fail "Could not delete existing PVC"
+fi
+
+
+kubectl $EXTRA_ARGS replace -f $pvc_file
\ No newline at end of file
-- 
GitLab