Ich versuche, Ansible zu verwenden, um Einträge in die Server-Hosts-Datei hinzuzufügen. Ich habe eine Gruppe von Servern, die ich über ein privates LAN miteinander kommunizieren muss.
Meine Inventardatei:
[server_list]
server1
server2
Die Aufgabe, die ich versuche zu arbeiten:
- lineinfile: dest=/etc/hosts line="{{ hostvars[" {{ item }} "]['ansible_eth1']['ipv4']['address'] }} {{ hostvars[" {{ item }} "]['ansible_hostname'] }}"
with_items: groups['server_list']
Es macht nicht den Trick, ich verstehe das:
fatal: [server1] => host not found: {{item}}
fatal: [server2] => host not found: {{item}}
Dies ist im Grunde das gleiche wie das , aber in der neuen ansible variablen Zugriffsformat {{ }}
.
Irgendwelche Ideen, wie man das macht?
Hatte das gleiche Problem, wollte ich die Liste der Hosts in einer Gruppe durchgehen und dann Firewall-Regeln mit ihren IPs hinzufügen. Ich habe mir ein bisschen angesehen, wie hostvars [item] strukturiert ist, und den anderen Namen verwendet, um auf diesen Wert zuzugreifen. Das hat bei mir funktioniert:
quelle
Ihre Syntax ist nur geringfügig falsch. Versuchen Sie es
groups.server_list
als Ihrewith_items list
.Ich verwende host_vars nicht so wie Sie. Lassen Sie mich wissen, wenn bei diesem Teil Ihres Playbooks ein Parserfehler auftritt.
Im Folgenden sollte jedoch anstelle von {{item}} ein Hostname eingefügt werden.
quelle
groups['server_list']
ist korrekt erweitert. Ich denke, das Problem ist die Verschachtelung. {{}}item
in {{}} für Hostvars.Wenn Sie sowohl ein Präfix als auch ein Suffix hinzufügen und alles zu einer Liste machen müssen, sehen Sie sich Folgendes an:
Es nimmt die Liste aller Maschinen in der Gruppe etcd, extrahiert die IPv4, fügt vorne ein 'https: //' und am Ende ein ': 2379' hinzu. Schließlich wird alles in eine Liste umgewandelt.
quelle