Puncte:0

Folosind bucla ansible până cu stdout_lines

drapel de

Încerc să folosesc bucla ansible până când condiția este îndeplinită. pot folosi pana cand dacă ieșirea este doar o singură linie, totuși, dacă ieșirea este mai multe linii, va trebui să o folosesc stdout_lines dar nu reușește să o facă.

Dacă ieșirea este o singură linie:

- nume: verificați starea de sincronizare
  shell: o comandă
  înregistrare: sync_status
  până la: sync_status.stdout == 'SSUS'

Dacă ieșirea are mai multe linii, atunci încerc să folosesc stdout_lines

- nume: verificați starea de sincronizare
  shell: o comandă 
  înregistrare: sync_status
  până la: item.stdout_lines == 'SSUS'
  with_items: „{{ sync_status }}”

dar am primit variabila nedefinită:

fatal: [xxxxxxx]: A ESCUT! => {
    "msg": "'sync_status' este nedefinit"
}

Nu vreau să o fac pe o sarcină separată, deoarece atunci sync_status este înregistrat la sarcina anterioară și voi compara starea veche în loc de starea actuală.

Vă rugăm să ajutați.

drapel br
Nu puteți atât *buclă* cât și *înregistrați* aceeași variabilă.
drapel br
Cazul de utilizare nu este clar. Ce vrei să faci când condiția nu este îndeplinită?
sloweriang avatar
drapel de
practic, această sarcină este doar pentru a verifica starea, odată ce condiția este îndeplinită, voi trece la sarcina următoare.
Puncte:0
drapel br

De exemplu, având în vedere fișierul și playbook-ul

shell> cat test.txt 
XX

shell> cat playbook.yml
- gazde: localhost
  sarcini:
    - ansible.builtin.command:
        cmd: cat test.txt
      înregistrare: sync_status
      până la: sync_status.stdout == 'SSUS'

sarcina va eșua

SARCINA [ansible.builtin.command] ******************************************** **
FAILED - REÎNCERCARE: ansible.builtin.command (au rămas 3 reîncercări).
FAILED - REÎNCERCARE: ansible.builtin.command (răman 2 reîncercări).
FAILED - REÎNCERCARE: ansible.builtin.command (a rămas 1 reîncercare).
fatal: [localhost]: FAILED! => schimbat=adevărat 
  încercări: 3
  cmd:
  - pisică
  - test.txt
  delta: '0:00:00.003479'
  sfârșit: '2021-06-16 07:27:19.927499'
  rc: 0
  începe: '2021-06-16 07:27:19.924020'
  stderr: ''
  stderr_lines: <omis>
  stdout: XX
  stdout_lines: <omis>

Dar, dacă introduceți șirul „SSUS” în fișier înainte sau în timpul testării, sarcina va reuși, de ex.

SARCINA [ansible.builtin.command] ******************************************** **
FAILED - REÎNCERCARE: ansible.builtin.command (au rămas 3 reîncercări).
FAILED - REÎNCERCARE: ansible.builtin.command (răman 2 reîncercări).
schimbat: [localhost]

Potriviți parametrii la nevoile tale.


Î: "Dacă rezultatul are mai multe linii, va trebui să folosesc stdout_lines."

R: Testați prezența șirului în listă, de ex.

    - ansible.builtin.command:
        cmd: cat test.txt
      înregistrare: sync_status
      până la: „„SSUS” în sync_status.stdout_lines”
sloweriang avatar
drapel de
Bună, de exemplu, există mai multe linii, unele cu SSUS, altele cu PAIR. Condițiile mele sunt să mă asigur că toate liniile sunt îndeplinite, nu doar unele dintre rânduri constau în cuvântul cheie

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.