Utilisation de TestInfra avec un backend Ansible à des fins de test. Tout va bien, sauf en utilisant Ansible lui-même pendant les testsUtilisation de variables Ansible dans testinfra
de test.py
import pytest
def test_zabbix_agent_package(host):
package = host.package("zabbix-agent")
assert package.is_installed
package_version = host.ansible("debug", "msg={{ zabbix_agent_version }}")["msg"]
(...)
où zabbix_agent_version est une variable Ansible de group_vars. Il peut être obtenu en exécutant cette PlayBook
- hosts: all
become: true
tasks:
- name: debug
debug: msg={{ zabbix_agent_version }}
commande
l'exécution des tests
pytest --connection=ansible --ansible-inventory=inventory --hosts=$hosts -v test.py
ansible.cfg
[defaults]
timeout = 10
host_key_checking = False
library=library/
retry_files_enabled = False
roles_path=roles/
pipelining=true
ConnectTimeout=60
remote_user=deploy
private_key_file=/opt/jenkins/.ssh/deploy
la sortie que je reçois est
self = <ansible>, module_name = 'debug', module_args = 'msg={{ zabbix_agent_version }}', check = True, kwargs = {}
result = {'failed': True, 'msg': "the field 'args' has an invalid value, which appears to include a variable that is undefined. The error was: 'zabbix_agent_version' is undefined"}
def __call__(self, module_name, module_args=None, check=True, **kwargs):
if not self._host.backend.HAS_RUN_ANSIBLE:
raise RuntimeError((
"Ansible module is only available with ansible "
"connection backend"))
result = self._host.backend.run_ansible(
module_name, module_args, check=check, **kwargs)
if result.get("failed", False) is True:
> raise AnsibleException(result)
E AnsibleException: Unexpected error: {'failed': True,
E 'msg': u"the field 'args' has an invalid value, which appears to include a variable that is undefined. The error was: 'zabbix_agent_version' is undefined"}
/usr/lib/python2.7/site-packages/testinfra/modules/ansible.py:70: AnsibleException
Toute idée pourquoi Ansible ne peut pas voir cette variable quand Exécuter le module Ansible de testinfra alors qu'il peut le voir en cours d'exécution Ansible seul?
Ansible Version 2.2.1.0 Python version 2.7.5 Testinfra Version 1.6.4 Version 3.1.3 Pytest – FRC
Où est 'zabbix_agent_version' défini lorsque vous êtes en cours d'exécution Ansible manuellement?Est-ce que cela provient d'un fait personnalisé sur l'hôte distant, ou est-ce que ceci est défini dans un fichier de variable local? – larsks
zabbix_agent_version est définie dans group_vars. lors de l'exécution d'un playbook qui vérifie ce fait (debug: msg = {{zabbix_agent_version}}) il peut être obtenu par Ansible. – FRC