2016-06-30 12 views
7

Sagen wir, ich habe 3 Dateien in group_vars:ansible Gruppe Vars Priorität

abc.yml 
all.yml 
xyz.yml 

Und die gleiche Variable in ihnen definiert:

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

ansible documentation sagt:

Innerhalb jeder Abschnitt, die Neudefinition einer Var überschreibt die vorherige Instanz. Wenn mehrere Gruppen die gleiche Variable haben, gewinnt der zuletzt geladene. Wenn Sie eine Variable zweimal im vars: -Abschnitt eines Spiels definieren, gewinnt das zweite.

Bedeutet es, dass die Last um alphabetische ist und abc.yml hat die niedrigste Priorität, während xyz.yml die höchsten oder es hängt von der Reihenfolge der Gruppen in hosts?

Was ist die bestellung? auch führt, aber in unvorhersehbarer Weise


Es ist interessant, dass die Reihenfolge der Gruppen in hosts Änderungen zu ändern.

Ich versuchte ansible-playbook my_var.yml -c local laufen (das einzige Variable Wert zurückgibt) mit allen Kombinationen von:

[all] 
localhost 

[xyz] 
localhost 

[abc] 
localhost 

aber ich kann immer noch nicht herausfinden, wie es funktioniert.

+5

Sie geraten hier in extrem unvorhersehbares Verhalten. Am besten wäre es, Variablen nicht auf diese Weise wiederzuverwenden. Sie sollten versuchen, Konflikte um jeden Preis zu vermeiden, da sie Ihre Spielbücher sehr instabil machen. Wenn Sie Konflikte verwenden müssen, um Variablen zu überschreiben, müssen Sie sehr explizit angeben, in welcher Reihenfolge sie geladen werden. Ich würde das wahrscheinlich tun, indem ich Include-Anweisungen statt Gruppen-Vars verwende. – smiller171

Antwort

0

Ich würde sagen, dass das Verhalten von Ansible in diesem Fall nicht spezifiziert ist.

0

Es sieht aus wie das folgende Problem, aus dem Repository ansible git, adressiert das Verhalten haben, können Sie beschreiben: Ansible group_vars from inventory don't support repeated hosts

am code changes Blick von der zugehörigen begehen, ist es jetzt aussieht Gruppen nach Tiefe sortiert werden sollen dann nach Name (alphabetisch).

Es ist erwähnenswert, dass dieses Verhalten abhängig von der Version von Ansible, die Sie ausführen, variieren wird, da diese Änderungen nur in den Zweig stable-2.2 des Ansible-Repository zusammengeführt wurden.