시스템 상태를 설정하는 방법: Community.vmware.vmware_guest_powerstate 작업으로 poweron을 설정합니까?

시스템 상태를 설정하는 방법: Community.vmware.vmware_guest_powerstate 작업으로 poweron을 설정합니까?

저는 Ansible을 처음 사용하기 때문에 잘못 구성했을 수 있습니다
. [CentOS8에서 Ansible 서비스를 실행하는 Docker 컨테이너가 있습니다.
Ansible 파일을 포함하는 Ansible 저장소가 있습니다(이것은 .Git 저장소입니다.]

내 의지는 vCenter 서버의 각 랩(랩은 vms 8개, Windows Server 2016 5개, Windows 10 3개로 구성되어 있습니다. DC에는 해당 시스템에서 winrm을 활성화하는 정책이 포함되어 있음)을 특정 스냅샷으로 자동으로 되돌리는 것이었습니다. 하지만 먼저 저는 연구실의 기계를 켤 때 전원을 끄고, 한 번은 이렇게 하려고 합니다.연구실의 기계가 꺼져 있을 때 전원을 켭니다.

그래서 나는 (의 도움으로예시를 통해 설명된 역할 설명 가이드):

  • ansible-galaxy init명령 이름 으로 역할을 생성했습니다 vcenter(아래 디렉터리 트리 참조).
  • 폴더 내에 일부 vcenter 작업 파일을 생성했습니다 tasks(아래 디렉토리 트리 참조). 다음은 poweroff.yml작업 파일 의 예입니다 poweron.yml.
- name: Set the state of a virtual machine to poweroff
  community.vmware.vmware_guest_powerstate:
    hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    folder: "/{{ datacenter_name }}/vm/{{ folder }}"
    name: "{{ ansible_hostname }}"
    # name: "{{ guest_name }}"
    validate_certs: no
    state: powered-off
    force: yes
  delegate_to: localhost
  register: deploy
- name: Set the state of a virtual machine to poweron using MoID
  community.vmware.vmware_guest_powerstate:
    hostname: "{{ vcenter_hostname }}"
    username: "{{ vcenter_username }}"
    password: "{{ vcenter_password }}"
    folder: "/{{ datacenter_name }}/vm/{{ folder }}"
    name: "{{ ansible_hostname }}"
    # moid: vm-42
    validate_certs: no
    state: powered-on
  delegate_to: localhost
  register: deploy
  • 다음과 같이 파일 에 vCenter 자격 증명을 제공했습니다 vcenter\vars\main.yml.
# vars file for 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
folder: '/FOO/PRODUCT/DOMAIN.COM/' 
  • tasks\main.yml다음과 같이 키가 있는 파일 에 작업을 포함했습니다 import-task.
---
# tasks file for roles/vcenter
- import_tasks: poweroff.yml
# - import_tasks: poweron.yml
# - import_tasks: revert.yml
# - import_tasks: shutdown.yml
  • 다음과 같은 모든 winrm 세부 정보를 포함하는 인벤토리 라이브러리에 내부 group_vars 폴더를 만들었습니다 all.yml(전문적인 방법인지는 모르겠습니다).
---
#WinRM Protocol Details
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: ignore
ansible_winrm_transport: ntlm
ansible_winrm_read_timeout_sec: 60
ansible_winrm_operation_timeout_sec: 58
  • revert_lab.yml다음과 같이 역할을 포함하는 플레이북을 만들었습니다.
---
- name: revert an onpremis lab
  hosts: all
  roles:
  - vcenter

ansible.cfg것은 이렇습니다.

[defaults]
inventory = /ansible/inventories
roles_path = ./roles:..~/ansible/roles

플레이북을 성공적으로 실행하여 연구실에 있는 모든 컴퓨터의 전원을 끈 다음 해당 역할에서 poweron 작업을 다음과 같이 "켰습니다".

---
# tasks file for roles/vcenter
# - import_tasks: poweroff.yml
- import_tasks: poweron.yml
# - import_tasks: revert.yml
# - import_tasks: shutdown.yml

이제 모든 실습 컴퓨터가 종료되었으므로 플레이북을 실행하면 다음 오류가 발생합니다.

PLAY [revert vmware vcenter lab] *************************************************
TASK [Gathering Facts] ***********************************************************
fatal: [vm1.domain.com]: UNREACHABLE! => {"changed": false, "msg": "ntlm: 
HTTPConnectionPool(host='vm1.domain.com', port=5985): Max retries exceeded with url: /wsman (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fb7ae4908d0>: Failed to establish a new connection: [Errno 111] Connection refused',))", "unreachable": true}
fatal: [vm2.domain.com]: UNREACHABLE! => {"changed": false, "msg": "ntlm: HTTPConnectionPool(host='vm2.domain.com', port=5985): Max retries exceeded with url: /wsman (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fb7ae487b00>: Failed to establish a new connection: [Errno 111] Connection refused',))", "unreachable": true}
fatal: [vm3.domain.com]: UNREACHABLE! => {"changed": false, "msg": "ntlm: HTTPConnectionPool(host='vm3.domain.com', port=5985): Max retries exceeded with url: /wsman (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fb7ae48acc0>: Failed to establish a new connection: [Errno 111] Connection refused',))", "unreachable": true}
fatal: [vm4.domain.com]: UNREACHABLE! => {"changed": false, "msg": "ntlm: HTTPConnectionPool(host='vm4.domain.com', port=5985): Max retries exceeded with url: /wsman (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fb7ae48de80>: Failed to establish a new connection: [Errno 111] Connection refused',))", "unreachable": true}
fatal: [vm5.domain.com]: UNREACHABLE! => {"changed": false, "msg": "ntlm: 
HTTPConnectionPool(host='vm5.domain.com', port=5985): Max retries exceeded with url: /wsman (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fb7ae41f080>: Failed to establish a new connection: [Errno 111] Connection refused',))", "unreachable": true}
fatal: [vm6.domain.com]: UNREACHABLE! => {"changed": false, "msg": "ntlm: HTTPConnectionPool(host='vm6.domain.com', port=5985): Max retries exceeded with url: /wsman (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fb7ae41d7f0>: Failed to establish a new connection: [Errno 111] Connection refused',))", "unreachable": true}
fatal: [vm7.domain.com]: UNREACHABLE! => {"changed": false, "msg": "ntlm: HTTPConnectionPool(host='vm7.domain.com', port=5985): Max retries exceeded with url: /wsman (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fb7ae428048>: Failed to establish a new connection: [Errno 111] Connection refused',))", "unreachable": true}
fatal: [vm8.domain.com]: UNREACHABLE! => {"changed": false, "msg": "ntlm: HTTPConnectionPool(host='vm8.domain.com', port=5985): Max retries exceeded with url: /wsman (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fb7ae425588>: Failed to establish a new connection: [Errno 111] Connection refused',))", "unreachable": true}

PLAY RECAP ***********************************************************************
vm1.domain.com    : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0
vm2.domain.com    : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0
vm3.domain.com    : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0
vm4.domain.com    : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0
vm5.domain.com   : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0
vm6.domain.com   : ok=0    changed=0    unreachable=1    failed=0    skipped=0    rescued=0    ignored=0
vm7.domain.com     : ok=0    changed=0    unreachable=1    failed=0    skipped=0   rescued=0    ignored=0
vm8.domain.com     : ok=0    changed=0    unreachable=1    failed=0    skipped=0   rescued=0    ignored=0

poweroff 작업은 제대로 작동하지만 poweron은 작동하지 않는 이유는 무엇입니까? 이 문제를 어떻게 해결할 수 있나요?

내 저장소:

C:.
├───ansible
│   │   ansible.cfg
│   ├───inventories
│   │   └───test
│   │       ├───cloud
│   │       └───onpremis
│   │           └───domain.com
│   │               │   lab_j.yml
│   │               │   lab_r.yml
│   │               └───group_vars
│   │                       all.yml
│   ├───playbooks
│   │       revert_lab.yml
│   └───roles
│       └───vcenter
│           ├───tasks
│           │       main.yml
│           │       poweroff.yml
│           │       poweron.yml
│           │       revert.yml
│           │       shutdown.yml
│           └───vars
│                   main.yml

내 인벤토리 lab_r.yml- 부분적인 스키마입니다.

---
all:
  children:
    root:
      children:
        center:
          children:
            appservers:
              hosts:
                vm1.domain.com:
            qservers:
              hosts:
                vm2.domain.com:
            dbservers:
              hosts:
                vm3.domain.com:

답변1

문제 해결 방법: 다음과 같이 키 값을
설정합니다 . 작업을 추가 작업에 추가합니다 . 즉 , 작업은 일련의 작업 중 일부인 경우에만 효과가 있었습니다. 불행하게도 이 작업은 독립 실행형 작업으로는 효과가 없었습니다.folder"/{{ datacenter_name }}/"
poweronrevertpoweron
poweron

관련 정보