Score:1

การรวมพจนานุกรมสองเล่มด้วยคีย์ใน Ansible

ฉันกำลังมองหาความช่วยเหลือในการรวมพจนานุกรมสองเล่มเข้าด้วยกันโดยเฉพาะ ฉันจะขอบคุณมากสำหรับความคิดใด ๆ

ฉันมีพจนานุกรมสองเล่มดังนี้: คำสั่งที่ 1:

เซิร์ฟเวอร์:
  เซิร์ฟเวอร์ 1:
    ทรัพย์สิน1:อ
    พร็อพเพอร์ตี้2:บ
    พร็อพเพอร์ตี้3:ค
  เซิร์ฟเวอร์ 2:
    ทรัพย์สิน1:อ
    พร็อพเพอร์ตี้2:บ
    พร็อพเพอร์ตี้3:ค

คำสั่งที่ 2:

การจัดการ:
  เซิร์ฟเวอร์ 1: ip1_addr
  เซิร์ฟเวอร์ 2: ip2_addr

ผลลัพธ์ที่ต้องการ:

เซิร์ฟเวอร์:
  เซิร์ฟเวอร์ 1:
    ทรัพย์สิน1:อ
    พร็อพเพอร์ตี้2:บ
    พร็อพเพอร์ตี้3:ค
    คุณสมบัติ 4: ip1_addr
  เซิร์ฟเวอร์ 2:
    ทรัพย์สิน1:อ
    พร็อพเพอร์ตี้2:บ
    พร็อพเพอร์ตี้3:ค
    คุณสมบัติ 4: ip2_addr

หรือฉันอาจเลือกเส้นทางผิด สิ่งที่ฉันต้องการคือวนซ้ำพจนานุกรมสองอันในคราวเดียวเพื่อรับ ip1_addr ภายใต้คีย์ server1 และ ip2_addr ภายใต้คีย์ server2

Score:2
ธง br

แปลงพจนานุกรม การจัดการ แรก

    - set_fact:
        mgmt: "{{ mgmt|d({})|combine({item.key: {'Property4': item.value}}) }}"
      วนซ้ำ: "{{ การจัดการ|dict2items }}"

ให้

  ผู้จัดการ:
    เซิร์ฟเวอร์ 1:
      คุณสมบัติ 4: ip1_addr
    เซิร์ฟเวอร์ 2:
      คุณสมบัติ 4: ip2_addr

แล้ว รวมกัน พจนานุกรม

    - set_fact:
        เซิร์ฟเวอร์: "{{ เซิร์ฟเวอร์|รวมกัน(mgmt, recursive=True) }}"

ให้ผลลัพธ์ที่ต้องการ

  เซิร์ฟเวอร์:
    เซิร์ฟเวอร์ 1:
      ทรัพย์สิน1:อ
      พร็อพเพอร์ตี้2:บ
      พร็อพเพอร์ตี้3:ค
      คุณสมบัติ 4: ip1_addr
    เซิร์ฟเวอร์ 2:
      ทรัพย์สิน1:อ
      พร็อพเพอร์ตี้2:บ
      พร็อพเพอร์ตี้3:ค
      คุณสมบัติ 4: ip2_addr

หากคุณต้องการทำซ้ำผลลัพธ์ การแปลงพจนานุกรมทั้งสองเป็นรายการจะง่ายกว่า

    - set_fact:
        mgmt: "{{ mgmt|d([]) + [{'เซิร์ฟเวอร์': item.key,
                                 'Property4': item.value}] }}"
      วนซ้ำ: "{{ การจัดการ|dict2items }}"

    - set_fact:
        srvs: "{{ srvs|d([]) + [{'server': item.key}|combine(item.value)] }}"
      วนซ้ำ: "{{ เซิร์ฟเวอร์|dict2items }}"

ให้

  ผู้จัดการ:
  - Property4: ip1_addr
    เซิร์ฟเวอร์: เซิร์ฟเวอร์1
  - Property4: ip2_addr
    เซิร์ฟเวอร์: เซิร์ฟเวอร์2

  srv:
  - Property1:ก
    พร็อพเพอร์ตี้2:บ
    พร็อพเพอร์ตี้3:ค
    เซิร์ฟเวอร์: เซิร์ฟเวอร์1
  - Property1:อ
    พร็อพเพอร์ตี้2:บ
    พร็อพเพอร์ตี้3:ค
    เซิร์ฟเวอร์: เซิร์ฟเวอร์2

จากนั้นใช้ ชุมชนทั่วไป กรอง list_mergeby

    - แก้ปัญหา:
        msg: "{{ srvs|lists_mergeby(mgmt, 'เซิร์ฟเวอร์') }}"

ให้

  ข้อความ:
  - Property1:อ
    พร็อพเพอร์ตี้2:บ
    พร็อพเพอร์ตี้3:ค
    คุณสมบัติ 4: ip1_addr
    เซิร์ฟเวอร์: เซิร์ฟเวอร์1
  - Property1:ก
    พร็อพเพอร์ตี้2:บ
    พร็อพเพอร์ตี้3:ค
    คุณสมบัติ 4: ip2_addr
    เซิร์ฟเวอร์: เซิร์ฟเวอร์2

โพสต์คำตอบ

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