Ich möchte Ansible zwingen, Fakten über Hosts in Playbook zu sammeln (um diese Daten innerhalb der Rolle zu verwenden) unabhängig --limit, aber weiß nicht wie.Force Ansible zum Sammeln von Fakten aus der Gruppe
Ich habe Textbuch wie folgt aus:
- hosts: postgres_access
tasks:
- name: Gathering info
action: setup
- hosts: postgres
roles:
- postgres
Inside 'postgres' Rolle I Vorlage haben die iteriert über Standard-IP-Adressen:
{% for host in groups['postgres_access'] %}
host all all {{hostvars[host].ansible_default_ipv4.address}}/32 md5
{% endfor %}
Das ist wie Magie funktioniert, aber nur, wenn ich mein Textbuch laufen ohne Limit. Wenn ich --limit verwende, bricht es, weil einige Hosts in der Hostgruppe keine gesammelten Fakten haben.
ansible-playbook -i testing db.yml --limit postgres
fehlgeschlagen: [pgtest] (item = pg_hba.conf) => { "nicht bestanden": true, "item": "pg_hba.conf", "msg": „AnsibleUndefinedVariable: 'dict Objekt' hat kein Attribut 'ansible_default_ipv4' "}
Wie kann ich --limit haben, nur postgres-Host neu zu konfigurieren, und Netzwerkdaten von anderen Hosts haben (ohne alle anderen Konfigurations-Sachen zu machen?).
Haben Sie einen anderen Ansatz wie das Markieren Ihrer Postgres-Aufgaben und die Angabe von '--tags postgres' ausprobiert? Auf diese Weise führen Sie keine Begrenzung durch Inventargruppen, sondern durch spezifische Aufgaben –
ja, ich denke, ich werde Tags verwenden. Es würde immer noch nicht helfen mit "configure single host" case (wie es oft verwendet wird). –
Eine Aufgabe gemacht, um dies zu lösen, habe ich in die 'roles/postgres/tasks/main.yml' Datei geschrieben, aber ich wette, dass der Ort nicht relevant ist, wenn Sie ihn stattdessen aus dem Playbook heraus ausführen. Siehe meine Antwort unten. –