Merge "testinfra: pass inventory and zuul data"

This commit is contained in:
Zuul 2020-05-28 23:18:46 +00:00 committed by Gerrit Code Review
commit fc39f87f1e
4 changed files with 43 additions and 0 deletions

View File

@ -114,6 +114,18 @@
- name: Run test playbook
when: run_test_playbook is defined
shell: "ANSIBLE_ROLES_PATH=/home/zuul/src/opendev.org/opendev/system-config/playbooks/roles ansible-playbook -v /home/zuul/src/opendev.org/opendev/system-config/{{ run_test_playbook }}"
- name: Generate testinfra extra data fixture
set_fact:
testinfra_extra_data:
zuul_job: '{{ zuul.job }}'
zuul: '{{ zuul }}'
- name: Write out testinfra extra data fixture
copy:
content: '{{ testinfra_extra_data | to_nice_yaml }}'
dest: '/home/zuul/testinfra_extra_data_fixture.yaml'
- name: Run testinfra to validate configuration
include_role:
name: tox
@ -121,4 +133,6 @@
tox_envlist: testinfra
# This allows us to run from external projects (like testinfra
# itself)
tox_environment:
TESTINFRA_EXTRA_DATA: '/home/zuul/testinfra_extra_data_fixture.yaml'
zuul_work_dir: src/opendev.org/opendev/system-config

20
testinfra/conftest.py Normal file
View File

@ -0,0 +1,20 @@
import os
import pytest
import yaml
@pytest.fixture
def zuul_data():
data = {}
with open('/etc/ansible/hosts/inventory.yaml') as f:
inventory = yaml.load(f)
data['inventory'] = inventory
zuul_extra_data_file = os.environ.get('TESTINFRA_EXTRA_DATA')
if os.path.exists(zuul_extra_data_file):
with open(zuul_extra_data_file, 'r') as f:
extra = yaml.load(f)
data['extra'] = extra
return data

View File

@ -17,6 +17,13 @@ import pytest
testinfra_hosts = ['bridge.openstack.org']
def test_zuul_data(host, zuul_data):
# Test the zuul_data fixture that picks up things set by Zuul
assert 'inventory' in zuul_data
assert 'extra' in zuul_data
assert 'zuul' in zuul_data['extra']
def test_clouds_yaml(host):
clouds_yaml = host.file('/etc/openstack/clouds.yaml')
assert clouds_yaml.exists

View File

@ -33,6 +33,8 @@ deps = -r{toxinidir}/doc/requirements.txt
commands = sphinx-build -W -E -b html doc/source doc/build/html
[testenv:testinfra]
passenv =
TESTINFRA_EXTRA_DATA
commands = py.test --junit-xml junit.xml --connection=ansible --ansible-inventory=/etc/ansible/hosts/inventory.yaml -v testinfra {posargs}
[flake8]