2015-11-30 17 views
12

Possiedo un playbook con più sezioni di host. Vorrei definire una variabile in questo file playbook.yml che si applica solo all'interno del file, ad esempio:Variabile anonimo per Playbook

vars: 
    my_global_var: 'hello' 

- hosts: db 
    tasks: 
    -shell: echo {{my_global_var}} 

- hosts: web 
    tasks: 
    -shell: echo {{my_global_var}} 

L'esempio di cui sopra non funziona. Devo duplicare la variabile per ogni sezione host (cattiva) o definirla a livello superiore, ad esempio nel mio group_vars/all (non quello che voglio, ma funziona). Sono anche consapevole del fatto che i file delle variabili possono essere inclusi, ma questo influenza la leggibilità. Qualche suggerimento per farlo nel giusto ambito (ad esempio il file del playbook stesso)?

+0

Potreste essere interessati a PR [# 13787] (https://github.com/ansible/ansible/pull/13787) che implementa esattamente quello che stai cercando (e anche a livello playbook vars_prompt). –

risposta

4

Il modulo set_fact eseguirà questo se group_vars non soddisfa le proprie esigenze.

http://docs.ansible.com/ansible/set_fact_module.html

Questo modulo permette di impostare nuove variabili. Le variabili sono impostate su base host-per-host> proprio come i fatti scoperti dal modulo di installazione. Queste variabili sopravviveranno tra le riproduzioni durante un'esecuzione di Ansible, ma non verranno salvate su> esecuzioni anche se si utilizza una cache dei fatti.

- hosts: db:web 
    tasks: 
    - set_fact: my_global_var='hello' 

- hosts: db 
    tasks: 
    -shell: echo {{my_global_var}} 

- hosts: web 
    tasks: 
    -shell: echo {{my_global_var}} 
3

Preferisco mantenere le variabili globali nel file di inventario, dove si mantengono i gruppi e i nomi dei propri host.

Ad esempio:

my-hosts:

[all:vars] 
my_global_var="hello" 

[db] 
db1 
db2 
[web] 
web1 
web2 

funzionare il vostro playbook con:

ansible-playbook -i my-hosts playbook.yml 

La variabile saranno definiti per tutti gli host.

Se si utilizza ec2.py o altri dynamic inventory, è possibile inserire le variabili globali nel file group_vars/all per ottenere lo stesso risultato.

+0

Come ho già detto, mettere la var nell'inventario o nel file host funziona, ma è più difficile da leggere, quindi definirlo nel playbook, dato che devi guardare 2 o più file. –

+0

In realtà non hai menzionato l'inventario nella tua domanda, ed è per questo che l'ho suggerito :-) Dato che questo è un file che devi usare comunque, per definire i tuoi host, ha senso definire anche le tue variabili. – jonatan

+0

Che dire quando utilizzi lo spazio pubblicitario dinamico come ec2.py? – xenithorb