Score:1

Ansible: แปลงสตริงเป็นพจนานุกรม

ธง eg

ฉันกำลังเปิดตัว Ansible จาก Tower จากนั้นฉันกรอกผู้ใช้ใหม่เป็นข้อความ:

{ ชื่อ: user1, uid: 5000 }
{ ชื่อ: user2, uid: 5001 }

ฉันต้องการย้ำผู้ใช้เหล่านั้นเป็นพจนานุกรมบางอย่างเช่น:

- ชื่อ: พิมพ์ vars
  แก้ปัญหา:
    var: "{{ item.name }}"
  with_items: "{{ users.split('\n') }}"

แต่มันไม่ทำงาน:

งาน [พิมพ์ vars] ************************************************ ************************************************** **********************
ตกลง: [lx-test] => (item={ ชื่อ: user1, uid: 5000 }) => {
    "ansible_loop_var": "รายการ",
    "รายการ": "{ ชื่อ: ผู้ใช้ 1, uid: 5,000 }",
    "{ ชื่อ: user1, uid: 5000 }": "ไม่ได้กำหนดตัวแปร!"
}
ตกลง: [lx-test] => (item={ ชื่อ: user2, uid: 5001 }) => {
    "ansible_loop_var": "รายการ",
    "รายการ": "{ ชื่อ: user2, uid: 5001 }",
    "{ ชื่อ: user2, uid: 5001 }": "ไม่ได้กำหนดตัวแปร!"
}

มีความคิดว่าจะแปลงสตริงนั้นเป็นพจนานุกรมจริงได้อย่างไร ขอบคุณล่วงหน้า!

Score:1
ธง br

อัปเดต

การแสดงออกด้านล่าง

users_list: "{{ users_str.splitlines()|แผนที่('from_yaml')|รายการ }}"

ให้

users_list:
  - ชื่อ: user1
    ค่าใช้: 5,000
  - ชื่อ: user2
    รหัส: 5001

ประกาศตัวแปรเป็น เหมาะสม.


คำตอบเดิม

ข้อความนี้ไม่ใช่ทั้ง JSON และ YAML ที่ถูกต้อง คุณจะต้องแบ่งบรรทัดและอ่านพจนานุกรมทีละบรรทัด ตัวอย่างเช่น กำหนดข้อความ

users_str: |
  { ชื่อ: user1, uid: 5000 }
  { ชื่อ: user2, uid: 5001 }

งานด้านล่าง

    - set_fact:
        users_list: "{{ users_list|d([]) + [item|from_yaml] }}"
      วนซ้ำ: "{{ users_str.splitlines() }}"

สร้างรายการพจนานุกรม

users_list:
  - ชื่อ: user1
    ค่าใช้: 5,000
  - ชื่อ: user2
    รหัส: 5001

การทำซ้ำเป็นเรื่องเล็กน้อยในขณะนี้

    - แก้ปัญหา:
        var: item.name
      วนซ้ำ: "{{ users_list }}"

ให้

  item.name: user1
  item.name: user2
Costales avatar
eg flag
คำตอบที่ยอดเยี่ยม ทำงานได้อย่างสมบูรณ์แบบ! ขอบคุณมากวลาดิมีร์
Francisco Rebolledo avatar
us flag
ขอบคุณ! โซลูชันของคุณทำงานได้ดีเยี่ยม แต่คุณช่วยอธิบายว่า users_list: "{{ users_list|d([]) + [item|from_yaml] }}" ทำอะไรได้บ้าง ขอบคุณ!
br flag
แน่นอน. นิพจน์เชื่อมรายการ 'd' เป็นนามแฝงของ 'default' 'รายการ' เป็นสตริง ดังนั้นจึงต้องแปลงโดยตัวกรอง 'from_yaml' คุณอาจต้องการแยกย่อยลูปและดูด้วยตัวคุณเอง
br flag
ดูรหัสแบบง่าย

โพสต์คำตอบ

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