0a91b4ac4b1e5c7a56f5f5043a6bb7fac0782130
[joid.git] / ci / deploy.sh
1 #!/bin/bash
2
3 set -ex
4
5 #need to put mutiple cases here where decide this bundle to deploy by default use the odl bundle.
6 # Below parameters are the default and we can according the release
7
8 opnfvsdn=nosdn
9 opnfvtype=nonha
10 openstack=liberty
11 opnfvlab=default
12 opnfvrel=b
13 opnfvfeature=odl_l2
14 opnfvdistro=trusty
15 opnfvarch=amd64
16
17 read_config() {
18     opnfvrel=`grep release: deploy.yaml | cut -d ":" -f2`
19     openstack=`grep openstack: deploy.yaml | cut -d ":" -f2`
20     opnfvtype=`grep type: deploy.yaml | cut -d ":" -f2`
21     opnfvlab=`grep lab: deploy.yaml | cut -d ":" -f2`
22     opnfvsdn=`grep sdn: deploy.yaml | cut -d ":" -f2`
23 }
24
25 usage() { echo "Usage: $0 [-s <nosdn|odl|opencontrail>]
26                          [-t <nonha|ha|tip>] 
27                          [-o <juno|liberty>]
28                          [-l <default|intelpod5>]
29                          [-f <ipv6|dpdk|lxd|dvr>]
30                          [-d <trusty|xenial>]
31                          [-a <amd64>]
32                          [-r <a|b>]" 1>&2 exit 1; } 
33
34 while getopts ":s:t:o:l:h:r:f:d:a:" opt; do
35     case "${opt}" in
36         s)
37             opnfvsdn=${OPTARG}
38             ;;
39         t)
40             opnfvtype=${OPTARG}
41             ;;
42         o)
43             openstack=${OPTARG}
44             ;;
45         l)
46             opnfvlab=${OPTARG}
47             ;;
48         r)
49             opnfvrel=${OPTARG}
50             ;;
51         f)
52             opnfvfeature=${OPTARG}
53             ;;
54         d)
55             opnfvdistro=${OPTARG}
56             ;;
57         a)
58             opnfvarch=${OPTARG}
59             ;;
60         h)
61             usage
62             ;;
63         *)
64             ;;
65     esac
66 done
67
68 deploy_dep() {
69     sudo apt-add-repository ppa:juju/stable -y
70     sudo apt-get update
71     sudo apt-get install juju git juju-deployer -y
72     juju init -f
73     cp environments.yaml ~/.juju/
74 }
75
76 #by default maas creates two VMs in case of three more VM needed.
77 createresource() {
78     maas_ip=`grep " ip_address" deployment.yaml | cut -d " "  -f 10`
79     apikey=`grep maas-oauth: environments.yaml | cut -d "'" -f 2`
80     maas login maas http://${maas_ip}/MAAS/api/1.0 ${apikey}
81
82     nodeexist=`maas maas nodes list hostname=node3-control`
83
84     if [ $nodeexist != *node3* ]; then
85         sudo virt-install --connect qemu:///system --name node3-control --ram 8192 --vcpus 4 --disk size=120,format=qcow2,bus=virtio,io=native,pool=default --network bridge=virbr0,model=virtio --network bridge=virbr0,model=virtio --boot network,hd,menu=off --noautoconsole --vnc --print-xml | tee node3-control
86
87         sudo virt-install --connect qemu:///system --name node4-control --ram 8192 --vcpus 4 --disk size=120,format=qcow2,bus=virtio,io=native,pool=default --network bridge=virbr0,model=virtio --network bridge=virbr0,model=virtio --boot network,hd,menu=off --noautoconsole --vnc --print-xml | tee node4-control
88
89         node3controlmac=`grep  "mac address" node3-control | head -1 | cut -d "'" -f 2`
90         node4controlmac=`grep  "mac address" node4-control | head -1 | cut -d "'" -f 2`
91
92         sudo virsh -c qemu:///system define --file node3-control
93         sudo virsh -c qemu:///system define --file node4-control
94
95         controlnodeid=`maas maas nodes new autodetect_nodegroup='yes' name='node3-control' tags='control' hostname='node3-control' power_type='virsh' mac_addresses=$node3controlmac power_parameters_power_address='qemu+ssh://'$USER'@192.168.122.1/system' architecture='amd64/generic' power_parameters_power_id='node3-control' | grep system_id | cut -d '"' -f 4 `
96
97         maas maas tag update-nodes control add=$controlnodeid
98
99         controlnodeid=`maas maas nodes new autodetect_nodegroup='yes' name='node4-control' tags='control' hostname='node4-control' power_type='virsh' mac_addresses=$node4controlmac power_parameters_power_address='qemu+ssh://'$USER'@192.168.122.1/system' architecture='amd64/generic' power_parameters_power_id='node4-control' | grep system_id | cut -d '"' -f 4 `
100
101         maas maas tag update-nodes control add=$controlnodeid
102
103     fi
104 }
105
106 #copy the files and create extra resources needed for HA deployment
107 # in case of default VM labs.
108 deploy() {
109     #copy the script which needs to get deployed as part of ofnfv release
110     echo "...... deploying now ......"
111     echo "   " >> environments.yaml
112     echo "        enable-os-refresh-update: false" >> environments.yaml
113     echo "        enable-os-upgrade: false" >> environments.yaml
114     echo "        admin-secret: admin" >> environments.yaml
115     echo "        default-series: $opnfvdistro" >> environments.yaml
116
117     cp environments.yaml ~/.juju/
118
119     if [[ "$opnfvtype" = "ha" && "$opnfvlab" = "default" ]]; then
120         createresource
121     fi
122
123     #bootstrap the node
124     ./00-bootstrap.sh
125
126     #case default deploy the opnfv platform:
127     ./01-deploybundle.sh $opnfvtype $openstack $opnfvlab $opnfvsdn $opnfvfeature $opnfvdistro
128 }
129
130 #check whether charms are still executing the code even juju-deployer says installed.
131 check_status() {
132     retval=0
133     timeoutiter=0
134     while [ $retval -eq 0 ]; do
135        sleep 30
136        juju status > status.txt 
137        if [ "$(grep -c "executing" status.txt )" -ge 1 ]; then
138            echo " still executing the reltionship within charms ..."
139            if [ $timeoutiter -ge 60 ]; then
140                retval=1
141            fi
142            timeoutiter=$((timeoutiter+1))
143        else
144            retval=1
145        fi
146     done
147     status=`juju action do heat/0 domain-setup`
148     echo $status
149     echo "...... deployment finishing ......."
150 }
151
152 #create config RC file to consume by various tests.
153 configOpenrc()
154 {
155     echo  "  " > ./cloud/admin-openrc
156     echo  "export OS_USERNAME=$1" >> ./cloud/admin-openrc 
157     echo  "export OS_PASSWORD=$2" >> ./cloud/admin-openrc
158     echo  "export OS_TENANT_NAME=$3" >> ./cloud/admin-openrc
159     echo  "export OS_AUTH_URL=$4" >> ./cloud/admin-openrc
160     echo  "export OS_REGION_NAME=$5" >> ./cloud/admin-openrc
161  }
162
163 #to get the address of a service using juju
164 unitAddress()
165 {
166     juju status | python -c "import yaml; import sys; print yaml.load(sys.stdin)[\"services\"][\"$1\"][\"units\"][\"$1/$2\"][\"public-address\"]" 2> /dev/null
167 }
168
169 createopenrc()
170 {
171     if [ "$opnfvsdn" == "onos" ]; then
172         sh onos/juju_test_prepare.sh "$opnfvlab"
173         check_status
174     fi
175
176     mkdir -m 0700 -p cloud
177
178     controller_address=$(unitAddress keystone 0)
179     configOpenrc admin openstack admin http://$controller_address:5000/v2.0 Canonical 
180     chmod 0600 cloud/admin-openrc
181 }
182
183 if [ "$#" -eq 0 ]; then
184   echo "This installtion will use default options" 
185   #read_config
186 fi
187
188 echo "...... deployment started ......"
189 #deploy_dep
190 deploy
191 check_status
192 echo "...... deployment finished  ......."
193
194 echo "...... creating OpenRc file for consuming by various user ......."
195
196 createopenrc
197
198 echo "...... finished  ......."
199
200