Puncte:0

Dosar de sarcini, cu directive partajate

drapel co

Cum pot seta directive partajate între toate sarcinile în fișier, într-un fișier fragment Ansible playbook care conține doar sarcini?

# ansible/inventory/roles/os_packages/tasks/main.yaml

- nume: „APT: Actualizați pachetele disponibile din depozitele Debian”
  gather_facts: false
  deveni: adevărat
  devenit_utilizator: root
  apt:
    update_cache: adevărat
- nume: „APT: Instalați pachetele necesare”
  gather_facts: false
  deveni: adevărat
  devenit_utilizator: root
  apt:
    Nume:
      - foo
      - bar

Acele directive repetate â aduna_fapte, deveni, etc. â trebuie menționat o singură dată în acel fișier. Dar unde, din moment ce nu există (în prezent?) niciun fișier care să reprezinte rolul sau jocul?

# ansible/inventory/roles/os_packages/tasks/main.yaml

# Acest lucru nu funcționează deoarece Ansible se așteaptă doar la sarcini.
gather_facts: false
deveni: adevărat
devenit_utilizator: root

- nume: „APT: Actualizați pachetele disponibile din depozitele Debian”
  apt:
    update_cache: adevărat
- nume: „APT: Instalați pachetele necesare”
  apt:
    Nume:
      - foo
      - bar

Fișierul trebuie să fie format doar dintr-o secvență de sarcini; nivelul „rol” sau nivelul „joc” nu par să aibă un loc adecvat în această structură de directoare recomandată.

Dacă întregul playbook ar fi într-un singur fișier, fiecare redare ar avea propriul nume separat și aș seta directivele pentru joc. Dar aceste fișiere de sarcini sunt adunate și compilate și nu există niciun loc unde jocul există pentru ca eu să scriu acele directive.

Unde ar trebui directivele care se aplică tuturor sarcinilor dintr-un rol a fi definit?

Puncte:0
drapel th

aduna_fapte nu este semnificativ (sau posibil) să setați pentru altceva decât o piesă, deoarece afectează doar decizia la nivel de joc de a aduna fapte.

deveni și deveni_utilizator sunt cuvinte cheie valide la nivel de bloc sau sarcină, astfel încât să puteți utiliza a bloc pentru a le aplica unei liste de sarcini (în cadrul unui rol sau altfel):

- deveni: adevărat
  devenit_utilizator: root
  bloc:
    - nume: „APT: Actualizați pachetele disponibile din depozitele Debian”
      apt:
        update_cache: adevărat
    - nume: „APT: Instalați pachetele necesare”
      apt:
        Nume:
          - foo
          - bar

Multe cuvinte cheie pot fi aplicate și la apelarea rolurilor:

- gazde: toate
  roluri:
    - nume: foo
      deveni: adevărat
  sarcini:
    - import_role:
        nume: bar
      deveni: adevărat

    - include_role:
        nume: baz
        aplica:
          deveni: adevărat
Puncte:0
drapel br

Structura mea tipică de director:

âââ deploy-something.yml
âââ README.md
âââ inventare
â  âââ prod
â  â  âââ group_vars
â  â  â  âââ toate
â  â  â    âââ vars.yml
â  â  â    âââ vault.yml
â  â  âââ host_vars
â  â  â  âââ host1.yml
â  â  â  âââ host2.yml
â  â  â  âââ localhost
â  â  â  âââ vars.yml
â  â  â  âââ bolta
â  â  âââ inventory.yml
â ...
âââ roluri
    âââ rol1
    â âââ ...
    ...

În acest caz, am pus astfel de directive în jocul de nivel superior deploy-something.yml:

- gazde: toate
  remote_user: ansible
  deveni: da
  deveni_metoda: sudo
  any_errors_fatal: adevărat
  serial: adevărat
  ordine: inventar_revers
  roluri:
  - rolul 1
  - rolul2
drapel co
âAm pus astfel de directive la nivelul superiorâ â dacă înțeleg exemplul dvs., acel fișier reprezintă întregul *playbook*. Încerc să aplic aceste directive unui joc sau rol individual; când jocul sau rolul este reprezentat de structura de directoare.
Puncte:-1
drapel br

Î: "Unde ar trebui definite directivele care se aplică tuturor sarcinilor dintr-un rol?"

R: Răspunsul scurt este: în afara unui rol.

Unde exact ar trebui să puneți cuvintele cheie depinde de modul în care utilizați rolul. Există mai multe opțiuni

  • roluri:
  • import_role:
  • include_role:

Este în afara scopului de a explica totul Detalii Aici. În general, puneți astfel de cuvinte cheie la nivelul (indentație) al unui rol. În cazul în care include_role poti de asemenea aplica Cuvinte cheie. Rețineți că nu toate cuvintele cheie pot fi aplicate peste tot. Vedea Cuvinte cheie din Playbook care se aplică rolurilor. De exemplu, cuvântul cheie aduna_fapte poate fi aplicat numai unui manual de joc. Una dintre opțiunile despre cum să vă rezolvați problema ar putea fi structura jocului de mai jos

- gazde: toate
  gather_facts: false
  roluri:
    - rol: os_packages
      deveni: adevărat
      devenit_utilizator: root

Î: "Cum se face asta (aplicați astfel de cuvinte cheie la nivelul unui rol), când nu există niciun fișier de configurare (doar un director de roluri) care să reprezinte rolul?"

R: Dacă există doar directorul de roluri, care reprezintă rolul, puteți aplica cuvinte cheie numai blocurilor și sarcinilor din interiorul rolului. Nu puteți aplica cuvinte cheie unui rol din cadrul acestui rol. Nu există un fișier de configurare pentru un rol.

În răspunsul anterior, prin nivel mă refer la nivelul de indentare, de exemplu în codul de mai sus, aduna_fapte se aplică piesei în timp ce ambele deveni și deveni_utilizator se aplică rolului.

drapel co
âAplicați astfel de cuvinte cheie la nivelul unui rolâ â da, exact asta se pune întrebarea: Cum se face asta, când nu există niciun fișier de configurare (doar un director de roluri) care să reprezinte rolul?
drapel br
Probabil că cauți ceva care nu există.

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.