16429: add GKE integration test
[arvados-k8s.git] / tests / GKE.sh
1 #!/bin/bash
2
3 set -e
4
5 DEBUG=$1
6
7 if [[ "$DEBUG" == "--debug" ]]; then
8   set -x
9 fi
10
11 testReady() {
12   set +e
13   ready=0
14   apiReady=0
15   keepProxyReady=0
16   curl --connect-timeout 1 -k -s -H "Authorization: Bearer $MANAGEMENTTOKEN" https://$GKE_IP:444/rails/_health/ping |grep -q OK
17   if [[ $? -eq 0 ]]; then
18     apiReady=1
19   else
20     return
21   fi
22   curl --connect-timeout 1 -k -s -H "Authorization: Bearer $MANAGEMENTTOKEN" https://$GKE_IP:25107/_health/ping |grep -q OK
23   if [[ $? -eq 0 ]]; then
24     keepProxyReady=1
25   fi
26   if [[ $apiReady -eq 1 ]] && [[ $keepProxyReady -eq 1 ]]; then
27     ready=1
28   fi
29   set -e
30 }
31
32 stopCluster() {
33   echo "Stopping Arvados cluster..."
34   cd $MY_PATH/../charts/arvados
35   helm delete arvados
36
37   echo "Stopping k8s cluster on GKE"
38   gcloud container clusters delete arvados --zone us-central1-a --quiet
39   gcloud compute addresses delete arvados-k8s-ip --region us-central1 --quiet
40 }
41
42 kubectlStatus() {
43   echo "Current k8s status:"
44   echo "services:"
45   kubectl get svc
46   echo "pods:"
47   kubectl get pods
48   echo
49 }
50
51 startCluster() {
52   echo "Starting k8s cluster on GKE"
53   if [[ -z "$GKE_IP" ]]; then
54     gcloud compute addresses create arvados-k8s-ip --region us-central1
55     GKE_IP=`gcloud compute addresses describe arvados-k8s-ip --region us-central1 --format="value(address)"`
56   fi
57   set +e
58   CLUSTER=`gcloud container clusters describe arvados --zone us-central1-a 2>/dev/null`
59   set -e
60   if [[ -z "$CLUSTER" ]]; then
61     gcloud container clusters create arvados --zone us-central1-a --machine-type n1-standard-2 --cluster-version 1.15
62   fi
63
64   set +e
65   helm get all arvados >/dev/null 2>&1
66   if [[ $? -eq 0 ]]; then
67     echo "Deleting running arvados helm chart..."
68     helm delete arvados
69     while [ "$SVC" != "2" ]; do
70       SVC=`kubectl get svc|wc -l`
71       echo "Waiting for services to disappear..."
72       kubectl get svc
73       sleep 2
74     done
75   fi
76   set -e
77
78   echo "Starting Arvados cluster..."
79   cd $MY_PATH/../charts/arvados
80   ./cert-gen.sh "$GKE_IP"
81
82   helm install arvados . --set externalIP="$GKE_IP"
83
84   echo "Waiting for cluster health OK..."
85   while [ $ready -ne 1 ]; do
86     testReady
87     kubectlStatus
88     sleep 10
89   done
90 }
91
92 main() {
93   MY_PATH=`pwd`
94   MANAGEMENTTOKEN=`cat $MY_PATH/../charts/arvados/config/config.yml |grep Management |cut -f2 -d ':' |sed -e 's/ //'`
95   set +e
96   GKE_IP=`gcloud compute addresses describe arvados-k8s-ip --region us-central1 --format="value(address)" 2>/dev/null`
97   set -e
98   date
99   # testReady needs $GKE_IP
100   testReady
101
102   if [[ $ready -ne 1 ]]; then
103     startCluster
104   else
105     # create the necessary kubectl context for the running cluster
106     gcloud container clusters get-credentials arvados --zone us-central1-a
107     kubectlStatus
108   fi
109   date
110   echo "cluster health OK"
111
112   export ARVADOS_API_HOST=$GKE_IP:444
113   export ARVADOS_API_HOST_INSECURE=true
114   export ARVADOS_API_TOKEN=`grep superUserSecret $MY_PATH/../charts/arvados/values.yaml |cut -f2 -d\"`
115
116   cd $MY_PATH/cwl-diagnostics-hasher/
117
118   echo "uploading requirements for CWL hasher"
119   arv-put 4xphq-8i9sb-fmwod1qn74cemdp.log.txt  --no-resume
120   echo "uploading Arvados jobs image for CWL hasher"
121   # just in case, clear the arv-put cache first, arv-keepdocker doesn't pass through --no-resume
122   rm -rf ~/.cache/arvados/arv-put
123   echo "running CWL hasher"
124   cwl-runner hasher-workflow.cwl hasher-workflow-job.yml
125   if [[ $? -eq 0 ]]; then
126     echo "Success!"
127   else
128     echo "Test failed!"
129   fi
130
131   stopCluster
132 }
133
134 main