Score:0

ansible/jinja แยกแอตทริบิวต์หลายรายการจากการส่งคืน json ที่ซับซ้อน โดยปฏิเสธการจับคู่เฉพาะ

ธง vn

ฉันกำลังพยายามแยกแอตทริบิวต์หลายรายการจากเพย์โหลดที่ซับซ้อนที่ส่งคืนจากการเรียก API ในขณะที่ปฏิเสธสมาชิกที่มีค่าบางอย่างในฟิลด์ 'ชื่อ' พิจารณาน้ำหนักบรรทุกต่อไปนี้:

{
"npod_volumes": {
    "เปลี่ยนแปลง": เท็จ
    "ล้มเหลว": เท็จ
    "วอลุ่ม": [
        {
            "accessible_by_host_uuids": [
                "9e8ba77c-8e09-4c69-b893-876742f83f34",
                "ad5a5431-17e1-4023-8373-a6cf64cc5151",
                "3333a278-414b-45d1-8972-611115c76f87",
                "1e36d01a-f936-4249-9045-28232bb103e7"
            ],
            "บูต": เท็จ
            "creation_time": "2022-01-26T18:25:46",
            "current_owner_host_uuid": "ad5a5431-17e1-4023-8373-a6cf64cc5151",
            "expiration_time": null,
            "lun_uuids": [
                "8cfe80b6-5773-41bd-b175-e6e495ca0023",
                "8e54f045-89dd-462a-bab4-552ed745ed24",
                "136d7028-2b20-41c7-8b30-e104d211242c",
                "4e7aac12-3b29-41c7-b016-36556feea9f1"
            ],
            "ชื่อ": "VMware_Lenovo_VV7",
            "natural_backup_host_uuid": "9e8ba77c-8e09-4c69-b893-876742f83f34",
            "natural_backup_spu_serial": "xxxxxxx",
            "natural_owner_host_uuid": "ad5a5431-17e1-4023-8373-a6cf64cc5151",
            "natural_owner_spu_serial": "xxxxxxxx",
            "npod_uuid": "4b60437a-f8dc-4c80-b4b2-51b64b790487",
            "read_only_snapshot": เท็จ
            "size_bytes": 4000000000000,
            "snapshot_parent_uuid": null,
            "snapshot_uuids": null,
            "sync_state": "ซิงค์",
            "uuid": "ed73e3a0-25e2-4672-8048-84ad4468c0d7",
            "wwn": "6f497c2006174fed000ab00000007000"
        },
        {
            "accessible_by_host_uuids": [
                "9e8ba77c-8e09-4c69-b893-876742f83f34",
                "1e36d01a-f936-4249-9045-28232bb103e7",
                "ad5a5431-17e1-4023-8373-a6cf64cc5151",
                "3333a278-414b-45d1-8972-611115c76f87"
            ]
            "บูต": เท็จ
            "creation_time": "2022-01-26T18:25:40",
            "current_owner_host_uuid": "9e8ba77c-8e09-4c69-b893-876742f83f34",
            "expiration_time": null,
            "lun_uuids": [
                "49e511b7-2b5f-4727-ac63-de12c4b6eb45",
                "2baba8a4-dd23-4be4-ad9d-47580efa60d2",
                "4ff844d6-c677-4c2a-a2e5-c13a5c062b3c",
                "21e7f0c8-5f1a-438f-b503-e568f3691c01"
            ]
            "ชื่อ": "VMware_Lenovo_VV4",
            "natural_backup_host_uuid": "ad5a5431-17e1-4023-8373-a6cf64cc5151",
            "natural_backup_spu_serial": "xxxxxxx",
            "natural_owner_host_uuid": "9e8ba77c-8e09-4c69-b893-876742f83f34",
            "natural_owner_spu_serial": "xxxxxxxx",
            "npod_uuid": "4b60437a-f8dc-4c80-b4b2-51b64b790487",
            "read_only_snapshot": เท็จ
            "size_bytes": 4000000000000,
            "snapshot_parent_uuid": null,
            "snapshot_uuids": null,
            "sync_state": "ซิงค์",
            "uuid": "cc3991e2-5443-4bd0-a75d-3e8341d26282",
            "wwn": "6f497c2006174fed000ab00000004000"
        },
        {
            "accessible_by_host_uuids": [
                "ad5a5431-17e1-4023-8373-a6cf64cc5151"
            ]
            "บูต": จริง
            "creation_time": "2022-01-26T18:25:46",
            "current_owner_host_uuid": "ad5a5431-17e1-4023-8373-a6cf64cc5151",
            "expiration_time": null,
            "lun_uuids": [
                "d5ce25a9-15d1-4e36-878e-5e645ef0c557"
            ]
            "ชื่อ": "VMware_Lenovo_server-09.tme.nebulon.com_os",
            "natural_backup_host_uuid": "9e8ba77c-8e09-4c69-b893-876742f83f34",
            "natural_backup_spu_serial": "xxxxxxx",
            "natural_owner_host_uuid": "ad5a5431-17e1-4023-8373-a6cf64cc5151",
            "natural_owner_spu_serial": "xxxxxxxx",
            "npod_uuid": "4b60437a-f8dc-4c80-b4b2-51b64b790487",
            "read_only_snapshot": เท็จ
            "size_bytes": 20000000000,
            "snapshot_parent_uuid": null,
            "snapshot_uuids": null,
            "sync_state": "ซิงค์",
            "uuid": "bdbce49d-834d-438e-a56d-9c384bc229c0",
            "wwn": "6f497c2006174fed000ab00000000000"
        }
    ]
}

}

จากการส่งคืนนี้ ฉันต้องจัดเก็บฟิลด์ "ชื่อ" และ "wwn" สำหรับแต่ละวอลุ่ม นอกจากนี้ ฉันต้องปฏิเสธไดรฟ์ข้อมูลใดๆ ที่มี "_os" ในฟิลด์ "ชื่อ"

ฉันสามารถรับข้อมูลโดยใช้ json_query แต่ยังไม่ทราบวิธีปฏิเสธวอลุ่มที่มี "_os" ในชื่อโดยใช้วิธีนี้

- ชื่อ: ตั้งชื่อวอลุ่มและ WWN
  set_fact:
    volume_pairs: "{{ npod_volumes | json_query(volume_query) }}"
  วาร์: 
    volume_query: "volumes[].{ชื่อ: ชื่อ, wwn: wwn}"
  แท็ก: ปริมาณ

สิ่งนี้ให้ผลลัพธ์ต่อไปนี้ซึ่งรวมถึงโวลุ่ม "VMware_Lenovo_server-09.tme.nebulon.com_os" ที่ไม่ต้องการ

ตกลง: [127.0.0.1] => {
"volume_pairs": [
    {
        "ชื่อ": "VMware_Lenovo_VV7",
        "wwn": "6f497c2006187474000ab00000007000"
    },
    {
        "ชื่อ": "VMware_Lenovo_VV4",
        "wwn": "6f497c2006187474000ab00000004000"
    },
    {
        "ชื่อ": "VMware_Lenovo_server-09.tme.nebulon.com_os",
        "wwn": "6f497c2006187474000ab00000000000"
    }
]

}

ขอขอบคุณล่วงหน้าสำหรับเวลาและการพิจารณาของคุณ!

Score:0
ธง vn

ดังนั้นฉันจึงลงเอยด้วยวิธีแก้ปัญหานี้ การใช้ 'rejectattr' ฉันละเว้นไดรฟ์ข้อมูลทั้งหมดที่มี "_os" ในชื่อ อาจทำได้ด้วยวิธีที่หรูหรากว่านี้ซึ่งไม่รวมความต้องการของฉันในการใช้แบบสอบถาม json แต่จะทำให้งานเสร็จ

  - ชื่อ: กรองไดรฟ์ข้อมูล OS
    set_fact:
      shared_volumes: "{{ npod_volumes.volumes | 
                        ปฏิเสธattr('ชื่อ', 'มี', '_os') | 
                        sort(แอตทริบิวต์='ชื่อ') | รายการ }}"
    ลงทะเบียน: ผลลัพธ์
    แท็ก: ปริมาณ  

  # สิ่งนี้สร้างรายชื่อวอลุ่มและ WWN ของพวกเขา
  - ชื่อ: ตั้งชื่อวอลุ่มและ WWN
    set_fact:
      volume_pairs: "{{ shared_volumes | json_query(volume_query) }}"
    วาร์: 
      volume_query: "[].{ชื่อ: ชื่อ, wwn: wwn}"
    แท็ก: ปริมาณ



# {
# "volume_pairs": [
# {
# "ชื่อ": "VMware_Lenovo_VV4",
# "wwn": "6f497c2006187474000ab00000004000"
# },
# {
# "ชื่อ": "VMware_Lenovo_VV5",
# "wwn": "6f497c2006187474000ab00000005000"
# },
# {
# "ชื่อ": "VMware_Lenovo_VV6",
# "wwn": "6f497c2006187474000ab00000006000"
# },
# {
# "ชื่อ": "VMware_Lenovo_VV7",
# "wwn": "6f497c2006187474000ab00000007000"
# }
# ]
# }
Zeitounator avatar
fr flag
ในสถานการณ์ส่วนใหญ่ (เช่น การวนซ้ำรายการคำสั่งในภายหลัง) คุณอาจเลิกขั้นตอน `json_query` และใช้ `shared_volumes` โดยตรงเพื่อระบุเฉพาะแอตทริบิวต์ที่จำเป็นสำหรับแต่ละองค์ประกอบ (`name` และ `wwn`) โปรดทราบว่า `json_query` ครอบคลุมรายการทั้งหมดของคุณแล้วเพื่อคัดลอกองค์ประกอบที่ย่อลงในตัวแปรใหม่ การใช้พวกมันตั้งแต่แรกน่าจะดีกว่าหากเกี่ยวข้องกับการใช้ทรัพยากรในการประมวลผล

โพสต์คำตอบ

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