Score:1

เหตุใด ansible จึงไม่รู้จักเครื่อง vcenter windows

ธง uz

ฉันค่อนข้างใหม่กับ Ansible ดังนั้นฉันอาจกำหนดค่าผิดพลาด
[ฉันมีคอนเทนเนอร์ Docker ที่ใช้บริการ Ansible อยู่ในนั้น
ฉันมีที่เก็บ Ansible ที่มีไฟล์ Ansible (นี่คือที่เก็บ .Git]

ความตั้งใจของฉันคือการ เปลี่ยนแต่ละแล็บในเซิร์ฟเวอร์ vCenter กลับเป็นสแน็ปช็อตเฉพาะโดยอัตโนมัติ
ดังนั้นฉัน (ด้วยความช่วยเหลือของ คู่มืออธิบายบทบาทอธิบายพร้อมตัวอย่าง):

  • สร้างบทบาทกับ ansible-กาแล็กซี่ init ชื่อคำสั่ง วีเซ็นเตอร์ (ดูแผนผังไดเร็กทอรีด้านล่าง)
  • สร้างไฟล์งาน vcenter ภายใน งาน โฟลเดอร์ (ดูแผนผังไดเร็กทอรีด้านล่าง) นี่คือตัวอย่างของ poweroff.yml ไฟล์งาน:
- ชื่อ: ตั้งค่าสถานะของเครื่องเสมือนเป็นปิดเครื่อง
  community.vmware.vmware_guest_powerstate:
    ชื่อโฮสต์: "{{ vcenter_hostname }}"
    ชื่อผู้ใช้: "{{ vcenter_username }}"
    รหัสผ่าน: "{{ vcenter_password }}"
    โฟลเดอร์: "/{{ datacenter_name }}/{{ โฟลเดอร์ }}"
    # ชื่อ: "{{ ชื่อแขก }}"
    ชื่อ: "{{ ansible_hostname }}"
    validate_certs: ไม่
    สถานะ: ปิดเครื่อง
  delegate_to: localhost
  ลงทะเบียน: ปรับใช้
  • ให้ข้อมูลรับรอง vCenter ใน vcenter\vars\main.yml ไฟล์เช่นนี้:
# ไฟล์ vars สำหรับ vcenter
vcenter_hostname: vcenter.foo.com
vcenter_username: [email protected]
vcenter_password: f#0$o#1$0o
datacenter_name: FOO_Fighters
# datastore_name: 
cluster_name: FOO
โฟลเดอร์: '/FOO/PRODUCT/DOMAIN.COM/' 
  • รวมงานใน งาน\main.yml ไฟล์ด้วย งานนำเข้า ที่สำคัญดังนี้
---
# ไฟล์งานสำหรับบทบาท/vcenter
- import_tasks: poweroff.yml
# - import_tasks: poweron.yml
# - import_tasks: revert.yml
# - import_tasks: shutdown.yml
  • สร้าง all.yml ภายในโฟลเดอร์ group_vars ในไลบรารีสินค้าคงคลัง (ฉันไม่รู้ว่าเป็นวิธีที่มืออาชีพทำเช่นนั้นหรือไม่) ซึ่งมีรายละเอียด winrm ทั้งหมดดังนี้:
---
#รายละเอียดโปรโตคอล WinRM
ansible_user: DOMAIN\user
ansible_password: f#0$o#1$0o
ansible_connection: winrm
ansible_port: 5985
ansible_winrm_scheme: http
ansible_winrm_server_cert_validation: ละเว้น
ansible_winrm_transport: ntlm
ansible_winrm_read_timeout_sec: 60
ansible_winrm_operation_timeout_sec: 58
  • สร้าง revert_lab.yml คู่มือการเล่นที่รวมบทบาทเช่นนี้
---
- ชื่อ: ย้อนกลับห้องปฏิบัติการภายในองค์กร
  โฮสต์: ทั้งหมด
  บทบาท:
  - วีเซ็นเตอร์

ของฉัน ansible.cfg เป็นเช่นนี้:

[ค่าเริ่มต้น]
สินค้าคงคลัง = / ansible / สินค้าคงคลัง
roles_path = ./roles:..~/ansible/roles

ฉันดำเนินการ playbook เพื่อคืนค่าเครื่องจักรทั้งหมดในห้องปฏิบัติการ:

playbooks ansible-playbook/revert_vcenter_lab.yml -i สินค้าคงเหลือ/test/onpremis/domain.com/lab_r.yml

ข้อผิดพลาดที่ฉันได้รับคือ:

TASK [รวบรวมข้อเท็จจริง] ********************************************* ************************************************** ************************************************** ***
[คำเตือน]: เกิดข้อผิดพลาดเมื่อรวบรวมข้อเท็จจริงของ winrm: คุณไม่สามารถเรียกใช้เมธอดในนิพจน์ที่มีค่า Null ได้ ที่บรรทัด:15 ถ่าน:17 + ...
$ansibleFacts.ansible_win_rm_certificate_expires = $_.ไม่ ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo :  
InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull ที่ <ScriptBlock>, <ไม่มีไฟล์>: บรรทัดที่ 15 ที่ <ScriptBlock>, <ไม่มีไฟล์>: บรรทัด  
13
ตกลง: [vm1.domain.com]
ตกลง: [vm2.domain.com]
ตกลง: [vm3.domain.com]
ตกลง: [vm4.domain.com]
ตกลง: [vm5.domain.com]
ตกลง: [vm6.domain.com]
ตกลง: [vm7.domain.com]
ตกลง: [vm8.domain.com]

TASK [vcenter : ตั้งค่าสถานะของเครื่องเสมือนเป็นปิดเครื่อง] ************************************ ************************************************** *********************
ร้ายแรง: [vm1.domain.com -> localhost]: ล้มเหลว! => {"change": false, "msg": "ไม่สามารถตั้งค่าสถานะพลังงานสำหรับเครื่องเสมือนที่ไม่มีอยู่ : 'VM1'"}
ร้ายแรง: [vm2.domain.com -> localhost]: ล้มเหลว! => {"change": false, "msg": "ไม่สามารถตั้งค่าสถานะพลังงานสำหรับเครื่องเสมือนที่ไม่มีอยู่ : 'VM2'"}
ร้ายแรง: [vm3.domain.com -> localhost]: ล้มเหลว! => {"change": false, "msg": "ไม่สามารถตั้งค่าสถานะพลังงานสำหรับเครื่องเสมือนที่ไม่มีอยู่ : 'VM3'"}
ร้ายแรง: [vm4.domain.com -> localhost]: ล้มเหลว! => {"change": false, "msg": "ไม่สามารถตั้งค่าสถานะพลังงานสำหรับเครื่องเสมือนที่ไม่มีอยู่ : 'VM4'"}
ร้ายแรง: [vm5.domain.com -> localhost]: ล้มเหลว! => {"change": false, "msg": "ไม่สามารถตั้งค่าสถานะพลังงานสำหรับเครื่องเสมือนที่ไม่มีอยู่ : 'VM5'"}
ร้ายแรง: [vm6.domain.com -> localhost]: ล้มเหลว! => {"change": false, "msg": "ไม่สามารถตั้งค่าสถานะพลังงานสำหรับเครื่องเสมือนที่ไม่มีอยู่ : 'VM6'"}
ร้ายแรง: [vm7.domain.com -> localhost]: ล้มเหลว! => {"change": false, "msg": "ไม่สามารถตั้งค่าสถานะพลังงานสำหรับเครื่องเสมือนที่ไม่มีอยู่ : 'VM7'"}
ร้ายแรง: [vm8.domain.com -> localhost]: ล้มเหลว! => {"change": false, "msg": "ไม่สามารถตั้งค่าสถานะพลังงานสำหรับเครื่องเสมือนที่ไม่มีอยู่ : 'VM8'"}

เล่น RECAP ************************************************ ************************************************** ************************************************** ************
vm1.domain.com : ok=1 เปลี่ยนแปลง=0 ไม่สามารถเข้าถึงได้=0 ล้มเหลว=1 ข้าม=0 ช่วยเหลือ=0 ละเว้น=0
vm2.domain.com : ok=1 เปลี่ยนแปลง=0 ไม่สามารถเข้าถึงได้=0 ล้มเหลว=1 ข้าม=0 ช่วยเหลือ=0 ละเว้น=0
vm3.domain.com : ok=1 เปลี่ยนแปลง=0 ไม่สามารถเข้าถึงได้=0 ล้มเหลว=1 ข้าม=0 ช่วยเหลือ=0 ละเว้น=0
vm4.domain.com : ok=1 เปลี่ยนแปลง=0 ไม่สามารถเข้าถึงได้=0 ล้มเหลว=1 ข้าม=0 ช่วยเหลือ=0 ละเว้น=0
vm5.domain.com : ok=1 เปลี่ยนแปลง=0 ไม่สามารถเข้าถึงได้=0 ล้มเหลว=1 ข้าม=0 ช่วยเหลือ=0 ละเว้น=0
vm6.domain.com : ok=1 เปลี่ยนแปลง=0 ไม่สามารถเข้าถึงได้=0 ล้มเหลว=1 ข้าม=0 ช่วยเหลือ=0 ละเว้น=0
vm7.domain.com : ok=1 เปลี่ยนแปลง=0 ไม่สามารถเข้าถึงได้=0 ล้มเหลว=1 ข้าม=0 ช่วยเหลือ=0 ละเว้น=0
vm8.domain.com : ok=1 เปลี่ยนแปลง=0 ไม่สามารถเข้าถึงได้=0 ล้มเหลว=1 ข้าม=0 ช่วยเหลือ=0 ละเว้น=0

ก) ฉันจะกำจัด เกิดข้อผิดพลาดเมื่อรวบรวมข้อเท็จจริง winrm ข้อผิดพลาด? (ดูเหมือนว่า playbook ไม่รู้จัก all.yml ไฟล์ที่ชนะ แต่ทำไม?)
ข) ฉันจะแก้ไขข้อผิดพลาด "ไม่สามารถตั้งค่าสถานะพลังงานสำหรับเครื่องเสมือนที่ไม่มีอยู่..." ได้อย่างไร? (เราจะเห็นว่า playbook เข้าถึงเครื่องโดย fqdns ที่กล่าวถึงในไฟล์ lab_r.yml (จากไลบรารีสินค้าคงคลัง) แต่ข้อผิดพลาดเกี่ยวข้องกับชื่อเครื่องตามที่แสดงในแพลตฟอร์ม vCenter...)

พื้นที่เก็บข้อมูลของฉัน:

ค:.
ââââตอบได้
â â ansible.cfg
â ââââ สินค้าคงเหลือ
â â ââââทดสอบ
â â ââââคลาวด์
â â ââââในองค์กร
â â ââââdomain.com
â â â lab_j.yml
â â â lab_r.yml
â â ââââgroup_vars
â â all.yml
â ââââเพลย์บุ๊ค
â â revert_lab.yml
â ââââบทบาท
â ââââvศูนย์
â ââââงาน
â â main.yml
â â poweroff.yml
â â poweron.yml
â â return.yml
â â ปิดระบบ.yml
â ââââvars
main.yml

สินค้าคงคลังของฉัน lab_r.yml - นี่คือสคีมาบางส่วน

---
ทั้งหมด:
  เด็ก:
    ราก:
      เด็ก:
        ศูนย์กลาง:
          เด็ก:
            เซิร์ฟเวอร์แอป:
              เจ้าภาพ:
                vm1.domain.com:
            เซิร์ฟเวอร์:
              เจ้าภาพ:
                vm2.domain.com:
            เซิร์ฟเวอร์ฐานข้อมูล:
              เจ้าภาพ:
                vm3.domain.com:
Score:2
ธง in

มันไม่ชัดเจนมากจากเอกสาร แต่เป็นสตริง /vm/ หายไปในเส้นทางโฟลเดอร์ของคุณ

- ชื่อ: ตั้งค่าสถานะของเครื่องเสมือนเป็นปิดเครื่อง
  community.vmware.vmware_guest_powerstate:
    โฟลเดอร์: "/{{ datacenter_name }}/vm/{{ โฟลเดอร์ }}"
    ชื่อ: "{{ ansible_hostname }}"

ฉันเดาว่าจำเป็นต้องแยกความแตกต่างระหว่างทรัพยากรอื่นๆ ในดาต้าเซ็นเตอร์ ดาต้าสโตร์ โฮสต์ ฯลฯ

uz flag
ก่อนอื่น ฉันเพิ่ม ```--verbos``` ในคำสั่ง playbook มันเพิ่มบรรทัดนี้: ```Using /ansible/ansible.cfg as config file``` เพื่อส่งออกก่อน ```PLAY`` ` บรรทัดทุกอย่างยังคงเหมือนเดิม นอกจากนี้ ฉันได้ทำตามคำแนะนำของคุณ - เพิ่มสตริง ```/vm/``` - ผลลัพธ์และข้อผิดพลาดยังคงเหมือนเดิม (เหมือนในโพสต์หลัก) ยิ่งกว่านั้น ฉันไม่เข้าใจว่าทำไม ```ansible_hostname``` จึงใช้งานได้ และ ```guest_name``` ไม่ทำงาน...
uz flag
ฉันไม่ได้แก้คำถาม a แต่แก้คำถาม b โดยตั้งค่า ```folder: "/{{ datacenter_name }}/"```
in flag
สิ่งนี้จะไม่ช่วยคุณหากคุณมี VM มากกว่าหนึ่งเครื่องที่มีชื่อเดียวกันในโฟลเดอร์ต่างๆ
uz flag
ข้อเท็จจริงอีกประการหนึ่งที่ฉันพบ: ถ้าฉันเรียกใช้งาน poweroff.yml ในแล็บของฉัน - เครื่องจะปิดสำเร็จเมื่อฉันเรียกใช้งาน poweron.yml ในแล็บที่ปิดอยู่ ฉันได้รับ ``` ร้ายแรง: [srraalabrst1.r10.local]: UNREACHABLE! => {"เปลี่ยน": เท็จ, "msg": "ntlm: HTTPConnectionPool(host='vm1.domain.com', port=5985): เกินการลองใหม่สูงสุดด้วย url: /wsman (เกิดจาก NewConnectionError(': สร้างการเชื่อมต่อใหม่ไม่สำเร็จ: [Errno 111] การเชื่อมต่อถูกปฏิเสธ',))", "ไม่สามารถเข้าถึงได้": true}```
in flag
เป็นไปได้มากว่าคุณกำลังพยายามทำงานต่อไปเร็วเกินไปหลังจากเปิด VM คุณสามารถกำหนดค่า ansible เพื่อลองอีกครั้ง แต่คุณควรถามคำถามใหม่เกี่ยวกับสิ่งนั้น
uz flag
นอกจากนี้ ด้วยความช่วยเหลือของคุณ ฉันพบ ```--verbos``` ว่าโฟลเดอร์นี้มาพร้อมกับ ```/vm/```: ```"hw_folder": "/FOO/vm/PRODUCT/ DOMAIN.COM/``` ฉันตั้งค่าไฟล์ vars.yml ด้วยพาธนี้และพารามิเตอร์ ```folder``` ด้วย ```/vm/``` เช่นกัน เอาต์พุตยังคงเหมือนเดิม จะเปิดขึ้น คำถามใหม่สำหรับสิ่งนั้น ขอบคุณ @Gerald

โพสต์คำตอบ

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