Add some options for IEC installation scripts
[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
38 #
39 # Deploy k8s.
40 #
41 deploy_k8s () {
42   set -o xtrace
43
44   INSTALL_SOFTWARE="sudo apt-get update && sudo apt-get install -y git &&\
45            sudo rm -rf ~/.kube ~/iec &&\
46            git clone ${REPO_URL} &&\
47            cd iec/src/foundation/scripts/ && source k8s_common.sh $KUBE_VERSION $CNI_VERSION"
48
49   #Automatic deploy the K8s environments on Master node
50   SETUP_MASTER="cd iec/src/foundation/scripts/ && source k8s_master.sh ${K8S_MASTER_IP}"
51   sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${INSTALL_SOFTWARE}
52   sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${SETUP_MASTER} | tee ${LOG_FILE}
53
54   TOKEN_ID=$(grep "\--token " ./${LOG_FILE} | cut -f5 -d' ')
55   TOKEN_CA_SH256=$(grep "\--discovery-token-ca-cert-hash " ./${LOG_FILE} |cut -f2 -d':')
56
57   KUBEADM_JOIN_CMD="kubeadm join ${K8S_MASTER_IP}:6443 --token ${TOKEN_ID} --discovery-token-ca-cert-hash sha256:${TOKEN_CA_SH256}"
58
59   #Automatic deploy the K8s environments on each worker-node
60   SETUP_WORKER="cd iec/src/foundation/scripts/ && source k8s_worker.sh"
61
62   for worker in "${K8S_WORKER_GROUP[@]}"
63   do
64     ip_addr="$(cut -d',' -f1 <<<${worker})"
65     passwd="$(cut -d',' -f2 <<<${worker})"
66     echo "Install & Deploy on ${ip_addr}. password:${passwd}"
67
68     sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} ${INSTALL_SOFTWARE}
69     sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} "echo \"sudo ${KUBEADM_JOIN_CMD}\" >> ./iec/src/foundation/scripts/k8s_worker.sh"
70     sleep 2
71     sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} "swapon -a"
72     sshpass -p ${passwd} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${ip_addr} ${SETUP_WORKER}
73
74   done
75
76
77   #Deploy etcd & CNI from master node
78   SETUP_CNI="cd iec/src/foundation/scripts && source setup-cni.sh $CLUSTER_IP $POD_NETWORK_CIDR $CNI_TYPE"
79   sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${SETUP_CNI}
80   SETUP_HELM="cd iec/src/foundation/scripts && source helm.sh"
81   sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${SETUP_HELM}
82
83 }
84
85 #
86 # Check the K8s environments
87 #
88 check_k8s_status(){
89   set -o xtrace
90
91   VERIFY_K8S="cd iec/src/foundation/scripts/ && source nginx.sh"
92   sshpass -p ${K8S_MASTERPW} ssh -o StrictHostKeyChecking=no ${HOST_USER}@${K8S_MASTER_IP} ${VERIFY_K8S}
93 }
94
95 #
96 # print environments
97 #
98 printOption(){
99   echo "K8S_MASTER_IP:${K8S_MASTER_IP}"
100   echo "HOST_USER:${HOST_USER}"
101   echo "REPO_URL:${REPO_URL}"
102
103   echo "The number of K8s-Workers:${#K8S_WORKER_GROUP[@]}"
104   for worker in "${K8S_WORKER_GROUP[@]}"
105   do
106     ip_addr="$(cut -d',' -f1 <<<${worker})"
107     passwd="$(cut -d',' -f2 <<<${worker})"
108     echo "Install & Deploy on ${ip_addr}. password:${passwd}"
109   done
110
111   echo "KUBE_VERSION: ${KUBE_VERSION}"
112   echo "CNI_TPYE: ${CNI_TYPE}"
113   echo "CLUSTER_IP: ${CLUSTER_IP}"
114   echo "POD_NETWORK_CIDR: ${POD_NETWORK_CIDR}"
115 }
116
117 # Read the configuration file
118 source config
119
120 rm -f "${LOG_FILE}"
121
122 ARGS=`getopt -a -o C:k:c:h -l cni:,kube:,cni-ver:,help -- "$@"`
123 eval set -- "${ARGS}"
124 while true
125 do
126         case "$1" in
127         -C|--cni)
128                 CNI_TYPE="$2"
129                 echo "CNI_TYPE=$2"
130                 shift
131                 ;;
132         -k|--kube)
133                 echo "This is config kube version:$2"
134                 KUBE_VERSION="$2"
135                 shift
136                 ;;
137         -c|--cni-ver)
138                 echo "This is config cni version:$2"
139                 CNI_VERSION="$2"
140                 shift
141                 ;;
142         -h|--help)
143                 echo "this is help case"
144                 display_help
145                 ;;
146         --)
147                 printOption
148                 shift
149                 break
150                 ;;
151         esac
152 shift
153 done
154
155 deploy_k8s
156
157 sleep 20
158
159 check_k8s_status