Как создать кейсы для Ansible функций? - PullRequest
2 голосов
/ 16 апреля 2020

Я хочу добавить юнит-тестирование для моей ansible playbook. Я новичок в этом и пробовал несколько вещей, но мало что понял. Как я могу начать с этого и правильно написать контрольный пример?

Ниже приведен простой пример:

  yum: 
    name: httpd 
    state: present

1 Ответ

0 голосов
/ 16 апреля 2020

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] Примечание для прозрачности: я ведущий репозитория этого примера

...