Skip to content

testvars do not contain vars from playbook #12

@spigell

Description

@spigell

Greetings! Let's assume we have such playbook

---
- name: converge
  hosts: all
  vars:
    infraunlimited_hosts_file_backup: true
    infraunlimited_hosts_file: '/etc/hosts_test'
    infraunlimited_hosts_entries:
      - name: 'test.example.com'
        ip: '127.0.0.1'
        aliases:
          - 'test'
          - 'test-test'
  roles:
    - role: ansible-role-hosts

and molecule.yml

---
dependency:
  name: galaxy
driver:
  name: docker
lint:
  name: yamllint
  enabled: False
platforms:
  - name: instance
    pre_build_image: true
    image: centos:7
provisioner:
  name: ansible
  lint:
    name: ansible-lint
    enabled: False
  log: true
verifier:
  name: testinfra
  options:
    s: true  # capture output
  lint:
    name: flake8

and test

import testaid


testinfra_hosts = testaid.hosts()


def test_ansible_hosts_file(host, testvars):
    assert 'infraunlimited_hosts_file' in testvars

OUTPUT of verify

(.venv) [spigell@hammerhead ansible-role-hosts]$ molecule --debug verify -s test_playbook_vars 
--> Validating schema /home/spigell/projects/infra/infraUnlimited/ansible-roles/ansible-role-hosts/molecule/default/molecule.yml.
Validation completed successfully.
--> Validating schema /home/spigell/projects/infra/infraUnlimited/ansible-roles/ansible-role-hosts/molecule/test_playbook_vars/molecule.yml.
Validation completed successfully.
--> Test matrix
    
└── test_playbook_vars
    └── verify
    
--> Scenario: 'test_playbook_vars'
--> Action: 'verify'
--> Executing Testinfra tests found in /home/spigell/projects/infra/infraUnlimited/ansible-roles/ansible-role-hosts/molecule/test_playbook_vars/tests/...
DEBUG: ANSIBLE ENVIRONMENT
---
ANSIBLE_CONFIG: /home/spigell/.cache/molecule/ansible-role-hosts/test_playbook_vars/ansible.cfg
ANSIBLE_FILTER_PLUGINS: /home/spigell/projects/infra/infraUnlimited/.venv/lib/python3.8/site-packages/molecule/provisioner/ansible/plugins/filters:/home/spigell/.cache/molecule/ansible-role-hosts/test_playbook_vars/plugins/filters:/home/spigell/projects/infra/infraUnlimited/ansible-roles/ansible-role-hosts/plugins/filters
ANSIBLE_LIBRARY: /home/spigell/projects/infra/infraUnlimited/.venv/lib/python3.8/site-packages/molecule/provisioner/ansible/plugins/libraries:/home/spigell/.cache/molecule/ansible-role-hosts/test_playbook_vars/library:/home/spigell/projects/infra/infraUnlimited/ansible-roles/ansible-role-hosts/library
ANSIBLE_ROLES_PATH: /home/spigell/.cache/molecule/ansible-role-hosts/test_playbook_vars/roles:/home/spigell/projects/infra/infraUnlimited/ansible-roles

DEBUG: MOLECULE ENVIRONMENT
---
MOLECULE_DEBUG: 'True'
MOLECULE_DEPENDENCY_NAME: galaxy
MOLECULE_DRIVER_NAME: docker
MOLECULE_ENV_FILE: /home/spigell/projects/infra/infraUnlimited/ansible-roles/ansible-role-hosts/.env.yml
MOLECULE_EPHEMERAL_DIRECTORY: /home/spigell/.cache/molecule/ansible-role-hosts/test_playbook_vars
MOLECULE_FILE: /home/spigell/projects/infra/infraUnlimited/ansible-roles/ansible-role-hosts/molecule/test_playbook_vars/molecule.yml
MOLECULE_INSTANCE_CONFIG: /home/spigell/.cache/molecule/ansible-role-hosts/test_playbook_vars/instance_config.yml
MOLECULE_INVENTORY_FILE: /home/spigell/.cache/molecule/ansible-role-hosts/test_playbook_vars/inventory/ansible_inventory.yml
MOLECULE_LINT_NAME: yamllint
MOLECULE_PROJECT_DIRECTORY: /home/spigell/projects/infra/infraUnlimited/ansible-roles/ansible-role-hosts
MOLECULE_PROVISIONER_LINT_NAME: ansible-lint
MOLECULE_PROVISIONER_NAME: ansible
MOLECULE_SCENARIO_DIRECTORY: /home/spigell/projects/infra/infraUnlimited/ansible-roles/ansible-role-hosts/molecule/test_playbook_vars
MOLECULE_SCENARIO_NAME: test_playbook_vars
MOLECULE_STATE_FILE: /home/spigell/.cache/molecule/ansible-role-hosts/test_playbook_vars/state.yml
MOLECULE_VERIFIER_LINT_NAME: flake8
MOLECULE_VERIFIER_NAME: testinfra
MOLECULE_VERIFIER_TEST_DIRECTORY: /home/spigell/projects/infra/infraUnlimited/ansible-roles/ansible-role-hosts/molecule/test_playbook_vars/tests

DEBUG: SHELL REPLAY
ANSIBLE_CONFIG=/home/spigell/.cache/molecule/ansible-role-hosts/test_playbook_vars/ansible.cfg ANSIBLE_FILTER_PLUGINS=/home/spigell/projects/infra/infraUnlimited/.venv/lib/python3.8/site-packages/molecule/provisioner/ansible/plugins/filters:/home/spigell/.cache/molecule/ansible-role-hosts/test_playbook_vars/plugins/filters:/home/spigell/projects/infra/infraUnlimited/ansible-roles/ansible-role-hosts/plugins/filters ANSIBLE_LIBRARY=/home/spigell/projects/infra/infraUnlimited/.venv/lib/python3.8/site-packages/molecule/provisioner/ansible/plugins/libraries:/home/spigell/.cache/molecule/ansible-role-hosts/test_playbook_vars/library:/home/spigell/projects/infra/infraUnlimited/ansible-roles/ansible-role-hosts/library ANSIBLE_ROLES_PATH=/home/spigell/.cache/molecule/ansible-role-hosts/test_playbook_vars/roles:/home/spigell/projects/infra/infraUnlimited/ansible-roles MOLECULE_DEBUG=True MOLECULE_DEPENDENCY_NAME=galaxy MOLECULE_DRIVER_NAME=docker MOLECULE_ENV_FILE=/home/spigell/projects/infra/infraUnlimited/ansible-roles/ansible-role-hosts/.env.yml MOLECULE_EPHEMERAL_DIRECTORY=/home/spigell/.cache/molecule/ansible-role-hosts/test_playbook_vars MOLECULE_FILE=/home/spigell/projects/infra/infraUnlimited/ansible-roles/ansible-role-hosts/molecule/test_playbook_vars/molecule.yml MOLECULE_INSTANCE_CONFIG=/home/spigell/.cache/molecule/ansible-role-hosts/test_playbook_vars/instance_config.yml MOLECULE_INVENTORY_FILE=/home/spigell/.cache/molecule/ansible-role-hosts/test_playbook_vars/inventory/ansible_inventory.yml MOLECULE_LINT_NAME=yamllint MOLECULE_PROJECT_DIRECTORY=/home/spigell/projects/infra/infraUnlimited/ansible-roles/ansible-role-hosts MOLECULE_PROVISIONER_LINT_NAME=ansible-lint MOLECULE_PROVISIONER_NAME=ansible MOLECULE_SCENARIO_DIRECTORY=/home/spigell/projects/infra/infraUnlimited/ansible-roles/ansible-role-hosts/molecule/test_playbook_vars MOLECULE_SCENARIO_NAME=test_playbook_vars MOLECULE_STATE_FILE=/home/spigell/.cache/molecule/ansible-role-hosts/test_playbook_vars/state.yml MOLECULE_VERIFIER_LINT_NAME=flake8 MOLECULE_VERIFIER_NAME=testinfra MOLECULE_VERIFIER_TEST_DIRECTORY=/home/spigell/projects/infra/infraUnlimited/ansible-roles/ansible-role-hosts/molecule/test_playbook_vars/tests

DEBUG: COMMAND
/home/spigell/projects/infra/infraUnlimited/.venv/bin/pytest --connection=ansible --ansible-inventory=/home/spigell/.cache/molecule/ansible-role-hosts/test_playbook_vars/inventory/ansible_inventory.yml -p no:cacheprovider --debug -s /home/spigell/projects/infra/infraUnlimited/ansible-roles/ansible-role-hosts/molecule/test_playbook_vars/tests/test_default.py -vvv

    ============================= test session starts ==============================
    platform linux -- Python 3.8.1, pytest-5.3.2, py-1.8.1, pluggy-0.13.1 -- /home/spigell/projects/infra/infraUnlimited/.venv/bin/python
    using: pytest-5.3.2 pylib-1.8.1
    setuptools registered plugins:
      testaid-0.13.1 at /home/spigell/projects/infra/infraUnlimited/.venv/lib/python3.8/site-packages/testaid/plugin.py
      testinfra-3.4.0 at /home/spigell/projects/infra/infraUnlimited/.venv/lib/python3.8/site-packages/testinfra/plugin.py
    rootdir: /home/spigell/projects/infra/infraUnlimited/ansible-roles/ansible-role-hosts/molecule/test_playbook_vars
    plugins: testaid-0.13.1, testinfra-3.4.0
collected 1 item                                                               
    
writing pytestdebug information to /home/spigell/projects/infra/infraUnlimited/ansible-roles/ansible-role-hosts/molecule/test_playbook_vars/pytestdebug.log
    tests/test_default.py::test_ansible_hosts_file[ansible://instance] FAILED
    
    DEBUG: TESTVARS LOG
    Using variables defined in /home/spigell/projects/infra/infraUnlimited/ansible-roles/ansible-role-hosts/molecule/test_playbook_vars/molecule.yml
    Using roles:
    
    
    
    =================================== FAILURES ===================================
    _________________ test_ansible_hosts_file[ansible://instance] __________________
    
    host = <testinfra.host.Host object at 0x7fdbb0d793a0>
    testvars = {'ansible_apparmor': {'status': 'disabled'}, 'ansible_architecture': 'x86_64', 'ansible_bios_date': '06/04/2018', 'ansible_bios_version': '83ET82WW (1.52 )', ...}
    
        def test_ansible_hosts_file(host, testvars):
    >       assert 'infraunlimited_hosts_file' in testvars
    E       AssertionError: assert 'infraunlimited_hosts_file' in {'ansible_apparmor': {'status': 'disabled'}, 'ansible_architecture': 'x86_64', 'ansible_bios_date': '06/04/2018', 'ansible_bios_version': '83ET82WW (1.52 )', ...}
    
    tests/test_default.py:8: AssertionError
    ------------------------------ Captured log setup ------------------------------
    DEBUG    testaid:moleculelog.py:18 Using variables defined in /home/spigell/projects/infra/infraUnlimited/ansible-roles/ansible-role-hosts/molecule/test_playbook_vars/molecule.yml
    DEBUG    testaid:moleculelog.py:18 Using roles:
    =============================== warnings summary ===============================
    tests/test_default.py::test_ansible_hosts_file[ansible://instance]
      /home/spigell/projects/infra/infraUnlimited/.venv/lib/python3.8/distutils/__init__.py:1: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
        import imp
    
    -- Docs: https://docs.pytest.org/en/latest/warnings.html
    ======================== 1 failed, 1 warning in 13.49s =========================


if I use extra_vars in playbook and molecule.yml it works
is playbook vars supported?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions