version#

Расширение тестирования ansible.builtin.version используется для сравнения строк, представляющих версии компонентов, с учетом различных схем версионирования. Это позволяет задавать в сценариях автоматизации сложные условия обновления пакетов и операционных систем, исключая ошибки сравнения версий.

Описание применения расширений тестирования приведено в документе Тестирование.

Особенности работы#

Для сравнения версий используйте конструкцию:

<version_1> is ansible.builtin.version(<version_2>)

Для инверсии результата сравнения добавьте not:

<version_1> is not ansible.builtin.version(<version_2>)

Сравнение можно выполнять в гибком или строгом режиме, а также с использованием различных стандартов (SemVer, PEP 440 и другие).

Входные значения#

Расширение принимает единственное входное значение параметра Input в виде строки. Input – значение версии для сравнения, помещается в левую часть выражения.

Пример:

'1.0' is version(...)

Параметры#

Расширение принимает следующие параметры:

operator#

Оператор сравнения.

Возможные значения:

Значение

Оператор

==

равно

=

eq

<

меньше

lt

<=

меньше или равно

le

>

больше

gt

>=

больше или равно

ge

!=

не равно

<>

ne

Значение по умолчанию: eq.

strict#

Использование строгой схемы версионирования, только формат X.Y или X.Y.Z[a|b]N.

Не может быть использован одновременно с параметром version_type.

Возможные значения:

  • false – использовать гибкую схему;

  • true – использовать строгую схему.

Значение по умолчанию: false.

version#

Версия (выражение) для сравнения, помещаемая в правую часть выражения.

Обязательный параметр.

version_type#

Схема версионирования, которая будет использоваться для сравнения.

Не может быть использован одновременно с параметром strict.

Возможные значения:

  • loose – максимально гибкий режим, допускающий любые строки;

  • strict – строгий режим, разрешающий только форматы X.Y и X.Y.Z[a|b]N;

  • semver – семантическое версионирование в формате MAJOR.MINOR.PATCH с возможными -rc и +build;

  • semantic – синоним semver;

  • pep440 – версионирование по стандарту PEP 440.

Значение по умолчанию: loose.

Выходные значения#

Расширение возвращает значение True или False в зависимости от результата проверки:

  • False – условие не выполнено;

  • True – условие выполнено.

Например:

Выражение

Выходное значение

'1.0' is version('2.0', '<')

True

'3.0' is version('2.0', '<')

False

'1.0a1' is version('1.0', '<', version_type='strict')

True

Примеры#

Ниже приведены примеры использования расширения ansible.builtin.version в различных сценариях.

Сравнение версий с использованием различных операторов#

Следующий пример описывает сравнение версий с помощью различных операторов.

- name: Many operators
  hosts: all
  gather_facts: false
  tasks:
    - name: Is equal
      assert:
        that:
          - "'1.0' is version('1.0', '==')"

    - name: Is not equal
      assert:
        that:
          - "'1.0' is version('2.0', '!=')"

    - name: Less than
      assert:
        that:
          - "'1.0' is version('2.0', '<')"

    - name: Greather than
      assert:
        that:
          - "'2.0' is version('1.0', '>')"

    - name: Less or equal than
      assert:
        that:
          - "'1.0' is version('1.0', '<=')"

    - name: Greather or equal than
      assert:
        that:
          - "'1.0' is version('1.0', '>=')"

Сравнение в строгом режиме#

Следующий пример описывает использование строгой схемы версионирования.

---
- name: Strict mode comparison
  hosts: all
  gather_facts: false
  tasks:
    - name: Is equal
      assert:
        that:
          - "'1.0' is version('1.0', '==', strict=true)"

    - name: Less than
      assert:
        that:
          - "'1.0a1' is version('1.0', '<', strict=true)"

    - name: Not equal
      assert:
        that:
          - "'1.0' is version('2.0', '!=', strict=true)"

Сравнение по схеме семантического версионирования#

Следующий пример описывает использование семантического версионирования в формате MAJOR.MINOR.PATCH[-prerelease][+build].

---
- name: Validate with semver
  hosts: all
  gather_facts: false
  tasks:
    - name: Chech than 1.2.3 is less than 2.0.0 with SemVer
      assert:
        that:
          - "'1.2.3' is version('2.0.0', 'lt', version_type='semver')"

Сравнение по стандарту PEP 440#

Следующий пример описывает использование стандарта PEP 440.

- name: Use PEP-440 for comparison
  hosts: all
  gather_facts: false
  tasks:
    - name: rc1 is less than final release
      assert:
        that:
          - "'2.14.0rc1' is version('2.14.0', 'lt', version_type='pep440')"