Взгляд на проблему с другой стороны может помочь: вместо того, чтобы пытаться определить, действительно ли текущий хост, на котором вы зацикливаете, находится в определенном шаблоне группы 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