255de9876b
In order to prepare for implementing requirements management by the OpenStack requirements management process, and to enable the use of tox to execute the functional test, this patch implements some changes to the tox configuration: - The minimum tox version is increased in order to be able to use constraints for the python packages. - The OpenStack upper-constraints are used when preparing the test venv for the linters checks. - Any proxy environment variables set on the test host are passed into the venv to enable testing from behind a proxy. - The environment variables used by Ansible tests are moved into a new venv called 'ansible' and this environment is inherited by all Ansible-related tests. - The docs test will clean-up an existing build directory before executing the docs build. - The releasenotes build cannot use upper-constraints at this point, so it doesn't. - The Ansible role download will no longer ignore errors so that any problems discovered will result in a failed test. - A functional test environment which executes the gate-check-commit script is added in order to allow the switch to using the same functional test execution job in OpenStack-CI as is used for the roles. This, in turn, enables the execution of the job for multiple Operating Systems (CentOS, Ubuntu Xenial, etc). - The 'ansible' and 'ansible-lint' requirements are moved from test-requirements to the tox file in order to ensure that we can abide by the global-requirements contract. - The test-requirement for 'mock' has its formatting changed to be consistent with other test-requirements. Change-Id: Ida78a2eae93da5fc56ec6a3d58e75c7db0f08b16
176 lines
5.0 KiB
INI
176 lines
5.0 KiB
INI
[tox]
|
|
minversion = 2.0
|
|
skipsdist = True
|
|
envlist = docs,linters,releasenotes
|
|
|
|
|
|
[testenv]
|
|
usedevelop = True
|
|
basepython = python2.7
|
|
install_command =
|
|
pip install -c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt} {opts} {packages}
|
|
deps =
|
|
-r{toxinidir}/test-requirements.txt
|
|
passenv =
|
|
HOME
|
|
http_proxy
|
|
HTTP_PROXY
|
|
https_proxy
|
|
HTTPS_PROXY
|
|
no_proxy
|
|
NO_PROXY
|
|
whitelist_externals =
|
|
bash
|
|
rm
|
|
sudo
|
|
setenv =
|
|
VIRTUAL_ENV={envdir}
|
|
|
|
|
|
[testenv:docs]
|
|
commands=
|
|
bash -c "rm -rf doc/build"
|
|
python setup.py build_sphinx
|
|
|
|
|
|
[testenv:releasenotes]
|
|
# NOTE(sdague): this target does not use constraints because
|
|
# upstream infra does not yet support it. Once that's fixed, we can
|
|
# drop the install_command.
|
|
install_command =
|
|
pip install -U --force-reinstall {opts} {packages}
|
|
commands =
|
|
sphinx-build -a -E -W -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html
|
|
|
|
|
|
# environment used by the -infra templated docs job
|
|
[testenv:venv]
|
|
# NOTE(jaegerandi): this target does not use constraints because
|
|
# upstream infra does not yet support it. Once that's fixed, we can
|
|
# drop the install_command.
|
|
install_command =
|
|
pip install -U --force-reinstall {opts} {packages}
|
|
commands =
|
|
{posargs}
|
|
|
|
|
|
[testenv:pep8]
|
|
commands =
|
|
# Run hacking/flake8 check for all python files
|
|
bash -c "grep --recursive --binary-files=without-match \
|
|
--files-with-match '^.!.*python$' \
|
|
--exclude-dir .eggs \
|
|
--exclude-dir .git \
|
|
--exclude-dir .tox \
|
|
--exclude-dir *.egg-info \
|
|
--exclude-dir doc \
|
|
{toxinidir} | xargs flake8 --verbose"
|
|
|
|
|
|
[flake8]
|
|
# Ignores the following rules due to how ansible modules work in general
|
|
# F403 'from ansible.module_utils.basic import *' used;
|
|
# unable to detect undefined names
|
|
# H303 No wildcard (*) import.
|
|
ignore=F403,H303
|
|
|
|
|
|
[testenv:bashate]
|
|
commands =
|
|
# Run bashate check for all bash scripts
|
|
# Ignores the following rules:
|
|
# E003: Indent not multiple of 4 (we prefer to use multiples of 2)
|
|
# E006: Line longer than 79 columns (as many scripts use jinja
|
|
# templating, this is very difficult)
|
|
# E040: Syntax error determined using `bash -n` (as many scripts
|
|
# use jinja templating, this will often fail and the syntax
|
|
# error will be discovered in execution anyway)
|
|
bash -c "grep --recursive --binary-files=without-match \
|
|
--files-with-match '^.!.*\(ba\)\?sh$' \
|
|
--exclude-dir .tox \
|
|
--exclude-dir .git \
|
|
{toxinidir} | xargs bashate --error . --verbose --ignore=E003,E006,E040"
|
|
|
|
|
|
[testenv:ansible]
|
|
deps =
|
|
{[testenv]deps}
|
|
ansible==2.1.0
|
|
ansible-lint>=2.7.0,<3.0.0
|
|
setenv =
|
|
{[testenv]setenv}
|
|
ANSIBLE_HOST_KEY_CHECKING = False
|
|
ANSIBLE_SSH_CONTROL_PATH = /tmp/%%h-%%r
|
|
ANSIBLE_ACTION_PLUGINS = {homedir}/.ansible/roles/plugins/action
|
|
ANSIBLE_CALLBACK_PLUGINS = {homedir}/.ansible/roles/plugins/callback
|
|
ANSIBLE_FILTER_PLUGINS = {homedir}/.ansible/roles/plugins/filter
|
|
ANSIBLE_LOOKUP_PLUGINS = {homedir}/.ansible/roles/plugins/lookup
|
|
ANSIBLE_LIBRARY = {homedir}/.ansible/roles/plugins/library
|
|
ANSIBLE_ROLES_PATH = {homedir}/.ansible/roles
|
|
commands =
|
|
rm -rf {homedir}/.ansible
|
|
ansible-galaxy install \
|
|
--role-file={toxinidir}/ansible-role-requirements.yml \
|
|
--force
|
|
|
|
|
|
[testenv:ansible-lint]
|
|
deps =
|
|
{[testenv:ansible]deps}
|
|
setenv =
|
|
{[testenv:ansible]setenv}
|
|
commands =
|
|
{[testenv:ansible]commands}
|
|
# Perform an Ansible lint check
|
|
ansible-lint --exclude {homedir}/.ansible/roles/sshd \
|
|
{toxinidir}/tests/bootstrap-aio.yml
|
|
ansible-lint {toxinidir}/playbooks/setup-everything.yml
|
|
|
|
|
|
[testenv:ansible-syntax]
|
|
deps =
|
|
{[testenv:ansible]deps}
|
|
setenv =
|
|
{[testenv:ansible]setenv}
|
|
commands =
|
|
{[testenv:ansible]commands}
|
|
# Perform an Ansible syntax check
|
|
ansible-playbook -i 'localhost ansible-connection=local,' \
|
|
--syntax-check \
|
|
--list-tasks \
|
|
{toxinidir}/tests/bootstrap-aio.yml
|
|
ansible-playbook -i 'localhost ansible-connection=local,' \
|
|
--syntax-check \
|
|
--list-tasks \
|
|
-e 'force_containers_destroy=yes' \
|
|
{toxinidir}/playbooks/setup-everything.yml
|
|
|
|
|
|
[testenv:inventory]
|
|
# Use a fixed seed since some inventory tests rely on specific ordering
|
|
setenv =
|
|
{[testenv]setenv}
|
|
PYTHONHASHSEED = 100
|
|
commands =
|
|
coverage erase
|
|
coverage run {toxinidir}/tests/test_inventory.py
|
|
coverage report --show-missing --include={toxinidir}/playbooks/inventory/*
|
|
|
|
|
|
[testenv:linters]
|
|
deps =
|
|
{[testenv:ansible]deps}
|
|
setenv =
|
|
{[testenv:ansible]setenv}
|
|
commands =
|
|
{[testenv:pep8]commands}
|
|
{[testenv:bashate]commands}
|
|
{[testenv:ansible-lint]commands}
|
|
{[testenv:ansible-syntax]commands}
|
|
{[testenv:inventory]commands}
|
|
|
|
|
|
[testenv:functional]
|
|
commands =
|
|
scripts/gate-check-commit.sh
|