Context:
Am un proiect cu două roluri.
Am redus numărul de sarcini la cele problematice pentru o mai bună înțelegere.
Problemă:
Rulez o sarcină de la un rol1 în server1 și încerc să deleg o sarcină unui virtualizator vmware din condiția din prima sarcină de rol server1.
Și o gazdă eșuează deoarece dorește să execute a doua sarcină de rol (Vmware) în server1.
Eroarea:
fatal: [testhost]: FAILED! => {"motivul": "Declarații de acțiune conflictuale: gazde,
gather_facts\n\nEroarea pare să fie în „/home/ancible/proyects/extend_fs-role/roles/vmwaretaks/tasks/addvmwaredisk.yml”: linia 2, coloana 3,
dar poate\nsă fie în altă parte a fișierului, în funcție de problema tntax.\n\nRândul ofensator pare să fie:\n\n---\n- gazde: localhost\n ^ aici\n"}
Iată structura:
.
âââ colecții
â  âââ cerințe.yml
âââ README.md
âââ resizefs_hosts.yml
âââ roluri
âââ redimensionează
â  âââ implicite
â  â  âââ main.yml
â  âââ manipulatori
â  â  âââ main.yml
â  âââ meta
â  â  âââ main.yml
â  âââ sarcini
â  â  âââ main.yml
â  â  âââ findfreedisk.yml
â  âââ teste
â  â  âââ inventar
â  â  âââ test.yml
â  âââ vars
â  âââ main.yml
âââ vmwaretaks
âââ implicite
â  âââ main.yml
âââ fișiere
âââ manipulatori
â  âââ main.yml
âââ meta
â  âââ main.yml
âââ README.md
 âââ sarcini
 â  âââ main.yml
 â  âââ addvmwaredisk.yml
âââ șabloane
âââ teste
â  âââ inventar
â  âââ test.yml
âââ vars
âââ principal.yml
Acesta este ordinul de executare în cazul în care nu găsiți un lun gratuit în gazdă:
resizefs_role_hosts.yml -> roles/resizefs/tasks/main.yml -> roles/resizefs/tasks/findfreedisk.yml -> \
roles/vmwaretaks/tasks/main.yml -> roles/vmwaretaks/tasks/addvmwaredisk.yml
Iată cum arată cărțile de joc:
$ cat resizefs_role_hosts.yml
---
- gazde: testhost
deveni: da
deveni_metoda: sudo
roluri:
- rol: „roluri/redimensionări”
$ cat roles/resizefs/tasks/main.yml
---
# fișier de activități pentru create_fs-test
- import_tasks: findfreedisk.yml
$ cat roles/resizefs/tasks/findfreedisk.yml
- nume: Găsirea discului fără partiții
set_fact:
discuri: „/dev/{{outer_item.key}}”
când:
- nu outer_item.value.partitions
- nu outer_item.value.links.ids
- outer_item.key este căutare ("sd")
with_dict: „{{ansible_devices}}”
loop_control:
loop_var: element_exterior
anunta:
- Format_disc_liber
changed_when: adevărat
- nume: Tipăriți numele discului, dacă este disponibil
depanare:
mesaj:
- „{{ discuri|implicit(„NU DISK GRATUIT”) }} Disponibil”
# Dacă discul nu este disponibil, adăugați un nou lun de la Vmware
- include_role:
nume: vmwaretaks
când: discurile este nedefinită
$ cat roles/vmwaretaks/tasks/main.yml
---
# fișier de activități pentru add-new-vmware-lun
- import_tasks: addvmwaredisk.yml
$ cat roles/vmwaretaks/tasks/addvmwaredisk.yml
---
- gazde: localhost
gather_facts: adevărat
vars:
vcenter_hostname: „vcenter.labo.local”
vcenter_username: „labo.local\ansible”
vcenter_password: „{{ vault_pass }}”
target_host: „TESTHOST”
vm_uuid: '4217B33E-014D-E056-0719-45AD3AC1861E'
vm_unit_number: '5'
sarcini:
- nume: Adăugați discuri la mașina virtuală folosind UUID
vmware_guest_disk:
nume gazdă: „{{ vcenter_hostname }}”
nume de utilizator: „{{ vcenter_username }}”
parola: „{{ vcenter_password }}”
datacenter: „{{ vcenter_hostname }}”
uuid: „{{ vm_uuid | inferior }}”
validate_certs: nu
disc:
- dimensiune_gb: 10
tip: „gros”
stare: „prezent”
autoselect_datastore: da
scsi_controller: '0'
scsi_type: „paravirtual”
unit_number: '5'
disk_mode: „independent_persistent”
delegate_to: localhost
Încercam să găsesc modalitatea de a-i spune că al doilea rol nu este executat în server, ci în virtualizatorul vmware, dar fără noroc.
Dacă rulez addvmwaredisk.yml ca un playbook, acesta rulează perfect
Sper că poți ajuta!
mulțumesc anticipat!