Elencare TUTTE le variabili Ansible per un host o un gruppo con un comando ad hoc?


25

Le variabili sensibili provengono da una varietà di fonti. È ad esempio possibile fornire host_vars e group_vars creando file YAML in una sottocartella denominata host_varse group_varsrispettivamente della cartella contenente il file di inventario.

Come posso elencare tutte le variabili che Ansible avrebbe saputo di un gruppo o di un host all'interno di un playbook? Nota: ho provato ansible -m debug -e 'var=hostvars' hoste ansible -m debug -e '- debug: var=hostvars'inutilmente.

Suggerimento: nonansible <group|host> -m setup è la risposta corretta in quanto non include tutte le variabili che provengono da altre fonti (contiene solo . In realtà non include nemmeno le variabili fornite da uno script di inventario dinamico (via e così via).{ "ansible_facts" : { ... } }_meta

Versione di risposta: 1.9.1.

Risposte:


26

ansible -m debug -a "var=hostvars[inventory_hostname]"sembra funzionare. Fonti variabili validi ( host_vars, group_vars, _metain un inventario dinamico, etc.) sono tutte prese in considerazione.

Con script di inventario dinamico 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

Puoi prendere:

$ 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"
        }
    }
}

Con ansible 2.0.2, questo non sembra funzionare più. L'output èlocalhost | SUCCESS => { "hostvars": "<ansible.vars.hostvars.HostVars object at 0x7f320943da10>" }
Zulakis,

Modifica suggerita da usare "var=hostvars[inventory_hostname]"su ansible> 2.0
stuart-warren

Per 1.9.4 non restituisce il materiale restituito daansible my.hostname.example.com -m setup -i ../my/inventory/hosts.example -u root
Akostadinov l'

1
Questo ha funzionato per meansible host-name -m debug -a "var=[var_name]" -i inventory/testing/hosts
Montaro il

2

Cordiali saluti: Questo progetto github mostra come elencare il 90% delle variabili in tutti gli host. Lo trovo più utile a livello globale rispetto ai singoli comandi host. Il file README include istruzioni per la creazione di un semplice report di inventario. È ancora più prezioso eseguirlo alla fine di un playbook per vedere tutti i fatti. Per eseguire anche il debug del comportamento dell'attività, utilizzare register:


2

Aggiungendo un piccolo suggerimento alla risposta davvero buona sopra, se vuoi curiosare a livello di programmazione puoi

Usa la risposta esistente per hostvars :

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

Ma ansible_facts è vuoto perché debugnon esegue il setupmodulo. Quindi devi provare qualcosa in più come jqdopo aver tagliato l'output per renderlo valido.

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

Pensavo che le persone potessero trovarlo utile quando studiavano il gigantesco muro di testo che ritorna in fatti concreti quando vuoi solo una cosa come jq .ansible_facts.ansible_devices.vda.size

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.