Puncte:-1

Cum să setați starea mașinii: poweron cu taskul community.vmware.vmware_guest_powerstate?

drapel uz

Sunt destul de nou cu Ansible, așa că s-ar putea să configurez lucrurile greșit
[Am un container Docker care rulează serviciul Ansible în CentOS8
Am un depozit Ansible care include fișierele Ansible (acesta este un depozit .Git]

Voința mea a fost să revin automat fiecare laborator (laboratorul este compus din 8 vms, 5 Windows Server 2016 și 3 Windows 10. Politica de includere DC pentru a activa winrm pe acele mașini) din serverul vCenter la un anumit instantaneu. Dar mai întâi încerc să: odată oprit aparatele laboratorului când sunt pornite și o dată porniți aparatele laboratorului când sunt oprite

Deci, eu (cu ajutorul lui ghid-roluri-ansible-explicate-cu-exemple):

  • Am creat un rol cu ansible-galaxie init numele comenzii vcenter (vezi arborele directoare de mai jos)
  • Am creat câteva fișiere de activități vcenter în interior sarcini folder (vezi arborele directoare de mai jos). Iată un exemplu de poweroff.yml și poweron.yml fisiere de sarcini:
- nume: Setați starea unei mașini virtuale la oprire
  community.vmware.vmware_guest_powerstate:
    nume gazdă: „{{ vcenter_hostname }}”
    nume de utilizator: „{{ vcenter_username }}”
    parola: „{{ vcenter_password }}”
    folder: „/{{ datacenter_name }}/vm/{{ folder }}”
    nume: „{{ ansible_hostname }}”
    # nume: „{{ guest_name }}”
    validate_certs: nu
    stare: oprit
    forta: da
  delegate_to: localhost
  înregistrare: desfășurare
- nume: setați starea unei mașini virtuale la pornire folosind MoID
  community.vmware.vmware_guest_powerstate:
    nume gazdă: „{{ vcenter_hostname }}”
    nume de utilizator: „{{ vcenter_username }}”
    parola: „{{ vcenter_password }}”
    folder: „/{{ datacenter_name }}/vm/{{ folder }}”
    nume: „{{ ansible_hostname }}”
    # moid: vm-42
    validate_certs: nu
    stare: pornit
  delegate_to: localhost
  înregistrare: desfășurare
  • Acreditările vCenter furnizate în vcenter\vars\main.yml fișier, așa:
# fișier vars pentru vcenter
vcenter_hostname: vcenter.foo.com
vcenter_username: [email protected]
vcenter_parola: f#0$o#1$0o
nume_centru de date: FOO_Fighters
# datastore_name: 
nume_cluster: FOO
folder: „/FOO/PRODUCT/DOMAIN.COM/” 
  • A inclus sarcinile în tasks\main.yml dosar cu sarcină-import cheie, așa:
---
# fișier de sarcini pentru roluri/vcenter
- import_tasks: poweroff.yml
# - import_tasks: poweron.yml
# - import_tasks: revert.yml
# - import_tasks: shutdown.yml
  • A creat un toate.yml în dosarul group_vars din biblioteca de inventare (nu știu dacă este un mod profesionist de a face așa ceva) care include toate detaliile winrm ca acesta:
---
Detalii protocol #WinRM
ansible_user: DOMAIN\utilizator
parola_ansible: f#0$o#1$0o
ansible_connection: winrm
ansible_port: 5985
ansible_winrm_scheme: http
ansible_winrm_server_cert_validation: ignorați
ansible_winrm_transport: ntlm
ansible_winrm_read_timeout_sec: 60
ansible_winrm_operation_timeout_sec: 58
  • A creat un rever_lab.yml manual care include rolul, ca acesta
---
- nume: reveniți la un laborator onpremis
  gazde: toate
  roluri:
  - vcenter

Ale mele ansible.cfg este cam asa:

[implicit]
inventar = /ansible/inventories
calea_rolurilor = ./roles:..~/ansible/roles

Am executat cu succes manualul de joc pentru a opri toate mașinile din laborator, apoi am „pornit” sarcina de pornire în rol, așa:

---
# fișier de sarcini pentru roluri/vcenter
# - import_tasks: poweroff.yml
- import_tasks: poweron.yml
# - import_tasks: revert.yml
# - import_tasks: shutdown.yml

Acum că toate mașinile laboratorului sunt oprite, executând manualul, dați următoarea eroare:

PLAY [revert vmware vcenter lab] ******************************************** *****
SARCINA [Adunarea faptelor] ********************************************* *************
fatal: [vm1.domain.com]: NEACCESIBIL! => {"schimbat": false, "msg": "ntlm: 
HTTPConnectionPool(host='vm1.domain.com', port=5985): Reîncercări maxime depășite cu adresa URL: /wsman (Cauzată de NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fb7ae4908d0>: Nu s-a putut stabili o nouă conexiune: [ Errno 111] Conexiune refuzată',))", "inaccesibil": true}
fatal: [vm2.domain.com]: NEACCESSIBIL! => {"schimbat": false, "msg": "ntlm: HTTPConnectionPool(host='vm2.domain.com', port=5985): Maximul de reîncercări a fost depășit cu adresa URL: /wsman (cauzată de NewConnectionError('<urllib3. Connection.HTTPConnection object at 0x7fb7ae487b00>: Nu s-a putut stabili o nouă conexiune: [Errno 111] Connection refud',))", "unreachable": true}
fatal: [vm3.domain.com]: NEACCESSIBIL! => {"schimbat": false, "msg": "ntlm: HTTPConnectionPool(host='vm3.domain.com', port=5985): Numărul maxim de încercări a fost depășit cu adresa URL: /wsman (cauzată de NewConnectionError('<urllib3. Connection.HTTPConnection object at 0x7fb7ae48acc0>: Nu s-a putut stabili o nouă conexiune: [Errno 111] Conexiune refuzată',))", "inaccesibil": true}
fatal: [vm4.domain.com]: NEACCESSIBIL! => {"schimbat": false, "msg": "ntlm: HTTPConnectionPool(host='vm4.domain.com', port=5985): Maximul de reîncercări a fost depășit cu adresa URL: /wsman (cauzată de NewConnectionError('<urllib3. Connection.HTTPConnection object at 0x7fb7ae48de80>: Nu s-a putut stabili o nouă conexiune: [Errno 111] Connection refud',))", "unreachable": true}
fatal: [vm5.domain.com]: NEACCESSIBIL! => {"schimbat": false, "msg": "ntlm: 
HTTPConnectionPool(host='vm5.domain.com', port=5985): Numărul maxim de încercări a fost depășit cu adresa URL: /wsman (cauzată de NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7fb7ae41f080>: Nu s-a putut stabili o nouă conexiune: [ Errno 111] Conexiune refuzată',))", "inaccesibil": true}
fatal: [vm6.domain.com]: NEACCESSIBIL! => {"schimbat": false, "msg": "ntlm: HTTPConnectionPool(host='vm6.domain.com', port=5985): Numărul maxim de încercări a fost depășit cu adresa URL: /wsman (cauzată de NewConnectionError('<urllib3. Connection.HTTPConnection object at 0x7fb7ae41d7f0>: Nu s-a putut stabili o nouă conexiune: [Errno 111] Connection refud',))", "unreachable": true}
fatal: [vm7.domain.com]: NEACCESSIBIL! => {"schimbat": false, "msg": "ntlm: HTTPConnectionPool(host='vm7.domain.com', port=5985): Maximul de reîncercări a fost depășit cu adresa URL: /wsman (cauzată de NewConnectionError('<urllib3. Connection.HTTPConnection object at 0x7fb7ae428048>: Nu s-a putut stabili o nouă conexiune: [Errno 111] Connection refud',))", "unreachable": true}
fatal: [vm8.domain.com]: NEACCESSIBIL! => {"schimbat": false, "msg": "ntlm: HTTPConnectionPool(host='vm8.domain.com', port=5985): Max reîncercări a fost depășit cu adresa URL: /wsman (cauzată de NewConnectionError('<urllib3. Connection.HTTPConnection object at 0x7fb7ae425588>: Nu s-a putut stabili o nouă conexiune: [Errno 111] Connection refud',))", "unreachable": true}

JOACĂ RECAPITULARE ************************************************ ************************
vm1.domain.com : ok=0 schimbat=0 inaccesibil=1 eșuat=0 omis=0 salvat=0 ignorat=0
vm2.domain.com : ok=0 schimbat=0 inaccesibil=1 eșuat=0 omis=0 salvat=0 ignorat=0
vm3.domain.com : ok=0 schimbat=0 inaccesibil=1 eșuat=0 omis=0 salvat=0 ignorat=0
vm4.domain.com: ok=0 schimbat=0 inaccesibil=1 eșuat=0 omis=0 salvat=0 ignorat=0
vm5.domain.com: ok=0 schimbat=0 inaccesibil=1 eșuat=0 omis=0 salvat=0 ignorat=0
vm6.domain.com : ok=0 schimbat=0 inaccesibil=1 eșuat=0 omis=0 salvat=0 ignorat=0
vm7.domain.com : ok=0 schimbat=0 inaccesibil=1 eșuat=0 omis=0 salvat=0 ignorat=0
vm8.domain.com: ok=0 schimbat=0 inaccesibil=1 eșuat=0 omis=0 salvat=0 ignorat=0

De ce sarcina de oprire funcționează bine și pornirea nu? Cum pot rezolva această problemă?

Depozitul meu:

C:.
ââââansible
â â ansible.cfg
â ââââinventare
â â ââââtest
â â âââânor
â â ââââonpremis
â â ââââdomain.com
â â â lab_j.yml
â â â lab_r.yml
â â ââââgroup_vars
â â all.yml
â ââââplaybooks
â â revert_lab.yml
â ââââroluri
â ââââvcenter
â ââââsarcini
â â principal.yml
â â poweroff.yml
â â poweron.yml
â â retur.yml
â â shutdown.yml
â ââââvars
â principal.yml

Inventarul meu lab_r.yml - aceasta este o schemă parțială

---
toate:
  copii:
    rădăcină:
      copii:
        centru:
          copii:
            servere de aplicație:
              gazde:
                vm1.domain.com:
            qservere:
              gazde:
                vm2.domain.com:
            dbservers:
              gazde:
                vm3.domain.com:
drapel in
Este mașina pe care porniți manualele ansible o mașină Windows configurată pentru WinRM? Bănuiesc că ansible încearcă să se conecteze cu WinRM la localhost, deoarece ați configurat acest lucru în `all.yml`, ceea ce eșuează. localhost ar trebui să fie configurat cu `ansible_connection: local`. aceasta ar trebui să fie implicită atunci când localhost nu este specificat în mod explicit în inventar, dar cine știe...
Zeitounator avatar
drapel fr
Nu trebuie să declarați `localhost` în inventarul dvs.: este [implicit](https://docs.ansible.com/ansible/latest/inventory/implicit_localhost.html) și de obicei doriți să rămână așa, așa că nu se potrivește cu ținta grupului „toate”. Între timp, așa cum este raportat în link-ul documentului, încă citește vars din `group_vars/all.yml`, care este problema raportată de @GeraldSchneider mai sus. Doar mutați fișierul în `group_vars/center.yml`, astfel încât valorile să fie aplicate numai grupului relevant.
drapel uz
@Zeitounator, Vă rugăm să clarificați, de ce ansible nu este citit fișierul ```roles\vcenter\vars\main.yml``` care include detaliile de acces vCenter?
drapel uz
@GeraldSchneider trece la ```ansible_connection: local``` și rulează playbook-ul da următoarele rezultate: TASK [Gathering Facts] toate mașinile sunt recunoscute, apoi efectuarea sarcinii arată următoarea eroare pentru toată lista de mașini: ``` "msg": "Nu se poate seta starea de alimentare pentru mașina virtuală inexistentă: 'ansible'"```
Zeitounator avatar
drapel fr
Vm-urile dvs. sunt oprite. Trebuie să dezactivați colectarea de fapte în jocul dvs. în acest caz (cu `gather_facts: false`), altfel ansible încearcă să se conecteze la ele pentru a obține informații înainte de a juca sarcina care le activează
drapel uz
@Zeitounator, am stabilit jocul cu ```gather_facts: false```. încă aceleași rezultate - vm-urile sunt oprite. Schimbați ```ansible_connection``` în ```local``` results: ```"msg": "Sarcina include o opțiune cu o variabilă nedefinită. Eroare a fost: 'ansible_hostname'...```
Zeitounator avatar
drapel fr
Nu este același rezultat... acum obțineți o eroare pentru că încercați să utilizați o variabilă care este definită doar atunci când adunați fapte... ceea ce nu este posibil pentru că vm-ul dvs. este oprit. Trebuie să găsiți soluția pentru a obține numele mașinii fără a fi nevoie să vă conectați la vm.
drapel uz
@Zeitounator, am încercat. În fișierul ```lab_r.yml``` am adăugat variabila suplimentară ```vm_name``` cu numele mașinilor astfel: ```vm_name: VM1``` sub fiecare fișier fqdn (după cum puteți vedea în exemplul din postare). Am sarcina ```poweron.yml``` pe care o schimb în ```name: {{ vm_name }}```. Am stabilit jocul cu ```gather_facts: no```.După execuție am primit: ```"msg": "Nu se poate seta starea de alimentare pentru mașina virtuală inexistentă: 'VM1'"```
Zeitounator avatar
drapel fr
Se pare că sunteți mai interesat să discutați despre sesiunea dvs. de depanare decât să încercați să vă remediați problema. Vă așteptați ca oamenii care citesc asta să știe ce nume are vm-ul dvs. în interiorul instalării vmware? Nimeni nu poate ghici din postarea dvs. reală, deoarece nu ne-ați spus cum ați creat vm-ul și din ce variabile. Utilizați un nume care există de fapt și va fi pornit. Noroc.
Puncte:0
drapel uz

Problem was solved by:
I set folder key value to "/{{ datacenter_name }}/"
I add the poweron task to additional task as revert - meaning poweron task worked for me only if it was part of a sequence of tasks
Unfortunately, the poweron task didn't worked for me as a standalone task

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.