ENABLE_HAPROXY_FOR_NEUTRON: ${ENABLE_HAPROXY_FOR_NEUTRON}
ENABLE_OS_SERVICES: ${ENABLE_OS_SERVICES}
ENABLE_OS_COMPUTE_SERVICES: ${ENABLE_OS_COMPUTE_SERVICES}
+ENABLE_OS_NETWORK_SERVICES: ${ENABLE_OS_NETWORK_SERVICES}
ENABLE_OS_PLUGINS: ${ENABLE_OS_PLUGINS}
DISABLE_OS_SERVICES: ${DISABLE_OS_SERVICES}
TENANT_NETWORK_TYPE: ${TENANT_NETWORK_TYPE}
if [ "${ENABLE_NETWORKING_L2GW}" == "yes" ]; then
#networking-l2gw is not officially available in any release yet. Gettting the latest stable version.
- $PYTHON -m pip install networking-l2gw
+ $PYTHON -m pip install networking-l2gw==11.0.0
fi
}
echo "${ssv}"
} # csv2ssv
+function is_openstack_feature_enabled() {
+ local feature=$1
+ for enabled_feature in $(csv2ssv ${ENABLE_OS_SERVICES})
+ do
+ if [ "${enabled_feature}" == "${feature}" ]; then
+ echo 1
+ return
+ fi
+ done
+ echo 0
+}
+
+function fix_libvirt_version_n_cpu_ocata() {
+ local ip=$1
+ ${SSH} ${ip} "
+ cd /opt/stack;
+ git clone https://git.openstack.org/openstack/requirements;
+ cd requirements;
+ git checkout stable/ocata;
+ sed -i s/libvirt-python===2.5.0/libvirt-python===3.2.0/ upper-constraints.txt
+ "
+}
+
# Add enable_services and disable_services to the local.conf
function add_os_services() {
local core_services=$1
local enable_services=$2
local disable_services=$3
local local_conf_file_name=$4
+ local enable_network_services=$5
cat >> ${local_conf_file_name} << EOF
enable_service $(csv2ssv "${core_services}")
if [ -n "${disable_services}" ]; then
cat >> ${local_conf_file_name} << EOF
disable_service $(csv2ssv "${disable_services}")
+EOF
+ fi
+ if [ -n "${enable_network_services}" ]; then
+ cat >> ${local_conf_file_name} << EOF
+enable_service $(csv2ssv "${enable_network_services}")
EOF
fi
}
disable_all_services
EOF
- add_os_services "${CORE_OS_CONTROL_SERVICES}" "${ENABLE_OS_SERVICES}" "${DISABLE_OS_SERVICES}" "${local_conf_file_name}"
+ add_os_services "${CORE_OS_CONTROL_SERVICES}" "${ENABLE_OS_SERVICES}" "${DISABLE_OS_SERVICES}" "${local_conf_file_name}" "${ENABLE_OS_NETWORK_SERVICES}"
cat >> ${local_conf_file_name} << EOF
NEUTRON_FLOWCLASSIFIER_DRIVERS=${ODL_SFC_DRIVER} # Only relevant if networking-sfc plugin is enabled
ETCD_PORT=2379
EOF
+ if [ "${TENANT_NETWORK_TYPE}" == "local" ]; then
+ cat >> ${local_conf_file_name} << EOF
+ENABLE_TENANT_TUNNELS=false
+EOF
+ fi
if [ "${ODL_ML2_DRIVER_VERSION}" == "v2" ]; then
echo "ODL_V2DRIVER=True" >> ${local_conf_file_name}
} # configure_haproxy_for_neutron_requests()
# Collect the list of files on the hosts
-function list_files () {
- local ip=$1
- local folder=$2
- ${SSH} ${ip} "sudo find /etc > /tmp/find.etc.txt"
- ${SSH} ${ip} "sudo find /opt/stack > /tmp/find.opt.stack.txt"
- ${SSH} ${ip} "sudo find /var > /tmp/find2.txt"
- ${SSH} ${ip} "sudo find /var > /tmp/find.var.txt"
- rsync --rsync-path="sudo rsync" --list-only -arvhe ssh ${ip}:/etc/ > ${folder}/rsync.etc.txt
- rsync --rsync-path="sudo rsync" --list-only -arvhe ssh ${ip}:/opt/stack/ > ${folder}/rsync.opt.stack.txt
- rsync --rsync-path="sudo rsync" --list-only -arvhe ssh ${ip}:/var/ > ${folder}/rsync.var.txt
- scp ${ip}:/tmp/find.etc.txt ${folder}
- scp ${ip}:/tmp/find.opt.stack.txt ${folder}
- scp ${ip}:/tmp/find2.txt ${folder}
- scp ${ip}:/tmp/find.var.txt ${folder}
+function collect_files () {
+ local -r ip=$1
+ local -r folder=$2
+ finddir=/tmp/finder
+ ${SSH} ${ip} "mkdir -p ${finddir}"
+ ${SSH} ${ip} "sudo find /etc > ${finddir}/find.etc.txt"
+ ${SSH} ${ip} "sudo find /opt/stack > ${finddir}/find.opt.stack.txt"
+ ${SSH} ${ip} "sudo find /var > ${finddir}/find2.txt"
+ ${SSH} ${ip} "sudo find /var > ${finddir}/find.var.txt"
+ ${SSH} ${ip} "sudo tar -cf - -C /tmp finder | xz -T 0 > /tmp/find.tar.xz"
+ scp ${ip}:/tmp/find.tar.xz ${folder}
+ mkdir -p ${finddir}
+ rsync --rsync-path="sudo rsync" --list-only -arvhe ssh ${ip}:/etc/ > ${finddir}/rsync.etc.txt
+ rsync --rsync-path="sudo rsync" --list-only -arvhe ssh ${ip}:/opt/stack/ > ${finddir}/rsync.opt.stack.txt
+ rsync --rsync-path="sudo rsync" --list-only -arvhe ssh ${ip}:/var/ > ${finddir}/rsync.var.txt
+ tar -cf - -C /tmp finder | xz -T 0 > /tmp/rsync.tar.xz
+ cp /tmp/rsync.tar.xz ${folder}
}
function collect_logs () {
scp ${!CONTROLLERIP}:/tmp/journalctl.log ${NODE_FOLDER}
${SSH} ${!CONTROLLERIP} "dmesg -T > /tmp/dmesg.log"
scp ${!CONTROLLERIP}:/tmp/dmesg.log ${NODE_FOLDER}
- rsync -avhe ssh ${!CONTROLLERIP}:/tmp/${BUNDLEFOLDER}/etc ${NODE_FOLDER}
+ ${SSH} ${!CONTROLLERIP} "tar -cf - -C /tmp/${BUNDLEFOLDER} etc | xz -T 0 > /tmp/etc.tar.xz"
+ scp ${!CONTROLLERIP}:/tmp/etc.tar.xz ${NODE_FOLDER}
${SSH} ${!CONTROLLERIP} "cp -r /tmp/${BUNDLEFOLDER}/data/log /tmp/odl_log"
${SSH} ${!CONTROLLERIP} "tar -cf /tmp/odl${i}_karaf.log.tar /tmp/odl_log/*"
scp ${!CONTROLLERIP}:/tmp/odl${i}_karaf.log.tar ${NODE_FOLDER}
scp ${!OSIP}:/tmp/ovsdb-tool.log ${NODE_FOLDER}
scp ${!OSIP}:/var/log/openvswitch/ovs-vswitchd.log ${NODE_FOLDER}
scp ${!OSIP}:/var/log/openvswitch/ovsdb-server.log ${NODE_FOLDER}
- list_files "${!OSIP}" "${NODE_FOLDER}"
+ collect_files "${!OSIP}" "${NODE_FOLDER}"
+ ${SSH} ${!OSIP} "sudo tar -cf - -C /var/log rabbitmq | xz -T 0 > /tmp/rabbitmq.tar.xz "
+ scp ${!OSIP}:/tmp/rabbitmq.tar.xz ${NODE_FOLDER}
rsync --rsync-path="sudo rsync" -avhe ssh ${!OSIP}:/etc/hosts ${NODE_FOLDER}
rsync --rsync-path="sudo rsync" -avhe ssh ${!OSIP}:/usr/lib/systemd/system/haproxy.service ${NODE_FOLDER}
rsync --rsync-path="sudo rsync" -avhe ssh ${!OSIP}:/var/log/audit/audit.log ${NODE_FOLDER}
rsync --rsync-path="sudo rsync" -avhe ssh ${!OSIP}:/var/log/httpd/keystone_access.log ${NODE_FOLDER}
rsync --rsync-path="sudo rsync" -avhe ssh ${!OSIP}:/var/log/httpd/keystone.log ${NODE_FOLDER}
rsync --rsync-path="sudo rsync" -avhe ssh ${!OSIP}:/var/log/messages ${NODE_FOLDER}
- rsync --rsync-path="sudo rsync" -avhe ssh ${!OSIP}:/var/log/rabbitmq ${NODE_FOLDER}
rsync -avhe ssh ${!OSIP}:/opt/stack/logs/* ${NODE_FOLDER} # rsync to prevent copying of symbolic links
mv local.conf_control_${!OSIP} ${NODE_FOLDER}/local.conf
- # qdhcp files are created by robot tests
- mv /tmp/qdhcp ${NODE_FOLDER}
+ # qdhcp files are created by robot tests and copied into /tmp/qdhcp during the test
+ tar -cf - -C /tmp qdhcp | xz -T 0 > /tmp/qdhcp.tar.xz
+ mv /tmp/qdhcp.tar.xz ${NODE_FOLDER}
mv ${NODE_FOLDER} ${WORKSPACE}/archives/
done
scp ${!OSIP}:/tmp/ovsdb-tool.log ${NODE_FOLDER}
scp ${!OSIP}:/var/log/openvswitch/ovs-vswitchd.log ${NODE_FOLDER}
scp ${!OSIP}:/var/log/openvswitch/ovsdb-server.log ${NODE_FOLDER}
- list_files "${!OSIP}" "${NODE_FOLDER}"
+ collect_files "${!OSIP}" "${NODE_FOLDER}"
+ ${SSH} ${!OSIP} "sudo tar -cf - -C /var/log libvirt | xz -T 0 > /tmp/libvirt.tar.xz "
+ scp ${!OSIP}:/tmp/libvirt.tar.xz ${NODE_FOLDER}
rsync --rsync-path="sudo rsync" -avhe ssh ${!OSIP}:/etc/hosts ${NODE_FOLDER}
rsync --rsync-path="sudo rsync" -avhe ssh ${!OSIP}:/var/log/audit/audit.log ${NODE_FOLDER}
- rsync --rsync-path="sudo rsync" -avhe ssh ${!OSIP}:/var/log/libvirt ${NODE_FOLDER}
rsync --rsync-path="sudo rsync" -avhe ssh ${!OSIP}:/var/log/messages ${NODE_FOLDER}
rsync --rsync-path="sudo rsync" -avhe ssh ${!OSIP}:/var/log/nova-agent.log ${NODE_FOLDER}
rsync -avhe ssh ${!OSIP}:/opt/stack/logs/* ${NODE_FOLDER} # rsync to prevent copying of symbolic links
mkdir -p ${TEMPEST_LOGS_DIR}
scp ${OPENSTACK_CONTROL_NODE_1_IP}:${DEVSTACK_TEMPEST_DIR}/tempest_results.html ${TEMPEST_LOGS_DIR}
scp ${OPENSTACK_CONTROL_NODE_1_IP}:${DEVSTACK_TEMPEST_DIR}/tempest.log ${TEMPEST_LOGS_DIR}
- mv ${WORKSPACE}/tempest_output* ${TEMPEST_LOGS_DIR}
+ if [ "$(echo ${OPENSTACK_BRANCH} | cut -d/ -f2)" != "master" ]; then
+ mv ${WORKSPACE}/tempest_output* ${TEMPEST_LOGS_DIR}
+ fi
else
echo "tempest results not found in ${DEVSTACK_TEMPEST_DIR}/${TESTREPO}/0"
fi
CORE_OS_CONTROL_SERVICES+=",n-api,n-api-meta,n-cauth,n-cond,n-crt,n-obj,n-sch"
# ODL - services to connect to ODL
CORE_OS_CONTROL_SERVICES+=",odl-compute,odl-neutron"
-# Neutron
-CORE_OS_CONTROL_SERVICES+=",q-dhcp,q-meta,q-svc"
# Additional services
CORE_OS_CONTROL_SERVICES+=",mysql,rabbit"
create_etc_hosts ${!CONTROLIP}
scp ${WORKSPACE}/hosts_file ${!CONTROLIP}:/tmp/hosts
scp ${WORKSPACE}/get_devstack.sh ${!CONTROLIP}:/tmp
+ # devstack Master is yet to migrate fully to lib/neutron, there are some ugly hacks that is
+ # affecting the stacking.
+ #Workaround For Queens, Make the physical Network as physnet1 in lib/neutron
+ #Workaround Comment out creating initial Networks in lib/neutron
${SSH} ${!CONTROLIP} "bash /tmp/get_devstack.sh > /tmp/get_devstack.sh.txt 2>&1"
+ if [ "${ODL_ML2_BRANCH}" == "master" ]; 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"
+ fi
+ if [[ "${ODL_ML2_BRANCH}" == "stable/ocata" && "$(is_openstack_feature_enabled n-cpu)" == "1" ]]; then
+ echo "Updating requirements for ${ODL_ML2_BRANCH}"
+ echo "Workaround for https://review.openstack.org/#/c/491032/"
+ echo "Modify upper-constraints to use libvirt-python 3.2.0"
+ fix_libvirt_version_n_cpu_ocata ${!CONTROLIP}
+ fi
create_control_node_local_conf ${!CONTROLIP} ${ODLMGRIP[$i]} "${ODL_OVS_MGRS[$i]}"
scp ${WORKSPACE}/local.conf_control_${!CONTROLIP} ${!CONTROLIP}:/opt/stack/devstack/local.conf
echo "Stack the control node ${i} of ${NUM_OPENSTACK_CONTROL_NODES}: ${CONTROLIP}"
ssh ${!CONTROLIP} "ps -ef | grep stack.sh"
ssh ${!CONTROLIP} "ls -lrt /opt/stack/devstack/nohup.out"
os_node_list+=("${!CONTROLIP}")
- # Workaround for stable/newton jobs
- # TODO: can this be removed now?
- if [ "${ODL_ML2_BRANCH}" == "stable/newton" ]; then
- ssh ${!CONTROLIP} "cd /opt/stack; git clone https://git.openstack.org/openstack/requirements; cd requirements; git checkout stable/newton; sed -i /appdirs/d upper-constraints.txt"
- fi
done
# This is a backup to the CELLSV2_SETUP=singleconductor workaround. Keeping it here as an easy lookup
# AccessRefused: (0, 0): (403) ACCESS_REFUSED - Login was refused using authentication mechanism AMQPLAIN. For details see the broker logfile.
# Compare that timestamp to this log in the control stack.log: sudo rabbitmqctl set_permissions -p nova_cell1 stackrabbit
# If the n-cpu.log is earlier than the control stack.log timestamp then the failure condition is likely hit.
-WAIT_FOR_RABBITMQ_MINUTES=60
-echo "Wait a maximum of ${WAIT_FOR_RABBITMQ_MINUTES}m until rabbitmq is ready to allow the controller to create nova_cell1 before the computes need it"
-retry ${WAIT_FOR_RABBITMQ_MINUTES} 60 "is_rabbitmq_ready ${OPENSTACK_CONTROL_NODE_1_IP}"
-rc=$?
-if ((${rc} == 0)); then
- echo "rabbitmq is ready, starting ${NUM_OPENSTACK_COMPUTE_NODES} compute(s)"
-else
- echo "rabbitmq was not ready in ${WAIT_FOR_RABBITMQ_MINUTES}m"
- collect_logs
- exit 1
+if [ ${NUM_OPENSTACK_COMPUTE_NODES} -gt 0 ]; then
+ WAIT_FOR_RABBITMQ_MINUTES=60
+ echo "Wait a maximum of ${WAIT_FOR_RABBITMQ_MINUTES}m until rabbitmq is ready to allow the controller to create nova_cell1 before the computes need it"
+ retry ${WAIT_FOR_RABBITMQ_MINUTES} 60 "is_rabbitmq_ready ${OPENSTACK_CONTROL_NODE_1_IP}"
+ rc=$?
+ if ((${rc} == 0)); then
+ echo "rabbitmq is ready, starting ${NUM_OPENSTACK_COMPUTE_NODES} compute(s)"
+ else
+ echo "rabbitmq was not ready in ${WAIT_FOR_RABBITMQ_MINUTES}m"
+ collect_logs
+ exit 1
+ fi
fi
for i in `seq 1 ${NUM_OPENSTACK_COMPUTE_NODES}`; do
echo "Updating requirements for ${ODL_ML2_BRANCH}"
echo "Workaround for https://review.openstack.org/#/c/491032/"
echo "Modify upper-constraints to use libvirt-python 3.2.0"
- ${SSH} ${!COMPUTEIP} "
- cd /opt/stack;
- git clone https://git.openstack.org/openstack/requirements;
- cd requirements;
- git checkout stable/ocata;
- sed -i s/libvirt-python===2.5.0/libvirt-python===3.2.0/ upper-constraints.txt
- "
+ fix_libvirt_version_n_cpu_ocata ${!COMPUTEIP}
fi
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
# please add pybot -v arguments on a single line and alphabetized
suite_num=0
for suite in ${SUITES}; do
- # prepend a incrmental counter to the suite name so that the full robot log combining all the suites as is done
- # in the rebot step below will list all the suites in chronological order as rebot seems to alphabatize them
+ # prepend an incremental counter to the suite name so that the full robot log combining all the suites as is done
+ # in the rebot step below will list all the suites in chronological order as rebot seems to alphabetize them
let "suite_num = suite_num + 1"
suite_index="$(printf %02d ${suite_num})"
suite_name="$(basename ${suite} | cut -d. -f1)"
log_name="${suite_index}_${suite_name}"
- pybot -N ${log_name} --removekeywords wuks -c critical -e exclude -e skip_if_${DISTROSTREAM} \
+ pybot -N ${log_name} \
+ -c critical -e exclude -e skip_if_${DISTROSTREAM} \
--log log_${log_name}.html --report None --output output_${log_name}.xml \
+ --removekeywords wuks \
+ --removekeywords name:SetupUtils.Setup_Utils_For_Setup_And_Teardown \
+ --removekeywords name:SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing \
+ --removekeywords name:OpenStackOperations.Add_OVS_Logging_On_All_OpenStack_Nodes \
-v BUNDLEFOLDER:${BUNDLEFOLDER} \
-v BUNDLE_URL:${ACTUAL_BUNDLE_URL} \
-v CONTROLLERFEATURES:"${CONTROLLERFEATURES}" \
-v NUM_OS_SYSTEM:${NUM_OPENSTACK_SYSTEM} \
-v NUM_TOOLS_SYSTEM:${NUM_TOOLS_SYSTEM} \
-v ODL_SNAT_MODE:${ODL_SNAT_MODE} \
+ -v ODL_ENABLE_L3_FWD:${ODL_ENABLE_L3_FWD} \
-v ODL_STREAM:${DISTROSTREAM} \
-v ODL_SYSTEM_IP:${ODL_SYSTEM_IP} \
-v ODL_SYSTEM_1_IP:${ODL_SYSTEM_1_IP} \