it-swarm.com.de

ALLE Ansible-Variablen für einen Host oder eine Gruppe mit einem Ad-hoc-Befehl auflisten?

Ansible Variablen stammen aus verschiedenen Quellen. Es ist beispielsweise möglich, Host_vars und group_vars bereitzustellen, indem YAML-Dateien in einem Unterordner mit dem Namen Host_vars Und group_vars Des Ordners erstellt werden, der die Inventardatei enthält.

Wie kann ich alle Variablen auflisten Ansible würde über eine Gruppe oder einen Host in einem Spielbuch Bescheid wissen? Hinweis: Ich habe ansible -m debug -e 'var=hostvars' Host Und ansible -m debug -e '- debug: var=hostvars' Ohne Erfolg ausprobiert.

Hinweis: ansible <group|Host> -m setup Ist nicht die richtige Antwort, da nicht enthält alle Variablen, die aus anderen Quellen stammen (es enthält nur { "ansible_facts" : { ... } }. Tatsächlich enthält es nicht einmal Variablen, die von einem dynamischen Inventarskript bereitgestellt werden (über _meta usw.).

Ansible Version: 1.9.1.

26
0xC0000022L

ansible -m debug -a "var=hostvars[inventory_hostname]" scheint zu funktionieren. Gültige Variablenquellen (Host_vars, group_vars, _meta in einem dynamischen Inventar usw.) werden alle berücksichtigt.

Mit dynamischem Inventarskript hosts.sh:

#!/bin/sh
if test "$1" = "--Host"; then
        echo {}
else
        cat <<EOF
{
  "ungrouped": [ "x.example.com", "y.example.com" ],
  "group1": [ "a.example.com" ],
  "group2": [ "b.example.com" ],
  "groups": {
    "children": [ "group1", "group2" ],
    "vars": { "ansible_ssh_user": "user" }
  },
  "_meta": {
    "hostvars": {
      "a.example.com": { "ansible_ssh_Host": "10.0.0.1" },
      "b.example.com": { "ansible_ssh_Host": "10.0.0.2" }
    }
  }
}
EOF
fi

Du kannst bekommen:

$ chmod +x hosts.sh
$ ansible -i hosts.sh a.example.com -m debug -a "var=hostvars[inventory_hostname]"
a.example.com | success >> {
    "var": {
        "hostvars": {
            "ansible_ssh_Host": "10.0.0.1", 
            "ansible_ssh_user": "user", 
            "group_names": [
                "group1", 
                "groups"
            ], 
            "groups": {
                "all": [
                    "x.example.com", 
                    "y.example.com", 
                    "a.example.com", 
                    "b.example.com"
                ], 
                "group1": [
                    "a.example.com"
                ], 
                "group2": [
                    "b.example.com"
                ], 
                "groups": [
                    "a.example.com", 
                    "b.example.com"
                ], 
                "ungrouped": [
                    "x.example.com", 
                    "y.example.com"
                ]
            }, 
            "inventory_hostname": "a.example.com", 
            "inventory_hostname_short": "a"
        }
    }
}
29
yaegashi

Zu Ihrer Information: This github project zeigt Ihnen, wie Sie 90% der Variablen auf allen Hosts auflisten. Ich finde es global nützlicher als einzelne Host-Befehle. Das README enthält Anweisungen zum Erstellen eines einfachen Inventarberichts. Noch wertvoller ist es, diesen am Ende eines Playbooks auszuführen, um alle Fakten anzuzeigen. Um auch das Verhalten von Aufgaben zu debuggen, verwenden Sie register:

2
Larry Fast

Wenn Sie der wirklich guten Antwort oben einen kleinen Tipp hinzufügen, können Sie dies programmgesteuert tun

Verwenden Sie die vorhandene Antwort für hostvars:

ansible -m debug myhost -a "var=hostvars[inventory_hostname].ansible_version"

Aber ansible_facts ist leer, weil debug das Modul setup nicht ausführt. Sie müssen also etwas Besonderes wie jq ausprobieren, nachdem Sie die Ausgabe gekürzt haben, damit sie gültig ist.

ansible -m setup myhost | sed 's#.*SUCCESS =>##' | jq .ansible_facts.ansible_all_ipv4_addresses

Ich dachte, die Leute könnten dies nützlich finden, wenn sie die riesige Textwand untersuchen, die in ansiblen Fakten zurückkommt, wenn Sie nur eine Sache wie jq .ansible_facts.ansible_devices.vda.size Wollen.

2
KCD