2016-06-30 94 views
7

Diciamo Ho 3 file in group_vars:gruppo Ansible vars priorità

abc.yml 
all.yml 
xyz.yml 

e la stessa variabile definita in loro:

- my_var: abc 
- my_var: all 
- my_var: xyz 

Ansible documentation dice:

All'interno di ogni sezione, ridefinendo una var sovrascriverà l'istanza precedente. Se più gruppi hanno la stessa variabile, vince l'ultimo caricato. Se si definisce una variabile due volte nella vars di un gioco: sezione, vince il 2 °.

Vuol dire che l'ordine di caricamento è uno alfabetico e abc.yml ha la priorità più bassa, mentre xyz.yml il più alto, o dipende da ordine dei gruppi in hosts?

Qual è l'ordine di caricamento?


È interessante, che modifica l'ordine dei gruppi in hosts modifiche traduce pure, ma in modo imprevedibile.

ho provato a fare funzionare ansible-playbook my_var.yml -c local (che restituisce solo un valore variabile) con tutte le combinazioni di:

[all] 
localhost 

[xyz] 
localhost 

[abc] 
localhost 

ma io ancora non riesco a capire come funziona.

+5

si sta entrando in un comportamento estremamente imprevedibile qui. la cosa migliore da fare sarebbe non riutilizzare le variabili in questo modo. Dovresti mirare ad evitare i conflitti a tutti i costi, dal momento che renderanno i tuoi libri di gioco molto instabili. Se è necessario utilizzare i conflitti per sovrascrivere le variabili, è molto esplicito in quale ordine vengono caricati. Probabilmente lo farei usando le istruzioni include invece dei gruppi vars. – smiller171

risposta

0

Direi che il comportamento di Ansible in questo caso non è specificato.

0

Sembra che il problema seguente, dal repository git Ansible, potrebbe essere affrontato il comportamento descritto: Ansible group_vars from inventory don't support repeated hosts

Guardando il code changes dalla associato commit, sembra che ora i gruppi devono essere ordinati dalla profondità allora per nome (in ordine alfabetico).

Vale la pena notare che questo comportamento probabilmente varierà a seconda della versione di Ansible in esecuzione, poiché queste modifiche sono state unite solo nel ramo stable-2.2 del repository Ansible.