Voglio passare una variabile a un gestore di notifiche, ma non riesco a trovare da nessuna parte che si trovi qui su SO, i documenti oi problemi nel repository github, come farlo. Quello che sto facendo è distribuire più webapps e quando il codice per una di queste webapps viene cambiato, dovrebbe riavviare il servizio per quella webapp.ansible: using with_items con gestore di notifiche
Da this SO question, ho avuto questo lavoro, un po ':
- hosts: localhost
tasks:
- name: "task 1"
shell: "echo {{ item }}"
register: "task_1_output"
with_items: [a,b]
- name: "task 2"
debug:
msg: "{{ item.item }}"
when: item.changed
with_items: task_1_output.results
(. Metti in test.yml ed eseguirlo con ansible-playbook test.yml -c local
)
Ma questo registra il risultato della prima operazione e condizionatamente esegue il ciclo su quello nella seconda attività. Il mio problema è che diventa complicato quando si hanno due o più attività che devono notificare la seconda attività! Ad esempio, riavviare il servizio Web se il codice è stato aggiornato o se la configurazione è stata modificata.
AFAICT, non c'è modo di passare una variabile a un gestore. Questo lo aggiustererebbe in modo pulito per me. Ho trovato alcuni problemi su github in cui altre persone si imbattono nello stesso problema e vengono proposte alcune sintassi, ma nessuna di queste funzioni effettivamente.
Anche l'utilizzo di un sub-playbook non funziona, perché l'utilizzo di with_items
insieme a include
è stato dichiarato obsoleto.
Nei miei quaderni, ho uno site.yml
che elenca i ruoli di un gruppo, quindi nello group_vars
per quel gruppo definisco l'elenco di webapp (incluse le versioni) che dovrebbero essere installate. Mi sembra corretto, perché in questo modo posso usare lo stesso playbook per la messa in scena e la produzione. Ma forse l'unica soluzione è definire il ruolo più volte e duplicare l'elenco dei ruoli per la gestione temporanea e la produzione.
Quindi qual è la saggezza qui?
Direi che non funzionerà, ho appena provato lo stesso con Ansible 1.8.4 e 1.9.0. Il gestore risolve sempre 'nome' in base al primo richiamo del ruolo,' a' qui, anche quando viene attivato da una successiva chiamata di ruolo. Poiché il gestore e la sua notifica sono globali attraverso le chiamate di ruolo, non è possibile parametrizzarlo in questo modo. – famousgarkin
Strano! Penso di averlo provato, con 1.7.1 al momento. Ma ho funzionato di nuovo cambiando la notifica a "qualcosa è successo a {{nome}}" 'in tasks/main.yml e cambiando il nome del gestore in" "è successo qualcosa a {{nome}}" '. – j0057
Vedere il contenuto qui: https://gist.github.com/j0057/5af0ac913a203a5b94ef - scusa ho dovuto appiattire le directory, forse se lo si biforca è possibile accedere a un commit precedente in cui le directory non sono appiattite. – j0057