Score:2

Ansible: วิธีแปลงเอาต์พุตคำสั่งเชลล์เป็นรายการหรือตัวแปร

ธง vn

ฉันกำลังเรียกใช้คำสั่งเชลล์ใน playbook เพื่อแยกผลลัพธ์ของคำสั่ง ผลลัพธ์ของ

- แก้ปัญหา: msg="{{ dblist.stdout_lines }}"

เป็น

ตกลง: [โฮสต์] => {
    "ข้อความ": [
"inst1:db1"
"inst1:db2"
"inst1:db3"
"inst2:db4"
"inst2:db3"
  ]
}

ฉันต้องจัดเก็บค่านี้ในรูปแบบที่อนุญาตให้ฉันเรียกใช้ playbook ถัดไปโดยพิจารณาจากค่าของ item.0 เป็น inst1 และ item.1 เป็น db2 เป็นต้น

ปัจจุบัน

- แก้ปัญหา: msg="{{ item.0 }} มีค่า {{ item.1 }}"
  with_items: "{{ dblist.stdout_lines }}"

กำลังให้ค่าเช่น

ตกลง: [โฮสต์] => (รายการ=inst1:db1) => {
    "msg": "ฉันมีค่า n"
}
ตกลง: [โฮสต์] => (รายการ=inst1:db2) => {
    "msg": "ฉันมีค่า n"

ขอบคุณ.

Score:3
ธง br

ตัวอย่างเช่น

    - แก้ปัญหา:
        ข้อความ: "{{ _key }} มีค่า {{ _val }}"
      วนซ้ำ: "{{ dblist.stdout_lines }}"
      วาร์:
        _arr: "{{ item.split(':') }}"
        _key: "{{ _arr.0 }}"
        _val: "{{ _arr.1 }}"

ให้

  msg: inst1 มีค่า db1
  msg: inst1 มีค่า db2
  msg: inst1 มีค่า db3
  msg: inst2 มีค่า db4
  msg: inst2 มีค่า db3
Score:2
ธง th

หากคุณใช้เวอร์ชันใหม่เพียงพอ (ansible-core>=2.11) คุณสามารถใช้ไฟล์ แยก กรอง:

    - แก้ปัญหา:
        msg: "{{ item.0 }} มีค่า {{ item.1 }}"
      วนซ้ำ: "{{ dblist.stdout_lines | map('split', ':') }}"

เป็นไปได้ที่จะได้ผลลัพธ์ที่คล้ายกันในเวอร์ชันเก่า แต่น่าเกลียดกว่า:

    - แก้ปัญหา:
        msg: "{{ item.0 }} มีค่า {{ item.1 }}"
      วนซ้ำ: "{{ dblist.stdout_lines }}"
      loop_control:
        loop_var: _item
      วาร์:
        รายการ: "{{ _item.split(':') }}"

โพสต์คำตอบ

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