De exemplu, având în vedere inventarul
coajă> gazde pisici
gazdă01
gazda02
gazda03
si lista
listă:
- gazdă: host01
discn: disk0
OS: 13.0
- gazdă: host02
discn: disc4
OS: 13.0
- gazdă: host06
discn: hdisk7
OS: 13.0
Creați lista gazdelor permise
my_hosts: „{{ list|hartă(atribut='gazdă')|listă }}”
dă
my_hosts:
- gazda01
- gazda02
- gazda06
Apoi, creați un dicționar cu gazdele permise și versiunile sistemului de operare
my_os: „{{ list|items2dict(key_name='host', value_name='os') }}"
dă
my_os:
gazdă01: 13.0
gazdă02: 13.0
gazdă06: 13.0
Acum, sarcinile de mai jos elimină fișierul în mod condiționat și afișează rezultatele înregistrate
- nume: Eliminați fișierul din client
fişier:
stare: absent
calea: /tmp/me
când:
- inventory_hostname în my_hosts
- ansible_distribution_version ==
my_os[inventory_hostname]|implicit('Niciuna')|șir
înregistrare: fileopt
- depanare:
var: fileopt
dă
SARCINA [Eliminați fișierul de pe client] ******************************************** **
omitere: [gazdă03]
ok: [gazdă02]
ok: [gazdă01]
SARCINA [depanare] ************************************************ ****************
ok: [gazdă01] =>
fileopt:
schimbat: fals
a eșuat: fals
calea: /tmp/me
stare: absent
ok: [gazdă02] =>
fileopt:
schimbat: fals
a eșuat: fals
calea: /tmp/me
stare: absent
ok: [gazdă03] =>
fileopt:
schimbat: fals
skip_reason: rezultatul condiționat a fost fals
omis: adevărat
Cum era de așteptat, gazda03 care lipsește din listă a fost omis.
Opțional, crearea unui grup dinamic ar putea fi mai eficientă dacă lista gazdelor permise este mult mai mică în comparație cu toate gazdele. De exemplu, creați un grup de gazde permise în prima redare și utilizați-l în a doua redare
- nume: Creați grup my_hosts
gazde: toate
gather_facts: adevărat
vars:
listă:
- gazdă: host01
discn: disk0
OS: 13.0
- gazdă: host02
discn: disc4
OS: 13.0
- gazdă: host06
discn: hdisk7
OS: 13.0
my_hosts: „{{ list|hartă(atribut='gazdă')|listă }}”
my_os: „{{ list|items2dict(key_name='host', value_name='os') }}"
sarcini:
- set_fact:
_my_os: „{{ ansible_distribution_version ==
my_os[inventory_hostname]|implicit('Niciuna')|șir }}"
- nume: Creați grup my_hosts
add_host:
nume: „{{ item }}”
grupuri: my_hosts
buclă: „{{ hostvars|dict2items|
selectattr('key', 'in', my_hosts)|
selectattr('value._my_os')|
harta(atribut='cheie')|
lista }}"
run_once: adevărat
- nume: Eliminați fișierul din my_hosts
gazde: my_hosts
gather_facts: false
sarcini:
- nume: Eliminați fișierul din client
fişier:
stare: absent
calea: /tmp/me
înregistrare: fileopt
- depanare:
var: fileopt
dă
PLAY [Creează grup my_hosts] ***************************************
SARCINA [Adunarea faptelor] *********************************************
ok: [gazdă03]
ok: [gazdă01]
ok: [gazdă02]
SARCINA [set_fact] ************************************************ *****
ok: [gazdă03]
ok: [gazdă02]
ok: [gazdă01]
SARCINA [Creați grupul my_hosts] ***************************************
ok: [gazdă01] => (articol=gazdă01)
ok: [gazdă01] => (articol=gazdă02)
PLAY [Eliminați fișierul din my_hosts] ************************************
SARCINA [Eliminați fișierul de pe client] *************************************
ok: [gazdă01]
ok: [gazdă02]
SARCINA [depanare] ************************************************ *********
ok: [gazdă01] =>
fileopt:
schimbat: fals
a eșuat: fals
calea: /tmp/me
stare: absent
ok: [gazdă02] =>
fileopt:
schimbat: fals
a eșuat: fals
calea: /tmp/me
stare: absent