#!/usr/bin/env bash source $(dirname $0)/scripts/common_vars.bash set -eux export START_JOB_TIME=$(date +%s) export PS4='+(${BASH_SOURCE}:${LINENO}): ${FUNCNAME[0]:+${FUNCNAME[0]}(): }' source $TRIPLEO_ROOT/tripleo-ci/scripts/oooq_common_functions.sh if [ -f /etc/nodepool/provider ] ; then # this sets # NODEPOOL_PROVIDER (e.g tripleo-test-cloud-rh1) # NODEPOOL_CLOUD (e.g.tripleo-test-cloud-rh1) # NODEPOOL_REGION (e.g. regionOne) # NODEPOOL_AZ source /etc/nodepool/provider # source variables common across all the scripts. if [ -e /etc/ci/mirror_info.sh ]; then source /etc/ci/mirror_info.sh fi {% if rhcloud -%} # In order to save space remove the cached git repositories, at this point in # CI the ones we are interested in have been cloned to /opt/stack/new. We # can also remove some distro images cached on the images. sudo find /opt/git -delete || true {% endif %} fi # default $NODEPOOL_PROVIDER if not already set as it's used later export NODEPOOL_PROVIDER=${NODEPOOL_PROVIDER:-""} # create logs dir (check if collect-logs doesn't already do this) mkdir -p $WORKSPACE/logs # Set job as failed until it's overwritten by pingtest/tempest real test subunit cat $TRIPLEO_ROOT/tripleo-ci/scripts/fake_fail_subunit | gzip - > $WORKSPACE/logs/testrepository.subunit.gz # Since python3 became default on some distros without even having a python/pip # command installed due to PEP-0394, we can no longer rely on having # unversioned commands available like python(2|3) or pip(2|3). We should only # call pip using module approach which ensures we use the right version. $(python_cmd) -m pip --version || \ (curl -s "https://bootstrap.pypa.io/get-pip.py" -o "get-pip.py"; sudo $(python_cmd) get-pip.py) if [ "$(python_cmd)" == "python3" ]; then sudo $(package_manager) install python3-setuptools python3-requests python3-urllib3 python3-PyYAML else sudo $(package_manager) install python2-setuptools python2-requests python-requests python-urllib3 PyYAML fi sudo $(python_cmd) -m pip install shyaml # Sets whether or not this job will upload images. export PERIODIC=0 # Sets which repositories to use in the job export QUICKSTART_RELEASE="${STABLE_RELEASE:-master}" # Stores OVB undercloud instance id export UCINSTANCEID="null" # Set the overcloud hosts for multinode export OVERCLOUD_HOSTS= export CONTROLLER_HOSTS= export SUBNODES_SSH_KEY= export EXTRA_VARS=${EXTRA_VARS:-""} export VXLAN_VARS=${VXLAN_VARS:-""} export EXTRANODE="" export EMIT_RELEASES_EXTRA_ARGS="" LOCAL_WORKING_DIR="$WORKSPACE/.quickstart" LWD=$LOCAL_WORKING_DIR export RELEASES_FILE_OUTPUT=$WORKSPACE/logs/releases.sh export RELEASES_SCRIPT=$TRIPLEO_ROOT/tripleo-ci/scripts/emit_releases_file/emit_releases_file.py export RELEASES_SCRIPT_LOGFILE=$WORKSPACE/logs/emit_releases_file.log case {{ environment_type | default('standalone') }} in ovb) OVB=1 ;; multinode) SUBNODES_SSH_KEY=/etc/nodepool/id_rsa CONTROLLER_HOSTS=$(sed -n 1,1p /etc/nodepool/sub_nodes_private) OVERCLOUD_HOSTS=$(cat /etc/nodepool/sub_nodes_private) ;; esac MIXED_UPGRADE_TYPE='' # Order matters. ffu featureset has both mixed version and ffu_overcloud_upgrade. if is_featureset ffu_overcloud_upgrade "{{ job_featureset_file }}"; then MIXED_UPGRADE_TYPE='ffu_upgrade' elif is_featureset mixed_upgrade "{{ job_featureset_file }}"; then MIXED_UPGRADE_TYPE='mixed_upgrade' elif is_featureset undercloud_upgrade "{{ job_featureset_file }}"; then export UPGRADE_RELEASE=$QUICKSTART_RELEASE export QUICKSTART_RELEASE=$(previous_release_mixed_upgrade_case "${UPGRADE_RELEASE}") fi # Set UPGRADE_RELEASE if applicable if [ -n "${MIXED_UPGRADE_TYPE}" ]; then export UPGRADE_RELEASE=$(previous_release_from "${STABLE_RELEASE}" "${MIXED_UPGRADE_TYPE}") QUICKSTART_RELEASE="$QUICKSTART_RELEASE-undercloud-$UPGRADE_RELEASE-overcloud" fi {% if periodic|bool %} PERIODIC=1 QUICKSTART_RELEASE="promotion-testing-hash-${QUICKSTART_RELEASE}" EMIT_RELEASES_EXTRA_ARGS="$EMIT_RELEASES_EXTRA_ARGS --is-periodic" {% endif %} if [[ -f "$RELEASES_SCRIPT" ]] && [[ {{ featureset }} =~ 011|037|047|050|056 ]]; then if [[ -f "$RELEASES_FILE_OUTPUT" ]]; then echo "Importing ready releases.sh file - skipping releases.sh file generation." else $(python_cmd) $RELEASES_SCRIPT \ --stable-release ${STABLE_RELEASE:-"master"} \ --featureset-file $TRIPLEO_ROOT/tripleo-quickstart/config/general_config/$(basename {{ job_featureset_file }}) \ --output-file $RELEASES_FILE_OUTPUT \ --log-file $RELEASES_SCRIPT_LOGFILE \ --distro-name {{ ansible_distribution | lower }} \ --distro-version {{ ansible_distribution_major_version }} \ $EMIT_RELEASES_EXTRA_ARGS fi fi # Import gated tripleo-upgrade in oooq for upgrades/updates jobs if [[ -d $TRIPLEO_ROOT/tripleo-upgrade ]]; then echo "file://${TRIPLEO_ROOT}/tripleo-upgrade/#egg=tripleo-upgrade" >> ${TRIPLEO_ROOT}/tripleo-quickstart/quickstart-extras-requirements.txt else # Otherwise, if not importing it, oooq will fail when loading # tripleo-upgrade role in the playbook. echo "git+https://opendev.org/openstack/tripleo-upgrade.git@${ZUUL_BRANCH}#egg=tripleo-upgrade" >> ${TRIPLEO_ROOT}/tripleo-quickstart/quickstart-extras-requirements.txt fi # Import gated external repo in oooq - starting with browbeat, tripleo-ha-utils, openstack-ansible-os_tempest, # ansible-config_template, ansible-role-python_venv_build, ansible-role-collect-logs EXTERNAL_REPOS="x/browbeat openstack/tripleo-ha-utils openstack/tripleo-ci openstack/tripleo-quickstart-extras openstack/openstack-ansible-os_tempest \ openstack/ansible-config_template openstack/ansible-role-python_venv_build openstack/ansible-role-collect-logs \ openstack/tripleo-operator-ansible openstack/ansible-collections-openstack openstack/tripleo-ansible x/tripleo-ipa \ openstack/openstack-tempest-skiplist openstack/tripleo-validations openstack/validations-common" for EXTERNAL_REPO in $EXTERNAL_REPOS; do if [[ -d ${TRIPLEO_ROOT%openstack}/$EXTERNAL_REPO ]]; then sed -i "s#git+https://opendev.org/$EXTERNAL_REPO#file://${TRIPLEO_ROOT%openstack}/$EXTERNAL_REPO#1" ${TRIPLEO_ROOT}/tripleo-quickstart/quickstart-extras-requirements.txt fi done # Start time tracking export STATS_TESTENV=$(date +%s) pushd $TRIPLEO_ROOT/tripleo-ci if [ -e $WORKSPACE/instackenv.json -a "{{ environment_infra }}" = "ovb" ] ; then echo "Running without te-broker" export TE_DATAFILE=$WORKSPACE/instackenv.json ./toci_quickstart.sh elif [ "{{ environment_infra }}" = "ovb" ] ; then # We only support multi-nic at the moment NETISO_ENV="multi-nic" ./toci_quickstart.sh else # Copy nodepool keys to current user sudo cp /etc/nodepool/id_rsa* $HOME/.ssh/ sudo chown $USER:$USER $HOME/.ssh/id_rsa* chmod 0600 $HOME/.ssh/id_rsa* cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys # pre-ansible requirement sudo mkdir -p /root/.ssh/ # everything below here *MUST* be translated to a role ASAP # empty image to fool overcloud deployment # set no_proxy variable export IP_DEVICE=${IP_DEVICE:-"eth0"} MY_IP=$(ip addr show dev $IP_DEVICE | awk '/inet / {gsub("/.*", "") ; print $2}') MY_IP_eth1=$(ip addr show dev eth1 | awk '/inet / {gsub("/.*", "") ; print $2}') || MY_IP_eth1="" export http_proxy="" undercloud_net_range="192.168.24." undercloud_services_ip=$undercloud_net_range"1" undercloud_haproxy_public_ip=$undercloud_net_range"2" undercloud_haproxy_admin_ip=$undercloud_net_range"3" export no_proxy=$undercloud_services_ip,$undercloud_haproxy_public_ip,$undercloud_haproxy_admin_ip,$MY_IP,$MY_IP_eth1 # finally, run quickstart ./toci_quickstart.sh fi echo "Run completed"