In meinem Inventar definiere ich Hosts wie folgt:
[server1]
141.151.176.223
Ich suche nach einer Variablen, die den server1
-Namen beibehält, da ich damit den Hostnamen des Servers definiere.
inventory_hostname
ist auf 141.151.176.223
ansible_hostname
eingestellt, und inventory_hostname_short
ist auf 148
eingestellt.
Um dieses Problem zu umgehen, stelle ich meine eigene Variable folgendermaßen ein:
[server1]
141.151.176.223 hostname=server1
aber ich bin mit diesem Ansatz nicht zufrieden.
Irgendwelche Ideen?
Erklärung
Wenn die Inventardatei folgendermaßen definiert wurde:
[server1_group]
server1 ansible_Host=141.151.176.223
Dann können Sie zugreifen:
server1
mit dem inventory_hostname
-Fakt;
141.151.176.223
mit dem ansible_Host
-Fakt;
server1_group
mit group_names|first
(group_names
fact enthält eine Liste aller Gruppen, zu denen der Server gehört, first
wählt das erste Element aus dieser Liste aus).
Unabhängig davon enthält ansible_hostname
fact den Hostnamen, wie er auf dem Host selbst definiert ist (der Wert wird während der Faktenerfassung festgelegt).
Lösung
Sie sollten eine ansible_Host
-Standarddeklaration verwenden, um auf die IP-Adresse des Ziels zu verweisen, und den Hostnamen des Inventars auf den Server festlegen, auf den Sie sich in Ansible-Playbooks beziehen möchten.
Insbesondere können Sie die Gruppendefinition ganz überspringen und nur Folgendes definieren:
server1 ansible_Host=141.151.176.223
Die [server1]
-Deklaration ist der Name einer group , nicht eines Hosts (auch wenn Sie dieser Gruppe nur einen einzelnen Host zuweisen).
Da Ansible es ermöglicht, dass ein Host in mehreren Gruppen platziert wird, können Sie die Namen nur als Array abrufen: http://docs.ansible.com/ansible/latest/playbooks_variables.html#magic-variables-and-how- zu-access-information-about-other-hosts
Ich denke, die von Ihnen gefundene Problemumgehung ist der Weg, es sei denn, Sie können echte Hostnamen anstelle von IP-Adressen verwenden (DNS oder statische Hosts-Datei).