X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=jjb%2Fintegration%2Fcommon-functions.sh;h=0d7a9e09138c8f2712d3a49b4c5934e3394c448f;hb=1aaf65a8c4855c8bef7f955b4e0a9937de444d4c;hp=d419d86553f2040c554882a7a16053d9fba47d7a;hpb=f4b9f7257925bb9a3da2a9fedda0dfe4fbc5b2db;p=releng%2Fbuilder.git diff --git a/jjb/integration/common-functions.sh b/jjb/integration/common-functions.sh index d419d8655..0d7a9e091 100644 --- a/jjb/integration/common-functions.sh +++ b/jjb/integration/common-functions.sh @@ -117,6 +117,82 @@ function configure_karaf_log() { cat ${LOGCONF} } # function configure_karaf_log() +function get_os_deploy() { + local -r num_systems=${1:-$NUM_OPENSTACK_SYSTEM} + case ${num_systems} in + 1) + OPENSTACK_TOPO="1cmb-0ctl-0cmp" + ;; + 2) + OPENSTACK_TOPO="1cmb-0ctl-1cmp" + ;; + 3|*) + OPENSTACK_TOPO="0cmb-1ctl-2cmp" + ;; + esac + export OPENSTACK_TOPO +} + +function run_plan() { + local -r type=$1 + + case ${type} in + script) + plan=$SCRIPTPLAN + ;; + config|*) + plan=$CONFIGPLAN + ;; + esac + + printf "Locating ${type} plan to use...\n" + plan_filepath="${WORKSPACE}/test/csit/${type}plans/$plan" + if [ ! -f "${plan_filepath}" ]; then + plan_filepath="${WORKSPACE}/test/csit/${type}plans/${STREAMTESTPLAN}" + if [ ! -f "${plan_filepath}" ]; then + plan_filepath="${WORKSPACE}/test/csit/${type}plans/${TESTPLAN}" + fi + fi + + if [ -f "${plan_filepath}" ]; then + printf "${type} plan exists!!!\n" + printf "Changing the ${type} plan path...\n" + cat ${plan_filepath} | sed "s:integration:${WORKSPACE}:" > ${type}plan.txt + cat ${type}plan.txt + for line in $( egrep -v '(^[[:space:]]*#|^[[:space:]]*$)' ${type}plan.txt ); do + printf "Executing ${line}...\n" + # shellcheck source=${line} disable=SC1091 + source ${line} + done + fi + printf "Finished running ${type} plans\n" +} # function run_plan() + +# Return elapsed time. Usage: +# - Call first time with no arguments and a new timer is returned. +# - Next call with the first argument as the timer and the elapsed time is returned. +function timer() +{ + if [ $# -eq 0 ]; then + # return the current time + printf "$(date "+%s")" + else + local start_time=$1 + end_time=$(date "+%s") + + if [ -z "$start_time" ]; then + start_time=$end_time; + fi + + delta_time=$((end_time - start_time)) + ds=$((delta_time % 60)) + dm=$(((delta_time / 60) % 60)) + dh=$((delta_time / 3600)) + # return the elapsed time + printf "%d:%02d:%02d" $dh $dm $ds + fi +} + # convert commas in csv strings to spaces (ssv) function csv2ssv() { local csv=$1 @@ -127,8 +203,87 @@ function csv2ssv() { 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 +} + SSH="ssh -t -t" +# shellcheck disable=SC2153 +function print_job_parameters() { + cat << EOF + +Job parameters: +DISTROBRANCH: ${DISTROBRANCH} +DISTROSTREAM: ${DISTROSTREAM} +BUNDLE_URL: ${BUNDLE_URL} +CONTROLLERFEATURES: ${CONTROLLERFEATURES} +CONTROLLERDEBUGMAP: ${CONTROLLERDEBUGMAP} +SCRIPTPLAN: ${SCRIPTPLAN} +CONFIGPLAN: ${CONFIGPLAN} +STREAMTESTPLAN: ${STREAMTESTPLAN} +TESTPLAN: ${TESTPLAN} +SUITES: ${SUITES} +PATCHREFSPEC: ${PATCHREFSPEC} +OPENSTACK_BRANCH: ${OPENSTACK_BRANCH} +DEVSTACK_HASH: ${DEVSTACK_HASH} +ODL_ML2_DRIVER_REPO: ${ODL_ML2_DRIVER_REPO} +ODL_ML2_BRANCH: ${ODL_ML2_BRANCH} +ODL_ML2_DRIVER_VERSION: ${ODL_ML2_DRIVER_VERSION} +ODL_ML2_PORT_BINDING: ${ODL_ML2_PORT_BINDING} +DEVSTACK_KUBERNETES_PLUGIN_REPO: ${DEVSTACK_KUBERNETES_PLUGIN_REPO} +DEVSTACK_LBAAS_PLUGIN_REPO: ${DEVSTACK_LBAAS_PLUGIN_REPO} +DEVSTACK_NETWORKING_SFC_PLUGIN_REPO: ${DEVSTACK_NETWORKING_SFC_PLUGIN_REPO} +IPSEC_VXLAN_TUNNELS_ENABLED: ${IPSEC_VXLAN_TUNNELS_ENABLED} +PUBLIC_BRIDGE: ${PUBLIC_BRIDGE} +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} +SECURITY_GROUP_MODE: ${SECURITY_GROUP_MODE} +ENABLE_ITM_DIRECT_TUNNELS: ${ENABLE_ITM_DIRECT_TUNNELS} +PUBLIC_PHYSICAL_NETWORK: ${PUBLIC_PHYSICAL_NETWORK} +ENABLE_NETWORKING_L2GW: ${ENABLE_NETWORKING_L2GW} +CREATE_INITIAL_NETWORKS: ${CREATE_INITIAL_NETWORKS} +LBAAS_SERVICE_PROVIDER: ${LBAAS_SERVICE_PROVIDER} +ODL_SFC_DRIVER: ${ODL_SFC_DRIVER} +ODL_SNAT_MODE: ${ODL_SNAT_MODE} + +EOF +} + +function tcpdump_start() { + local -r prefix=$1 + local -r ip=$2 + local -r filter=$3 + filter_=${filter// /_} + + printf "node ${ip}, ${prefix}_${ip}__${filter}: starting tcpdump\n" + ssh ${ip} "nohup sudo /usr/sbin/tcpdump -vvv -ni eth0 ${filter} -w /tmp/tcpdump_${prefix}_${ip}__${filter_}.pcap > /tmp/tcpdump_start.log 2>&1 &" + ${SSH} ${ip} "ps -ef | grep tcpdump" +} + +function tcpdump_stop() { + local -r ip=$1 + + printf "node $ip: stopping tcpdump\n" + ${SSH} ${ip} "ps -ef | grep tcpdump.sh" + ${SSH} ${ip} "sudo pkill -f tcpdump" + ${SSH} ${ip} "sudo xz -9ekvvf /tmp/*.pcap" + ${SSH} ${ip} "sudo ls -al /tmp/*.pcap" + # copy_logs will copy any *.xz files +} + # Collect the list of files on the hosts function collect_files() { local -r ip=$1 @@ -308,10 +463,23 @@ EOF # Control Node for i in `seq 1 ${NUM_OPENSTACK_CONTROL_NODES}`; do OSIP=OPENSTACK_CONTROL_NODE_${i}_IP - echo "collect_logs: for openstack control node ip: ${!OSIP}" - NODE_FOLDER="control_${i}" + if [ "$(is_openstack_feature_enabled n-cpu)" == "1" ]; then + echo "collect_logs: for openstack combo node ip: ${!OSIP}" + NODE_FOLDER="combo_${i}" + else + echo "collect_logs: for openstack control node ip: ${!OSIP}" + NODE_FOLDER="control_${i}" + fi mkdir -p ${NODE_FOLDER} + tcpdump_stop "${!OSIP}" scp extra_debug.sh ${!OSIP}:/tmp + # Capture compute logs if this is a combo node + if [ "$(is_openstack_feature_enabled n-cpu)" == "1" ]; then + scp ${!OSIP}:/etc/nova/nova.conf ${NODE_FOLDER} + scp ${!OSIP}:/etc/nova/nova-cpu.conf ${NODE_FOLDER} + scp ${!OSIP}:/etc/openstack/clouds.yaml ${NODE_FOLDER} + rsync --rsync-path="sudo rsync" -avhe ssh ${!OSIP}:/var/log/nova-agent.log ${NODE_FOLDER} + fi ${SSH} ${!OSIP} "bash /tmp/extra_debug.sh > /tmp/extra_debug.log 2>&1" scp ${!OSIP}:/etc/dnsmasq.conf ${NODE_FOLDER} scp ${!OSIP}:/etc/keystone/keystone.conf ${NODE_FOLDER} @@ -341,6 +509,7 @@ EOF scp ${!OSIP}:/tmp/get_devstack.sh.txt ${NODE_FOLDER} scp ${!OSIP}:/tmp/journalctl.log ${NODE_FOLDER} scp ${!OSIP}:/tmp/ovsdb-tool.log ${NODE_FOLDER} + scp ${!OSIP}:/tmp/tcpdump_start.log ${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} @@ -366,6 +535,7 @@ EOF echo "collect_logs: for openstack compute node ip: ${!OSIP}" NODE_FOLDER="compute_${i}" mkdir -p ${NODE_FOLDER} + tcpdump_stop "${!OSIP}" scp extra_debug.sh ${!OSIP}:/tmp ${SSH} ${!OSIP} "bash /tmp/extra_debug.sh > /tmp/extra_debug.log 2>&1" scp ${!OSIP}:/etc/nova/nova.conf ${NODE_FOLDER} @@ -381,6 +551,7 @@ EOF scp ${!OSIP}:/tmp/get_devstack.sh.txt ${NODE_FOLDER} scp ${!OSIP}:/tmp/journalctl.log ${NODE_FOLDER} scp ${!OSIP}:/tmp/ovsdb-tool.log ${NODE_FOLDER} + scp ${!OSIP}:/tmp/tcpdump_start.log ${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} @@ -410,3 +581,246 @@ EOF echo "tempest results not found in ${DEVSTACK_TEMPEST_DIR}/${TESTREPO}/0" fi } # collect_netvirt_logs() + +# Utility function for joining strings. +function join() { + delim=' ' + final=$1; shift + + for str in "$@" ; do + final=${final}${delim}${str} + done + + echo ${final} +} + +function get_nodes_list() { + # Create the string for nodes + for i in `seq 1 ${NUM_ODL_SYSTEM}` ; do + CONTROLLERIP=ODL_SYSTEM_${i}_IP + nodes[$i]=${!CONTROLLERIP} + done + + nodes_list=$(join "${nodes[@]}") + echo ${nodes_list} +} + +function get_features() { + if [ ${CONTROLLERSCOPE} == 'all' ]; then + ACTUALFEATURES="odl-integration-compatible-with-all,${CONTROLLERFEATURES}" + export CONTROLLERMEM="3072m" + else + ACTUALFEATURES="odl-infrautils-ready,${CONTROLLERFEATURES}" + fi + + # Some versions of jenkins job builder result in feature list containing spaces + # and ending in newline. Remove all that. + ACTUALFEATURES=`echo "${ACTUALFEATURES}" | tr -d '\n \r'` + echo "ACTUALFEATURES: ${ACTUALFEATURES}" + + # In the case that we want to install features via karaf shell, a space separated list of + # ACTUALFEATURES IS NEEDED + SPACE_SEPARATED_FEATURES=$(echo "${ACTUALFEATURES}" | tr ',' ' ') + echo "SPACE_SEPARATED_FEATURES: ${SPACE_SEPARATED_FEATURES}" + + export ACTUALFEATURES + export SPACE_SEPARATED_FEATURES +} + +# Create the configuration script to be run on controllers. +function create_configuration_script() { + cat > ${WORKSPACE}/configuration-script.sh < ${WORKSPACE}/configuration-script.sh < ${WORKSPACE}/startup-script.sh < ${WORKSPACE}/startup-script.sh < ${WORKSPACE}/post-startup-script.sh < ${WORKSPACE}/post-startup-script.sh < ${WORKSPACE}/ps_before.log + pid=$(grep org.apache.karaf.main.Main ${WORKSPACE}/ps_before.log | grep -v grep | tr -s ' ' | cut -f2 -d' ') + echo "karaf main: org.apache.karaf.main.Main, pid:${pid}" + ssh ${!CONTROLLERIP} "${JAVA_HOME}/bin/jstack -l ${pid}" > ${WORKSPACE}/karaf_${i}_${pid}_threads_before.log || true + done +}