[tox] minversion = 1.6 skipsdist = True envlist = docs,linters,functional [testenv] usedevelop = True install_command = pip install -U {opts} {packages} setenv = VIRTUAL_ENV={envdir} deps = -r{toxinidir}/test-requirements.txt commands = /usr/bin/find . -type f -name "*.pyc" -delete [testenv:docs] commands= python setup.py build_sphinx # environment used by the -infra templated docs job [testenv:venv] deps = -r{toxinidir}/test-requirements.txt commands = {posargs} [testenv:pep8] deps = flake8 whitelist_externals = bash 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] deps = bashate whitelist_externals = bash 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-syntax] passenv = HOME setenv = # TODO (odyssey4me) These are only here as they are non-standard folder # names for Ansible 1.9.x. We are using the standard folder names for # Ansible v2.x. We can remove this when we move to Ansible 2.x. ANSIBLE_ACTION_PLUGINS = {homedir}/.ansible/plugins/action ANSIBLE_CALLBACK_PLUGINS = {homedir}/.ansible/plugins/callback ANSIBLE_FILTER_PLUGINS = {homedir}/.ansible/plugins/filter ANSIBLE_LOOKUP_PLUGINS = {homedir}/.ansible/plugins/lookup # This is required as the default is the current path or a path specified in # ansible.cfg ANSIBLE_LIBRARY = {homedir}/.ansible/plugins/library # This is required as the default is '/etc/ansible/roles' or a path specified # in ansible.cfg ANSIBLE_ROLES_PATH = {homedir}/.ansible/roles:{toxinidir}/.. deps = ansible>1.9,<2.0 whitelist_externals = git rm commands = rm -rf {homedir}/.ansible git clone https://git.openstack.org/openstack/openstack-ansible-plugins {homedir}/.ansible/plugins ansible-galaxy install \ --role-file={toxinidir}/tests/ansible-role-requirements.yml \ --ignore-errors \ --force ansible-playbook -i {toxinidir}/tests/inventory \ --syntax-check \ --list-tasks \ -e "rolename={toxinidir}" \ {toxinidir}/tests/test.yml [testenv:ansible-lint] deps = ansible>1.9,<2.0 ansible-lint whitelist_externals = bash commands = ansible-lint {toxinidir}/tests/test.yml [testenv:functional] passenv = HOME setenv = ANSIBLE_HOST_KEY_CHECKING = False # TODO (odyssey4me) These are only here as they are non-standard folder # names for Ansible 1.9.x. We are using the standard folder names for # Ansible v2.x. We can remove this when we move to Ansible 2.x. ANSIBLE_ACTION_PLUGINS = {homedir}/.ansible/plugins/action ANSIBLE_CALLBACK_PLUGINS = {homedir}/.ansible/plugins/callback ANSIBLE_FILTER_PLUGINS = {homedir}/.ansible/plugins/filter ANSIBLE_LOOKUP_PLUGINS = {homedir}/.ansible/plugins/lookup # This is required as the default is the current path or a path specified in # ansible.cfg ANSIBLE_LIBRARY = {homedir}/.ansible/plugins/library # This is required as the default is '/etc/ansible/roles' or a path specified # in ansible.cfg ANSIBLE_ROLES_PATH = {homedir}/.ansible/roles:{toxinidir}/.. deps = ansible>1.9,<2.0 whitelist_externals = git rm commands = rm -rf {homedir}/.ansible git clone https://git.openstack.org/openstack/openstack-ansible-plugins {homedir}/.ansible/plugins ansible-galaxy install \ --role-file={toxinidir}/tests/ansible-role-requirements.yml \ --ignore-errors \ --force ansible-playbook -i {toxinidir}/tests/inventory \ -e "rolename={toxinidir}" \ {toxinidir}/tests/test.yml ansible-playbook -i {toxinidir}/tests/stand-alone \ -e "rolename={toxinidir}" \ {toxinidir}/tests/stand-alone.yml [testenv:linters] passenv = HOME setenv = # TODO (odyssey4me) These are only here as they are non-standard folder # names for Ansible 1.9.x. We are using the standard folder names for # Ansible v2.x. We can remove this when we move to Ansible 2.x. ANSIBLE_ACTION_PLUGINS = {homedir}/.ansible/plugins/action ANSIBLE_CALLBACK_PLUGINS = {homedir}/.ansible/plugins/callback ANSIBLE_FILTER_PLUGINS = {homedir}/.ansible/plugins/filter ANSIBLE_LOOKUP_PLUGINS = {homedir}/.ansible/plugins/lookup # This is required as the default is the current path or a path specified in # ansible.cfg ANSIBLE_LIBRARY = {homedir}/.ansible/plugins/library # This is required as the default is '/etc/ansible/roles' or a path specified # in ansible.cfg ANSIBLE_ROLES_PATH = {homedir}/.ansible/roles:{toxinidir}/.. deps = {[testenv:pep8]deps} {[testenv:bashate]deps} {[testenv:ansible-lint]deps} # note that the ansible-syntax deps are omitted on purpose as the # ansible-lint env contains duplicate items in its dep list whitelist_externals = bash git rm commands = {[testenv:pep8]commands} {[testenv:bashate]commands} {[testenv:ansible-lint]commands} {[testenv:ansible-syntax]commands}