Puncte:0

Afișează o sarcină omisă ca „OK”

drapel ru
jdm

Am câteva sarcini ansible care sunt executate în două părți. Prima parte stabilește o condiție, iar a doua parte folosește când a executa conditionat. Pseudo-exemplu:

- nume: verificați dacă este instalat
  comanda: (...)
  înregistrare: este_instalat

- nume: rulați scriptul de instalare
  când: is_installed.stdout == „da”
  comanda: (...)

A doua sarcină se arată ca „sărit”. Acest lucru nu este chiar corect, nu am renunțat la instalare, dar am confirmat că a fost deja făcută, așa că ar trebui să apară ca „OK”. Ar trebui să arate „sărit” numai dacă gazda dată nu are nevoie de acest pas. Știu că este doar cosmetic, dar aș dori totuși să știu dacă există o modalitate de a-l face să spună „OK”.

Am încercat să setez schimbat_când la Fals. În timp ce acest lucru setează rezultatul la OK, încă rulează comanda. Cineva a cerut un Bine atunci setare, dar a fost refuzat și nu sunt sigur că dezvoltatorii au înțeles cererea.

U880D avatar
drapel ca
Din descrierea dvs. înțeleg că vă place să instalați sau să configurați „ceva” pe nodul(ele) la distanță. Vă place să confirmați la următoarea execuție a sarcinii că acesta este încă cazul. Pentru mine sună ca o instalare idempotent a unui pachet și pentru a atinge acest obiectiv nu ar fi necesară verificarea `sărită` a `ok_when`.
drapel ru
jdm
Corect, dar instalarea nu se face prin apt, pip și așa mai departe, așa că nu pot folosi o sarcină specializată. În cazul general, am două comenzi shell, una îmi spune dacă este necesară o acțiune și una ia acțiunea.Se pare că acesta ar fi unul dintre cele mai de bază lucruri pe care le puteți face în ansible.
U880D avatar
drapel ca
Deoarece nu sunt furnizate informații despre ce ar putea fi „ceva”, pot doar să ghicesc unele cazuri. Deoarece Ansible este un instrument de gestionare a configurației cu ajutorul căruia se declară o stare, sarcinile sunt de obicei organizate pentru a se asigura că ceva se află într-o anumită stare. Având în vedere acest lucru, un program de instalare (script) ar putea rula de două ori și poate fi idempotent. În aproape toate cazurile, nu ar fi necesară nicio verificare înainte.
U880D avatar
drapel ca
De asemenea, ar putea fi posibil să aveți o verificare doar în comanda dumneavoastră shell, cum ar fi pentru `needs-restarting -r || /usr/sbin/shutdown -r +1`, lăsați comanda să ruleze dacă este necesar și oferind feedback pentru mediul Ansible înapoi prin coduri de returnare, stderr, stdout.
Puncte:2
drapel ng

Nu am putut găsi o soluție generală aici. Dar dacă sarcinile instalează de fapt ceva, ați putea să eliminați prima parte și să adăugați creează la a doua parte pentru a implementa verificarea.

- nume: rulați scriptul de instalare
  creează: /cale/la/instalare
  comanda: (...)
drapel ru
jdm
Da, asta pare a fi soluția ideomatică. Alternativa ar fi să scrieți un modul personalizat care știe singur cum să verifice „OK”. Este ciudat că nu există o modalitate simplă de a-l defini în YAML.
U880D avatar
drapel ca
Corect, asta creează parametrul modulului [`command` `creates`](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/command_module.html#parameter-creates) sau modulul [`shell` parametrul `creates`](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/shell_module.html#parameter-creates) sunt pentru.Vezi și în exemplul [ansible/modules/command.py](https://github.com/ansible/ansible/blob/devel/lib/ansible/modules/command.py), „_în timp ce comanda în sine este arbitrară și nu poate fi supus semanticii modului de verificare, adaugă opțiuni C(creează)/C (elimină) ca o soluție_".
Puncte:1
drapel cn

când: evaluarea la rezultate false într-o stare omisă în sarcina respectivă. Imprimarea a ceva pe skipped vine de la pluginul standard out callback. Pentru apelurile implicite bazate pe apel, aceasta poate fi dezactivată global cu ajutorul display_skipped_hosts element de configurare. Vezi documentele: ansible-doc -t callback implicit

O soluție elegantă ar putea fi să împachetați acest lucru într-un manager de pachete real și să îl instalați. Există mai multe module de gestionare de pachete idempotente pentru Ansible.

Sau, scriptul de instalare ar putea fi reluat în siguranță și revine cu un cod zero la succes.


Deși nu vorbesc în numele dezvoltatorilor, aceștia sunt precauți cu privire la adăugarea de funcții la bază. Și, posibil, ei nu văd o problemă cu o sarcină raportată ca omisă, nu fiecare sarcină din fiecare joc este executată.

când: controlează dacă rulează o sarcină. changed_when: și failed_when: modificați starea unei sarcini după rulare, cum ar fi codul de returnare bazat pe off sau standard out. Împreună, acestea oferă control asupra dacă o sarcină este o stare de modificare sau eșuată, chiar și pentru sarcinile de comandă generice.

Pentru mai mult control asupra idempotnței, utilizați un modul mai puțin generic. Și dacă tot sunteți ofensat de ceea ce este tipărit, luați în considerare un plugin personalizat de apel invers.

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.