Change the order of setup-cni.sh parameters
[iec.git] / src / foundation / scripts / startup.sh
1 #!/bin/bash
2 #Install the k8s-master & k8s-worker node from Mgnt node
3 #
4 set -e
5
6 #
7 # Displays the help menu.
8 #
9 display_help () {
10   echo "Usage:"
11   echo " "
12   echo "This script can help you to deploy a simple iec testing"
13   echo "environments."
14   echo "Firstly, the master node and worker node information must"
15   echo "be added into config file which will be used for deployment."
16   echo ""
17   echo "Secondly, there should be an user on each node which will be"
18   echo "used to install the corresponding software on master and"
19   echo "worker nodes. At the same time, this user should be enable to"
20   echo "run the sudo command without input password on the hosts."
21   echo ""
22   echo "In the end, some optional parameters could be directly passed"
23   echo "to startup.sh by shell for easy customizing your own IEC"
24   echo "environments:"
25   echo "-k|--kube:      ---- The version of k8s"
26   echo "-c|--cni-ver:   ---- Kubernetes-cni version"
27   echo "-C|--cni:       ---- CNI type: calico/flannel"
28   echo ""
29   echo "Example usages:"
30   echo "   ./startup.sh #Deploy with default parameters"
31   echo "    #Deploy the flannel with 1.15.2 K8s"
32   echo "   ./startup.sh -C flannel -k 1.15.2 -c 0.7.5"
33   exit
34 }
35
36 #
37 # Setup system configuration before invoke setup-cni.sh
38 #
39 k8s_worker_preconfigure() {
40 case ${CNI_TYPE} in
41   contivpp)
42     if [ -n "${DEV_NAME[$ip_addr]}" ]
43     then
44       CONTIVPP_CONFIG="cd iec/src/foundation/scripts/cni/contivpp && sudo ./contiv-update-config.sh ${DEV_NAME[$ip_addr]}"
45       sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} $CONTIVPP_CONFIG
46     fi
47     ;;
48   danm)
49     DANM_CONFIG="cd iec/src/foundation/scripts/cni/danm && sudo ./danm_install.sh"
50     sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} $DANM_CONFIG
51     ;;
52   *)
53     ;;
54 esac
55 }
56
57 #
58 # Deploy k8s.
59 #
60 deploy_k8s () {
61   set -o xtrace
62
63   INSTALL_SOFTWARE="sudo apt-get update && sudo apt-get install -y git &&\
64            sudo rm -rf ~/.kube ~/iec &&\
65            git clone ${REPO_URL} &&\
66            cd iec/src/foundation/scripts/ && source k8s_common.sh $KUBE_VERSION $CNI_VERSION"
67
68   #Automatic deploy the K8s environments on Master node
69   SETUP_MASTER="cd iec/src/foundation/scripts/ && source k8s_master.sh ${K8S_MASTER_IP} ${POD_NETWORK_CIDR} ${SVC_CIDR}"
70   sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${INSTALL_SOFTWARE}
71   sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${SETUP_MASTER} | tee ${LOG_FILE}
72
73   TOKEN=$(grep "\--token " ./${LOG_FILE})
74   TOKEN_ID=$(echo ${TOKEN#*"token "}|cut -f1 -d' ')
75
76   SH256=$(grep "\--discovery-token-ca-cert-hash " ./${LOG_FILE})
77   TOKEN_CA_SH256=${SH256#*"sha256:"}
78
79   KUBEADM_JOIN_CMD="kubeadm join ${K8S_MASTER_IP}:6443 --token ${TOKEN_ID} --discovery-token-ca-cert-hash sha256:${TOKEN_CA_SH256}"
80
81   #Automatic deploy the K8s environments on each worker-node
82   SETUP_WORKER="cd iec/src/foundation/scripts/ && source k8s_worker.sh"
83
84   for worker in "${K8S_WORKER_GROUP[@]}"
85   do
86     ip_addr="$(cut -d',' -f1 <<<${worker})"
87     passwd="$(cut -d',' -f2 <<<${worker})"
88     echo "Install & Deploy on ${ip_addr}. password:${passwd}"
89
90     sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} ${INSTALL_SOFTWARE}
91     sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} "echo \"sudo ${KUBEADM_JOIN_CMD}\" >> ./iec/src/foundation/scripts/k8s_worker.sh"
92     sleep 2
93     k8s_worker_preconfigure
94
95     sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} ${SETUP_WORKER}
96     sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} "sudo swapon -a"
97   done
98
99
100   #Deploy etcd & CNI from master node
101   SETUP_CNI="cd iec/src/foundation/scripts && source setup-cni.sh $CNI_TYPE $POD_NETWORK_CIDR $CLUSTER_IP $K8S_MASTER_IP $SVC_CIDR"
102   sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${SETUP_CNI}
103   SETUP_HELM="cd iec/src/foundation/scripts && source helm.sh"
104   sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${SETUP_HELM}
105
106 }
107
108 #
109 # Check the K8s environments
110 #
111 check_k8s_status(){
112   set -o xtrace
113
114   VERIFY_K8S="cd iec/src/foundation/scripts/ && source nginx.sh"
115   sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${VERIFY_K8S}
116 }
117
118 #
119 # print environments
120 #
121 printOption(){
122   echo "K8S_MASTER_IP:${K8S_MASTER_IP}"
123   echo "HOST_USER:${HOST_USER}"
124   echo "REPO_URL:${REPO_URL}"
125
126   echo "The number of K8s-Workers:${#K8S_WORKER_GROUP[@]}"
127   for worker in "${K8S_WORKER_GROUP[@]}"
128   do
129     ip_addr="$(cut -d',' -f1 <<<${worker})"
130     passwd="$(cut -d',' -f2 <<<${worker})"
131     echo "Install & Deploy on ${ip_addr}. password:${passwd}"
132   done
133
134   echo "KUBE_VERSION: ${KUBE_VERSION}"
135   echo "CNI_TPYE: ${CNI_TYPE}"
136   echo "CLUSTER_IP: ${CLUSTER_IP}"
137   echo "POD_NETWORK_CIDR: ${POD_NETWORK_CIDR}"
138 }
139
140 # Read the configuration file
141 source config
142
143 rm -f "${LOG_FILE}"
144
145 ARGS=`getopt -a -o C:k:c:h -l cni:,kube:,cni-ver:,help -- "$@"`
146 eval set -- "${ARGS}"
147 while true
148 do
149         case "$1" in
150         -C|--cni)
151                 CNI_TYPE="$2"
152                 echo "CNI_TYPE=$2"
153                 shift
154                 ;;
155         -k|--kube)
156                 echo "This is config kube version:$2"
157                 KUBE_VERSION="$2"
158                 shift
159                 ;;
160         -c|--cni-ver)
161                 echo "This is config cni version:$2"
162                 CNI_VERSION="$2"
163                 shift
164                 ;;
165         -h|--help)
166                 echo "this is help case"
167                 display_help
168                 ;;
169         --)
170                 printOption
171                 shift
172                 break
173                 ;;
174         esac
175 shift
176 done
177
178 deploy_k8s
179
180 sleep 20
181
182 check_k8s_status