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 <michael@the-davies.net>
Signed-off-by: Jesse Pretorius <jesse.pretorius@rackspace.co.uk>
This commit is contained in:
Michael Davies 2016-02-23 05:06:57 +00:00
parent aabd2d9809
commit f8eb0aebfe
8 changed files with 118 additions and 75 deletions

View File

@ -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

View File

@ -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:

View File

@ -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]

View File

@ -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

View File

@ -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

View File

@ -1,5 +0,0 @@
[defaults]
roles_path = ../..
remote_tmp = ../.ansible/tmp/
host_key_checking = False

View File

@ -17,4 +17,4 @@
hosts: localhost
remote_user: root
roles:
- role: openstack-ansible-ironic
- role: "{{ rolename | basename }}"

161
tox.ini
View File

@ -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}