Score:-1

วิธีการตั้งค่าสถานะเครื่อง: เปิดเครื่องด้วยงาน community.vmware.vmware_guest_powerstate

ธง uz

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

ความตั้งใจของฉันคือเปลี่ยนแต่ละแล็บโดยอัตโนมัติ (แล็บประกอบด้วย 8 vms, 5 windows server 2016 และ 3 windows 10 DC รวมถึงนโยบายเพื่อเปิดใช้งาน winrm ในเครื่องเหล่านั้น) ในเซิร์ฟเวอร์ vCenter เป็นสแน็ปช็อตเฉพาะ แต่ก่อนอื่น ฉันกำลังพยายาม: เมื่อปิดเครื่องของห้องปฏิบัติการเมื่อเปิดเครื่อง และอีกครั้ง เปิดเครื่องของห้องปฏิบัติการเมื่อปิดเครื่อง

ดังนั้นฉัน (ด้วยความช่วยเหลือของ คู่มืออธิบายบทบาทอธิบายพร้อมตัวอย่าง):

  • สร้างบทบาทกับ ansible-กาแล็กซี่ init ชื่อคำสั่ง วีเซ็นเตอร์ (ดูแผนผังไดเร็กทอรีด้านล่าง)
  • สร้างไฟล์งาน vcenter ภายใน งาน โฟลเดอร์ (ดูแผนผังไดเร็กทอรีด้านล่าง) นี่คือตัวอย่างของ poweroff.yml และ poweron.yml ไฟล์งาน:
- ชื่อ: ตั้งค่าสถานะของเครื่องเสมือนเป็นปิดเครื่อง
  community.vmware.vmware_guest_powerstate:
    ชื่อโฮสต์: "{{ vcenter_hostname }}"
    ชื่อผู้ใช้: "{{ vcenter_username }}"
    รหัสผ่าน: "{{ vcenter_password }}"
    โฟลเดอร์: "/{{ datacenter_name }}/vm/{{ โฟลเดอร์ }}"
    ชื่อ: "{{ ansible_hostname }}"
    # ชื่อ: "{{ ชื่อแขก }}"
    validate_certs: ไม่
    สถานะ: ปิดเครื่อง
    กำลัง: ใช่
  delegate_to: localhost
  ลงทะเบียน: ปรับใช้
- ชื่อ: ตั้งค่าสถานะของเครื่องเสมือนให้เปิดเครื่องโดยใช้ MoID
  community.vmware.vmware_guest_powerstate:
    ชื่อโฮสต์: "{{ vcenter_hostname }}"
    ชื่อผู้ใช้: "{{ vcenter_username }}"
    รหัสผ่าน: "{{ vcenter_password }}"
    โฟลเดอร์: "/{{ datacenter_name }}/vm/{{ โฟลเดอร์ }}"
    ชื่อ: "{{ ansible_hostname }}"
    # ช่วง: vm-42
    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 เพื่อปิดเครื่องทั้งหมดในห้องแล็บได้สำเร็จ จากนั้นฉันจึง "เปิด" งานเปิดเครื่องในบทบาท เช่นนั้น:

---
# ไฟล์งานสำหรับบทบาท/vcenter
# - import_tasks: poweroff.yml
- import_tasks: poweron.yml
# - import_tasks: revert.yml
# - import_tasks: shutdown.yml

ตอนนี้เครื่องของแล็บทั้งหมดปิดตัวลง กำลังดำเนินการ playbook ให้ข้อผิดพลาดต่อไปนี้:

เล่น [เปลี่ยน vmware vcenter lab] ******************************************* ******
TASK [รวบรวมข้อเท็จจริง] ********************************************* **************
ร้ายแรง: [vm1.domain.com]: ไม่สามารถเข้าถึงได้! => {"เปลี่ยน": เท็จ, "msg": "ntlm: 
HTTPConnectionPool(host='vm1.domain.com', port=5985): เกินการลองใหม่สูงสุดด้วย url: /wsman (เกิดจาก NewConnectionError('<urllib3.connection.HTTPConnection object ที่ 0x7fb7ae4908d0>: ล้มเหลวในการสร้างการเชื่อมต่อใหม่: [ Errno 111] การเชื่อมต่อถูกปฏิเสธ',))", "ไม่สามารถเข้าถึงได้": จริง}
ร้ายแรง: [vm2.domain.com]: ไม่สามารถเข้าถึงได้! => {"เปลี่ยน": เท็จ, "msg": "ntlm: HTTPConnectionPool(host='vm2.domain.com', port=5985): เกินการลองใหม่สูงสุดด้วย url: /wsman (เกิดจาก NewConnectionError('<urllib3. วัตถุ connection.HTTPConnection ที่ 0x7fb7ae487b00>: ล้มเหลวในการสร้างการเชื่อมต่อใหม่: [Errno 111] การเชื่อมต่อถูกปฏิเสธ ',))", "ไม่สามารถเข้าถึงได้": true}
ร้ายแรง: [vm3.domain.com]: ไม่สามารถเข้าถึงได้! => {"เปลี่ยน": เท็จ, "msg": "ntlm: HTTPConnectionPool(host='vm3.domain.com', port=5985): เกินการลองใหม่สูงสุดด้วย url: /wsman (เกิดจาก NewConnectionError('<urllib3. วัตถุ connection.HTTPConnection ที่ 0x7fb7ae48acc0>: ล้มเหลวในการสร้างการเชื่อมต่อใหม่: [Errno 111] การเชื่อมต่อถูกปฏิเสธ ',))", "ไม่สามารถเข้าถึงได้": true}
ร้ายแรง: [vm4.domain.com]: ไม่สามารถเข้าถึงได้! => {"เปลี่ยน": เท็จ, "msg": "ntlm: HTTPConnectionPool(host='vm4.domain.com', port=5985): เกินการลองใหม่สูงสุดด้วย url: /wsman (เกิดจาก NewConnectionError('<urllib3. วัตถุ connection.HTTPConnection ที่ 0x7fb7ae48de80>: ล้มเหลวในการสร้างการเชื่อมต่อใหม่: [Errno 111] การเชื่อมต่อถูกปฏิเสธ ',))", "ไม่สามารถเข้าถึงได้": true}
ร้ายแรง: [vm5.domain.com]: ไม่สามารถเข้าถึงได้! => {"เปลี่ยน": เท็จ, "msg": "ntlm: 
HTTPConnectionPool(host='vm5.domain.com', port=5985): เกินจำนวนการลองใหม่สูงสุดด้วย url: /wsman (เกิดจาก NewConnectionError('<urllib3.connection.HTTPConnection object ที่ 0x7fb7ae41f080>: ล้มเหลวในการสร้างการเชื่อมต่อใหม่: [ Errno 111] การเชื่อมต่อถูกปฏิเสธ',))", "ไม่สามารถเข้าถึงได้": จริง}
ร้ายแรง: [vm6.domain.com]: ไม่สามารถเข้าถึงได้! => {"เปลี่ยน": เท็จ, "msg": "ntlm: HTTPConnectionPool(host='vm6.domain.com', port=5985): เกินการลองใหม่สูงสุดด้วย url: /wsman (เกิดจาก NewConnectionError('<urllib3. วัตถุ connection.HTTPConnection ที่ 0x7fb7ae41d7f0>: ล้มเหลวในการสร้างการเชื่อมต่อใหม่: [Errno 111] การเชื่อมต่อถูกปฏิเสธ ',))", "ไม่สามารถเข้าถึงได้": true}
ร้ายแรง: [vm7.domain.com]: ไม่สามารถเข้าถึงได้! => {"เปลี่ยน": เท็จ, "msg": "ntlm: HTTPConnectionPool(host='vm7.domain.com', port=5985): เกินการลองใหม่สูงสุดด้วย url: /wsman (เกิดจาก NewConnectionError('<urllib3. วัตถุ connection.HTTPConnection ที่ 0x7fb7ae428048>: ล้มเหลวในการสร้างการเชื่อมต่อใหม่: [Errno 111] การเชื่อมต่อถูกปฏิเสธ ',))", "ไม่สามารถเข้าถึงได้": true}
ร้ายแรง: [vm8.domain.com]: ไม่สามารถเข้าถึงได้! => {"เปลี่ยน": เท็จ, "msg": "ntlm: HTTPConnectionPool(host='vm8.domain.com', port=5985): เกินการลองใหม่สูงสุดด้วย url: /wsman (เกิดจาก NewConnectionError('<urllib3. วัตถุ connection.HTTPConnection ที่ 0x7fb7ae425588>: ล้มเหลวในการสร้างการเชื่อมต่อใหม่: [Errno 111] การเชื่อมต่อถูกปฏิเสธ ',))", "ไม่สามารถเข้าถึงได้": true}

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

เหตุใดงานปิดเครื่องจึงใช้การได้และการเปิดเครื่องไม่ทำงาน ฉันจะแก้ไขปัญหานี้ได้อย่างไร

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

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

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

---
ทั้งหมด:
  เด็ก:
    ราก:
      เด็ก:
        ศูนย์กลาง:
          เด็ก:
            เซิร์ฟเวอร์แอป:
              เจ้าภาพ:
                vm1.domain.com:
            เซิร์ฟเวอร์:
              เจ้าภาพ:
                vm2.domain.com:
            เซิร์ฟเวอร์ฐานข้อมูล:
              เจ้าภาพ:
                vm3.domain.com:
in flag
เครื่องที่คุณกำลังเริ่ม playbooks ansible เป็นเครื่อง windows ที่ตั้งค่าไว้สำหรับ WinRM หรือไม่ ฉันเดาว่า ansible พยายามเชื่อมต่อกับ WinRM กับ localhost เนื่องจากคุณกำหนดค่าสิ่งนี้ใน `all.yml` ซึ่งล้มเหลว localhost ควรกำหนดค่าด้วย `ansible_connection: local` สิ่งนี้ควรเป็นค่าเริ่มต้นเมื่อไม่ได้ระบุ localhost อย่างชัดเจนในสินค้าคงคลัง แต่ใครจะรู้ ...
Zeitounator avatar
fr flag
คุณไม่จำเป็นต้องประกาศ `localhost` ในคลังของคุณ: เป็น [โดยนัย](https://docs.ansible.com/ansible/latest/inventory/implicit_localhost.html) และโดยปกติแล้วคุณต้องการให้คงอยู่อย่างนั้น ไม่ตรงกับกลุ่มเป้าหมาย `ทั้งหมด` ในขณะเดียวกัน ตามที่รายงานในลิงก์เอกสาร มันยังคงอ่าน vars จาก `group_vars/all.yml` ซึ่งเป็นปัญหาตามที่รายงานโดย @GeraldSchneider ด้านบน เพียงย้ายไฟล์ไปที่ `group_vars/center.yml` เพื่อให้ค่าถูกนำไปใช้กับกลุ่มที่เกี่ยวข้องเท่านั้น
uz flag
@Zeitounator โปรดอธิบายว่าทำไม ansible ไม่อ่านไฟล์ ```roles\vcenter\vars\main.yml``` ที่มีรายละเอียดการเข้าถึง vCenter
uz flag
@GeraldSchneider เปลี่ยนเป็น ```ansible_connection: local``` และเรียกใช้ playbook ให้ผลลัพธ์ต่อไปนี้: TASK [รวบรวมข้อเท็จจริง] รู้จักเครื่องทั้งหมด จากนั้นทำงานแสดงข้อผิดพลาดต่อไปนี้สำหรับรายการเครื่องทั้งหมด: ``` "msg": "ไม่สามารถตั้งค่าสถานะพลังงานสำหรับเครื่องเสมือนที่ไม่มีอยู่ : 'ansible'"```
Zeitounator avatar
fr flag
vms ของคุณปิดอยู่ คุณต้องปิดการรวบรวมข้อเท็จจริงในการเล่นของคุณในกรณีนั้น (ด้วย `gather_facts: false,`) มิฉะนั้นจะพยายามเชื่อมต่อกับพวกเขาเพื่อรับข้อมูลก่อนที่คุณจะเล่นงานที่เปิดใช้งาน
uz flag
@Zeitounator ฉันตั้งค่าการเล่นด้วย ```gather_facts: false``` ผลลัพธ์ยังคงเหมือนเดิม - vms ถูกปิด เปลี่ยน ```ansible_connection``` เป็น ```local``` ผลลัพธ์: ```"msg": "งานมีตัวเลือกที่มีตัวแปรที่ไม่ได้กำหนด ข้อผิดพลาดคือ: 'ansible_hostname'...```
Zeitounator avatar
fr flag
ไม่ใช่ผลลัพธ์เดียวกัน ... ตอนนี้คุณได้รับข้อผิดพลาดเนื่องจากคุณกำลังพยายามใช้ตัวแปรที่กำหนดเฉพาะเมื่อคุณรวบรวมข้อเท็จจริง ... ซึ่งเป็นไปไม่ได้เนื่องจาก vm ของคุณปิดอยู่ คุณต้องหาวิธีแก้ไขเพื่อให้ได้ชื่อเครื่องโดยไม่ต้องเชื่อมต่อกับ vm
uz flag
@Zeitounator ฉันพยายามแล้ว ในไฟล์ ```lab_r.yml``` ฉันได้เพิ่มตัวแปรเพิ่มเติม ```vm_name``` ด้วยชื่อของเครื่องดังนี้: ```vm_name: VM1``` ภายใต้แต่ละ fqdn ที่ยื่น (อย่างที่คุณเห็นใน ตัวอย่างในโพสต์) ฉัน ``` poweron.yml``` งานที่ฉันเปลี่ยนเป็น ```name: {{ vm_name }}``` ฉันตั้งค่าการเล่นด้วย ```gather_facts: no```หลังจากดำเนินการฉันได้รับ: ```"msg": "ไม่สามารถตั้งค่าสถานะพลังงานสำหรับเครื่องเสมือนที่ไม่มีอยู่: 'VM1'"```
Zeitounator avatar
fr flag
ดูเหมือนคุณจะสนใจที่จะพูดคุยเกี่ยวกับเซสชันการดีบักมากกว่าพยายามแก้ไขปัญหา คุณคาดหวังว่าผู้คนที่อ่านข้อความนี้จะรู้ว่าชื่อ vm ของคุณมีชื่ออะไรในการติดตั้ง vmware ของคุณ? ไม่มีใครเดาได้จากการโพสต์จริงของคุณ เนื่องจากคุณไม่ได้บอกเราว่าคุณสร้าง vms อย่างไรและจากตัวแปรใด ใช้ชื่อที่มีอยู่จริงและจะเปิดเครื่อง ขอให้โชคดี.
Score:0
ธง uz

ปัญหาได้รับการแก้ไขโดย:
ฉันตั้งค่า โฟลเดอร์ ค่าคีย์เป็น "/{{ datacenter_name }}/"
ฉันเพิ่ม เปิดเครื่อง งานไปยังงานเพิ่มเติมเป็น เปลี่ยนกลับ - ความหมาย เปิดเครื่อง งานจะได้ผลสำหรับฉันก็ต่อเมื่อเป็นส่วนหนึ่งของลำดับงานเท่านั้น
น่าเสียดายที่ เปิดเครื่อง งานไม่ได้ผลสำหรับฉันเป็นงานแบบสแตนด์อโลน

โพสต์คำตอบ

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