Add option checkout devstack commit
[releng/builder.git] / jjb / integration / integration-deploy-openstack-run-test.sh
index f15d1de4761d9cd1079f2eeeff9f873b0f810cce..1ea2fcac178a4e1ada5822ae0f091b18b1c3c8bf 100644 (file)
@@ -20,16 +20,36 @@ echo "#################################################"
 
 SSH="ssh -t -t"
 
-function create_control_node_local_conf {
-HOSTIP=$1
-MGRIP=$2
-ODL_OVS_MANAGERS="$3"
-#Needs to be removed
+function create_etc_hosts {
+NODE_IP=$1
+CTRL_IP=$2
+: > ${WORKSPACE}/hosts_file
+for iter in `seq 1 ${NUM_OPENSTACK_COMPUTE_NODES}`
+do
+    COMPUTE_IP=OPENSTACK_COMPUTE_NODE_${iter}_IP
+    if [ "${!COMPUTE_IP}" == "${NODE_IP}" ]; then
+       CONTROL_HNAME=$(${SSH}  ${CTRL_IP}  "hostname")
+       echo "${CTRL_IP}   ${CONTROL_HNAME}" >> ${WORKSPACE}/hosts_file
+    else
+       COMPUTE_HNAME=$(${SSH}  ${!COMPUTE_IP}  "hostname")
+       echo "${!COMPUTE_IP}   ${COMPUTE_HNAME}" >> ${WORKSPACE}/hosts_file
+    fi
+done
+
+cat ${WORKSPACE}/hosts_file
+echo "Created the hosts file for ${NODE_IP}"
+}
+
 if [ "${ODL_ML2_BRANCH}" != "stable/ocata" ]; then
    RECLONE=no
 else
    RECLONE=yes
 fi
+function create_control_node_local_conf {
+HOSTIP=$1
+MGRIP=$2
+ODL_OVS_MANAGERS="$3"
+#Needs to be removed
 local_conf_file_name=${WORKSPACE}/local.conf_control_${HOSTIP}
 cat > ${local_conf_file_name} << EOF
 [[local|localrc]]
@@ -75,7 +95,7 @@ enable_plugin ${plugin_name} ${ENABLE_PLUGIN_ARGS}
 EOF
 done
 unset IFS
-if [ "${OPENSTACK_BRANCH}" == "master" ] || [ "${OPENSTACK_BRANCH}" == "stable/ocata" ]; then # Ocata+
+if [ "${OPENSTACK_BRANCH}" == "stable/pike" ] || [ "${OPENSTACK_BRANCH}" == "stable/ocata" ]; then # Ocata+
     # placement is mandatory for nova since Ocata, note that this requires computes to enable placement-client
     # this should be moved into enabled_services for each job (but only for Ocata)
     echo "enable_service placement-api" >> ${local_conf_file_name}
@@ -94,7 +114,6 @@ SERVICE_HOST=\$HOST_IP
 NEUTRON_CREATE_INITIAL_NETWORKS=${CREATE_INITIAL_NETWORKS}
 Q_PLUGIN=ml2
 Q_ML2_TENANT_NETWORK_TYPE=${TENANT_NETWORK_TYPE}
-Q_OVS_USE_VETH=True
 
 ENABLE_TENANT_TUNNELS=True
 
@@ -165,10 +184,14 @@ ML2_VLAN_RANGES=${PUBLIC_PHYSICAL_NETWORK}
 ODL_PROVIDER_MAPPINGS=${ODL_PROVIDER_MAPPINGS}
 
 disable_service q-l3
-PUBLIC_INTERFACE=br100
 EOF
 
-SERVICE_PLUGINS="networking_odl.l3.l3_odl.OpenDaylightL3RouterPlugin"
+if [ "${ODL_ML2_DRIVER_VERSION}" == "v2" ]; then
+   SERVICE_PLUGINS="odl-router_v2"
+else
+   SERVICE_PLUGINS="odl-router"
+fi
+
 if [ "${ENABLE_NETWORKING_L2GW}" == "yes" ]; then
   SERVICE_PLUGINS+=", networking_l2gw.services.l2gateway.plugin.L2GatewayPlugin"
 fi #check for ENABLE_NETWORKING_L2GW
@@ -194,6 +217,10 @@ minimize_polling=True
 physical_network_mtus = ${PUBLIC_PHYSICAL_NETWORK}:1440
 path_mtu = 1490
 
+# workaround for port-status not working due to https://bugs.opendaylight.org/show_bug.cgi?id=9092
+[ml2_odl]
+odl_features=nothing
+
 [[post-config|/etc/neutron/dhcp_agent.ini]]
 [DEFAULT]
 force_metadata = True
@@ -203,9 +230,12 @@ enable_isolated_metadata = True
 [DEFAULT]
 force_config_drive = False
 
+[scheduler]
+discover_hosts_in_cells_interval = 30
+
 EOF
 
-echo "local.conf Created...."
+echo "Control local.conf created:"
 cat ${local_conf_file_name}
 }
 
@@ -215,12 +245,7 @@ SERVICEHOST=$2
 MGRIP=$3
 ODL_OVS_MANAGERS="$4"
 #Needs to be removed
-if [ "${ODL_ML2_BRANCH}" != "stable/ocata" ]; then
-   RECLONE=no
-else
-   RECLONE=yes
-fi
-if [ "${OPENSTACK_BRANCH}" == "master" ] || [ "${OPENSTACK_BRANCH}" == "stable/ocata" ]; then # Ocata+
+if [ "${OPENSTACK_BRANCH}" == "stable/pike" ] || [ "${OPENSTACK_BRANCH}" == "stable/ocata" ]; then # Ocata+
     # placement is mandatory for nova since Ocata, note that this requires controller to enable placement-api
     ENABLED_SERVICES="n-cpu,placement-client"
 else
@@ -288,13 +313,21 @@ cat >> ${local_conf_file_name} << EOF
 # Uncomment lines below if odl-compute is to be used for l3 forwarding
 Q_L3_ENABLED=True
 ODL_L3=${ODL_L3}
-PUBLIC_INTERFACE=br100 # FIXME do we use br100 at all?
 PUBLIC_BRIDGE=${PUBLIC_BRIDGE}
 PUBLIC_PHYSICAL_NETWORK=${PUBLIC_PHYSICAL_NETWORK}
 ODL_PROVIDER_MAPPINGS=${ODL_PROVIDER_MAPPINGS}
 EOF
 fi
-echo "local.conf Created...."
+cat >> ${local_conf_file_name} << EOF
+
+[[post-config|/etc/nova/nova.conf]]
+[api]
+auth_strategy = keystone
+[DEFAULT]
+use_neutron = True
+EOF
+
+echo "Compute local.conf created:"
 cat ${local_conf_file_name}
 }
 
@@ -434,13 +467,18 @@ do
     mkdir -p ${OS_CTRL_FOLDER}
     scp ${!OS_CTRL_IP}:/opt/stack/devstack/nohup.out ${OS_CTRL_FOLDER}/stack.log
     scp ${!OS_CTRL_IP}:/var/log/openvswitch/ovs-vswitchd.log ${OS_CTRL_FOLDER}/ovs-vswitchd.log
-    scp ${!OS_CTRL_IP}:/var/log/openvswitch/ovsdb-server.log ${OS_CTRL_FOLDER}/ovsdb-server.log
+    scp ${!OS_CTRL_IP}:/etc/neutron/plugins/ml2/ml2_conf.ini ${OS_CTRL_FOLDER}
+    scp ${!OS_CTRL_IP}:/etc/neutron/dhcp_agent.ini ${OS_CTRL_FOLDER}
     scp ${!OS_CTRL_IP}:/etc/neutron/neutron.conf ${OS_CTRL_FOLDER}/neutron.conf
     scp ${!OS_CTRL_IP}:/etc/nova/nova.conf ${OS_CTRL_FOLDER}/nova.conf
     scp ${!OS_CTRL_IP}:/etc/kuryr/kuryr.conf ${OS_CTRL_FOLDER}/kuryr.conf
     scp ${!OS_CTRL_IP}:/etc/neutron/neutron_lbaas.conf ${OS_CTRL_FOLDER}/neutron-lbaas.conf
     scp ${!OS_CTRL_IP}:/etc/neutron/services/loadbalancer/haproxy/lbaas_agent.ini ${OS_CTRL_FOLDER}/lbaas-agent.ini
+    rsync --rsync-path="sudo rsync" -avhe ssh ${!OS_CTRL_IP}:/usr/lib/systemd/system/haproxy.service ${OS_CTRL_FOLDER}
     rsync -avhe ssh ${!OS_CTRL_IP}:/opt/stack/logs/* ${OS_CTRL_FOLDER} # rsync to prevent copying of symbolic links
+    rsync --rsync-path="sudo rsync" -avhe ssh ${!OS_CTRL_IP}:/etc/hosts ${OS_CTRL_FOLDER}/hosts.log
+    # Use rsync with sudo to get access to the log dir.
+    rsync --rsync-path="sudo rsync" -avhe ssh ${!OS_CTRL_IP}:/var/log/audit/audit.log ${OS_CTRL_FOLDER}
     scp extra_debug.sh ${!OS_CTRL_IP}:/tmp
     ${SSH} ${!OS_CTRL_IP} "bash /tmp/extra_debug.sh > /tmp/extra_debug.log"
     scp ${!OS_CTRL_IP}:/tmp/extra_debug.log ${OS_CTRL_FOLDER}/extra_debug.log
@@ -464,6 +502,11 @@ do
     scp ${!OSIP}:/var/log/libvirt/qeum/*.log ${OS_COMPUTE_FOLDER}
     scp ${!OSIP}:/etc/nova/nova.conf ${OS_COMPUTE_FOLDER}/nova.conf
     rsync -avhe ssh ${!OSIP}:/opt/stack/logs/* ${OS_COMPUTE_FOLDER} # rsync to prevent copying of symbolic links
+    rsync --rsync-path="sudo rsync" -avhe ssh ${!OSIP}:/etc/hosts ${OS_COMPUTE_FOLDER}/hosts.log
+    # Use rsync with sudo to get access to the log dir. Also can't use wildcard because the dirs only have
+    # exec permissions which doesn't allow ls.
+    rsync --rsync-path="sudo rsync" -avhe ssh ${!OSIP}:/var/log/libvirt ${OS_COMPUTE_FOLDER}
+    rsync --rsync-path="sudo rsync" -avhe ssh ${!OSIP}:/var/log/audit/audit.log ${OS_COMPUTE_FOLDER}
     scp extra_debug.sh ${!OSIP}:/tmp
     ${SSH} ${!OSIP} "bash /tmp/extra_debug.sh > /tmp/extra_debug.log"
     scp ${!OSIP}:/tmp/extra_debug.log ${OS_COMPUTE_FOLDER}/extra_debug.log
@@ -497,24 +540,25 @@ EOF
 
 cat > ${WORKSPACE}/get_devstack.sh << EOF
 sudo systemctl stop firewalld
-sudo yum install bridge-utils -y
+sudo yum install bridge-utils python-pip -y
 sudo systemctl stop  NetworkManager
 #Disable NetworkManager and kill dhclient and dnsmasq
 sudo systemctl stop NetworkManager
 sudo killall dhclient
 sudo killall dnsmasq
 #Workaround for mysql failure
-echo "127.0.0.1    localhost \${HOSTNAME}" > /tmp/hosts
+echo "127.0.0.1    localhost \${HOSTNAME}" >> /tmp/hosts
 echo "::1   localhost  \${HOSTNAME}" >> /tmp/hosts
 sudo mv /tmp/hosts /etc/hosts
-sudo /usr/sbin/brctl addbr br100
-#sudo ifconfig eth0 mtu 2000
 sudo mkdir /opt/stack
 sudo chmod 777 /opt/stack
 cd /opt/stack
-git clone https://git.openstack.org/openstack-dev/devstack
+git clone https://git.openstack.org/openstack-dev/devstack --branch $OPENSTACK_BRANCH
 cd devstack
-git checkout $OPENSTACK_BRANCH
+if [ -n "${DEVSTACK_HASH}" ]; then
+    git checkout ${DEVSTACK_HASH}
+fi
+git --no-pager log --pretty=format:'%h %<(13)%ar%<(13)%cr %<(20,trunc)%an%d %s\n%b' -n20
 EOF
 
 cat > "${WORKSPACE}/setup_host_cell_mapping.sh" << EOF
@@ -564,8 +608,10 @@ for i in `seq 1 ${NUM_OPENSTACK_CONTROL_NODES}`
 do
     echo "Stack the Control Node"
     CONTROLIP=OPENSTACK_CONTROL_NODE_${i}_IP
+    create_etc_hosts ${!CONTROLIP}
+    scp ${WORKSPACE}/hosts_file ${!CONTROLIP}:/tmp/hosts
     scp ${WORKSPACE}/get_devstack.sh ${!CONTROLIP}:/tmp
-    ${SSH} ${!CONTROLIP} "bash /tmp/get_devstack.sh"
+    ${SSH} ${!CONTROLIP} "bash /tmp/get_devstack.sh > /tmp/get_devstack.sh.txt 2>&1"
     create_control_node_local_conf ${!CONTROLIP} ${ODLMGRIP[$i]} "${ODL_OVS_MGRS[$i]}"
     scp ${WORKSPACE}/local.conf_control_${!CONTROLIP} ${!CONTROLIP}:/opt/stack/devstack/local.conf
     ssh ${!CONTROLIP} "cd /opt/stack/devstack; nohup ./stack.sh > /opt/stack/devstack/nohup.out 2>&1 &"
@@ -586,8 +632,10 @@ do
     SITE_INDEX=$((((i - 1) / NUM_COMPUTES_PER_SITE) + 1)) # We need the site index to infer the control node IP for this compute
     COMPUTEIP=OPENSTACK_COMPUTE_NODE_${i}_IP
     CONTROLIP=OPENSTACK_CONTROL_NODE_${SITE_INDEX}_IP
+    create_etc_hosts ${!COMPUTEIP} ${!CONTROLIP}
+    scp ${WORKSPACE}/hosts_file ${!COMPUTEIP}:/tmp/hosts
     scp ${WORKSPACE}/get_devstack.sh  ${!COMPUTEIP}:/tmp
-    ${SSH} ${!COMPUTEIP} "bash /tmp/get_devstack.sh"
+    ${SSH} ${!COMPUTEIP} "bash /tmp/get_devstack.sh > /tmp/get_devstack.sh.txt 2>&1"
     create_compute_node_local_conf ${!COMPUTEIP} ${!CONTROLIP} ${ODLMGRIP[$SITE_INDEX]} "${ODL_OVS_MGRS[$SITE_INDEX]}"
     scp ${WORKSPACE}/local.conf_compute_${!COMPUTEIP} ${!COMPUTEIP}:/opt/stack/devstack/local.conf
     ssh ${!COMPUTEIP} "cd /opt/stack/devstack; nohup ./stack.sh > /opt/stack/devstack/nohup.out 2>&1 &"
@@ -652,6 +700,20 @@ for i in `seq 1 ${NUM_OPENSTACK_SITES}`
 do
     echo "Configure the Control Node"
     CONTROLIP=OPENSTACK_CONTROL_NODE_${i}_IP
+    # Gather Compute IPs for the site
+    for j in `seq 1 ${NUM_COMPUTES_PER_SITE}`
+    do
+        COMPUTE_INDEX=$(((i-1) * NUM_COMPUTES_PER_SITE + j))
+        IP_VAR=OPENSTACK_COMPUTE_NODE_${COMPUTE_INDEX}_IP
+        COMPUTE_IPS[$((j-1))]=${!IP_VAR}
+    done
+
+    # Need to disable firewalld and iptables in compute nodes as well
+    for ip in ${COMPUTE_IPS[*]}
+    do
+        scp ${WORKSPACE}/disable_firewall.sh "${ip}:/tmp"
+        ${SSH} "${ip}" "sudo bash /tmp/disable_firewall.sh"
+    done
 
     #Need to disable firewalld and iptables in control node
     echo "Stop Firewall in Control Node for compute nodes to be able to reach the ports and add to hypervisor-list"
@@ -660,6 +722,13 @@ do
 
     echo "sleep for 60s and print hypervisor-list"
     sleep 60
+    # In anything after Newton, if we do not enable the n-cpu in control node
+    # We need to discover hosts manually and ensure that they are mapped to cells.
+    # reference: https://ask.openstack.org/en/question/102256/how-to-configure-placement-service-for-compute-node-on-ocata/
+    if [ "${OPENSTACK_BRANCH}" == "stable/ocata" ]; then
+        scp ${WORKSPACE}/setup_host_cell_mapping.sh  ${!CONTROLIP}:/tmp
+        ${SSH} ${!CONTROLIP} "sudo bash /tmp/setup_host_cell_mapping.sh"
+    fi
     ${SSH} ${!CONTROLIP} "cd /opt/stack/devstack; source openrc admin admin; nova hypervisor-list"
     # in the case that we are doing openstack (control + compute) all in one node, then the number of hypervisors
     # will be the same as the number of openstack systems. However, if we are doing multinode openstack then the
@@ -677,13 +746,6 @@ do
         exit 1
     fi
 
-    # For Ocata, if we do not enable the n-cpu in control node
-    # We need to discover hosts manually and ensure that they are mapped to cells.
-    # reference: https://ask.openstack.org/en/question/102256/how-to-configure-placement-service-for-compute-node-on-ocata/
-    if [ "${OPENSTACK_BRANCH}" == "stable/ocata" ]; then
-        scp ${WORKSPACE}/setup_host_cell_mapping.sh  ${!CONTROLIP}:/tmp
-        ${SSH} ${!CONTROLIP} "sudo bash /tmp/setup_host_cell_mapping.sh"
-    fi
 
     # upgrading pip, urllib3 and httplib2 so that tempest tests can be run on openstack control node
     # this needs to happen after devstack runs because it seems devstack is pulling in specific versions
@@ -815,16 +877,24 @@ echo "Changing the testplan path..."
 cat "${testplan_filepath}" | sed "s:integration:${WORKSPACE}:" > testplan.txt
 cat testplan.txt
 
-SUITES=`egrep -v '(^[[:space:]]*#|^[[:space:]]*$)' testplan.txt | tr '\012' ' '`
+if [ -z "${SUITES}" ]; then
+    SUITES=`egrep -v '(^[[:space:]]*#|^[[:space:]]*$)' testplan.txt | tr '\012' ' '`
+fi
+
+if [ "${OPENSTACK_BRANCH}" == "stable/pike" ]; then # Pike
+   AUTH="http://${!CONTROLIP}/identity"
+else
+   AUTH="http://${!CONTROLIP}:35357/v3"
+fi
 
-#Environment Variables Needed to execute Openstack Client for NEtvirt Jobs
+#Environment Variables Needed to execute Openstack Client for Netvirt Jobs
 cat > /tmp/os_netvirt_client_rc << EOF
 export OS_USERNAME=admin
 export OS_PASSWORD=admin
 export OS_PROJECT_NAME=admin
 export OS_USER_DOMAIN_NAME=default
 export OS_PROJECT_DOMAIN_NAME=default
-export OS_AUTH_URL="http://${!CONTROLIP}:35357/v3"
+export OS_AUTH_URL=${AUTH}
 export OS_IDENTITY_API_VERSION=3
 export OS_IMAGE_API_VERSION=2
 export OS_TENANT_NAME=admin