Testinfra, которая проверяет инфраструктуру очень хорошо работает с Ansible. Ранее я писал о TestInfra, поэтому, пожалуйста, проверьте, хотите ли хотите.
Играйте с TestInfra, которая проверяет штаты инфраструктуры
koh-sh ・ 9 ноября ’19 ・ 4 мин Читает
Обмен инвентаризацией
TestInfra может ссылаться на запасы Ansible. Таким образом, вам не нужно переопределять информацию об хостах для Ansible и тестов.
https://testinfra.readthedocs.io/en/latest/backends.html#ansible
$ py.test --hosts='ansible://all' # tests all inventory hosts $ py.test --hosts='ansible://host1,ansible://host2' $ py.test --hosts='ansible://web*' $ py.test --force-ansible --hosts='ansible://all' $ py.test --hosts='ansible://host?force_ansible=True'
Если файл инвентаризации не указан с помощью ansible.cfg
, вы можете указать с -Ansible-inentory = ansible_inventory
в командных строках.
Выполнение модулей Ansible
Вы можете выполнять модули Ansible во время тестирования.
https://testinfra.readthedocs.io/en/latest/modules.html#ansible
[koh@kohs-MBP] ~/vag_test % ipython Python 3.7.3 (default, May 1 2019, 16:07:48) Type 'copyright', 'credits' or 'license' for more information IPython 7.5.0 -- An enhanced Interactive Python. Type '?' for help. In [1]: import testinfra In [2]: host = testinfra.get_host("ansible://Vag1") In [3]: host.ansible("command", "echo foo", check=False) Out[3]: {'ansible_facts': {'discovered_interpreter_python': '/usr/bin/python'}, 'changed': True, 'cmd': ['echo', 'foo'], 'delta': '0:00:00.004734', 'end': '2019-10-05 15:07:42.251008', 'rc': 0, 'start': '2019-10-05 15:07:42.246274', 'stderr': '', 'stderr_lines': [], 'stdout': 'foo', 'stdout_lines': ['foo']} In [4]:
Это пример выполнения командного модуля Ansible с TestInFRA. В результате выполнения модуля вы можете получить как Изменено
, RC
или stdout
То же, что и Ansible.
настройка
Модуль будет хорошо подходить для тестирования.
[koh@kohs-MBP] ~/vag_test % cat test_ansible.py def test_dns(host): nameservers = host.ansible("setup")["ansible_facts"]["ansible_dns"]["nameservers"] assert '10.1.1.1' in nameservers [koh@kohs-MBP] ~/vag_test % [koh@kohs-MBP] ~/vag_test % py.test -v test_ansible.py --hosts='ansible://Vag1' ======================================== test session starts ======================================== platform darwin -- Python 3.7.3, pytest-4.4.1, py-1.8.0, pluggy-0.9.0 -- /Users/koh/.pyenv/versions/3.7.3/bin/python3.7 cachedir: .pytest_cache rootdir: /Users/koh/vag_test, inifile: pytest.ini plugins: xonsh-0.8.12, testinfra-3.0.5 collected 1 item test_ansible.py::test_dns[ansible://Vag1] FAILED [100%] ============================================= FAILURES ============================================== _____________________________________ test_dns[ansible://Vag1] ______________________________________ host =def test_dns(host): nameservers = host.ansible("setup")["ansible_facts"]["ansible_dns"]["nameservers"] > assert '10.1.1.1' in nameservers E AssertionError: assert '10.1.1.1' in ['10.0.2.3'] test_ansible.py:3: AssertionError ===================================== 1 failed in 2.17 seconds ====================================== zsh: exit 1 py.test -v test_ansible.py --hosts='ansible://Vag1' [koh@kohs-MBP] ~/vag_test %
Это пример проверки имен -сервера Resolv.Conf с модулем настройки.
Ссылка переменная
Вы можете ссылаться на переменные Ansible. host_vars
, Group_vars
и волшебные переменные, как Inventory_hostname
можно упомянуть из TestInfra. Переменные определены с Включите_vars
В пьесы не могут быть направлены.
[koh@kohs-MBP] ~/vag_test % ipython Python 3.7.3 (default, May 1 2019, 16:07:48) Type 'copyright', 'credits' or 'license' for more information IPython 7.5.0 -- An enhanced Interactive Python. Type '?' for help. In [1]: import testinfra In [2]: host = testinfra.get_host("ansible://Vag1") In [3]: host.ansible.get_variables() Out[3]: {'aaa': 'bbb', 'foo': 'bar', 'hoge': 'fuga', 'inventory_hostname': 'Vag1', 'group_names': ['Vag'], 'groups': {'Vag': ['Vag1', 'Vag2', 'Vag3'], 'all': ['Vag1', 'Vag2', 'Vag3']}} In [4]:
Вывод
Как в настоящее время, молекула использует TestInFRA в качестве инструмента для испытаний по умолчанию, TestInfra очень хорошо работает с Ansible. TestInfra можно использовать с Docker или Kubernetes, поэтому я бы продолжал их пробовать.
Оригинал: “https://dev.to/koh_sh/using-testinfra-with-ansible-4n7b”