Comments 9
А главная киллер-утилита по работе с ансиблом не указана. testinfra умеет использовать инвентори ансибла для фикстуры host, и даёт доступ к переменным ансибла внутри фикстуры.
Дальше люди делятся на две категории:
- те, кто не понимает что такое testinfra и не ощущает восторга от py.test, и для которых это тарабарщина.
- те, кто понимает, что это самая офигенная синергия, какую можно было придумать.
/Молекулу закопать.
Я так и не понял, к инвенторий другого хоста, не фикстуры, в testinfra доступ вообще получить нельзя? testinfra.get_host возвращает по сути пустой инвентарь. Как ей вообще проверять что-то за пределами одного хоста (например, сеть)?
Вы имеете в виду, что недоступны hostvars[другой_хост]? Вы используете слово "инвенторий другого хоста" как-то странно. Инвентори у ansible одна (на самом деле нет, но не важно) — и хосты находятся в ней.
Вообще, все задачи кросс-хостового взаимодействия в ансибле странные, это да, а testinfra не целиком всю архитектуру ансибла в себя вбирает, что может доставлять.
Да. Понятно, что инвентория одна, но разные хосты берут из неё разные части (group_vars/host_vars) и хочется узнать как выглядит наполнение инвентаря (факты, если хотите) с т.з. другого хоста, не текущей фикстуры host.
Это и называется hostvars. И да, он не доступен в переменных инвентори, потому что их нет в инвентори. hostvars — магическая переменная ансибла и она не доступна в testinfra.
Но вам никто не мешает подгрузить "другой" хост в отдельной фикстуре. В том числе по перменным первого хоста.
host2 = testinfra.get_host("ansible://test2")
print(host2.ansible.get_variables())
Обзор инструментов по работе с Ansible