fe5d57879ddf13623005211a06067a64f335d6f5
[releng.git] / jjb / cperf / cperf-robot-netvirt-csit.sh
1 #!/usr/bin/env bash
2
3 set -o errexit
4 set -o nounset
5 set -o pipefail
6
7 if [[ ! -z ${SKIP_CSIT+x} && "$SKIP_CSIT" == "True" ]]; then
8   echo "Skipping csit run"
9   exit 0
10 fi
11
12 if [ "$OS_VERSION" == 'master' ]; then
13   FULL_OS_VER='master'
14 else
15   FULL_OS_VER="stable/${OS_VERSION}"
16 fi
17
18 if [ "$ODL_BRANCH" == 'master' ]; then
19   ODL_STREAM='neon'
20 else
21   ODL_STREAM=${ODL_BRANCH#"stable/"}
22 fi
23
24 echo "ODL Stream set: ${ODL_STREAM} and OS Version is ${FULL_OS_VER}"
25
26 sudo rm -rf releng
27 git clone https://gerrit.opnfv.org/gerrit/releng.git
28 REL_PATH='releng/jjb/cperf'
29
30 # NOTE: sourcing overcloudrc unsets any variable with OS_ prefix
31 source ${WORKSPACE}/overcloudrc
32 # note SDN_CONTROLLER_IP is set in overcloudrc, which is the VIP
33 # for admin/public network (since we are running single network deployment)
34
35 NUM_CONTROL_NODES=$(python ${REL_PATH}/parse-node-yaml.py num_nodes --file $NODE_FILE_PATH)
36 NUM_COMPUTE_NODES=$(python ${REL_PATH}/parse-node-yaml.py num_nodes --node-type compute --file $NODE_FILE_PATH)
37
38 echo "Number of Control nodes found: ${NUM_CONTROL_NODES}"
39 echo "Number of Compute nodes found: ${NUM_COMPUTE_NODES}"
40
41 # Only 1 combo or ctrl node is specified, even for OS HA deployments
42 # Currently supported combinations are:
43 # 0cmb-1ctl-2cmp
44 # 1cmb-0ctl-0cmp
45 # 1cmb-0ctl-1cmp
46 if [ "$NUM_COMPUTE_NODES" -eq 0 ]; then
47   OPENSTACK_TOPO="1cmb-0ctl-0cmp"
48 else
49   OPENSTACK_TOPO="0cmb-1ctl-2cmp"
50 fi
51
52 idx=1
53 EXTRA_ROBOT_ARGS=""
54 for idx in `seq 1 $NUM_CONTROL_NODES`; do
55   CONTROLLER_IP=$(python ${REL_PATH}/parse-node-yaml.py get_value -k address --node-number ${idx} --file $NODE_FILE_PATH)
56   EXTRA_ROBOT_ARGS+=" -v ODL_SYSTEM_${idx}_IP:${CONTROLLER_IP} \
57                       -v OS_CONTROL_NODE_${idx}_IP:${CONTROLLER_IP} \
58                       -v ODL_SYSTEM_${idx}_IP:${CONTROLLER_IP} \
59                       -v HA_PROXY_${idx}_IP:${SDN_CONTROLLER_IP}"
60 done
61
62 # In all-in-one these Compute IPs still need to be passed to robot
63 if [ "$NUM_COMPUTE_NODES" -eq 0 ]; then
64   EXTRA_ROBOT_ARGS+=" -v OS_COMPUTE_1_IP:'' -v OS_COMPUTE_2_IP:''"
65 else
66   idx=1
67   for idx in `seq 1 $NUM_COMPUTE_NODES`; do
68     COMPUTE_IP=$(python ${REL_PATH}/parse-node-yaml.py get_value -k address --node-type compute --node-number ${idx} --file $NODE_FILE_PATH)
69     EXTRA_ROBOT_ARGS+=" -v OS_COMPUTE_${idx}_IP:${COMPUTE_IP}"
70   done
71 fi
72
73 CONTROLLER_1_IP=$(python ${REL_PATH}/parse-node-yaml.py get_value -k address --node-number 1 --file $NODE_FILE_PATH)
74
75 if [ "$ODL_CONTAINERIZED" == 'false' ]; then
76   EXTRA_ROBOT_ARGS+=" -v NODE_KARAF_COUNT_COMMAND:'ps axf | grep org.apache.karaf | grep -v grep | wc -l || echo 0' \
77                       -v NODE_START_COMMAND:'sudo systemctl start opendaylight_api' \
78                       -v NODE_KILL_COMMAND:'sudo systemctl stop opendaylight_api' \
79                       -v NODE_STOP_COMMAND:'sudo systemctl stop opendaylight_api' \
80                       -v NODE_FREEZE_COMMAND:'sudo systemctl stop opendaylight_api' "
81 else
82   EXTRA_ROBOT_ARGS+=" -v NODE_KARAF_COUNT_COMMAND:'sudo docker ps | grep opendaylight_api | wc -l || echo 0' \
83                       -v NODE_START_COMMAND:'sudo docker start opendaylight_api' \
84                       -v NODE_KILL_COMMAND:'sudo docker stop opendaylight_api' \
85                       -v NODE_STOP_COMMAND:'sudo docker stop opendaylight_api' \
86                       -v NODE_FREEZE_COMMAND:'sudo docker stop opendaylight_api' "
87 fi
88
89 # FIXME(trozet) remove this once it is fixed in csit
90 # Upload glance image into openstack
91 wget -O ${WORKSPACE}/cirros-0.3.5-x86_64-disk.img http://download.cirros-cloud.net/0.3.5/cirros-0.3.5-x86_64-disk.img
92 export ANSIBLE_HOST_KEY_CHECKING=False
93 ansible-playbook -i ${CONTROLLER_1_IP}, -u heat-admin --key-file ${WORKSPACE}/id_rsa ${REL_PATH}/cirros-upload.yaml.ansible --ssh-extra-args='-o StrictHostKeyChecking=no  -o UserKnownHostsFile=/dev/null' -vvv
94
95 LOGS_LOCATION=/tmp/robot_results
96
97 robot_cmd="pybot \
98   --removekeywords wuks \
99   --xunit robotxunit.xml \
100   --name 'CSIT' \
101   -e exclude \
102   -d $LOGS_LOCATION \
103   -v BUNDLEFOLDER:/opt/opendaylight \
104   -v CONTROLLER_USER:heat-admin \
105   -v DEFAULT_LINUX_PROMPT:\$ \
106   -v DEFAULT_LINUX_PROMPT_STRICT:]\$ \
107   -v DEFAULT_USER:heat-admin \
108   -v DEVSTACK_DEPLOY_PATH:/tmp \
109   -v EXTERNAL_GATEWAY:$CONTROLLER_1_IP \
110   -v EXTERNAL_PNF:$CONTROLLER_1_IP \
111   -v EXTERNAL_SUBNET:192.0.2.0/24 \
112   -v EXTERNAL_SUBNET_ALLOCATION_POOL:start=192.0.2.100,end=192.0.2.200 \
113   -v EXTERNAL_INTERNET_ADDR:$CONTROLLER_1_IP  \
114   -v HA_PROXY_IP:$SDN_CONTROLLER_IP \
115   -v NUM_ODL_SYSTEM:$NUM_CONTROL_NODES \
116   -v NUM_OS_SYSTEM:$(($NUM_CONTROL_NODES + $NUM_COMPUTE_NODES)) \
117   -v NUM_TOOLS_SYSTEM:0 \
118   -v ODL_SNAT_MODE:conntrack \
119   -v ODL_STREAM:$ODL_STREAM \
120   -v ODL_SYSTEM_IP:$CONTROLLER_1_IP \
121   -v OS_CONTROL_NODE_IP:$CONTROLLER_1_IP \
122   -v OPENSTACK_BRANCH:$FULL_OS_VER \
123   -v OPENSTACK_TOPO:$OPENSTACK_TOPO \
124   -v OS_USER:heat-admin \
125   -v ODL_ENABLE_L3_FWD:yes \
126   -v ODL_SYSTEM_USER:heat-admin \
127   -v ODL_SYSTEM_PROMPT:\$ \
128   -v PRE_CLEAN_OPENSTACK_ALL:True \
129   -v PUBLIC_PHYSICAL_NETWORK:datacentre \
130   -v RESTCONFPORT:8081 \
131   -v ODL_RESTCONF_USER:admin \
132   -v ODL_RESTCONF_PASSWORD:$SDN_CONTROLLER_PASSWORD \
133   -v KARAF_PROMPT_LOGIN:'opendaylight-user' \
134   -v KARAF_PROMPT:'opendaylight-user.*root.*>' \
135   -v SECURITY_GROUP_MODE:stateful \
136   -v USER:heat-admin \
137   -v USER_HOME:\$HOME \
138   -v TOOLS_SYSTEM_IP:'' \
139   -v NODE_ROLE_INDEX_START:0 \
140   -v WORKSPACE:/tmp  \
141   $EXTRA_ROBOT_ARGS \
142   -v of_port:6653 "
143
144 SUITE_HOME='/home/opnfv/repos/odl_test/csit/suites'
145
146 # Disabled suites
147 #
148 # ${SUITE_HOME}/openstack/connectivity/live_migration.robot
149 # Live migration will not work unless we use a shared storage backend like
150 # Ceph which we do not currently use with CSIT images
151 #
152 # ${SUITE_HOME}/netvirt/vpnservice/vpn_basic_ipv6.robot
153 # This suite fails with an error indicating the connection was closed
154 # to the overcloud control node:
155 # https://build.opnfv.org/ci/job/cperf-apex-csit-master/104/consoleFull
156 #
157 # Minimize HA CSIT as it does not pass all suites
158 if [ "$NUM_CONTROL_NODES" -eq 3 ]; then
159   suites="${SUITE_HOME}/openstack/connectivity/l2.robot \
160           ${SUITE_HOME}/openstack/connectivity/l3.robot"
161 else
162   suites="${SUITE_HOME}/openstack/connectivity/l2.robot \
163           ${SUITE_HOME}/openstack/connectivity/l3.robot \
164           ${SUITE_HOME}/openstack/connectivity/external_network.robot \
165           ${SUITE_HOME}/openstack/connectivity/security_group.robot \
166           ${SUITE_HOME}/openstack/securitygroup/neutron_security_group.robot \
167           ${SUITE_HOME}/openstack/securitygroup/security_group_l3bcast.robot \
168           ${SUITE_HOME}/netvirt/vpnservice/vpn_basic.robot \
169           ${SUITE_HOME}/netvirt/elan/elan.robot \
170           ${SUITE_HOME}/netvirt/vpnservice/arp_learning.robot \
171           ${SUITE_HOME}/netvirt/l2l3_gatewaymac_arp.robot \
172           ${SUITE_HOME}/integration/Create_JVM_Plots.robot"
173 fi
174
175 echo "Robot command set: ${robot_cmd}"
176 echo "Running robot..."
177 docker run -i --net=host \
178   -v ${LOGS_LOCATION}:${LOGS_LOCATION} \
179   -v ${WORKSPACE}/id_rsa:/tmp/id_rsa \
180   -v ${WORKSPACE}/overcloudrc:/tmp/overcloudrc \
181   opnfv/cperf:$DOCKER_TAG \
182   /bin/bash -c "source /tmp/overcloudrc; mkdir -p \$HOME/.ssh; cp /tmp/id_rsa \$HOME/.ssh; \
183   cd /home/opnfv/repos/odl_test/ && git pull origin master; \
184   pip install odltools; \
185   ${robot_cmd} ${suites};"
186
187 echo "Running post CSIT clean"
188 ansible-playbook -i ${CONTROLLER_1_IP}, -u heat-admin --key-file ${WORKSPACE}/id_rsa ${REL_PATH}/csit-clean.yaml.ansible --ssh-extra-args='-o StrictHostKeyChecking=no  -o UserKnownHostsFile=/dev/null' -vvv