Virtualization
如何設置機器狀態:使用 community.vmware.vmware_guest_powerstate 任務開機?
我對 Ansible 很陌生,所以我可能配置錯誤
$$ I have a Docker container running Ansible service in CentOS8 I have an Ansible repository that include the Ansible files (this is a .Git repository $$
我的意願是自動將 vCenter 伺服器中的每個實驗室(該實驗室由 8 個虛擬機、5 個 Windows Server 2016 和 3 個 Windows 10 組成。DC 包括在這些機器中啟用 winrm 的策略)到特定快照。但首先我試圖:一旦打開實驗室機器的電源,一旦關閉實驗室的機器電源
所以,我(在ansible-roles-explained-with-examples guide的幫助下):
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: hiddai@foo.com 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
- 在庫存庫中創建了一個
all.yml
內部 group_vars 文件夾(我不知道它是否是一種專業的方法),其中包括所有 winrm 詳細資訊,如下所示:--- #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
我成功執行了 playbook 以關閉實驗室中的所有機器,然後我“打開”了角色中的 poweron 任務,如下所示:
--- # tasks file for roles/vcenter # - import_tasks: poweroff.yml - import_tasks: poweron.yml # - import_tasks: revert.yml # - import_tasks: shutdown.yml
現在所有實驗室的機器都關閉了,執行 playbook,給出以下錯誤:
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:
問題通過以下方式解決:
我將
folder
鍵值設置為"/{{ datacenter_name }}/"
我將
poweron
任務添加到附加任務中revert
- 意味著poweron
任務僅在它是一系列任務的一部分時才對我有用不幸的是,該
poweron
任務不適用於我作為獨立任務