tripleo-ci/roles/run-test/templates/toci_quickstart.sh.j2

219 lines
9.6 KiB
Django/Jinja
Executable File

#!/usr/bin/env bash
set -eux
set -o pipefail
export ANSIBLE_NOCOLOR=1
LOCAL_WORKING_DIR="{{ workspace }}/.quickstart"
WORKING_DIR="$HOME"
LOGS_DIR={{ workspace }}/logs
source {{ tripleo_root }}/tripleo-ci/scripts/oooq_common_functions.sh
## Signal to toci_gate_test.sh we've started by
touch /tmp/toci.started
export DEFAULT_ARGS="--extra-vars local_working_dir=$LOCAL_WORKING_DIR \
--extra-vars virthost={{ undercloud }} \
--inventory $LOCAL_WORKING_DIR/hosts \
--extra-vars tripleo_root={{ tripleo_root }} \
--extra-vars working_dir=$WORKING_DIR \
--extra-vars tripleo_generate_scripts=true \
--skip-tags "{{ ','.join(skip_tags_list.split(',') + remove_tags|default([])) }}" \
"
# --install-deps arguments installs deps and then quits, no other arguments are
# processed.
QUICKSTART_PREPARE_CMD="
./quickstart.sh
--install-deps
"
QUICKSTART_VENV_CMD="
./quickstart.sh
{% if teardown|default(true)|bool %}
--bootstrap
{% endif %}
--no-clone
{% if environment_type == 'baremetal' -%}
{# It needs to be installed on zuul node to drive deployment #}
--url-requirements git+https://opendev.org/openstack/tripleo-operator-ansible/#egg=tripleo-operator-ansible
{% endif %}
--working-dir $LOCAL_WORKING_DIR
--playbook noop.yml
--retain-inventory
{{ undercloud }}
"
QUICKSTART_INSTALL_CMD="
$LOCAL_WORKING_DIR/bin/ansible-playbook
--tags {{ ','.join(tags + (extra_tags|default([]))) }}
"
export QUICKSTART_DEFAULT_RELEASE_ARG="--extra-vars @$LOCAL_WORKING_DIR/config/release/tripleo-ci/{{ ansible_distribution }}-{{ ansible_distribution_major_version }}/$QUICKSTART_RELEASE.yml"
QUICKSTART_COLLECTLOGS_CMD="$LOCAL_WORKING_DIR/bin/ansible-playbook \
$LOCAL_WORKING_DIR/playbooks/collect-logs.yml \
-vvvv \
$QUICKSTART_DEFAULT_RELEASE_ARG \
{{ featureset_conf }} \
{{ env_vars }} \
{{ role_vars }} \
{{ extra_vars }} \
$DEFAULT_ARGS \
--extra-vars @{{ tripleo_root }}/tripleo-ci/toci-quickstart/config/collect-logs.yml \
--extra-vars artcl_collect_dir=$LOGS_DIR \
--extra-vars @{{ workspace }}/logs/zuul-variables.yaml \
--extra-vars @{{ workspace }}/logs/hostvars-variables.yaml \
--tags all \
"
declare -A RELEASE_ARGS=()
if [[ -f "$RELEASES_FILE_OUTPUT" ]]; then
source $RELEASES_FILE_OUTPUT
declare -A RELEASE_ARGS=(
["multinode-undercloud.yml"]=$(get_extra_vars_from_release \
$UNDERCLOUD_INSTALL_RELEASE $UNDERCLOUD_INSTALL_HASH)
["multinode-undercloud-upgrade.yml"]=$(get_extra_vars_from_release \
$UNDERCLOUD_TARGET_RELEASE $UNDERCLOUD_TARGET_HASH)
["multinode-overcloud-prep.yml"]=$(get_extra_vars_from_release \
$OVERCLOUD_DEPLOY_RELEASE $OVERCLOUD_DEPLOY_HASH)
["multinode-overcloud.yml"]=$(get_extra_vars_from_release \
$OVERCLOUD_DEPLOY_RELEASE $OVERCLOUD_DEPLOY_HASH)
["multinode-overcloud-update.yml"]=$(get_extra_vars_from_release \
$OVERCLOUD_TARGET_RELEASE $OVERCLOUD_TARGET_HASH)
["multinode-overcloud-upgrade.yml"]=$(get_extra_vars_from_release \
$OVERCLOUD_TARGET_RELEASE $OVERCLOUD_TARGET_HASH)
["multinode-validate.yml"]=$(get_extra_vars_from_release \
$OVERCLOUD_TARGET_RELEASE $OVERCLOUD_TARGET_HASH)
["multinode-standalone.yml"]=$(get_extra_vars_from_release \
$STANDALONE_DEPLOY_RELEASE $STANDALONE_DEPLOY_HASH \
$STANDALONE_DEPLOY_NEWEST_HASH)
["multinode-standalone-upgrade.yml"]=$(get_extra_vars_from_release \
$STANDALONE_TARGET_RELEASE $STANDALONE_TARGET_HASH \
$STANDALONE_TARGET_NEWEST_HASH)
)
fi
if is_featureset mixed_os "{{ job_featureset_file }}"; then
eight_release=$LOCAL_WORKING_DIR/config/release/tripleo-ci/${DISTRIBUTION:-CentOS}-8/$QUICKSTART_RELEASE.yml
RELEASE_ARGS=(
["multinode-overcloud-mixed-os-repos-compute.yml"]=" --extra-vars @$eight_release --extra-vars registry_distro=8 "
["multinode-undercloud-mixed-os.yml"]=" $QUICKSTART_DEFAULT_RELEASE_ARG --extra-vars registry_distro=9 --extra-vars registry_distro_lower=8 "
["multinode-overcloud-prep.yml"]=" $QUICKSTART_DEFAULT_RELEASE_ARG --extra-vars registry_distro=9 "
["multinode-overcloud-mixed-os-deploy.yml"]=" $QUICKSTART_DEFAULT_RELEASE_ARG --extra-vars registry_distro=9 --extra-vars registry_distro_lower=8 "
)
fi
declare -A PLAYBOOKS_ARGS=(
["baremetal-full-overcloud.yml"]=" --extra-vars validation_args='--validation-errors-nonfatal' "
["multinode-overcloud.yml"]=" --extra-vars validation_args='--validation-errors-nonfatal' "
["multinode.yml"]=" --extra-vars validation_args='--validation-errors-nonfatal' "
)
# minor_update variable is set to true only in featureset068
# In downstream we do not use content provider and we pull already created images, so we only need to override container images tag with newer one(override_docker_image_tag)
# In upstream we need to override container_registry_release to get ip of docker registry and dlrn hash from content provider which provides containers with 'current' tag
# Containers are required to be pulled both to undercloud and overcloud to run minor update on the same branch
# Also to trigger update of undercloud and overcloud from correct playbook, overcloud_update and undercloud_update extra-vars are set to false respectively
if is_featureset minor_update "{{ job_featureset_file }}"; then
{% if osp_release is defined %}
PLAYBOOKS_ARGS=(
["multinode-undercloud-upgrade.yml"]="--extra-vars overcloud_update='false' --extra-vars override_docker_image_tag='true' "
["multinode-overcloud-update.yml"]="--extra-vars undercloud_update='false' --extra-vars override_docker_image_tag='true'"
)
{% else %}
PLAYBOOKS_ARGS=(
["multinode-undercloud-upgrade.yml"]=" --extra-vars container_registry_release='${QUICKSTART_RELEASE}-current' --extra-vars promote_source='current' --extra-vars overcloud_update='false' "
["multinode-overcloud-update.yml"]=" --extra-vars container_registry_release='${QUICKSTART_RELEASE}-current' --extra-vars promote_source='current' --extra-vars undercloud_update='false' "
)
{% endif %}
fi
mkdir -p $LOCAL_WORKING_DIR
# TODO(gcerami) parametrize hosts
cp {{ tripleo_root }}/tripleo-ci/toci-quickstart/config/testenv/{{ environment_infra }}_hosts $LOCAL_WORKING_DIR/hosts
pushd {{ tripleo_root }}/tripleo-quickstart/
$QUICKSTART_PREPARE_CMD
$QUICKSTART_VENV_CMD
# Only ansible-playbook command will be used from this point forward, so we
# need some variables from quickstart.sh
OOOQ_DIR={{ tripleo_root }}/tripleo-quickstart/
export OPT_WORKDIR=$LOCAL_WORKING_DIR
export ANSIBLE_CONFIG=$OOOQ_DIR/ansible.cfg
export ANSIBLE_COLLECTIONS_PATHS="$OPT_WORKDIR/share/ansible/collections:~/.ansible/collections:/usr/share/ansible/collections"
export ARA_DATABASE="sqlite:///${LOCAL_WORKING_DIR}/ara.sqlite"
export VIRTUAL_ENV_DISABLE_PROMPT=1
# Workaround for virtualenv issue https://github.com/pypa/virtualenv/issues/1029
set +u
source $LOCAL_WORKING_DIR/bin/activate
set -u
source $OOOQ_DIR/ansible_ssh_env.sh
# Debug step capture env variables
{% if dryrun|default(false)|bool %}
echo "-- Capture Environment Variables Used ---------"
echo "$(env)" | tee -a $LOGS_DIR/toci_env_args_output.log
declare -p | tee -a $LOGS_DIR/toci_env_args_output.log
{% endif %}
echo "-- Playbooks Output --------------------------"
for playbook in {{ " ".join(playbooks) }}; do
echo "$QUICKSTART_INSTALL_CMD \
${RELEASE_ARGS[$playbook]:=$QUICKSTART_DEFAULT_RELEASE_ARG} \
{{ nodes_args }} \
{{ featureset_conf }} \
{{ env_vars }} \
{{ role_vars }} \
{{ extra_vars }} \
{{ vxlan_vars }} {{ quickstart_verbosity|default('') }} \
$DEFAULT_ARGS \
$LOCAL_WORKING_DIR/playbooks/$playbook ${PLAYBOOKS_ARGS[$playbook]:-}" \
--extra-vars @{{ workspace }}/logs/zuul-variables.yaml \
--extra-vars @{{ workspace }}/logs/hostvars-variables.yaml \
| sed 's/--/\n--/g' \
| tee -a $LOGS_DIR/playbook_executions.log
echo "# --------------------------------------- " \
| tee -a $LOGS_DIR/playbook_executions.log
done
{% if dryrun|default(false)|bool %}
# Bypassing execution, dryrun was set
exit_value=0
{% else %}
## LOGS COLLECTION PREPARE
create_collect_logs_script
for playbook in {{ " ".join(playbooks) }}; do
echo ${RELEASE_ARGS[$playbook]:=$QUICKSTART_DEFAULT_RELEASE_ARG}
$QUICKSTART_INSTALL_CMD \
${RELEASE_ARGS[$playbook]:=$QUICKSTART_DEFAULT_RELEASE_ARG} \
{{ nodes_args }} \
{{ featureset_conf }} \
{{ env_vars }} \
{{ role_vars }} \
{{ extra_vars }} \
{{ vxlan_vars }} {{ quickstart_verbosity|default('') }} \
$DEFAULT_ARGS \
--extra-vars @{{ workspace }}/logs/zuul-variables.yaml \
--extra-vars @{{ workspace }}/logs/hostvars-variables.yaml \
$LOCAL_WORKING_DIR/playbooks/$playbook ${PLAYBOOKS_ARGS[$playbook]:-} \
2>&1 | tee -a $LOGS_DIR/quickstart_install.log && exit_value=0 || exit_value=$?
# Print status of playbook run
[[ "$exit_value" == 0 ]] && echo "Playbook run of $playbook passed successfully"
[[ "$exit_value" != 0 ]] && echo "Playbook run of $playbook failed" && break
done
[[ "$exit_value" == 0 ]] && echo "Playbook run passed successfully" || echo "Playbook run failed"
{% endif %}
echo 'Quickstart completed.'
{% if force_job_failure|default(false) %}echo "Quickstart completed with exit code $exit_value but forcing failure with exit 1"
exit 1{% else %}
exit $exit_value{% endif %}