저는 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 }}/"
poweron
revert
poweron
poweron