#!/usr/bin/env bash # Copyright 2019 Red Hat, Inc. # All Rights Reserved. # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. ## Shell Opts ---------------------------------------------------------------- set -o pipefail set -xeuo ## Vars ---------------------------------------------------------------------- export PROJECT_DIR="$(dirname $(readlink -f ${BASH_SOURCE[0]}))/../" export ROLE_NAME="${ROLE_NAME:-$1}" export TRIPLEO_JOB_ANSIBLE_ARGS=${TRIPLEO_JOB_ANSIBLE_ARGS:-""} export UPPER_CONSTRAINTS_FILE=${UPPER_CONSTRAINTS_FILE:-"https://opendev.org/openstack/requirements/raw/branch/master/upper-constraints.txt"} ## Functions ----------------------------------------------------------------- function run_pip { "${HOME}/test-python/bin/pip" install \ -c "${UPPER_CONSTRAINTS_FILE}" \ -r "${PROJECT_DIR}/requirements.txt" \ -r "${PROJECT_DIR}/test-requirements.txt" \ -r "${PROJECT_DIR}/molecule-requirements.txt" ${@:-} } ## Main ---------------------------------------------------------------------- # Source distribution information source /etc/os-release || source /usr/lib/os-release RHT_PKG_MGR=$(command -v dnf || command -v yum) PYTHON_EXEC=$(command -v python3 || command -v python) # Install the one requirement we need to run any local test case "${ID,,}" in amzn|rhel|centos|fedora) sudo "${RHT_PKG_MGR}" install -y gcc python*-virtualenv ;; esac # Create a virtual env "${PYTHON_EXEC}" -m virtualenv --system-site-packages "${HOME}/test-python" # Run bindep "${HOME}/test-python/bin/pip" install pip setuptools bindep --upgrade "${PROJECT_DIR}/scripts/bindep-install" # Install local requirements if [[ -d "${HOME}/.cache/pip/wheels" ]]; then rm -rf "${HOME}/.cache/pip/wheels" fi run_pip # NOTE(cloudnull): In some cases ansible will not be installed due to wheel # building issues, caused by pip. If this happens we # re-install the packages with the force flag, which will # ensure everything is rebuilt and installed correctly. if [ ! -f "${HOME}/test-python/bin/ansible" ]; then run_pip --force fi # Display list of installed packages with versions (debugging failures) "${HOME}/test-python/bin/pip" freeze # Run local test PS1="[\u@\h \W]\$" source "${HOME}/test-python/bin/activate" source "${PROJECT_DIR}/ansible-test-env.rc" export ANSIBLE_ROLES_PATH="${ANSIBLE_ROLES_PATH}:${HOME}/zuul-jobs/roles" ansible-playbook -i "${PROJECT_DIR}/tests/hosts.ini" \ -e "tripleo_src=$(realpath --relative-to="${HOME}" "${PROJECT_DIR}")" \ -e "tripleo_role_name=${ROLE_NAME}" \ -e "tripleo_job_ansible_args='${TRIPLEO_JOB_ANSIBLE_ARGS}'" \ -e "ansible_user=${USER}" \ -e "ansible_user_dir=${HOME}" \ "${PROJECT_DIR}/tripleo_ansible/playbooks/prepare-test-host.yml" \ "${PROJECT_DIR}/zuul.d/playbooks/run-local.yml" \ -v