Puncte:0

How to make Ansible run batch of tasks on few nodes but one by one (nodes running in cluster)

drapel cn

I have an ansible playbook which looks roughly like this:

- hosts: node1
      tasks:
      - name: get cluster state 
        shell: "RESTAPI 1 command"
      - name: put cluster in upgrade mode
        shell: "RESTAPI 2 command"
- hosts: node 1
      tasks:
      - name: upgrade Apache
        shell: "upgrade Apache command"
      - name: start Apache
        shell: "start Apache command"
- hosts: node 1
      tasks:
      - name: healthy check for Apache is running
        shell: "RESTAPI command"
- hosts: node 2
      tasks:
      - name: upgrade Apache
        shell: "upgrade Apache command"
      - name: start Apache
        shell: "start Apache command"
- hosts: node 2
      tasks:
      - name: healthy check for Apache is running
        shell: "RESTAPI command"
- hosts: node 3
      tasks:
      - name: upgrade Apache
        shell: "upgrade Apache command"
      - name: start Apache
        shell: "start Apache command"
- hosts: node 3
      tasks:
      - name: healthy check for Apache is running
        shell: "RESTAPI command"

I want to improve the playbook that will run as a loop because for each node I have same commands that should be exec on each node one by one because all nodes running in cluster and I need only one node will be in upgrade process at the same time. also I have few environment (Test/Dev) that I want to use this playbook but I have different nodes number in cluster how can I make run the playbook no matter how many nodes I have into the cluster?

Puncte:1
drapel in

Puteți plasa toate sarcinile recurente într-un bloc. Combinat cu serie: 1 vă asigurați că este executat un singur bloc odată.

- gazde: noduri
  serie: 1
  sarcini:
    - nume: obține starea clusterului 
      shell: „Comandă RESTAPI 1”
      run_once: da
    - nume: pune clusterul în modul de actualizare
      shell: „Comandă RESTAPI 2”
      run_once: da
    - bloc:
      - nume: upgrade Apache
        shell: „upgrade Apache command”
      - nume: porniți Apache
        shell: "porniți comanda Apache"
      - nume: verificarea sănătoasă pentru Apache rulează
        shell: "comandă RESTAPI"
# reîncercări: 20
# întârziere: 15

Presupun că comanda de a pune clusterul în modul de actualizare poate fi rulată pe orice nod, așa că puteți utiliza doar alergă_o dată. Dacă acesta nu este cazul și trebuie să fie rulat pe un anumit nod, puteți folosi a când restricție pentru o anumită gazdă.

Pentru starea de sănătate verificați parametrii întârziere și reîncercări ar putea fi de interes, dacă există posibilitatea ca verificarea să eșueze la început și să reușească atunci când apache rulează complet.

Pentru a utiliza manualul pe diferite grupuri gazdă pe care le-ați putea folosi gazde: toate și apoi limitați gazdele la un grup în timpul execuției.

ansible-playbook upgrade.yml --limit dev_nodes
drapel cn
Bună @GeraldSchneider, mulțumesc pentru răspuns, am încercat să-mi editez fișierul yml pe baza sugestiei tale, dar primesc erori de sintaxă EROARE! „uri” nu este un atribut valid pentru un bloc `- gazde: noduri serie: 1 sarcini: - nume: obține starea clusterului uri: run_once: da bloc: - nume: copie copie: - nume: dosar fişier - nume: systemd check systemd: - nume: blockinfile blockinfile # reîncercări: 20 # întârziere: 15 `
drapel in
Este greu de citit în comentariu, dar se pare că folosești două puncte în numele sarcinii. Trebuie să o citezi când faci asta.

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.