-
-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathdev-env.sh
executable file
·110 lines (88 loc) · 3.11 KB
/
dev-env.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#!/usr/bin/env bash
if [ -n "$DEBUG" ]; then
set -x
fi
set -o errexit
set -o nounset
set -o pipefail
DIR=$(cd $(dirname "${BASH_SOURCE}") && pwd -P)
if ! command -v minikube &> /dev/null; then
echo "minikube is not installed"
exit 1
fi
if ! command -v kubectl &> /dev/null; then
echo "kubectl is not installed"
exit 1
fi
HELM_VERSION=$(helm version 2>&1 | grep -oE 'v[0-9]+\.[0-9]+\.[0-9]+') || true
if [[ ${HELM_VERSION} < "v3.0.0" ]]; then
echo "Please upgrade helm to v3.0.0 or higher"
exit 1
fi
KUBE_CLIENT_VERSION=$(kubectl version --client --short | awk '{print $3}' | cut -d. -f2) || true
if [[ ${KUBE_CLIENT_VERSION} -lt 16 ]]; then
echo "Please update kubectl to 1.16 or higher"
exit 1
fi
echo "[dev-env] starting minikube"
MINIKUBE_IN_STYLE=0 minikube start --driver=docker
echo "[dev-env] enabling ingress addon"
minikube addons enable ingress
echo "[dev-env] enabling ssl-passthrough for ingress controller"
# Check deployment rollout status every 10 seconds (max 10 minutes) until complete.
ATTEMPTS=0
ROLLOUT_STATUS_CMD="kubectl rollout status deployment/ingress-nginx-controller -n ingress-nginx"
until $ROLLOUT_STATUS_CMD || [ $ATTEMPTS -eq 60 ]; do
ATTEMPTS=$((ATTEMPTS + 1))
sleep 10
done
INGRESS_HOST="$(minikube ip).nip.io"
echo "[dev-env] pushing app image"
minikube image load "example:${TAG}"
echo "[dev-env] creating example namespace"
kubectl create namespace example
ATTEMPTS=0
ROLLOUT_STATUS_CMD="kubectl get namespace example -n example"
until $ROLLOUT_STATUS_CMD 2>/dev/null || [ $ATTEMPTS -eq 60 ]; do
ATTEMPTS=$((ATTEMPTS + 1))
sleep 10
done
# Install Redis operator
echo "[dev-env] creating redis-operator"
kubectl create -f manifests/all-redis-operator-resources.yaml
ATTEMPTS=0
ROLLOUT_STATUS_CMD="kubectl rollout status deployment.apps/redisoperator"
until $ROLLOUT_STATUS_CMD 2>/dev/null || [ $ATTEMPTS -eq 60 ]; do
ATTEMPTS=$((ATTEMPTS + 1))
sleep 10
done
kubectl create -f manifests/persistent-storage-no-pvc-deletion.yaml -n example
ATTEMPTS=0
ROLLOUT_STATUS_CMD="kubectl rollout status deployment.apps/rfs-redisfailover-persistent-keep -n example"
until $ROLLOUT_STATUS_CMD || [ $ATTEMPTS -eq 60 ]; do
ATTEMPTS=$((ATTEMPTS + 1))
sleep 10
done
echo "[dev-env] Checking redis-operator statefulset replicas status to be ready"
STATEFULSET_REPLICAS=$(kubectl get statefulset rfr-redisfailover-persistent-keep -o jsonpath='{.spec.replicas}' -n example)
ATTEMPTS=0
until [[ ${STATEFULSET_REPLICAS} -eq $(kubectl get statefulset rfr-redisfailover-persistent-keep -o jsonpath='{.status.readyReplicas}' -n example) ]] || [ $ATTEMPTS -eq 60 ]; do
ATTEMPTS=$((ATTEMPTS + 1))
sleep 10
done
echo "[dev-env] installing example charts"
helm upgrade --install \
example charts/example \
--namespace example \
--set ingress.host.name="example.${INGRESS_HOST}"
ATTEMPTS=0
ROLLOUT_STATUS_CMD="kubectl rollout status deployment/example -n example"
until $ROLLOUT_STATUS_CMD || [ $ATTEMPTS -eq 60 ]; do
ATTEMPTS=$((ATTEMPTS + 1))
sleep 10
done
cat <<EOF
Kubernetes cluster ready
FastAPI available under: http://example.${INGRESS_HOST}/
You can delete dev-env by issuing: make clean
EOF