Workflow

Concatenare playbook, approvazioni e altri workflow, come fa AWX

  1. Come gira un workflow
  2. Passare dati tra i nodi
  3. Un nodo che gira su un runner AWX passa avanti allo stesso modo gli artifact del suo job AWX.
  4. In questa sezione

Per chi scrive i moduli: che cos’è un workflow, come girano i suoi nodi, e dove approfondire.

Un workflow è un grafo di nodi. Ogni nodo esegue qualcosa: uno dei playbook del designer, un altro workflow, un’approvazione, o un pull di repository. I collegamenti tra i nodi dicono cosa viene eseguito dopo, in caso di successo, in caso di errore o sempre. Un modulo di tipo workflow lo avvia, e la pagina dei job lo disegna in diretta mentre gira.

I workflow seguono la sintassi e le regole di AWX, quindi un workflow esportato da AWX si legge allo stesso modo in AnsibleForms. Girano sull’RTE, senza AWX: un nodo playbook è un job a sé, con l’inventario, le credenziali, il limite e i tag del nodo.


Come gira un workflow

I nodi girano secondo le regole di AWX, e i rami che non dipendono l’uno dall’altro girano in parallelo.

  • Un nodo senza genitore parte subito, quando parte il workflow.
  • Un collegamento scatta quando il suo nodo è terminato: un collegamento in caso di successo dopo un successo, uno in caso di errore dopo un errore, uno sempre dopo l’uno o l’altro. Un nodo annullato non fa scattare nessuno dei suoi collegamenti.
  • Un nodo parte appena scatta uno dei collegamenti verso di esso. Con Tutti i genitori devono convergere attivo, attende finché ogni collegamento verso di esso è scattato.
  • Un nodo che non può più partire viene contrassegnato come non viene eseguito, e lo stesso vale per i nodi che solo lui poteva far partire.
  • Il workflow fallisce quando un nodo è fallito e nulla gestisce l’errore: quel nodo non ha né un collegamento in caso di errore né uno sempre. Un errore gestito da un collegamento non fa fallire il workflow.

Un nodo con una condizione (if_extra_var) non soddisfatta viene saltato. Ciò che lo segue gira come dopo un successo. Un nodo di approvazione non accetta condizioni: attende sempre una risposta.


Passare dati tra i nodi

Ciò che il playbook di un nodo raccoglie con set_stats arriva ai nodi successivi come extra vars, nello stesso modo in cui AWX passa gli artifact di un job. Un nodo riceve i dati da ogni genitore il cui collegamento verso di esso è scattato, uniti nell’ordine in cui i genitori sono scritti, e passa avanti ciò che ha ricevuto più i dati del proprio job, con i propri che prevalgono su una chiave impostata da entrambi.

# build.yaml, the first node : its version and build id go to the nodes after it
- name: Build
  hosts: localhost
  gather_facts: false
  tasks:
    - name: Pass the build on
      ansible.builtin.set_stats:
        data:
          version: "2.4.1"
          build_id: 42

Un nodo successivo legge poi {{ version }} e {{ build_id }} come qualsiasi altra extra var.

Le extra vars di un nodo provengono da quattro fonti. Una di queste, extra_data, sono le variabili proprie del nodo: il nome che usa AWX, impostate sul nodo nel file di workflow. Quando due fonti impostano la stessa chiave, l’ordine di precedenza è quello di AWX, dalla più bassa:

Fonte Prevale su
le variabili proprie del nodo (extra_data) niente
i dati passati con set_stats l’extra_data del nodo
le extra_vars del workflow i dati passati
i valori del modulo tutto
  • Vengono passati solo i dati a livello di playbook: set_stats con per_host: false, il suo valore predefinito.
  • Un nodo di approvazione, un nodo saltato e un nodo di progetto passano avanti ciò che hanno ricevuto.
  • L’output di un nodo termina con le chiavi che ha passato, solo per nome, perché i loro valori possono essere segreti.
  • Il job del nodo conserva i suoi dati come artefatti (Mostra artefatti nella sua pagina), e il job di workflow conserva i dati di tutti i suoi nodi, così anche un workflow annidato li passa ai nodi successivi.
  • Un nodo che gira su un runner AWX passa avanti allo stesso modo gli artifact del suo job AWX.

In questa sezione

Le pagine seguenti descrivono i workflow in dettaglio:

Pagina Cosa tratta
Il file di workflow La sintassi del file, i tipi di nodo e le impostazioni di esecuzione di ogni nodo
Modifica nel designer La sezione Workflow del designer: il grafo, le finestre di dialogo di nodi e collegamenti e la prova a vuoto
Eseguire un workflow Il modulo che lo avvia, la pagina del job, gli output dei nodi, le approvazioni e l’interruzione