Score:0

Ansible - ไม่สามารถพิมพ์ค่าของข้อเท็จจริงที่กำหนดเองได้

ธง ph
azk


นี่เป็นส่วนหนึ่งของ playbook ของบทบาทที่พูดคุยกับ vmware
ฉันกำลังพยายามตั้งค่าข้อเท็จจริงที่กำหนดเอง (target_vm) ที่ได้รับชื่อเครื่องเสมือน
แต่เมื่อฉันพิมพ์มันมีค่ากับโมดูลดีบั๊ก มันดูเหมือนจะว่างเปล่า
ดูเหมือนว่า set_fact ถูกตั้งค่าอย่างถูกต้องเนื่องจากเอาต์พุตการดีบักแสดงขึ้น {"ansible_facts": {"target_vm": "TESTVM"}.
ฉันได้สร้างงาน Fail ที่เปิดเผยว่ามีการตั้งค่าข้อเท็จจริง target_vm หรือไม่

นี่คือเพลย์บุ๊ก

- delegate_to: localhost
  กลายเป็น: ไม่
  delegate_facts: ใช่
  วาร์:
    vc_hostname: 'vcenter.bio.local'
    vc_username: 'bio.local\ansible'
    vc_password: "{{ v_pass }}"
    vm_uuid: '4217200F-46D2-C9FD-E7FD-768D21B327E8' | ต่ำกว่า
  บล็อก:
    - ชื่อ: รวบรวมเฉพาะเครื่องเสมือนที่ลงทะเบียนแล้ว
      vmware_vm_info:
        ชื่อโฮสต์: '{{ vc_hostname }}'
        ชื่อผู้ใช้: '{{ vc_username }}'
        รหัสผ่าน: '{{ vc_password }}'
        validate_certs: เท็จ
        vm_type: vm
      delegate_to: localhost
      ลงทะเบียน: virtual_info
      no_log: จริง

  - ชื่อ: รับชื่อ VM จาก UUID
    set_fact:
      target_vm: "{{ my_item.guest_name }}"
    วนซ้ำ: "{{ virtual_info.virtual_machines }}"
    เมื่อ: my_item.uuid == vm_uuid
    loop_control:
      loop_var: my_item
    delegate_to: localhost
    delegate_facts: จริง
  
  - ชื่อ: ตรวจสอบว่าชื่ออินเทอร์เฟซถูกตั้งค่าแล้ว
    ล้มเหลว:
      msg: "ไม่สามารถกำหนดชื่อ target_vm ได้!"
    เมื่อ: ไม่ได้กำหนด target_vm
  
  - ชื่อ: ผลงานพิมพ์
    แก้ปัญหา:
      msg: "ชื่อ VM คือ: {{ target_vm }}"


นี่คือผลลัพธ์

TASK [vmwaretaks : รับชื่อ VM จาก UUID] **************************************** ***********************************************
โอเค: [testvm] => (item={'guest_name': 'TESTVM', 'guest_fullname': 'Red Hat Enterprise Linux 6 (64-bit)', 'power_state': 'poweredOn', 'ip_address': '192.168 .54.32', 'mac_address': ['00:32:52:97:e9:c8'], 'uuid': '4217200f-46d2-c9fd-e7fd-768d21b327e8', 'vm_network': {'00:32: 52:97:e9:c8': {'ipv4': ['192.168.54.32'], 'ipv6': ['fe80::250:56ff:fe97:d4c3']}}, 'esxi_hostname': 'b3j15esx05. bio.local', 'cluster': 'JAS-Lab-DEP', 'attributes': {}, 'tags': []}) => {"ansible_facts": {"target_vm": "TESTVM"}, " ansible_loop_var": "my_item", "changed": false, "my_item": {"attributes": {}, "cluster": "JAS-Lab-DEP", "esxi_hostname": "b3j15esx05.bio.local", " guest_fullname": "Red Hat Enterprise Linux 6 (64 บิต)", "guest_name": "TESTVM", "ip_address": "192.168.54.32", "mac_address": ["00:32:52:97:e9: c8"], "power_state": "poweredOn", "แท็ก": [], "uuid": "4217200f-46d2-c9fd-e7fd-768d21b327e8", "vm_network": {"00:32:52:97:e9 :c8": {"ipv4": ["192.168.54.32"], "ipv6": ["fe80::250:56ff:fe97:d4c3"]}}}}

งาน [vmwaretaks : ตรวจสอบชื่ออินเทอร์เฟซถูกตั้งค่า] **************************************** ****************************************
ร้ายแรง: [testvm]: ล้มเหลว! => {"change": false, "msg": "ไม่สามารถกำหนดชื่อ target_vm ได้!"}

เล่น RECAP ************************************************ ************************************************** ********************
testvm : ok=13 เปลี่ยนแปลง=0 ไม่สามารถเข้าถึงได้=0 ล้มเหลว=1 ข้าม=2 ช่วยชีวิต=0 ละเว้น=0
Score:0
ธง th

คุณมี delegate_facts: จริง บน set_fact งาน ดังนั้นคุณกำลังตั้งค่าตัวแปรสำหรับ localhost จากนั้นคุณกำลังพยายามเข้าถึงในบริบทของโฮสต์การเล่น ซึ่งไม่ได้ตั้งค่าไว้

คุณต้องตัดสินใจว่าต้องการตั้งค่าตำแหน่งใด หาก localhost ถูกต้อง คุณต้องเข้าถึงผ่าน hostvars (โฮสต์วาร์ ['localhost'] ['testvm']); ถ้าไม่ใช่ คุณต้องลบออก delegate_facts.

azk avatar
ph flag
azk
คุณไรท์ @flowerysong ฉันเข้าถึงข้อเท็จจริง target_vm ผิดวิธี วิธีโฮสต์วาร์ทำให้ประเด็น ขอบคุณที่สอนฉัน!

โพสต์คำตอบ

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