Ansible: использовать фильтр как условный в playbook для включения роли - PullRequest
0 голосов
/ 12 ноября 2018

У нас есть пара ролей, которые мы хотим исполнить в Playbook, в зависимости от условий версии.Поскольку эта роль используется во многих Playbooks, кажется, что не следует делать условную проверку в самой роли, так как это приведет к утечке деталей в роль.

Что мы хотим сделать:

    - name: Provisioninging for Windows Appservers
       hosts: WindowsAppservers
       roles:
       - { role: DotNet471, when: arenaVersion is version('18.1','>=', strict=False)  }

Но это не так со следующей ошибкой:

FAILED! => {"msg": "The conditional check 'arenaVersion is version('18.1'' failed. The error was: template error while templating string: unexpected '}', expected ')'. String: {% if arenaVersion is version('18.1' %} True {% else %} False {% endif %}\n\nThe error appears to have been in '/mnt/c/Code/Git/AnsiblePlaybooks/roles/DotNet471/tasks/main.yaml': line 1, column 6, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n   - name: Install DotNet Framework 4.7.1\n     ^ here\n"}

Похоже, знак , в фильтр версий проанализирован неправильно?

Сравнение по строке работает нормально, например:

- { role: VCRedist140, when: arenaVersion|string() ==  "17.2" }

Моя версия Ansible - 2.6.2.

1 Ответ

0 голосов
/ 12 ноября 2018

Вы используете строки YAML без кавычек, поэтому строка when: заканчивается следующим ,.

Цитата полная when оператор:

- { role: DotNet471, when: "arenaVersion is version('18.1','>=', strict=False)" }
...