Тестирование#
Расширения тестирования (test plugins) оценивают выражения шаблонов Jinja2 и возвращают значения True или False.
С помощью расширений тестирования можно создавать условные конструкции для реализации логики в задачах, блоках, сценариях и ролях.
Ansible использует стандартные тесты, поставляемые вместе с Jinja2, и добавляет несколько специализированных расширений тестирования.
Подробную информацию о конкретных расширениях тестирования см. в справочнике.
Использование#
Вы можете использовать тесты в различных шаблонах кода Ansible:
в сценарии;
в файле определения переменных;
в шаблоне Jinja2, например, для модуля template.
Тесты всегда возвращают значение True или False.
Если вам нужен другой тип возвращаемого значения, обратите внимание на фильтры.
В тестах всегда используется конструкция is, например:
vars:
is_ready: '{{ task_result is success }}'
tasks:
- name: conditionals are always in 'template' context
action: do_something
when: task_result is failed
Тесты могут принимать два типа аргументов:
позиционные – передаются в определенном порядке:
tasks: - name: pass a positional parameter to match test action: do_something when: myurl is match("https://example.com/users/.*/resources")
именованные – параметры вида
key=value:tasks: - name: pass named parameter to truthy test action: do_something when: myvariable is truthy(convert_bool=true)
Пример с обоими типами аргументов:
task:
- name: pass both types to 'version' test
action: do_something
when: sample_semver_var is version('2.0.0-rc.1+build.123', 'lt', version_type='semver')
Использование со списками#
Тесты также могут использоваться с фильтрами Jinja2 из семейства select, например, select, reject, selectattr, rejectattr.
Пример получения из списка только тех переменных, которые определены (значение не равно None):
good_vars: "{{ all_vars | select('defined') }}"
Пример фильтрации адресов по типу fixed:
only_fixed_addresses: "{{ all_addresses | selectattr('type', 'equalto', 'fixed') }}"
В этом примере используется тест Jinja2 equalto, чтобы выбрать только те адреса из списка all_addresses, у которых атрибут type равен fixed.
Пример фильтрации адресов, которые не имеют тип fixed:
only_fixed_addresses: "{{ all_addresses | rejectattr('type', 'equalto', 'fixed') }}"
В этом примере используется фильтр Jinja2 rejectattr, чтобы исключить из списка адреса с типом fixed.