Puncte:1

Accesarea valorii subelementului dict

drapel ph
azk

Iată cartea mea de joc

- nume: Luns gazdei
  depanare:
    msg: "{{ luni }}"
  vars:
    luni: „{{ ansible_facts.lvm.pvs }}”

Și rezultatul pentru aceasta este

SARCINA [Luns del vg] ******************************************** ****************
ok: [awxworker_rhel6] => {
    "msg": {
        „/dev/sda2”: {
            "free_g": "20.72",
            "size_g": "79,72",
            "vg": "vg00"
        },
        „/dev/sdb1”: {
            "free_g": "3,99",
            "size_g": "4,99",
            "vg": "vg01"
        },
        „/dev/sdc1”: {
            "free_g": "0,99",
            "size_g": "4,99",
            "vg": "vg02"
        },
        „/dev/sdd1”: {
            "free_g": "4,99",
            "size_g": "4,99",
            "vg": "vg01"
        }
    }
}

Trebuie să obțin lunile unui vg potrivit

Ej: „Lunurile vg01 sunt: ​​/dev/sdb1 /dev/sdd1”

Am încercat asta între alte moduri

- nume: Luns del VG
  set_fact:
    vg_luns: „{{ item }}”
  with_items: „{{ ansible_facts.lvm.pvs }}”
    vars:
      Nume VG: „{{ VG }}”
  când: ansible_facts.lvm.pvs.vg_luns.vg == VGname
  
- nume: Print VG's luns
  depanare:
    mesaj:
      - „Lunurile {{ VGname }} sunt: ​​{{ vg_luns }}”

VG este o extravariabilă în care am pus numele VG potrivit

$ ansible-playbook -i proiecte/Inventar/awx_hosts -l testhost getvgluns.yml -e VG=vg01

Sper că poți ajuta

Mulțumesc anticipat!
Puncte:1
drapel th

Nu este nevoie de set_fact sau bucle Ansible. Convertiți dicționarul într-o listă și utilizați operațiuni Jinja normale pe el.

- depanare:
    msg: "{{ VG }} luni sunt: ​​{{ ansible_facts.lvm.pvs | dict2items | selectattr('value.vg', 'equalto', VG) | map(attribute='key') | join(' ' )}}"
azk avatar
drapel ph
azk
Mulțumesc foarte mult! Asta indică direct ceea ce am nevoie.
Puncte:0
drapel br

Creați un dicționar al grupurilor. De exemplu

  - set_fact:
      vgs: „{{ vgs|d({})|
               combine({item.0: item.1|
                                harta(atribut='cheie')|
                                listă}) }}"
    buclă: „{{ luns|dict2items|groupby('value.vg') }}”

  vgs:
    vg00:
    - /dev/sda2
    vg01:
    - /dev/sdb1
    - /dev/sdd1
    vg02:
    - /dev/sdc1

Atunci selecția este banală

    - depanare:
        msg: "Lunurile {{ VG }} sunt: ​​{{ vgs[VG]|join(' ') }}"

dă mesajul

shell> ansible-playbook playbook.yml -e VG=vg01

  msg: „Lunurile vg01 sunt: ​​/dev/sdb1 /dev/sdd1”
azk avatar
drapel ph
azk
Aceasta este și o soluție atractivă. Poate că există o problemă de sintaxă, deoarece îmi dă o eroare: ``` A EȘUAT! => {"msg": "|Combine asteapta dictionare, a primit \"{'vg00': }\""} ``` Voi încerca să aflu ce este.
drapel br
Adăugați filtrul *list*. Am actualizat raspunsul. De fapt, ambele soluții folosesc aceeași procedură. *Lista* nu este necesară în soluția pe care ați acceptat-o ​​din cauza filtrului *join* imediat după *hartă*. Aici, filtrul *join* este folosit după ce grupul a fost selectat.
azk avatar
drapel ph
azk
Perfect. Accept si eu solutia ta. Merge bine. Mulțumesc foarte mult!

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.