Do not use hardcoded kubespray version
[icn.git] / deploy / kud / kud_bm_launch.sh
1 #!/usr/bin/env bash
2 set -eu -o pipefail
3
4 LIBDIR="$(dirname "$(dirname "$PWD")")"
5
6 source $LIBDIR/env/lib/common.sh
7
8 function get_kud_repo {
9     if [ -d $DOWNLOAD_PATH/multicloud-k8s ]; then
10         rm -rf $DOWNLOAD_PATH/multicloud-k8s
11     fi
12
13     mkdir -p $DOWNLOAD_PATH
14     pushd $DOWNLOAD_PATH
15     if [ "$1" == "v1" ] ; then
16         export KUD_ADDONS=multus
17         git clone https://github.com/onap/multicloud-k8s.git
18     else
19         git clone https://github.com/onap/multicloud-k8s.git
20     fi
21     popd
22 }
23
24 function set_ssh_key {
25     if ! [ -f ~/.ssh/id_rsa ]; then
26         echo "Generating rsa key for this host"
27         ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa <&-
28     fi
29
30     if ! grep -qF "$(ssh-keygen -y -f ~/.ssh/id_rsa)" ~/.ssh/authorized_keys; then
31         ssh-keygen -y -f ~/.ssh/id_rsa >> ~/.ssh/authorized_keys
32     fi
33
34     chmod og-wx ~/.ssh/authorized_keys
35 }
36
37 function set_bm_kud {
38     pushd $DOWNLOAD_PATH/multicloud-k8s/kud/hosting_providers/vagrant/inventory
39     HOST_IP=${HOST_IP:-$(hostname -I | cut -d ' ' -f 1)}
40     if [ "$1" == "minimal" ] ; then
41         cat <<EOL > hosts.ini
42 [all]
43 $HOSTNAME ansible_ssh_host=${HOST_IP} ansible_ssh_port=22
44
45 [kube-master]
46 $HOSTNAME
47
48 [kube-node]
49 $HOSTNAME
50
51 [etcd]
52 $HOSTNAME
53
54 [k8s-cluster:children]
55 kube-node
56 kube-master
57 EOL
58     else
59         cat <<EOL > hosts.ini
60 [all]
61 $HOSTNAME ansible_ssh_host=${HOST_IP} ansible_ssh_port=22
62
63 [kube-master]
64 $HOSTNAME
65
66 [kube-node]
67 $HOSTNAME
68
69 [etcd]
70 $HOSTNAME
71
72 [ovn-central]
73 $HOSTNAME
74
75 [ovn-controller]
76 $HOSTNAME
77
78 [virtlet]
79 $HOSTNAME
80
81 [k8s-cluster:children]
82 kube-node
83 kube-master
84 EOL
85     fi
86     popd
87 }
88
89 function kud_install {
90     pushd $DOWNLOAD_PATH/multicloud-k8s/kud/hosting_providers/vagrant/
91     if [ "$1" == "all" -o "$1" == "vm" ]; then
92         sed -i -e 's/testing_enabled=${KUD_ENABLE_TESTS:-false}/testing_enabled=${KUD_ENABLE_TESTS:-true}/g' installer.sh
93     fi
94     if [ "$1" == "vm" ]; then
95         sed -i -e 's/^kube_pods_subnet.*/kube_pods_subnet: 172.21.64.0\/18/g' inventory/group_vars/k8s-cluster.yml
96     fi
97     ./installer.sh | tee kud_deploy.log
98
99     if [ "$1" == "bm" ]; then
100         for addon in ${KUD_ADDONS:-multus ovn4nfv nfd sriov qat cmk optane}; do
101             pushd $DOWNLOAD_PATH/multicloud-k8s/kud/tests/
102                 bash ${addon}.sh
103             popd
104         done
105     fi
106     popd
107 }
108
109 function kud_reset {
110     pushd $DOWNLOAD_PATH/multicloud-k8s/kud/hosting_providers/vagrant/
111     local version=$(grep "kubespray_version" ../../deployment_infra/playbooks/kud-vars.yml |
112         awk -F ': ' '{print $2}')
113     ansible-playbook -i inventory/hosts.ini /opt/kubespray-${version}/reset.yml \
114         --become --become-user=root -e reset_confirmation=yes
115     popd
116 }
117
118 function verifier {
119     APISERVER=$(kubectl config view --minify -o \
120                     jsonpath='{.clusters[0].cluster.server}')
121     TOKEN=$(kubectl get secret \
122         $(kubectl get serviceaccount default -o \
123         jsonpath='{.secrets[0].name}') -o jsonpath='{.data.token}' | \
124         base64 --decode )
125   call_api $APISERVER/api --header "Authorization: Bearer $TOKEN" --insecure
126 }
127
128 if [ "$1" == "reset" ] ; then
129     kud_reset
130     exit 0
131 fi
132
133 get_kud_repo $2
134 set_ssh_key
135 set_bm_kud $1
136 kud_install $1
137 verifier
138
139 exit 0