Назад | Перейти на главную страницу

Ansible предложение "where" для "Являются ли эти хосты в этой группе?"

Я пишу задачу ansible (v2.9.6), которую следует запускать только для хостов в определенной группе. Как мне написать where пункт, чтобы соответствовать этому?

when: "'my_group_name' in {{ group_names }}"

дает мне следующую ошибку

fatal: [hostname1.example.com]: FAILED! => {"msg": "The conditional check ''my_group_name' in {{ group_names }}' failed. The error was: template error while templating string: expected token ',', got 'string'. String: {% if 'my_group_name' in [u'apache_webservers', u'my_group_name', u'webservers', u'ubuntu_servers'] %} True {% else %} False {% endif %}\n\nThe error appears to be in ...
- name: test playbook
  hosts: all
  vars:
    my_group: openvpn

  tasks:
  - name: debug
    debug:
      msg: 'my_group is: {{my_group}} , group_names are: {{group_names}}'

  - debug:
      msg: 'condition passed'
    when: my_group in group_names

результат:

PLAY [test playbook] ************************************************************************************************************************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************************************************************************************************************
ok: [host1]
ok: [host2]

TASK [debug] ********************************************************************************************************************************************************************************************************************************
ok: [host2] => {
    "msg": "my_group is: openvpn , group_names are: ['openvpn']"
}
ok: [host1] => {
    "msg": "my_group is: openvpn , group_names are: ['openvpn']"
}

TASK [debug] ********************************************************************************************************************************************************************************************************************************
ok: [host2] => {
    "msg": "condition passed"
}
ok: [host1] => {
    "msg": "condition passed"
}

протестировано на анзибле 2.9.6

Начните новое воспроизведение, которое может быть в том же файле playbook.

- name: Deploy thing 
  hosts: my_group_name

  tasks:
  - name: Do thing
    debug:
      msg: thing

Не то условие, о котором вы просили. Однако более ясно, что происходит, поскольку игра запускает только хосты, соответствующие шаблону.