From 2cd6e9d9898c7c0fd2860c560625b6859fc925ff Mon Sep 17 00:00:00 2001 From: Sergey Dudoladov Date: Thu, 25 Jan 2018 15:24:30 +0100 Subject: [PATCH] respond to code review --- run_locally.sh | 60 ++++++++++++++++++++++++++------------------------ 1 file changed, 31 insertions(+), 29 deletions(-) diff --git a/run_locally.sh b/run_locally.sh index 03d6dee47..f7c6973fe 100755 --- a/run_locally.sh +++ b/run_locally.sh @@ -1,44 +1,50 @@ #!/bin/bash -set -uo pipefail +# unofficial bash strict mode w/o the -e option +# -e breaks "eval $cmd" in the retry function +set -uo pipefail IFS=$'\n\t' -# timeouts after 3 minutes -function retry(){ +function retry(){ # timeouts after 1 minutes cmd="$1" retryMsg="$2" - for i in {1..90}; do + for i in {1..20}; do eval "$cmd" if [ $? -eq 0 ]; then - return 0 + return 0 fi echo "$retryMsg" - sleep 2 + sleep 3 done - + return 1 } - echo "==== CLEAN UP PREVIOUS RUN ==== " status=$(minikube status --format "{{.MinikubeStatus}}") -if [ "$status" = "Running" ]; then +if [ "$status" = "Running" ] || [ "$status" = "Stopped" ]; then + echo "Delete the existing local cluster so that we can cleanly apply resources from scratch..." minikube delete fi # the kubectl process does the port-forwarding between operator and local ports -# we restart the process to be able to bind to the same port again (see end of script) -echo "Kill kubectl process to re-init port-forwarding for minikube" -kubepid=$(pidof "kubectl") -if [ $? -eq 0 ]; then - kill "$kubepid" +# we restart the process to bind to the same port again (see end of script) +if [ -e /tmp/kubectl-port-forward.pid ]; then + + pid=$(cat /tmp/kubectl-port-forward.pid) + # the process will die if a minikube is stopped manually between two invocations of the script + if ps --pid "$pid" > /dev/null; then + echo "Kill the kubectl process responsible for port forwarding for minikube so that we can re-use the same ports for forwarding later..." + kill "$pid" + fi + rm /tmp/kubectl-port-forward.pid fi echo "==== START MINIKUBE ==== " echo "May take a few minutes ..." -minikube start +minikube start kubectl config set-context minikube echo "==== MINIKUBE STATUS ==== " @@ -48,11 +54,11 @@ echo "==== START OPERATOR ==== " # the order of files is significant for file in "configmap.yaml" "serviceaccount.yaml" "postgres-operator.yaml" do - retry "kubectl create -f manifests/\"$file\"" "attempt to create $file resource" + retry "kubectl create -f manifests/\"$file\"" "attempt to create $file resource" done -msg="Wait for the postgresql custom resource definition to register." -cmd="kubectl get crd | grep 'postgresqls.acid.zalan.do' &> /dev/null" +msg="Wait for the postgresql custom resource definition to register..." +cmd="kubectl get crd | grep --quiet 'postgresqls.acid.zalan.do'" retry "$cmd" "$msg " kubectl create -f manifests/complete-postgres-manifest.yaml @@ -62,22 +68,18 @@ operatorPort="8080" echo "==== FORWARD OPERATOR PORT $operatorPort TO LOCAL PORT $localPort ====" operatorPod=$(kubectl get pod -l name=postgres-operator -o jsonpath={.items..metadata.name}) # runs in the background to keep current terminal responsive -# 1> redirects stdout to remove the info message about forwarded ports; the message sometimes garbles the cli prompt -kubectl port-forward "$operatorPod" "$localPort":"$operatorPort" 1> /dev/null & - +# stdout redirect removes the info message about forwarded ports; the message sometimes garbles the cli prompt +kubectl port-forward "$operatorPod" "$localPort":"$operatorPort" &> /dev/null & +pgrep --newest "kubectl" > /tmp/kubectl-port-forward.pid echo "==== RUN HEALTH CHECK ==== " -checkCmd="curl -L http://127.0.0.1:$localPort/clusters &> /dev/null" +checkCmd="curl --location --silent http://127.0.0.1:$localPort/clusters &> /dev/null" +echo "Command for checking: $checkCmd" checkMsg="Wait for port forwarding to take effect" -retry "$checkCmd" "$checkMsg" -if [ $? -eq 0 ]; then +if retry "$checkCmd" "$checkMsg" ; then echo "==== SUCCESS: OPERATOR IS RUNNING ==== " else - echo "Operator did not start or port forwarding did not work" + echo "==== FAILURE: OPERATOR DID NOT START OR PORT FORWARDING DID NOT WORK" exit 1 fi - - - -