function previous_release_from { local release="${1:-master}" local type="${2:-mixed_upgrade}" local previous_version="" case "${type}" in 'mixed_upgrade') previous_version=$(previous_release_mixed_upgrade_case "${release}");; 'ffu_upgrade') previous_version=$(previous_release_ffu_upgrade_case "${release}");; *) echo "UNKNOWN_TYPE" return 1 ;; esac echo "${previous_version}" } function previous_release_mixed_upgrade_case { local release="${1:-master}" case "${release}" in ''|master|promotion-testing-hash-master) echo "rocky" ;; stein|promotion-testing-hash-stein) echo "rocky" ;; rocky|promotion-testing-hash-rocky) echo "queens" ;; queens) echo "pike" ;; pike) echo "ocata" ;; ocata) echo "newton" ;; newton) echo "mitaka" ;; *) echo "UNKNOWN_RELEASE" return 1 ;; esac } function previous_release_ffu_upgrade_case { local release="${1:-master}" case "${release}" in ''|master) # NOTE: we need to update this when we cut a stable branch echo "newton" ;; queens) echo "newton" ;; *) echo "INVALID_RELEASE_FOR_FFU" return 1 ;; esac } function is_featureset { local type="${1}" local featureset_file="${2}" [ $(shyaml get-value "${type}" "False"< "${featureset_file}") = "True" ] } function create_collect_logs_script { cat > $LOGS_DIR/collect_logs.sh < /tmp/dns_cache.txt sudo chown {{ ansible_user_id }}: /tmp/dns_cache.txt cat /tmp/dns_cache.txt | gzip - > $LOGS_DIR/dns_cache.txt.gz mkdir -p $LOGS_DIR/quickstart_files find $LOCAL_WORKING_DIR -maxdepth 1 -type f -not -name "*sqlite" | while read i; do gzip -cf \$i > $LOGS_DIR/quickstart_files/\$(basename \$i).txt.gz; done $QUICKSTART_COLLECTLOGS_CMD > $LOGS_DIR/quickstart_collect_logs.log || \ echo "WARNING: quickstart collect-logs failed, check quickstart_collectlogs.log for details" cp $LOGS_DIR/undercloud/var/log/postci.txt.gz $LOGS_DIR/ || true if [[ -e $LOGS_DIR/undercloud/home/$USER/tempest/testrepository.subunit.gz ]]; then cp $LOGS_DIR/undercloud/home/$USER/tempest/testrepository.subunit.gz ${LOGS_DIR}/testrepository.subunit.gz elif [[ -e $LOGS_DIR/undercloud/home/$USER/pingtest.subunit.gz ]]; then cp $LOGS_DIR/undercloud/home/$USER/pingtest.subunit.gz ${LOGS_DIR}/testrepository.subunit.gz elif [[ -e $LOGS_DIR/undercloud/home/$USER/undercloud_sanity.subunit.gz ]]; then cp $LOGS_DIR/undercloud/home/$USER/undercloud_sanity.subunit.gz ${LOGS_DIR}/testrepository.subunit.gz fi # Copy tempest.html to root dir cp $LOGS_DIR/undercloud/home/$USER/tempest/tempest.html.gz ${LOGS_DIR} || true # Copy tempest and .testrepository directory to /opt/stack/new/tempest and # unzip sudo mkdir -p /opt/stack/new sudo cp -Rf $LOGS_DIR/undercloud/home/$USER/tempest /opt/stack/new || true sudo gzip -d -r /opt/stack/new/tempest/.testrepository || true # record the size of the logs directory # -L, --dereference dereference all symbolic links # Note: tail -n +1 is to prevent the error 'Broken Pipe' e.g. 'sort: write failed: standard output: Broken pipe' du -L -ch $LOGS_DIR/* | tail -n +1 | sort -rh | head -n 200 &> $LOGS_DIR/log-size.txt || true END } get_extra_vars_from_release() { local release_name=$1 local release_hash=$2 local newest_release_hash=${3:-""} local release_file=$LOCAL_WORKING_DIR/config/release/tripleo-ci/${DISTRIBUTION:-CentOS}-${DISTRIBUTION_MAJOR_VERSION:-7}/$release_name.yml echo "--extra-vars @$release_file -e dlrn_hash=$release_hash -e get_build_command=$release_hash ${newest_release_hash:+-e dlrn_hash_newest=$newest_release_hash}" } # Enclose IPv6 addresses in brackets. # This is needed for scp command where the first column of IPv6 address gets # interpreted as the separator between address and path otherwise. # $1 : IP address to sanitize function sanitize_ip_address { ip=$1 if [[ $ip =~ .*:.* ]]; then echo \[$ip\] else echo $ip fi } function python_cmd() { distribution=unknown distribution_major_version=unknown # we prefer python2 because on few systems python->python3 python_cmd=python2 if [ -f /etc/os-release ]; then . /etc/os-release distribution_major_version=${VERSION_ID%.*} case $NAME in "Red Hat"*) distribution="RedHat" if [ "$distribution_major_version" -ge "8" ]; then python_cmd=python3 fi ;; "CentOS"*) distribution="CentOS" if [ "$distribution_major_version" -ge "8" ]; then python_cmd=python3 fi ;; "Fedora"*) distribution="Fedora" if [ "$distribution_major_version" -ge "28" ]; then python_cmd=python3 fi ;; "Ubuntu"*) distribution="Ubuntu" ;; "Debian"*) distribution="Debian" ;; esac elif [ -f /etc/lsb-release ]; then . /etc/lsb-release distribution=${DISTRIB_ID}xx distribution_major_version=${DISTRIB_RELEASE%.*} elif [ -f /etc/debian_version ]; then distribution="Debian" distribution_major_version=$(cat /etc/debian_version | cut -d. -f1) else # Covers for FreeBSD and many others distribution=$(uname -s) if [ $distribution = Darwin ]; then distribution="MacOSX" distribution_major_version=$(sw_vers -productVersion | cut -d. -f1) fi which $python_cmd 2>&1 >/dev/null || { python_cmd=/usr/local/bin/python2.7 } fi echo $python_cmd } function package_manager() { PKG="$(command -v dnf || command -v yum)" if [ "$(python_cmd)" == "python3" ]; then echo "${PKG} -y --exclude='python2*' $*" else echo "${PKG} -y --exclude='python3*' $*" fi }