Puncte:0

Cum să faceți Ansible să ruleze un lot de sarcini pe nodurile clusterului - nod cu nod

drapel cn

Am un manual de joc ansible care arată aproximativ ca următorul. am nevoie Începe upgrade-ul Zero Downtime și Pașii finalizați de actualizare fără timpi de nefuncționare. va rula o dată pentru a pune\elimina clusterul în modul de actualizare. în plus am nevoie de toate sarcinile în bloc va fi rulat doar pe un nod în același timp și va continua la nodul următor odată ce obținem HTTP 200

Ați putea, vă rog, să revizuiți fișierul yml? momentan primesc EROARE! „uri” nu este un atribut valid pentru un bloc și dacă aveți vreo sugestie pentru a o îmbunătăți.

---
- nume: Start Upgrade Zero Downtime
  gazde: atl
  serie: 1
  gather_facts: false
  vars_files:
    vars.yml
  sarcini:
   - nume: obțineți starea clusterului
     run_once: adevărat
     uri:
      url: https://{{ base_url }}.XXX.com/rest/api/2/cluster/zdu/state
      anteturi:
       Tip de conținut: application/json
      force_basic_auth: adevărat
      validate_certs: false
      utilizator: XXX
      parola: XXX
     înregistrare: răspuns
  # - nume: depanare.
  # depanare: var=răspuns
  # run_once: adevărat
   - nume: declanșează API-ul de actualizare Zero Downtime
     run_once: adevărat
     uri:
      url: https://{{ base_url }}.XXX.com/rest/api/2/cluster/zdu/start
      metoda: POST
      validate_certs: false
      anteturi:
       Tip de conținut: application/json
      force_basic_auth: adevărat
      utilizator: XXX
      parola: XXX
      cod_stare: 201
# înregistrare: răspuns
     când: response.json.state == „STABLE”
  # - nume: depanare.
  # run_once: adevărat
  # depanare: var=răspuns
   - bloc:
      - nume: creați director pentru configurația de rezervă
        fişier:
          cale: „{{ atl_backup_conf }}”
          stare: director
          modul: '0755'
          proprietar: atl
          grupa: atl
      - nume: fișiere de configurare de rezervă
        copie:
          src: „{{ item }}”
          dest: „{{ atl_backup_conf }}”
    # copie de rezervă: adevărat
          remote_src: adevărat
          proprietar: atl
          grupa: atl
        cu_articole:
          - „{{ atl_app }}/bin/setenv.sh”
        ignore_errors: adevărat
      - nume: „stop atl service on {{ ansible_hostname }} atl node”
        #shell: /etc/init.d/atl stop
        systemd:
          nume: atl
          stare: oprit
        deveni: da
- nume: pașii finalizați de upgrade Zero Downtime.
     gazde: atl
     vars_files:
      vars.yml
     sarcini: 
     - nume: declanșează schimbarea API-ului Zero Downtime la starea Stabil.
       run_once: adevărat
       uri:
        url: https://{{ base_url }}.XXX.com/rest/api/2/cluster/zdu/approve
        metoda: POST
        validate_certs: false
        anteturi:
          Tip de conținut: application/json
        force_basic_auth: adevărat
        utilizator: XXX
        parola: XXX
        cod_stare: 409, 200

Puncte:1
drapel in

Ai ratat o liniuță în fața bloc.

Eliminarea tuturor atributelor sarcinile dvs. arată astfel:

  sarcini:
  - nume: obțineți starea clusterului
  - nume: declanșează API-ul de actualizare Zero Downtime
    bloc:
# ^-- liniuță lipsește
      - nume: „Actualizați nodul atl {{ ansible_hostname }}.
      - nume: creați director pentru configurația de rezervă
      - nume: „stop atl service on {{ ansible_hostname }} atl node”
      - nume: Instalați noua versiune atl.
    - nume: Configurați serviciul systemd.
# ^-- indentat incorect
      - nume: Reîncărcare Activare și Porniți atl.service
      - nume: verificări de sănătate - declanșează starea nodului GET.

Cum vedeți, bloc este în prezent un atribut pentru sarcina anterioară, ar trebui să fie la nivelul de sarcini in schimb.

În plus, sarcina dvs Configurați serviciul systemd. nu este indentat corect, ar trebui să fie la același nivel cu celelalte sarcini.

  sarcini:
  - nume: obțineți starea clusterului
  - nume: declanșează API-ul de actualizare Zero Downtime
  - bloc:
# ^-- a adăugat liniuță lipsă
      - nume: „Actualizați nodul atl {{ ansible_hostname }}.
      - nume: creați director pentru configurația de rezervă
      - nume: „stop atl service on {{ ansible_hostname }} atl node”
      - nume: Instalați noua versiune atl.
      - nume: Configurați serviciul systemd.
# ^-- indentat corect
      - nume: Reîncărcare Activare și Porniți atl.service
      - nume: verificări de sănătate - declanșează starea nodului GET.

YAML este extrem de pretențios în privința indentării.

drapel cn
`- nume: Start upgrade Zero Downtime gazde: atl serie: 1 gather_facts: false vars_files: vars.yml sarcini: - nume: declanșează API-ul de actualizare Zero Downtime - bloc: - nume: „Actualizați nodul atl {{ ansible_hostname }}. - nume: creați director pentru configurația de rezervă - nume: „stop atl service atl node” - nume: verificări de sănătate - declanșează starea nodului GET. reîncercări: 720 întârziere: 5 - nume: pașii finalizați de upgrade Zero Downtime. gazde: atl sarcini: - nume: declanșează actualizarea Zero Downtime run_once: adevărat uri:`
drapel cn
Vă mulțumesc pentru răspuns, nu sunt sigur cum îl pot face mai lizibil în zona de comentarii.?! Am nevoie de 2 primele comenzi la sarcini: vor fi executate o singură dată, dar toate comenzile de sub - bloc: va fi exec pe toate nodurile, dar **nod cu nod** și la sfârșit din nou de la **Pașii finalizați de actualizare**. rulați o singură dată pe unul dintre noduri.
drapel in
Nu îl puteți face lizibil în comentarii. Dacă aveți ceva de adăugat la întrebarea dvs. existentă, editați-o. Dacă întâmpinați o nouă problemă, este mai bine să acceptați răspunsul care v-a ajutat și să puneți o nouă întrebare cu noua problemă.
drapel cn
odată ce rulez playbook-ul primesc eroarea: `EROARE! nu a fost detectat niciun modul/acțiune în sarcină. Eroarea pare să fie în main_new.yml': linia 41, coloana 9, dar poate fi în altă parte în fișier, în funcție de problema exactă de sintaxă. Linia ofensiva pare a fi: - bloc: - nume: Upgrade atl node. ^ aici ` Folosesc ansible-playbook 2.10.9, ești sigur pentru sintaxa modulului `- block:`? Văd că există `block:` fără -
drapel in
Da, [sunt sigur](https://docs.ansible.com/ansible/latest/user_guide/playbooks_blocks.html).
drapel in
Nu vă putem spune exact ce este în neregulă fără a vedea starea actuală a registrului de joc.
drapel cn
Din nefericire, nu pot partaja aici, deoarece comentariile nu pot fi citite. Orice idee cum pot împărtăși starea actuală?
drapel in
După cum v-am spus deja: editați-vă întrebarea. Nu elimina ceea ce este deja acolo, doar adaugă-l mai jos.
drapel cn
mi-a dat o eroare la încercarea de a adăuga, așa că o actualizez pe baza ultimului comentariu
drapel cn
Vreau doar să fim pe aceeași pagină - am nevoie de toate sarcinile din „obține starea clusterului” și „obține starea clusterului” vor fi exec o singură dată (run_once=true) și toate sarcinile din interiorul blocului: vor fi exec nod cu nod , Adică mai întâi să rulez toate sarcinile pe primul nod din grupul de gazde atl odată ce nodul este activ, înseamnă că primesc HTTP=200, se poate trece la următorul nod din grupul de gazde atl și așa mai departe. odată finalizată, sarcinile „-block:” pot continua și rula sarcini în „Pașii finalizați de actualizare Zero Downtime”. doar pe unul dintre noduri (run_once=true) Sper să fie mai clar acum
drapel cn
multumesc, am reusit.

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.