Die ansible Best Practices Dokumentation recommends auf Vorräte trennen:Wie teilen Sie Group_vars zwischen verschiedenen Inventaren in Ansible?
inventories/ production/ hosts.ini # inventory file for production servers group_vars/ group1 # here we assign variables to particular groups group2 # "" host_vars/ hostname1 # if systems need specific variables, put them here hostname2 # "" staging/ hosts.ini # inventory file for staging environment group_vars/ group1 # here we assign variables to particular groups group2 # "" host_vars/ stagehost1 # if systems need specific variables, put them here stagehost2 # ""
Meine Inszenierung und Produktionsumgebungen sind in der gleichen Art und Weise strukturiert. Ich habe in beiden Umgebungen die gleichen Gruppen. Und es stellt sich heraus, dass ich auch die gleichen group_vars für die gleichen Gruppen habe. Das bedeutet Redundanz, die ich gerne auslöschen möchte.
Gibt es eine Möglichkeit, einige group_vars zwischen verschiedenen Inventaren zu teilen?
Als Work-Around habe ich begonnen, shared group_vars in die Rollen zu setzen.
my_var:
my_group:
- { var1: 1, var2: 2 }
Dies macht es möglich, einige Vars iterieren durch die Gruppen von einem Host mit dem definierten var sich schneid:
with_items: "{{group_names | intersect(my_var.keys())}}"
Aber das ist ein bisschen kompliziert zu verstehen, und ich denke, Rollen nicht wissen sollten irgendetwas über Gruppen.
Ich möchte die meisten Inventare trennen, teile aber einige der group_vars auf eine leicht verständliche Weise. Ist es möglich, globale group_vars mit inventarspezifischen group_vars zusammenzuführen?
Aber das funktioniert nur für Playbooks. Ad-hoc-Befehle schlagen fehl. Gibt es eine Möglichkeit, die Ad-hoc-Befehlsausführung so anzupassen, dass globale group_vars gelesen werden? – ceving
Ein anderes Problem scheint zu sein, dass ich 'hash_behaviour = merge' einstellen muss, wenn ich eine Variable aus verschiedenen Gruppen sammeln möchte. Und wie wäre es mit Array-Werten in Hashes? – ceving
Dies funktioniert nicht mit Ad-hoc. Listen können nicht automatisch zusammengeführt werden, Sie müssen dafür einige manuelle Aufgaben verwenden. –