Ich weiß Zugriff auf Ansible Fakten ist well documented, aber ich kann nicht diesen Code zu arbeiten.Kann eine Ansible-Tatsache nicht lesen
# site.yml
---
- name: get fact
hosts: webservers
tasks:
- debug: msg="{{ hostvars['web01.example.com']['ansible_all_ipv4_addresses'] }}"
- fail:
Wenn ich es laufen, bekomme ich diesen Fehler:
fatal: [web01.example.com] => One or more undefined variables: 'dict object' has no attribute 'ansible_all_ipv4_addresses'
Doch wenn ich den Befehl "ansible -i Inventar -m-Setup" laufen, ich sehe das Wörterbuch Schlüssel:
web01.example.com | success >> {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"<ip_address>"
],
(other objects...)
}
}
Das ist mein Inventar-Datei:
# inventory
[webservers]
web01.example.com ansible_host=<ip_address>
Ich habe auch versucht die folgenden hostvars Einstellung, aber ich bekomme den gleichen Fehler:
hostvars['web01.example.com']['ansible_facts']['ansible_all_ipv4_addresses']
Was mache ich falsch hier? Es scheint, als ob das ziemlich einfach sein sollte.
Wenn Sie Ihr Textbuch läuft, ist es tatsächlich eine „Setup“ Aufgabe als erste Aufgabe ausgeführt? '{{hostvars ['web01.example.com'] ['ansible_all_ipv4_addresses']}} sollte funktionieren, also sollte' {{hostvars [inventory_hostname] ['ansible_all_ipv4_addresses']}} '. Auch '{{ansible_all_ipv4_addresses}}' würde funktionieren und da Sie nur einen Host haben ist eigentlich die bevorzugte Lösung. Sie müssen nur mit dem Objekt 'hostvars' arbeiten, wenn Sie auf Fakten anderer Hosts zugreifen müssen. Aber wenn das alles nicht funktioniert, deutet das darauf hin, dass die Tatsache einfach nicht definiert ist, was nur passieren könnte, wenn kein Setup-Modul ausgeführt wird. – udondan