Тестирование#

Расширения тестирования (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.