Score:1

จะแยกวิเคราะห์แผนที่ได้อย่างไร?

ธง hu

ฉันกำลังพยายามสร้างรายการใน ansible ซึ่งประกอบด้วยข้อมูลคอนเทนเนอร์นักเทียบท่า ก่อนอื่น ฉันกำลังเรียกใช้โมดูลคำสั่งซึ่งส่งคืนสิ่งนี้ใน stdout:

"แผนที่[key1:value1 key2:value2 key3:value3]"

ฉันจะแยกวิเคราะห์เพิ่มเติมเพื่อรับค่าตามคีย์ที่ฉันระบุได้อย่างไร เมื่อฉันใช้ แผนที่ ตัวกรอง ฉันได้รับสิ่งนี้:

"msg": "<วัตถุกำเนิด do_map ที่ 0x7f3845b8a740>"

ถ้าฉันเรียกใช้ รายการ ตัวกรอง ฉันเพิ่งได้รับเอาต์พุตเป็นอักขระทุกตัวในแผนที่ ดังนั้น ["m", "a", "p", "[", "k", ...]

ฉันควรใช้ตัวกรองอะไร

anx avatar
fr flag
anx
คุณสามารถแยกวิเคราะห์ได้หากคำสั่งที่คุณได้รับนี้สามารถส่งออกรูปแบบการทำให้เป็นอนุกรมทั่วไป (มีตัวเลือก `--json` หรือไม่)
Michael Hampton avatar
cz flag
ดูเหมือนว่าเอาต์พุตจากโปรแกรม Go บางโปรแกรม ตรวจสอบกับนักพัฒนาซอฟต์แวร์เพื่อดูว่าคุณสามารถรับในรูปแบบที่แยกวิเคราะห์ได้ง่ายขึ้น เช่น JSON หรือไม่ ฉันเดาว่ามันอาจจะเป็นผลลัพธ์จากคำสั่ง `docker` แต่คุณไม่ได้ระบุ (และคุณควรมี) หากเป็นกรณีนี้ ให้ใช้ตัวเลือก `--format` เพื่อให้ได้สิ่งที่คุณต้องการในรูปแบบ JSON
Score:1
ธง br

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

    - set_fact:
        x: "{{ _dict|จาก_yaml }}"
      วาร์:
        _regex: '^(.*)\[(.*)\](.*)$'
        _key: "{{ stdout|regex_replace(_regex, '\1') }}"
        _val: "{{ stdout|regex_replace(_regex, '\2') }}"
        _dict: |
          {{ _กุญแจ }}:
          {% สำหรับฉันใน _val.split() %}
            {{ i|regex_replace(':', ':') }}
          {% สิ้นสุดสำหรับ %}

ให้

  x:
    แผนที่:
      คีย์ 1: ค่า 1
      คีย์ 2: ค่า 2
      คีย์ 3: ค่า 3

หากมีบรรทัดเพิ่มเติมเช่น

    stdout_lines:
      - "แผนที่1[คีย์1:ค่า1คีย์2:ค่า2คีย์3:ค่า3]"
      - "แผนที่2[key1:value1 key2:value2 key3:value3]"
      - "map3[key1:value1 key2:value2 key3:value3]"

มันจะเป็นไปได้ที่จะ รวมกัน พจนานุกรม เช่น

    - set_fact:
        x: "{{ x|d({})|combine(_dict|from_yaml) }}"
      วนซ้ำ: "{{ stdout_lines }}"
      วาร์:
        _regex: '^(.*)\[(.*)\](.*)$'
        _key: "{{ รายการ|regex_replace(_regex, '\1') }}"
        _val: "{{ รายการ|regex_replace(_regex, '\2') }}"
        _dict: |
          {{ _กุญแจ }}:
          {% สำหรับฉันใน _val.split() %}
            {{ i|regex_replace(':', ':') }}
          {% สิ้นสุดสำหรับ %}

ให้

  x:
    แผนที่1:
      คีย์ 1: ค่า 1
      คีย์ 2: ค่า 2
      คีย์ 3: ค่า 3
    แผนที่2:
      คีย์ 1: ค่า 1
      คีย์ 2: ค่า 2
      คีย์ 3: ค่า 3
    แผนที่ 3:
      คีย์ 1: ค่า 1
      คีย์ 2: ค่า 2
      คีย์ 3: ค่า 3

หากปุ่มซ้ำกัน เช่น

    stdout_lines:
      - "แผนที่[key1:value1 key2:value2 key3:value3]"
      - "แผนที่[key1:value1 key2:value2 key3:value3]"
      - "แผนที่[key1:value1 key2:value2 key3:value3]"

เป็นไปได้ที่จะเชื่อมรายการเข้าด้วยกัน เช่น

    - set_fact:
        x: "{{ x|d([]) + [_dict|from_yaml] }}"
      วนซ้ำ: "{{ stdout_lines }}"
      วาร์:
        _regex: '^(.*)\[(.*)\](.*)$'
        _key: "{{ รายการ|regex_replace(_regex, '\1') }}"
        _val: "{{ รายการ|regex_replace(_regex, '\2') }}"
        _dict: |
          {{ _กุญแจ }}:
          {% สำหรับฉันใน _val.split() %}
            {{ i|regex_replace(':', ':') }}
          {% สิ้นสุดสำหรับ %}

ให้

  x:
  - แผนที่:
      คีย์ 1: ค่า 1
      คีย์ 2: ค่า 2
      คีย์ 3: ค่า 3
  - แผนที่:
      คีย์ 1: ค่า 1
      คีย์ 2: ค่า 2
      คีย์ 3: ค่า 3
  - แผนที่:
      คีย์ 1: ค่า 1
      คีย์ 2: ค่า 2
      คีย์ 3: ค่า 3

โพสต์คำตอบ

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