Score:1

การเข้าถึงค่าองค์ประกอบย่อย dict

ธง ph
azk

นี่คือเพลย์บุ๊กของฉัน

- ชื่อ: โฮสต์ของ luns
  แก้ปัญหา:
    msg: "{{ ลูน }}"
  วาร์:
    ลูน: "{{ ansible_facts.lvm.pvs }}"

และผลลัพธ์สำหรับสิ่งนี้คือ

งาน [Luns del vg] ********************************************** ****************
ตกลง: [awxworker_rhel6] => {
    "ข้อความ": {
        "/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"
        }
    }
}

ฉันต้องได้รับ lus ของ vg ที่ตรงกัน

Ej: "ตัว vg01 luns คือ: /dev/sdb1 /dev/sdd1"

ฉันได้ลองใช้วิธีอื่นแล้ว

- ชื่อ: ลุนส์ เดล วีจี
  set_fact:
    vg_luns: "{{ รายการ }}"
  with_items: "{{ ansible_facts.lvm.pvs }}"
    วาร์:
      ชื่อ VG: "{{ VG }}"
  เมื่อ: ansible_facts.lvm.pvs.vg_luns.vg == VGname
  
- ชื่อ: พิมพ์ วีจี's luns
  แก้ปัญหา:
    ข้อความ:
      - "ดวง {{ VGname }} คือ: {{ vg_luns }}"

VG เป็นตัวแปรพิเศษที่ฉันใส่ VGname ที่ตรงกัน

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

หวังว่าคุณจะสามารถช่วยได้

ขอบคุณล่วงหน้า!
Score:1
ธง th

ไม่จำเป็นต้องมี set_fact หรือ Ansible loops แปลงพจนานุกรมเป็นรายการและใช้การดำเนินการ Jinja ปกติกับมัน

- แก้ปัญหา:
    msg: "สัญลักษณ์ {{ VG }} คือ: {{ ansible_facts.lvm.pvs | dict2items | selectattr('value.vg', 'equalto', VG) | map(attribute='key') | join(' ' ) }}"
azk avatar
ph flag
azk
ขอบคุณมาก ๆ! นั่นชี้ไปที่สิ่งที่ฉันต้องการโดยตรง
Score:0
ธง br

สร้างพจนานุกรมของกลุ่ม ตัวอย่างเช่น

  - set_fact:
      vgs: "{{ vgs|d({})|
               รวม ({item.0: item.1|
                                แผนที่(แอตทริบิวต์='คีย์')|
                                รายการ}) }}"
    วนซ้ำ: "{{ luns|dict2items|groupby('value.vg') }}"

ให้

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

จากนั้นการเลือกเป็นเรื่องเล็กน้อย

    - แก้ปัญหา:
        msg: "สัญลักษณ์ {{ VG }} คือ: {{ vgs[VG]|join(' ') }}"

ให้ข้อความ

เปลือก> playbook.yml ansible-playbook -e VG=vg01

  msg: 'vg01 luns คือ: /dev/sdb1 /dev/sdd1'
azk avatar
ph flag
azk
นี่เป็นทางออกที่น่าสนใจเช่นกัน อาจมีปัญหาเกี่ยวกับไวยากรณ์เพราะมันทำให้ฉันมีข้อผิดพลาด: ``` ล้มเหลว! => {"msg": "|combine คาดว่าจะมีพจนานุกรม ได้รับ \"{'vg00': }\""} ``` ฉันจะพยายามหาว่ามันคืออะไร
br flag
เพิ่มตัวกรอง *รายการ* ฉันอัปเดตคำตอบแล้ว ที่จริงแล้ว โซลูชันทั้งสองใช้ขั้นตอนเดียวกัน ไม่จำเป็นต้องใช้ *รายการ* ในโซลูชันที่คุณยอมรับ เนื่องจากตัวกรอง *เข้าร่วม* อยู่หลัง *แผนที่* ที่นี่ ตัวกรอง *เข้าร่วม* จะถูกใช้หลังจากเลือกกลุ่มแล้ว
azk avatar
ph flag
azk
สมบูรณ์แบบ. ฉันยอมรับวิธีแก้ปัญหาของคุณด้วย มันใช้งานได้ดี ขอบคุณมาก ๆ!

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา