Merge "Update global haproxy to match OOO"
[releng/builder.git] / jjb / integration / integration-deploy-openstack-run-test.sh
index 2185347065db91a4015751979698b66d11007244..4f211e022e43cd04836cd2933dcfdb289e9c7e88 100644 (file)
@@ -14,6 +14,8 @@ PYTHON="${ROBOT_VENV}/bin/python"
 SSH="ssh -t -t"
 ADMIN_PASSWORD="admin"
 OPENSTACK_MASTER_CLIENTS_VERSION="queens"
+#Size of the partition to /opt/stack in control and compute nodes
+TMPFS_SIZE=2G
 
 # TODO: remove this work to run changes.py if/when it's moved higher up to be visible at the Robot level
 printf "\nshowing recent changes that made it into the distribution used by this job:\n"
@@ -108,10 +110,6 @@ function install_openstack_clients_in_robot_vm() {
 function install_rdo_release() {
     local ip=$1
     case ${OPENSTACK_BRANCH} in
-       *pike*)
-          ${SSH} ${ip} "sudo yum install -y https://repos.fedorapeople.org/repos/openstack/openstack-pike/rdo-release-pike-1.noarch.rpm"
-          ;;
-
        *queens*)
           ${SSH} ${ip} "sudo yum install -y https://repos.fedorapeople.org/repos/openstack/openstack-queens/rdo-release-queens-1.noarch.rpm"
           ;;
@@ -315,7 +313,13 @@ minimize_polling=True
 physical_network_mtus = ${PUBLIC_PHYSICAL_NETWORK}:1400
 path_mtu = 1458
 EOF
-
+    if [ "${ENABLE_GRE_TYPE_DRIVERS}" == "yes" ]; then
+        cat >> ${local_conf_file_name} << EOF
+type_drivers = local,flat,vlan,gre,vxlan
+[ml2_type_gre]
+tunnel_id_ranges = 1:1000
+EOF
+    fi
     if [ "${ENABLE_NETWORKING_L2GW}" == "yes" ]; then
         cat >> ${local_conf_file_name} << EOF
 
@@ -442,22 +446,26 @@ EOF
 } # create_compute_node_local_conf()
 
 function configure_haproxy_for_neutron_requests() {
-    MGRIP=$1
+    local -r haproxy_ip=$1
     # shellcheck disable=SC2206
-    ODL_IPS=(${2//,/ })
+    local -r odl_ips=(${2//,/ })
 
     cat > ${WORKSPACE}/install_ha_proxy.sh<< EOF
 sudo systemctl stop firewalld
 sudo yum -y install policycoreutils-python haproxy
 EOF
 
-cat > ${WORKSPACE}/haproxy.cfg << EOF
+    cat > ${WORKSPACE}/haproxy.cfg << EOF
 global
   daemon
   group  haproxy
   log  /dev/log local0
   maxconn  20480
   pidfile  /tmp/haproxy.pid
+  ssl-default-bind-ciphers  !SSLv2:kEECDH:kRSA:kEDH:kPSK:+3DES:!aNULL:!eNULL:!MD5:!EXP:!RC4:!SEED:!IDEA:!DES
+  ssl-default-bind-options  no-sslv3 no-tlsv10
+  stats  socket /var/lib/haproxy/stats mode 600 level user
+  stats  timeout 2m
   user  haproxy
 
 defaults
@@ -466,35 +474,44 @@ defaults
   mode  tcp
   retries  3
   timeout  http-request 10s
-  timeout  queue 1m
+  timeout  queue 2m
   timeout  connect 10s
-  timeout  client 1m
-  timeout  server 1m
+  timeout  client 2m
+  timeout  server 2m
   timeout  check 10s
 
 listen opendaylight
-  bind ${MGRIP}:8080
-  balance source
+  bind ${haproxy_ip}:8181 transparent
+  mode http
+  http-request set-header X-Forwarded-Proto https if { ssl_fc }
+  http-request set-header X-Forwarded-Proto http if !{ ssl_fc }
+  option httpchk GET /diagstatus
+  option httplog
+EOF
 
-listen opendaylight_rest
-  bind ${MGRIP}:8181
-  balance source
+    odlindex=1
+    for odlip in ${odl_ips[*]}; do
+        echo "  server opendaylight-rest-${odlindex} ${odlip}:8181 check fall 5 inter 2000 rise 2" >> ${WORKSPACE}/haproxy.cfg
+        odlindex=$((odlindex+1))
+    done
 
-listen opendaylight_websocket
-  bind ${MGRIP}:8185
-  balance source
+    cat >> ${WORKSPACE}/haproxy.cfg << EOF
 
+listen opendaylight_ws
+  bind ${haproxy_ip}:8185 transparent
+  mode http
+  timeout connect 5s
+  timeout client 25s
+  timeout server 25s
+  timeout tunnel 3600s
 EOF
 
     odlindex=1
-    for odlip in ${ODL_IPS[*]}; do
-        sed -i "/listen opendaylight$/a server controller-${odlindex} ${odlip}:8080 check fall 5 inter 2000 rise 2" ${WORKSPACE}/haproxy.cfg
-        sed -i "/listen opendaylight_rest$/a server controller-rest-${odlindex} ${odlip}:8181 check fall 5 inter 2000 rise 2" ${WORKSPACE}/haproxy.cfg
-        sed -i "/listen opendaylight_websocket$/a server controller-websocket-${odlindex} ${odlip}:8185 check fall 5 inter 2000 rise 2" ${WORKSPACE}/haproxy.cfg
+    for odlip in ${odl_ips[*]}; do
+        echo "  server opendaylight-ws-${odlindex} ${odlip}:8185 check fall 5 inter 2000 rise 2" >> ${WORKSPACE}/haproxy.cfg
         odlindex=$((odlindex+1))
     done
 
-
     echo "Dump haproxy.cfg"
     cat ${WORKSPACE}/haproxy.cfg
 
@@ -509,11 +526,11 @@ sudo systemctl status haproxy
 true
 EOF
 
-    scp ${WORKSPACE}/install_ha_proxy.sh ${MGRIP}:/tmp
-    ${SSH} ${MGRIP} "sudo bash /tmp/install_ha_proxy.sh"
-    scp ${WORKSPACE}/haproxy.cfg ${MGRIP}:/tmp
-    scp ${WORKSPACE}/deploy_ha_proxy.sh ${MGRIP}:/tmp
-    ${SSH} ${MGRIP} "sudo bash /tmp/deploy_ha_proxy.sh"
+    scp ${WORKSPACE}/install_ha_proxy.sh ${haproxy_ip}:/tmp
+    ${SSH} ${haproxy_ip} "sudo bash /tmp/install_ha_proxy.sh"
+    scp ${WORKSPACE}/haproxy.cfg ${haproxy_ip}:/tmp
+    scp ${WORKSPACE}/deploy_ha_proxy.sh ${haproxy_ip}:/tmp
+    ${SSH} ${haproxy_ip} "sudo bash /tmp/deploy_ha_proxy.sh"
 } # configure_haproxy_for_neutron_requests()
 
 # Following three functions are debugging helpers when debugging devstack changes.
@@ -622,6 +639,26 @@ function retry() {
     return ${rc}
 }
 
+function install_ovs() {
+    local -r node=${1}
+    local -r rpm_path=${2}
+
+    if [ "${OVS_INSTALL:0:1}" = "v" ]; then
+       # An OVS version was given, so we build it ourselves from OVS git repo.
+       # Only on the first node though, consecutive nodes will use RPMs
+       # built for the first one.
+       [ ! -d "${rpm_path}" ] && mkdir -p "${rpm_path}" && build_ovs ${node} ${OVS_INSTALL} "${rpm_path}"
+       # Install OVS from path
+       install_ovs_from_path ${node} "${rpm_path}"
+    elif [ "${OVS_INSTALL:0:4}" = "http" ]; then
+       # Otherwise, install from rpm repo directly.
+       install_ovs_from_repo ${node} ${OVS_INSTALL}
+    else
+       echo "Expected either an OVS version git tag or a repo http url"
+       exit 1
+    fi
+}
+
 ODL_PROVIDER_MAPPINGS="\${PUBLIC_PHYSICAL_NETWORK}:${PUBLIC_BRIDGE}"
 RECLONE=False
 ODL_PORT=8181
@@ -663,6 +700,10 @@ sudo iptables --line-numbers -nvL
 true
 EOF
 
+#For SFC Tests a larger partition is required for creating instances with Ubuntu
+if [[ "${ENABLE_OS_PLUGINS}" =~ networking-sfc ]]; then
+   TMPFS_SIZE=12G
+fi
 cat > ${WORKSPACE}/get_devstack.sh << EOF
 sudo systemctl stop firewalld
 sudo yum install bridge-utils python-pip -y
@@ -677,7 +718,7 @@ echo "::1         localhost \${HOSTNAME}" >> /tmp/hosts
 sudo mv /tmp/hosts /etc/hosts
 sudo mkdir /opt/stack
 echo "Create RAM disk for /opt/stack"
-sudo mount -t tmpfs -o size=2G tmpfs /opt/stack
+sudo mount -t tmpfs -o size=${TMPFS_SIZE} tmpfs /opt/stack
 sudo chmod 777 /opt/stack
 cd /opt/stack
 echo "git clone https://git.openstack.org/openstack-dev/devstack --branch ${OPENSTACK_BRANCH}"
@@ -687,16 +728,14 @@ if [ -n "${DEVSTACK_HASH}" ]; then
     echo "git checkout ${DEVSTACK_HASH}"
     git checkout ${DEVSTACK_HASH}
 fi
+wget https://raw.githubusercontent.com/shague/odl_tools/master/fix-logging.patch.txt -O /tmp/fix-logging.patch.txt
+patch --verbose -p1 -i /tmp/fix-logging.patch.txt
 git --no-pager log --pretty=format:'%h %<(13)%ar%<(13)%cr %<(20,trunc)%an%d %s%b' -n20
 echo
 
 echo "workaround: do not upgrade openvswitch"
 sudo yum install -y yum-plugin-versionlock
 sudo yum versionlock add openvswitch
-
-#Install qemu-img command in Control Node for Pike
-echo "Install qemu-img application"
-sudo yum install -y qemu-img
 EOF
 
 cat > "${WORKSPACE}/setup_host_cell_mapping.sh" << EOF
@@ -706,11 +745,21 @@ sudo nova-manage db sync
 sudo nova-manage cell_v2 discover_hosts
 EOF
 
+cat > "${WORKSPACE}/workaround_networking_sfc.sh" << EOF
+cd /opt/stack
+git clone https://git.openstack.org/openstack/networking-sfc
+cd networking-sfc
+git checkout ${OPENSTACK_BRANCH}
+git checkout master -- devstack/plugin.sh
+EOF
+
+NUM_OPENSTACK_SITES=${NUM_OPENSTACK_SITES:-1}
+compute_index=1
 os_node_list=()
 
 if [ "${ENABLE_HAPROXY_FOR_NEUTRON}" == "yes" ]; then
     echo "Configure HAProxy"
-    ODL_HAPROXYIP_PARAM=OPENSTACK_HAPROXY_${i}_IP
+    ODL_HAPROXYIP_PARAM=OPENSTACK_HAPROXY_1_IP
     ODL_IP_PARAM1=ODL_SYSTEM_1_IP
     ODL_IP_PARAM2=ODL_SYSTEM_2_IP
     ODL_IP_PARAM3=ODL_SYSTEM_3_IP
@@ -741,6 +790,7 @@ for i in "${!os_ip_list[@]}"; do
     tcpdump_start "${i}" "${ip}" "port 6653"
 done
 
+
 # Begin stacking the nodes, starting with the controller(s) and then the compute(s)
 
 for i in `seq 1 ${NUM_OPENSTACK_CONTROL_NODES}`; do
@@ -761,6 +811,13 @@ for i in `seq 1 ${NUM_OPENSTACK_CONTROL_NODES}`; do
     if [ "${ODL_ML2_BRANCH}" == "stable/queens" ]; then
        ssh ${!CONTROLIP} "sed -i 's/flat_networks public/flat_networks public,physnet1/' /opt/stack/devstack/lib/neutron"
        ssh ${!CONTROLIP} "sed -i '186i iniset \$NEUTRON_CORE_PLUGIN_CONF ml2_type_vlan network_vlan_ranges public:1:4094,physnet1:1:4094' /opt/stack/devstack/lib/neutron"
+       #Workaround for networking-sfc to configure the paramaters in neutron.conf if the
+       # services used are neutron-api, neutron-dhcp etc instead of q-agt.
+       # Can be removed if the patch https://review.openstack.org/#/c/596287/ gets merged
+       if [[ "${ENABLE_OS_PLUGINS}" =~ networking-sfc ]]; then
+           scp ${WORKSPACE}/workaround_networking_sfc.sh ${!CONTROLIP}:/tmp/
+           ssh ${!CONTROLIP} "bash -x /tmp/workaround_networking_sfc.sh"
+       fi
     fi
     create_control_node_local_conf ${!CONTROLIP} ${ODLMGRIP} "${ODL_OVS_MGRS}"
     scp ${WORKSPACE}/local.conf_control_${!CONTROLIP} ${!CONTROLIP}:/opt/stack/devstack/local.conf
@@ -770,6 +827,12 @@ for i in `seq 1 ${NUM_OPENSTACK_CONTROL_NODES}`; do
     if [ "$(is_openstack_feature_enabled n-cpu)" == "1" ]; then
         setup_live_migration_compute ${!CONTROLIP} ${!CONTROLIP}
     fi
+    [ -n "${OVS_INSTALL}" ] && install_ovs ${!CONTROLIP} /tmp/ovs_rpms
+    if [[ "${ENABLE_OS_PLUGINS}" =~ networking-sfc ]]; then
+        # This should be really done by networking-odl devstack plugin,
+        # but in the meantime do it ourselves
+        ssh ${!CONTROLIP} "sudo ovs-vsctl set Open_vSwitch . external_ids:of-tunnel=true"
+    fi
     echo "Stack the control node ${i} of ${NUM_OPENSTACK_CONTROL_NODES}: ${CONTROLIP}"
     ssh ${!CONTROLIP} "cd /opt/stack/devstack; nohup ./stack.sh > /opt/stack/devstack/nohup.out 2>&1 &"
     ssh ${!CONTROLIP} "ps -ef | grep stack.sh"
@@ -819,6 +882,12 @@ for i in `seq 1 ${NUM_OPENSTACK_COMPUTE_NODES}`; do
     echo "Install rdo release to avoid incompatible Package versions"
     install_rdo_release ${!COMPUTEIP}
     setup_live_migration_compute ${!COMPUTEIP} ${!CONTROLIP}
+    [ -n "${OVS_INSTALL}" ] && install_ovs ${!COMPUTEIP} /tmp/ovs_rpms
+    if [[ "${ENABLE_OS_PLUGINS}" =~ networking-sfc ]]; then
+        # This should be really done by networking-odl devstack plugin,
+        # but in the meantime do it ourselves
+        ssh ${!COMPUTEIP} "sudo ovs-vsctl set Open_vSwitch . external_ids:of-tunnel=true"
+    fi
     echo "Stack the compute node ${i} of ${NUM_OPENSTACK_COMPUTE_NODES}: ${!COMPUTEIP}"
     ssh ${!COMPUTEIP} "cd /opt/stack/devstack; nohup ./stack.sh > /opt/stack/devstack/nohup.out 2>&1 &"
     ssh ${!COMPUTEIP} "ps -ef | grep stack.sh"