Рубрики
Без рубрики

Использование TestInfra с Ansible

Testinfra, которая проверяет инфраструктуру очень хорошо работает с Ansible. Я написал о Testinfra previou … Tagged с помощью Ansible, тестирования, Python.

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”