Wie lege ich den Maschinenzustand fest: Einschalten mit der Aufgabe community.vmware.vmware_guest_powerstate?

Wie lege ich den Maschinenzustand fest: Einschalten mit der Aufgabe community.vmware.vmware_guest_powerstate?

Ich bin ziemlich neu bei Ansible, daher kann es sein, dass ich Dinge falsch konfiguriert habe
[Ich habe einen Docker-Container, der den Ansible-Dienst in CentOS8 ausführt.
Ich habe ein Ansible-Repository, das die Ansible-Dateien enthält (dies ist ein .Git-Repository]

Mein Ziel war es, jedes Labor (das Labor besteht aus 8 VMs, 5 Windows Server 2016 und 3 Windows 10. Der DC enthält die Richtlinie, um WinRM auf diesen Maschinen zu aktivieren) im vCenter-Server automatisch auf einen bestimmten Snapshot zurückzusetzen. Aber zuerst versuche ich: einmal die Maschinen des Labors auszuschalten, wenn sie eingeschaltet werden, und einmaldie Maschinen im Labor einschalten, wenn sie ausgeschaltet sind

Also habe ich (mit Hilfe vonAnsible-Rollen anhand von Beispielen erklärt):

  • Eine Rolle mit ansible-galaxy initdem Befehlsnamen wurde erstellt vcenter(siehe Verzeichnisbaum unten)
  • Einige vCenter-Aufgabendateien im tasksOrdner erstellt (siehe Verzeichnisbaum unten). Hier ist ein Beispiel für poweroff.ymlAufgabendateien 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
  • Die bereitgestellten vCenter-Anmeldeinformationen werden in vcenter\vars\main.ymleiner Datei wie folgt angezeigt:
# 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/' 
  • Fügen Sie die Aufgaben in tasks\main.ymleine Datei mit import-taskSchlüssel ein, wie folgt:
---
# tasks file for roles/vcenter
- import_tasks: poweroff.yml
# - import_tasks: poweron.yml
# - import_tasks: revert.yml
# - import_tasks: shutdown.yml
  • Habe in der Inventarbibliothek einen all.ymlOrdner „group_vars“ erstellt (ich weiß nicht, ob das professionell geht), der alle WinRM-Details wie folgt enthält:
---
#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
  • Ein Playbook erstellt revert_lab.yml, das die Rolle beinhaltet, wie folgt
---
- name: revert an onpremis lab
  hosts: all
  roles:
  - vcenter

Meines ansible.cfgist so:

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

Ich habe das Playbook erfolgreich ausgeführt, um alle Maschinen im Labor auszuschalten. Dann habe ich die Einschaltaufgabe in der Rolle wie folgt „eingeschaltet“:

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

Nachdem nun alle Maschinen im Labor heruntergefahren sind, tritt bei der Ausführung des Playbooks der folgende Fehler auf:

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

Warum funktioniert das Ausschalten einwandfrei, das Einschalten jedoch nicht? Wie kann ich dieses Problem beheben?

Mein Repository:

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

Mein Inventar lab_r.yml- dies ist ein Teilschema

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

Antwort1

Das Problem wurde wie folgt gelöst:
Ich habe folderden Schlüsselwert auf „ "/{{ datacenter_name }}/"
Ich füge die poweronAufgabe zu einer zusätzlichen Aufgabe hinzu als“ gesetzt revert. Das bedeutet, dass powerondie Aufgabe für mich nur funktionierte, wenn sie Teil einer Aufgabensequenz war.
Leider poweronfunktionierte die Aufgabe für mich nicht als eigenständige Aufgabe.

verwandte Informationen