Ansible это не язык программирования, а инструмент, который проверяет состояние, которое вы описываете, в соответствии с состоянием узла, в котором вы работаете. Таким образом, вы не можете юнит-тесты своих задач. В определенном смысле они уже сами по себе являются тестами. Базовый двоичный файл ansible, выполняющий эту задачу, сам использует модульные тесты, используемые при ее разработке.
В приведенном выше примере запрашивается ansible, чтобы проверить, присутствует ли на целевой машине httpd
и вернет ли ok
если это так, changed
, если он должен был установить пакет, чтобы выполнить требование, или error
, если что-то пошло не так.
Между тем, это не потому, что вы не можете выполнить юнит-тестирование вашего ansible код, что никакие тесты не возможны вообще. Вы можете выполнить основные проверки c stati c с помощью yammlint
и ansible-lint
. Далее go вам придется запускать вашу книгу / роль / коллекцию для тестового целевого узла.
Это стало довольно легко с CI, который позволит вам создавать виртуальные машины или docker контейнер с нуля. и запустите ваш скрипт, чтобы проверить, что ошибка не выдается, опция --check
проходит успешно, идемпотентность соблюдается (т. е. ничего не должно измениться при втором запуске с теми же параметрами), и все работает, как ожидалось (например, в указанном выше порту Откроется 80, и вы получите веб-страницу Apache по умолчанию.
Вы можете сами писать такие тесты (например, запускать локальный хост в test vm). Эта роль Ma c Appstore CLI от Geerlinguy использует в качестве примера такие тесты через travis-ci.
Вы также можете использовать существующие инструменты, чтобы помочь вам написать эти тесты в более структурированном виде. так, как molecule
. Вот несколько примеров ролей, использующих его, если вам интересно:
[1] Примечание для прозрачности: я ведущий репозитория этого примера