From f8eb0aebfea305c969559f292f74c48c30e97f12 Mon Sep 17 00:00:00 2001 From: Michael Davies Date: Tue, 23 Feb 2016 05:06:57 +0000 Subject: [PATCH] Ironic: Fix docs & linting tests Unfortunately the first commit of os_ironic had broken tests. This patch corrects the test configurations to ensure that the docs and lint tests work. As a temporary measure, functional testing is left as a place holder to allow other patches to be worked on for this role while the functional testing is being put together. Change-Id: I38278155232a4e4d6ef259b79bd515fae2bc837b Signed-off-by: Michael Davies Signed-off-by: Jesse Pretorius --- meta/main.yml | 7 +- tasks/ironic_db_setup.yml | 4 +- tasks/main.yml | 2 +- test-requirements.txt | 2 + tests/ansible-role-requirements.yml | 10 +- tests/ansible.cfg | 5 - tests/test.yml | 2 +- tox.ini | 161 +++++++++++++++++----------- 8 files changed, 118 insertions(+), 75 deletions(-) delete mode 100644 tests/ansible.cfg diff --git a/meta/main.yml b/meta/main.yml index e07e35eb..ae9cfacb 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -27,7 +27,8 @@ galaxy_info: - baremetal - system dependencies: - - pip_lock_down - - apt_package_pinning - galera_client - - openstack_openrc + - pip_install +# TODO(mrda): Add in openstack_openrc once this role is split out +# from openstack-ansible, as it's useful for standalone use. +# - openstack_openrc diff --git a/tasks/ironic_db_setup.yml b/tasks/ironic_db_setup.yml index 36fa4016..bec5aab6 100644 --- a/tasks/ironic_db_setup.yml +++ b/tasks/ironic_db_setup.yml @@ -43,8 +43,8 @@ - name: Update database schema command: "{{ ironic_bin }}/ironic-dbsync --config-file /etc/ironic/ironic.conf upgrade" - sudo: yes - sudo_user: "{{ ironic_system_user_name }}" + become: yes + become_user: "{{ ironic_system_user_name }}" notify: - Restart ironic services tags: diff --git a/tasks/main.yml b/tasks/main.yml index 7350e443..c20b6ae6 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -35,7 +35,7 @@ - include: ironic_conductor_post_install.yml when: > inventory_hostname in groups['ironic_conductor'] - + - include: ironic_db_setup.yml when: > inventory_hostname == groups['ironic_conductor'][0] diff --git a/test-requirements.txt b/test-requirements.txt index f9f762ea..8ebdd06a 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -1,5 +1,7 @@ ansible-lint ansible>=1.9.1,<2.0.0 +bashate +flake8 # this is required for the docs build jobs sphinx!=1.2.0,!=1.3b1,<1.3,>=1.1.2 diff --git a/tests/ansible-role-requirements.yml b/tests/ansible-role-requirements.yml index 8a17d75c..17e6449a 100644 --- a/tests/ansible-role-requirements.yml +++ b/tests/ansible-role-requirements.yml @@ -1,2 +1,8 @@ -# This is a file to contain the extra roles required for the testing -# to complete. It is currently intentionally empty. +- name: galera_client + src: https://git.openstack.org/openstack/openstack-ansible-galera_client + scm: git + version: master +- name: pip_install + src: https://git.openstack.org/openstack/openstack-ansible-pip_install + scm: git + version: master diff --git a/tests/ansible.cfg b/tests/ansible.cfg deleted file mode 100644 index ab1d8376..00000000 --- a/tests/ansible.cfg +++ /dev/null @@ -1,5 +0,0 @@ -[defaults] -roles_path = ../.. -remote_tmp = ../.ansible/tmp/ - -host_key_checking = False diff --git a/tests/test.yml b/tests/test.yml index 7f020fbd..cecb8c3c 100644 --- a/tests/test.yml +++ b/tests/test.yml @@ -17,4 +17,4 @@ hosts: localhost remote_user: root roles: - - role: openstack-ansible-ironic + - role: "{{ rolename | basename }}" diff --git a/tox.ini b/tox.ini index 8b40dde4..2273cc8f 100644 --- a/tox.ini +++ b/tox.ini @@ -1,95 +1,134 @@ [tox] minversion = 1.6 skipsdist = True -envlist = docs,pep8,bashate,ansible-syntax,ansible-lint,ansible-functional +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 - ansible-galaxy install \ - --role-file=ansible-role-requirements.yml \ - --ignore-errors \ - --force +commands = /usr/bin/find . -type f -name "*.pyc" -delete +passenv = + HOME +whitelist_externals = + bash + git + rm + echo +setenv = + VIRTUAL_ENV={envdir} + ANSIBLE_HOST_KEY_CHECKING = False + ANSIBLE_SSH_CONTROL_PATH = /tmp/%%h-%%r + # 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}/.. + [testenv:docs] -commands = python setup.py build_sphinx +commands= + python setup.py build_sphinx + # environment used by the -infra templated docs job [testenv:venv] deps = -r{toxinidir}/test-requirements.txt commands = {posargs} -# Run hacking/flake8 check for all python files -[testenv:pep8] -deps = - bashate - flake8 -whitelist_externals = bash -commands = - bash -c "grep -Irl \ - -e '!/usr/bin/env python' \ - -e '!/bin/python' \ - -e '!/usr/bin/python' \ - --exclude-dir '.*' \ - --exclude-dir 'doc' \ - --exclude-dir '*.egg' \ - --exclude-dir '*.egg-info' \ - --exclude 'tox.ini' \ - --exclude '*.sh' \ - {toxinidir} | xargs flake8 --verbose" -# Run bashate check for all bash scripts -# Ignores the following rules: -# E003: Indent not multiple of 4 (we prefer to use multiples of 2) - bash -c "grep -Irl \ - -e '!/usr/bin/env bash' \ - -e '!/bin/bash' \ - -e '!/bin/sh' \ - --exclude-dir '.*' \ - --exclude-dir '*.egg' \ - --exclude-dir '*.egg-info' \ - --exclude 'tox.ini' \ - {toxinidir} | xargs bashate --verbose --ignore=E003" +[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. +# F403 'from ansible.module_utils.basic import *' used; +# unable to detect undefined names +# H303 No wildcard (*) import. ignore=F403,H303 -[testenv:ansible-syntax] -changedir = tests + +[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-syntax] +commands = + rm -rf {homedir}/.ansible + git clone https://git.openstack.org/openstack/openstack-ansible-plugins \ + {homedir}/.ansible/plugins ansible-galaxy install \ - --role-file=ansible-role-requirements.yml \ + --role-file={toxinidir}/tests/ansible-role-requirements.yml \ --ignore-errors \ --force - ansible-playbook -i inventory \ + ansible-playbook -i {toxinidir}/tests/inventory \ --syntax-check \ --list-tasks \ -e "rolename={toxinidir}" \ - test.yml + {toxinidir}/tests/test.yml + [testenv:ansible-lint] -changedir = tests commands = - ansible-galaxy install \ - --role-file=ansible-role-requirements.yml \ - --ignore-errors \ - --force - ansible-lint test.yml + ansible-lint {toxinidir}/tests/test.yml -[testenv:ansible-functional] -changedir = tests + +[testenv:functional] commands = - ansible-galaxy install \ - --role-file=ansible-role-requirements.yml \ - --ignore-errors \ - --force - ansible-playbook -i inventory \ - -e "rolename={toxinidir}" \ - test.yml + echo -e "\n *******************************************************\n" \ + "**** Functional Testing is still to be implemented ****\n" \ + "**** TODO: Write tests here ****\n" \ + "*******************************************************\n" + # As a temporary measure, while functional testing is being worked on, we + # will not execute the functional test. This allows other patches to be + # worked on while the functional testing is being worked out. + #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}" \ + # -vv \ + # {toxinidir}/tests/test.yml + + +[testenv:linters] +commands = + {[testenv:pep8]commands} + {[testenv:bashate]commands} + {[testenv:ansible-lint]commands} + {[testenv:ansible-syntax]commands}