Используйте подстановочный знак в операторах when групп - PullRequest
1 голос
/ 04 августа 2020

Я хотел бы выполнить задачу только тогда, когда хост находится в группе *beat, вот так.

when:
  - (groups['*beat'] is defined and inventory_hostname in groups['*beat'])

Что не работает. Задача все время пропускается.

Кто-нибудь знает, как я могу добиться желаемого поведения?

1 Ответ

2 голосов
/ 04 августа 2020

Взгляд на проблему с другой стороны может помочь: вместо того, чтобы пытаться определить, действительно ли текущий хост, на котором вы зацикливаете, находится в определенном шаблоне группы c, вы можете перечислить группы, в которых находится этот хост. in, с переменной group_names, а затем select только группы, соответствующие вашему шаблону. С этого момента, если список пуст, это означает, что ваш хост не входит в группу, соблюдающую шаблон.

Учитывая инвентарь:

all:
  hosts:
    localhost:

  vars:
    ansible_connection: local

  children:
    heartbeat:
      hosts:
        rate:
        diastole:
        systole:
      
    filebeat:
      hosts:
        syslog:
        file:
        stdout:

    fox:
      hosts:
        brown:
        jump:
        over:
        lazy:
        dog: 

И playbook:

- hosts: all
  gather_facts: no  
        
  tasks:
    - debug:
        msg: "I am in a group named *beat"
      when: 
        - group_names | select('match', '^(.*)beat$') | list | length > 0

Это дает результат:

PLAY [all] ********************************************************************************************************

TASK [debug] ******************************************************************************************************
skipping: [localhost]
ok: [rate] => {
    "msg": "I am in a group named *beat"
}
ok: [diastole] => {
    "msg": "I am in a group named *beat"
}
ok: [systole] => {
    "msg": "I am in a group named *beat"
}
ok: [syslog] => {
    "msg": "I am in a group named *beat"
}
ok: [file] => {
    "msg": "I am in a group named *beat"
}
ok: [stdout] => {
    "msg": "I am in a group named *beat"
}
skipping: [brown]
skipping: [jump]
skipping: [over]
skipping: [lazy]
skipping: [dog]

PLAY RECAP ********************************************************************************************************
brown                      : ok=0    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   
diastole                   : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
dog                        : ok=0    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   
file                       : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
jump                       : ok=0    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   
lazy                       : ok=0    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   
localhost                  : ok=0    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   
over                       : ok=0    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   
rate                       : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
stdout                     : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
syslog                     : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
systole                    : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...