Puncte:0

Cum să setați o sarcină să ruleze pentru un anumit grup de inventar?

drapel uz

Următoarea sarcină:

- nume: Descărcați Jfrog Artifcats
  ansible.windows.win_shell: |
    $ENV:JFROG_CLI_OFFER_CONFIG="fals"
    jfrog rt descărcare...
  cand: ???

ar trebui să ruleze numai pentru mașinile care sunt situate sub centru în servere de aplicație grup

---
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:
        fermele mobile:
          gazde:
          copii:
            gateway-uri:
              gazde:
        sud:
          copii:
            brooklyn:
              gazde:
                vm4.domain.com:
              copii:
                clienti:
                  gazde:
                    vm5.domain.com:
                    vm6.domain.com:
        Nord:
          copii:
            New York:
              gazde:
                vm8.domain.com:
              copii:
                clienti:
                  gazde:
                    vm9.domain.com:

Sub ce ar trebui să scriu ca condiție când pentru a realiza acest lucru? De asemenea, care este principiul din spatele acestei opțiuni de configurare?

Semicolon avatar
drapel jo
când: nume_gazdă_inventar în serverele de aplicații Nu sunt sigur ce vrei să spui prin „care este principiul din spatele acestui lucru”
drapel uz
@Punt și virgulă, vreau să știu cum ajung la un grup căutat. De exemplu: ```appserver``` sub ```center```, sau ```gateway``` sub ```mobilefarms```, sau toate mașinile sub ```north``` și așa mai departe ...
Puncte:2
drapel jo

Pentru a utiliza apartenența la grup într-o condiție pentru o sarcină, o joacă sau un bloc, ar trebui să utilizați formatul:

când: nume_gazdă_inventar în grupuri["<nume grup>"]

Mai exact la întrebarea dumneavoastră inițială:

când: inventory_hostname în grupuri["appserver"]

Pentru a ajunge la toate mașinile de sub Nord, l-ai schimba pur și simplu în: când: inventory_hostname în grupuri[„north”]

În ceea ce privește clarificarea dvs. ulterioară (specificarea unui grup într-o anumită „locație”), deoarece numele grupurilor trebuie să fie unice în ansible, nu este nevoie să faceți distincție care servere de aplicație grup la care te referi, ca servere de aplicație poate fi întotdeauna într-o singură locație.

Dacă încercați să creați două servere de aplicație grupuri, numai primul ar fi de fapt analizat de motorul ansible; orice grup ulterior cu același nume va fi ignorat. Deci, dacă plănuiați să aveți (în viitor) un servere de aplicație grup sub Nord si un servere de aplicație grup sub sud, veți descoperi că vor fi incluși numai membrii din primul grup.

În ansible, cum realizăm acest lucru (ipoteza mea despre ceea ce dvs Mai doriți în viitor), modalitatea posibilă de a proceda este să adăugați gazdele la mai multe grupuri astfel și să vă ajustați limita sau condiționalul în mod corespunzător:

toate:
  copii:
    Nord:
      gazde:
        a.domain.com:
        b.domain.com:
    sud:
      gazde:
        y.domain.com:
        z.domain.com:
    servere de aplicație:
      gazde:
        a.domain.com:
        y.domain.com:
    dbservers:
      gazde:
        b.domain.com:
        z.domain.com:

În acest exemplu, dacă ai vrut toate servere de aplicații, ați viza doar servere de aplicație. Doar dacă ai vrut servere de aplicație în Nord regiune, atunci ți-ai seta limita pentru joc nord:&appserver, sau, alternativ, folosiți condiționalul

când:
  - inventory_hostname în grupuri["appserver"]
  - inventory_hostname în grupuri[„north”]

În orice caz, cred că s-ar putea să aveți nevoie de o actualizare a modului în care inventarul este structurat în ansible, pentru asta aș recomanda manualul utilizatorului; Există, de asemenea, câteva resurse grozave pe diverse site-uri de instruire care pot intra în detalii mult mai mari.

Pentru mai multe informații despre direcționarea mai complexă folosind mai multe grupuri (combinații, uniuni și excluderi etc.), vă sugerez să examinați acest alt manualul utilizatorului.


Pe o notă personală, inițial am crezut că configurarea a fost plictisitoare și limitată, dar pe măsură ce m-am familiarizat cu utilizarea ei, de fapt o găsesc mai dinamică decât alternativa.

drapel uz
Multumesc. ```when: "'appservers' in group_names"``` - Acesta este singurul format cu care reușesc.Dar încă nu reușesc să concentreze condiția doar pe „serverele de aplicații” în interiorul grupului principal „centru”. Am nevoie de această concentrare, pentru că unele laboratoare includ ```servere de aplicații``` sub grupul principal ```mobilefarms``` - iar acele mașini nu ar trebui să includă artefactul...
Zeitounator avatar
drapel fr
@Hiddai Un grup „Sub1” oriunde îl definiți este **un** grup. Dacă dați mai multe definiții pentru „Sub1” ca copii ai mai multor grupuri de părinți. rezultatul va fi o concatenare a tuturor gazdei/copiilor definiți oriunde. Ca urmare, grupul `Sub1` ca copii ai grupului `A` va conține exact aceleași gazde ca atunci când este un copil al grupului `B`. Vedeți [această întrebare/răspunsuri](https://stackoverflow.com/questions/68746910/).
Zeitounator avatar
drapel fr
@Punt și virgulă: ați vrut să spuneți `când: inventory_hostname în grupuri[]` care se traduce prin `când: inventory_hostname in groups['appservers']` în cazul lui OP? Soluția dvs. nu poate funcționa așa cum este oricum decât dacă utilizatorul a definit el însuși var `appservers` (altfel veți obține o eroare `appservers` este nedefinită). â
drapel uz
@Punt și virgulă, @Zeitounator - Reușesc acum. După ce ați citit cu atenție răspunsul lui @Semicolon: „numele de grup trebuie să fie unice în ansible”. când schimb grupul ```appservers``` al unui anumit centru cu ceva de genul numelui ```center_appservers``` - A început să funcționeze ca o magie. Mulțumiri.
Semicolon avatar
drapel jo
@Zeitounator, într-adevăr ai dreptate. Tocmai terminasem de scris o serie de sarcini în căutarea unui șir într-un nume de gazdă și am continuat să tastam. Am actualizat cu sintaxa corectă - folosind nota dvs., dar în esență doar copierea de pe un ecran deschis pe care l-am avut.

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.