Puncte:0

potriviți valoarea item.x cu inventory_hostname

drapel cn

Am nevoie de ajutor pentru a potrivi inventory_hostname cu item.host (din vars_file). Care este cel mai bun mod de a face asta? Nu mi-am putut da seama de asta deoarece sunt începător.

Cerința mea este:

  • Trebuie să sun toate gazdele din fișierul de inventar.

  • Trebuie să potrivesc item.host din ansible_inventory, dacă există, atunci rulați o comandă shell pe gazde care se potrivește cu toate item.hosts, apoi ieșiți.

  • filelist.yml este un fișier dinamic care se schimbă zilnic, toate gazdele există în inventar, dar vreau să le folosesc doar pe cele care sunt în fișier.

Am fișierul list.yml care conține informații despre numele gazdei, discul și versiunea

$ listă pisici.yml
---
listă:
  - gazdă: gazdă1
    discn: disk0
    os: 7

  - gazdă: gazdă2
    discn: disc4
    os: 7

  - gazdă: lhost6
    discn: hdisk7
    os: 7
---

În playbook am încercat să egalez valoarea, dar nu am avut noroc.

---
- nume: cartea mea de joc   
  gazde: toate   
  vars_file: 
    - list.yml   
  sarcini:
   - nume: Eliminați fișierul din client
     shell: "rm -f /tmp/me"
     când:
       - "('item.host' în inventory_hostname) și (ansible_distribution_version == 'item.os')"
     buclă: „{{ listă }}”
     înregistrare: fileopt
   - depanare: var=fileopt
----

Vă rugăm să propuneți o soluție care poate rezolva această problemă.

Puncte:2
drapel br

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ă }}”

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') }}"

  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

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

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

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.