SiaB install.sh improve locating top level
[iec.git] / src / foundation / hot / control.sh
1 #!/bin/sh
2
3 # shellcheck disable=SC2086
4
5 # set DPDK if available
6 has_dpdk=${has_dpdk:-"false"}
7
8 ################################################################
9 # Stack parameters
10 base_img=${base_img:-"xenial"}
11 key_name=${key_name:-"ak-key"}
12 k8s_master_vol=${k8s_master_vol:-"k8s_master_vol"}
13 external_net=${external_net:-"external"}
14 k8s_user=${k8s_user:-"ubuntu"}
15 k8s_password=${k8s_password:-"ubuntu"}
16 has_dpdk_param=
17
18 floating_ip_param="--parameter public_ip_pool=$external_net"
19
20 if [ "$has_dpdk" = true ]; then
21     has_dpdk_param="--parameter has_dpdk=true"
22 fi
23
24 ################################################################
25
26 set -ex
27
28 retries=5
29
30 if [ -z "$OS_AUTH_URL" ]; then
31     echo "OS_AUTH_URL not set; aborting"
32     exit 1
33 fi
34
35 if ! [ -f ak-key.pem ]
36 then
37   nova keypair-add "$key_name" > "$key_name".pem
38   chmod 600 ak-key.pem
39 fi
40
41 skip_k8s_net=${skip_k8s_net:-}
42 skip_k8s_master=${skip_k8s_master:-}
43 skip_k8s_slaves=${skip_k8s_slaves:-}
44
45 stack_k8s_net=
46 stack_k8s_master=
47 stack_k8s_slaves=
48
49 case $1 in
50 start|stop)
51     cmd=$1
52     shift
53     ;;
54 restart)
55     shift
56     tries=0
57     while ! $0 stop "$@"; do
58         tries=$((tries+1))
59         if [ $tries -gt $retries ]; then
60             echo "Unable to stop demo, exiting"
61             exit 1
62         fi
63     done
64     $0 start "$@"
65     exit $?
66     ;;
67 *)
68     echo "Control script for managing a simple K8s cluster of VMs using Heat"
69     echo "Available stacks:"
70     echo "  - net - all the required networks and subnets"
71     echo "  - k8s_master - K8s master VM"
72     echo "  - k8s_slaves - configurable number of K8s slave VMs"
73     echo "Use skip_<stack> to skip starting/stopping stacks, e.g."
74     echo "#:~ > skip_k8s_net=1 ./$0 stop"
75     echo "usage: $0 [start|stop] [k8s_net] [k8s_master] [k8s_slaves]"
76     exit 1
77     ;;
78 esac
79
80 if [ $# -gt 0 ]; then
81     skip_k8s_net=1
82     while [ $# -gt 0 ]; do
83         eval unset skip_"$1"
84         shift
85     done
86 fi
87
88 # check OS status
89 tries=0
90 while ! openstack compute service list > /dev/null 2>&1; do
91     tries=$((tries+1))
92     if [ $tries -gt $retries ]; then
93         echo "Unable to check Openstack health, exiting"
94         exit 2
95     fi
96     sleep 5
97 done
98
99 for stack in $(openstack stack list -f value -c "Stack Name"); do
100     echo "$stack" | grep -sq -e '^[a-zA-Z0-9_]*$' && eval stack_"$stack"=1
101 done
102
103 case $cmd in
104 start)
105     if [ -z "$stack_k8s_net" ] && [ -z "$skip_k8s_net" ]; then
106         echo "Starting k8s_net"
107         openstack stack create --wait \
108             --parameter external_net="$external_net" \
109             -t k8s_net.yaml k8s_net
110         # Might need to wait for the networks to become available
111         # sleep 5
112     fi
113
114 #    master_vol=$(openstack volume show $k8s_master_vol -f value -c id)
115 #            --parameter volume_id=$master_vol \
116
117     k8s_master_ip=$(openstack stack output show k8s_net k8s_master_ip -f value -c output_value)
118     k8s_pod_net_cidr=$(openstack stack output show k8s_net k8s_pod_net_cidr -f value -c output_value)
119     k8s_svc_net_cidr=$(openstack stack output show k8s_net k8s_svc_net_cidr -f value -c output_value)
120     k8s_cluster_ip=$(openstack stack output show k8s_net k8s_cluster_ip -f value -c output_value)
121     if [ -z "$stack_k8s_master" ] && [ -z "$skip_k8s_master" ]; then
122         echo "Starting Kubernetes master"
123         openstack stack create --wait \
124             --parameter key_name="$key_name" \
125             --parameter k8s_master_ip="$k8s_master_ip" \
126             --parameter k8s_pod_net_cidr="$k8s_pod_net_cidr" \
127             --parameter k8s_svc_net_cidr="$k8s_svc_net_cidr" \
128             --parameter k8s_cluster_ip="$k8s_cluster_ip" \
129             --parameter k8s_user="$k8s_user" \
130             --parameter k8s_password="$k8s_password" \
131             $floating_ip_param \
132             $has_dpdk_param \
133             -t k8s_master.yaml k8s_master
134     fi
135
136     if [ -z "$stack_k8s_slaves" ] && [ -z "$skip_k8s_slaves" ]; then
137         echo "Starting Kubernetes slaves"
138         openstack stack create --wait \
139             --parameter key_name="$key_name" \
140             --parameter k8s_master_ip="$k8s_master_ip" \
141             --parameter k8s_pod_net_cidr="$k8s_pod_net_cidr" \
142             --parameter k8s_svc_net_cidr="$k8s_svc_net_cidr" \
143             --parameter k8s_cluster_ip="$k8s_cluster_ip" \
144             --parameter k8s_user="$k8s_user" \
145             --parameter k8s_password="$k8s_password" \
146             $floating_ip_param \
147             $has_dpdk_param \
148             -t k8s_slaves.yaml k8s_slaves
149     fi
150
151     openstack stack list
152     ;;
153 stop)
154     if [ -n "$stack_k8s_slaves" ] && [ -z "$skip_k8s_slaves" ]; then
155         echo "Stopping Kubernetes slaves"
156         openstack stack delete --yes --wait k8s_slaves
157     fi
158
159     if [ -n "$stack_k8s_master" ] && [ -z "$skip_k8s_master" ]; then
160         echo "Stopping Kubernetes master"
161         openstack stack delete --yes --wait k8s_master
162     fi
163
164     if [ -n "$stack_k8s_net" ] && [ -z "$skip_k8s_net" ]; then
165         echo "Stopping k8s_net"
166         openstack stack delete --yes --wait k8s_net
167     fi
168
169     openstack stack list
170     ;;
171 esac