Decommission java and docker manifests
[integration.git] / deployment / heat / onap-rke / scripts / deploy.sh
1 #!/bin/bash
2 #
3 # Copyright 2018 Huawei Technologies Co., Ltd.
4 #
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
8 #
9 #     http://www.apache.org/licenses/LICENSE-2.0
10 #
11
12 stack_name="onap"
13 portal_hostname="portal.api.simpledemo.onap.org"
14 full_deletion=false
15
16 # default branch for cloning integration repo
17 integration_gerrit_branch=$(git rev-parse --abbrev-ref HEAD)
18 # default branch for cloning oom repo
19 # by default, assume oom branch is the same as integration branch
20 oom_gerrit_branch=$(git rev-parse --abbrev-ref HEAD)
21
22 if [ -z "$WORKSPACE" ]; then
23     export WORKSPACE=$(git rev-parse --show-toplevel)
24 fi
25
26
27 usage() {
28     echo "Usage: $0 [ -n <number of VMs {2-15}> ][ -s <stack name> ][ -d <domain> ][ -i <integration_branch> ][ -o <oom_branch> ][ -r ][ -q ] <env>" 1>&2;
29
30     echo "n:    Number of worker VMs to deploy. This number must be between 2 and 15." 1>&2;
31     echo "s:    Stack name. This name will be used for naming of resources." 1>&2;
32     echo "d:    Base domain name to be used in portal UI URLs." 1>&2;
33     echo "i:    Branch of integration repo to clone." 1>&2;
34     echo "o:    Branch of oom repo to clone." 1>&2;
35     echo "r:    Delete all ONAP resource within tenant." 1>&2;
36     echo "q:    Quiet delete of all ONAP resources within tenant." 1>&2;
37
38     exit 1;
39 }
40
41
42 while getopts ":n:s:d:i:o:rq" o; do
43     case "${o}" in
44         n)
45             if [[ ${OPTARG} =~ ^[0-9]+$ ]];then
46                 if [ ${OPTARG} -ge 2 -a ${OPTARG} -le 15 ]; then
47                     vm_num=${OPTARG}
48                 else
49                     usage
50                 fi
51             else
52                 usage
53             fi
54             ;;
55         s)
56             if [[ ! ${OPTARG} =~ ^[0-9]+$ ]];then
57                 stack_name=${OPTARG}
58             else
59                 usage
60             fi
61             ;;
62         d)
63             if [[ ! ${OPTARG} =~ ^[0-9]+$ ]];then
64                 portal_hostname=${OPTARG}
65             else
66                 usage
67             fi
68             ;;
69         i)
70             integration_gerrit_branch=${OPTARG}
71             ;;
72         o)
73             oom_gerrit_branch=${OPTARG}
74             ;;
75         r)
76             echo "The following command will delete all information relating to onap within your enviroment"
77             read -p "Are you certain this is what you want? (type y to confirm):" answer
78
79             if [ $answer = "y" ] || [ $answer = "Y" ] || [ $answer = "yes" ] || [ $answer = "Yes"]; then
80                 echo "This may delete the work of other colleages within the same enviroment"
81                 read -p "Are you certain this is what you want? (type y to confirm):" answer2
82
83                 if [ $answer2 = "y" ] || [ $answer2 = "Y" ] || [ $answer2 = "yes" ] || [ $answer2 = "Yes"]; then
84                     full_deletion=true
85                 else
86                     echo "Ending program"
87                     exit 1
88                 fi
89             else
90                 echo "Ending program"
91                 exit 1
92             fi
93             ;;
94         q)
95             full_deletion=true
96             ;;
97         *)
98             usage
99             ;;
100     esac
101 done
102 shift $((OPTIND-1))
103
104 if [ "$#" -ne 1 ]; then
105    usage
106 fi
107
108 ENV_FILE=$1
109
110 if [ ! -f $ENV_FILE ];then
111     echo ENV file does not exist or was not given
112     exit 1
113 fi
114
115 set -x
116
117 SSH_KEY=~/.ssh/onap_key
118
119 if ! hash openstack jq java
120 then
121     echo "ERROR: Required commands not found; please install openstack CLI, jq, java."
122     exit 2
123 fi
124
125 SO_ENCRYPTION_KEY=aa3871669d893c7fb8abbcda31b88b4f
126 export OS_PASSWORD_ENCRYPTED_FOR_ROBOT=$(echo -n "$OS_PASSWORD" | openssl aes-128-ecb -e -K "$SO_ENCRYPTION_KEY" -nosalt | xxd -c 256 -p)
127
128 #Use new encryption method
129 pushd $WORKSPACE/deployment/heat/onap-rke/scripts
130 javac Crypto.java
131 #SO_ENCRYPTION_KEY=aa3871669d893c7fb8abbcda31b88b4f
132 export OS_PASSWORD_ENCRYPTED=$(java Crypto "$OS_PASSWORD" "$SO_ENCRYPTION_KEY")
133 popd
134
135 for n in $(seq 1 5); do
136     if [ $full_deletion = true ] ; then
137         $WORKSPACE/deployment/heat/onap-rke/scripts/teardown-onap.sh -n $stack_name -q
138     else
139         $WORKSPACE/deployment/heat/onap-rke/scripts/teardown-onap.sh -n $stack_name
140     fi
141
142     cd $WORKSPACE/deployment/heat/onap-rke
143     envsubst < $ENV_FILE > $ENV_FILE~
144     if [ -z "$vm_num" ]; then
145         cp onap-oom.yaml onap-oom.yaml~
146     else
147         ./scripts/gen-onap-oom-yaml.sh $vm_num > onap-oom.yaml~
148     fi
149
150     if ! openstack stack create -t ./onap-oom.yaml~ -e $ENV_FILE~ $stack_name --parameter integration_gerrit_branch=$integration_gerrit_branch --parameter oom_gerrit_branch=$oom_gerrit_branch -parameter portal_hostname=$portal_hostname; then
151         break
152     fi
153
154     while [ "CREATE_IN_PROGRESS" == "$(openstack stack show -c stack_status -f value $stack_name)" ]; do
155         sleep 20
156     done
157
158     STATUS=$(openstack stack show -c stack_status -f value $stack_name)
159     echo $STATUS
160     if [ "CREATE_COMPLETE" != "$STATUS" ]; then
161         break
162     fi
163
164     for i in $(seq 1 30); do
165         sleep 30
166         NFS_IP=$(openstack stack output show $stack_name nfs_vm_ip -c output_value -f value)
167         K8S_IP=$(openstack stack output show $stack_name k8s_01_vm_ip -c output_value -f value)
168         timeout 1 ping -c 1 "$NFS_IP" && break
169     done
170
171     timeout 1 ping -c 1 "$NFS_IP" && break
172
173     echo Error: OpenStack infrastructure issue: unable to reach NFS server "$NFS_IP"
174     sleep 10
175 done
176
177 if ! timeout 1 ping -c 1 "$NFS_IP"; then
178     exit 2
179 fi
180
181 # wait until all k8s VMs have fully initialized
182 for VM_NAME in $(grep _vm: ./onap-oom.yaml~ | cut -d: -f1); do
183     echo $VM_NAME
184     VM_IP=$(openstack stack output show $stack_name ${VM_NAME}_ip -c output_value -f value)
185     ssh-keygen -R $VM_IP
186     until ssh -o StrictHostKeychecking=no -i $SSH_KEY ubuntu@$VM_IP ls -ad /dockerdata-nfs/.git; do
187         sleep 1m
188     done
189 done
190
191 cat > ./cluster.yml~ <<EOF
192 # GENERATED for $stack_name
193 nodes:
194 EOF
195
196 for VM_NAME in $(grep -E 'k8s_.+_vm:' ./onap-oom.yaml~ | cut -d: -f1); do
197     echo $VM_NAME
198     VM_IP=$(openstack stack output show $stack_name ${VM_NAME}_ip -c output_value -f value)
199     VM_PRIVATE_IP=$(openstack stack output show $stack_name ${VM_NAME}_private_ip -c output_value -f value)
200     VM_HOSTNAME=$stack_name-$(echo $VM_NAME | tr '_' '-' | cut -d- -f1,2)
201     cat >> ./cluster.yml~ <<EOF
202 - address: $VM_IP
203   port: "22"
204   internal_address: $VM_PRIVATE_IP
205   role:
206   - worker
207   hostname_override: "$VM_HOSTNAME"
208   user: ubuntu
209   ssh_key_path: "$SSH_KEY"
210 EOF
211 done
212
213 for VM_NAME in $(grep -E 'orch_.+_vm:' ./onap-oom.yaml~ | cut -d: -f1); do
214     echo $VM_NAME
215     VM_IP=$(openstack stack output show $stack_name ${VM_NAME}_ip -c output_value -f value)
216     VM_PRIVATE_IP=$(openstack stack output show $stack_name ${VM_NAME}_private_ip -c output_value -f value)
217     VM_HOSTNAME=$stack_name-$(echo $VM_NAME | tr '_' '-' | cut -d- -f1,2)
218     cat >> ./cluster.yml~ <<EOF
219 - address: $VM_IP
220   port: "22"
221   internal_address: $VM_PRIVATE_IP
222   role:
223   - controlplane
224   - etcd
225   hostname_override: "$VM_HOSTNAME"
226   user: ubuntu
227   ssh_key_path: "$SSH_KEY"
228 EOF
229 done
230
231 DOCKER_PROXY=$(openstack stack output show $stack_name docker_proxy -c output_value -f value)
232
233 cat >> ./cluster.yml~ <<EOF
234 services:
235   kube-api:
236     service_cluster_ip_range: 10.43.0.0/16
237     pod_security_policy: false
238     always_pull_images: false
239   kube-controller:
240     cluster_cidr: 10.42.0.0/16
241     service_cluster_ip_range: 10.43.0.0/16
242   kubelet:
243     cluster_domain: cluster.local
244     cluster_dns_server: 10.43.0.10
245     fail_swap_on: false
246 network:
247   plugin: canal
248 authentication:
249   strategy: x509
250 ssh_key_path: "$SSH_KEY"
251 ssh_agent_auth: false
252 authorization:
253   mode: rbac
254 ignore_docker_version: false
255 kubernetes_version: "v1.13.5-rancher1-2"
256 private_registries:
257 - url: $DOCKER_PROXY
258   is_default: true
259 cluster_name: "$stack_name"
260 restore:
261   restore: false
262   snapshot_name: ""
263 EOF
264
265 rm -rf ./target
266 mkdir -p ./target
267 cp ./cluster.yml~ ./target/cluster.yml
268 pushd ./target
269
270 wget https://github.com/rancher/rke/releases/download/v0.2.1/rke_linux-amd64
271 mv rke_linux-amd64 rke
272 chmod +x rke
273
274 # spin up k8s with RKE
275 until ./rke up; do
276     sleep 1m
277     ./rke remove
278 done
279
280 scp -i $SSH_KEY ./kube_config_cluster.yml root@$NFS_IP:/root/.kube/config
281 popd
282
283
284 sleep 2m
285 ssh -o StrictHostKeychecking=no -i $SSH_KEY ubuntu@$NFS_IP "sed -u '/Cloud-init.*finished/q' <(tail -n+0 -f /var/log/cloud-init-output.log)"
286
287 exit 0