Score:1

ตัวแปรผลลัพธ์ข้อความดีบักการพิมพ์แบบ Ansible

ธง hk

ฉันมีงานง่าย ๆ ที่ฉันไม่สามารถเอาชนะได้

ฉันมี playbook ที่ส่งคืนการกำหนดค่าอินสแตนซ์ AWS EC2 ฉันต้องพิมพ์เท่านั้น (แสดงผล) ส่วนตัว_ip_ที่อยู่.

นี่คือเพลย์บุ๊กของฉัน

---
- โฮสต์: ท้องถิ่น
  การเชื่อมต่อ: ท้องถิ่น
  Gather_facts: เท็จ
  กลายเป็น: ใช่
  makes_method: เปิดใช้งาน

  งาน:

  - ชื่อ: Gather-info-ec2
    community.aws.ec2_instance_info:
      instance_ids:
        - ฉัน XXXXXXAAAAAA

    ลงทะเบียน: ec2

  - แก้ปัญหา: msg="{{ ec2.instances.network_interfaces.private_ip_address }}"

เมื่อฉันเรียกใช้เช่นนี้ ฉันได้รับข้อผิดพลาดดังต่อไปนี้

ร้ายแรง: [localhost]: ล้มเหลว! => {"msg": "งานมีตัวเลือกที่มีตัวแปรที่ไม่ได้กำหนด ข้อผิดพลาดคือ: 'list object' has no attribute 'network_interfaces'\n\nข้อผิดพลาดดูเหมือนจะอยู่ใน '/etc/ansible/playbooks/AWSLinuxMigration /gather_ec2_info.yaml': บรรทัดที่ 16 คอลัมน์ 5 แต่อาจ\nอยู่ที่อื่นในไฟล์ ขึ้นอยู่กับปัญหาทางไวยากรณ์ที่แน่นอน\n\nบรรทัดที่ละเมิดดูเหมือนจะเป็น:\n\n\n - ดีบัก: msg=\" {{ ec2.instances.network_interfaces.private_ip_address }}\"\n ^ ที่นี่\nเราอาจผิด แต่สิ่งนี้ดูเหมือนว่าอาจมีปัญหากับ\nเครื่องหมายคำพูดขาดหายไป อ้างอิงเครื่องหมายวงเล็บนิพจน์เทมเพลตทุกครั้งเมื่อ\nเริ่มค่า ตัวอย่างเช่น:\n\n with_items:\n - {{ foo }}\n\nควรเขียนเป็น:\n\n with_items:\n - \"{{ foo }}\"\n"}

เมื่อฉันดำเนินการโดยไม่มีส่วน DEBUG และด้วย -vvv มันแสดงผลด้านล่าง ฉันจะแยกและพิมพ์ที่อยู่นี้ได้อย่างไร ฉันย่อให้สั้นลงเล็กน้อย แต่คุณได้รับแนวคิด

ตกลง: [localhost] => {
    "ข้อความ": {
        "เปลี่ยนแปลง": เท็จ
        "ล้มเหลว": เท็จ
        "ตัวอย่าง": [
            {
                "ami_launch_index": 0,
                "สถาปัตยกรรม": "x86_64",
                "block_device_mappings": [
                    {
                        "device_name": "/dev/xvda",
                        "ebs": {
                            "attach_time": "2020-04-15T16:11:19+00:00",
                            "delete_on_termination": จริง
                            "สถานะ": "แนบ",
                            "volume_id": "xxxxxx"
                        }
                    }
                ]
                "ความจุ_reservation_species": {
                    "ความจุ_reservation_preference": "เปิด"
                },
                "client_token": "",
                "cpu_options": {
                    "core_count": 1,
                    "threads_per_core": 2
                },
                "ebs_optimized": จริง
                "ena_support": จริง
                "วงล้อม_ตัวเลือก": {
                    "เปิดใช้งาน": เท็จ
                },
                "hibernation_options": {
                    "กำหนดค่า": เท็จ
                },
                "ไฮเปอร์ไวเซอร์": "xen",
                "iam_instance_profile": {
                    "arn": "xxxxxx",
                    "รหัส": "xxxxxx"
                },
                "image_id": "xxxxx",
                "instance_id": "xxxxx",
                "instance_type": "t3.medium",
                "key_name": "xxxxx",
                "launch_time": "2021-04-21T00:01:25+00:00",
                "metadata_options": {
                    "http_endpoint": "เปิดใช้งาน",
                    "http_put_response_hop_limit": 1,
                    "http_tokens": "ทางเลือก",
                    "สถานะ": "นำไปใช้"
                },
                "การตรวจสอบ": {
                    "สถานะ": "ปิดการใช้งาน"
                },
                "network_interfaces": [
                    {
                        "สมาคม": {
                            "ip_owner_id": "xxxx",
                            "public_dns_name": "xxxxx",
                            "public_ip": "xxxx"
                        },
                        "ไฟล์แนบ": {
                            "attach_time": "2020-04-15T16:11:18+00:00",
                            "ไฟล์แนบ_id": "xxxxx",
                            "delete_on_termination": จริง
                            "device_index": 0,
                            "network_card_index": 0,
                            "สถานะ": "แนบ"
                        },
                        "description": "อินเทอร์เฟซเครือข่ายหลัก",
                        "กลุ่ม": [
                            {
                                "group_id": "xxxxx",
                                "group_name": "xxxxx"
                            }
                        ]
                        "interface_type": "อินเทอร์เฟซ",
                        "ipv6_addresses": [],
                        "mac_address": "xxxxx",
                        "network_interface_id": "xxxx",
                        "owner_id": "xxxxx",
                        "private_dns_name": "ip-10-0-1-161.ec2.internal",
                        "private_ip_address": "10.0.1.161",
                        "private_ip_addresses": [
                            {
                                "สมาคม": {
                                    "ip_owner_id": "xxxxx",
                                    "public_dns_name": "xxxx.compute-1.amazonaws.com",
                                    "public_ip": "2.2.2.2"
                                },
                                "หลัก": จริง
                                "private_dns_name": "ip-333333.ec2.internal",
                                "private_ip_address": "1.1.1.1."
                            }
                        ]
                        "source_dest_check": จริง
                        "สถานะ": "ใช้งานอยู่"

                    }
                ]
        ]
    }
}
Score:0
ธง br

คุณลักษณะทั้งสอง ตัวอย่าง และ network_interfaces เป็นรายการ ใช้ json_query, เช่น.

    - แก้ปัญหา:
        ข้อความ: "{{ ec2.instances|
                 json_query('[].network_interfaces[].private_ip_address') }}"

ผลลัพธ์จะเป็นรายการด้วย เนื่องจากอาจมีอินเทอร์เฟซเครือข่ายและที่อยู่เพิ่มเติม ในกรณีของคุณ คุณอาจต้องการเลือกอันแรก เช่น

    - แก้ปัญหา:
        ข้อความ: "{{ ec2.instances|
                 json_query('[].network_interfaces[].private_ip_address')|
                 แรก }}"
housemd avatar
hk flag
เยี่ยมมากใช้งานได้ !!! ฉันจะลงทะเบียนสิ่งนี้กับตัวแปรได้อย่างไรเพื่อให้ฉันสามารถใช้ซ้ำใน playbook ได้
br flag
ดู [set_fact](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/set_fact_module.html#ansible-builtin-set-fact-set-host-variable-s-and-fact-s ). จากนั้นอ่าน [ความคิดเห็นทำงานอย่างไร](https://meta.stackexchange.com/questions/19756/how-do-comments-work) และ "ความคิดเห็นมีไว้เพื่ออะไร และเมื่อใดที่ฉันไม่ควรแสดงความคิดเห็น" โดยเฉพาะอย่างยิ่ง.

โพสต์คำตอบ

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