Перерахувати ВСІ відповідні змінні для хоста або групи з спеціальною командою?


25

Відповідні змінні походять з різних джерел. Наприклад, можна надати host_vars та group_vars, створивши YAML-файли у підпапці з назвою host_varsта group_varsвідповідно в папці, що містить файл інвентаря.

Як я можу перерахувати всі змінні, які Ansible знав би про групу чи хоста всередині ігрової книги? Примітка: Я намагався ansible -m debug -e 'var=hostvars' hostі ansible -m debug -e '- debug: var=hostvars'безрезультатно.

Підказка: ansible <group|host> -m setupце НЕ правильну відповідь , оскільки воно НЕ включає в себе всі змінні , які надходять з інших джерел (він містить тільки { "ansible_facts" : { ... } }Насправді це навіть не включає змінні , передбачений сценарій динамічної інвентаризації (через. _metaІ так далі).

Відповідна версія: 1.9.1.

Відповіді:


26

ansible -m debug -a "var=hostvars[inventory_hostname]"здається, працює. Допустимі змінні джерела ( host_vars, group_vars, _metaв динамічної інвентаризації і т.д.) беруться до уваги.

З динамічним сценарієм інвентаризації 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

Ти можеш отримати:

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

З ansible 2.0.2це, здається, більше не працює. Вихідlocalhost | SUCCESS => { "hostvars": "<ansible.vars.hostvars.HostVars object at 0x7f320943da10>" }
Zulakis

Рекомендовано редагувати для використання "var=hostvars[inventory_hostname]"в ansible> 2.0
stuart-warren

Для 1.9.4 він не повертає речі, поверненіansible my.hostname.example.com -m setup -i ../my/inventory/hosts.example -u root
akostadinov

1
Це працювало для менеansible host-name -m debug -a "var=[var_name]" -i inventory/testing/hosts
Монтаро

2

FYI: Цей проект github показує, як перелічити 90% змінних для всіх хостів. Я вважаю це більш корисним у всьому світі, ніж окремі хост-команди. README містить інструкції зі складання простого звіту про інвентаризацію. Ще цінніше запустити це в кінці книги, щоб побачити всі факти. Щоб також налагодити реєстр поведінки задач, використовуйте:


2

Додавши невелику підказку до дійсно гарної відповіді вище, якщо ви хочете програматично кинутись, ви можете

Використовуйте існуючу відповідь для хостварів :

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

Але ansible_facts порожній, оскільки debugне запускає setupмодуль. Тому вам потрібно спробувати щось додаткове, наприклад, jqпісля обрізки виводу, щоб зробити його дійсним json.

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

Я думав, що люди можуть вважати це корисним при дослідженні гігантської стінки тексту, яка повертається у відповідні факти, коли потрібно лише одне, як jq .ansible_facts.ansible_devices.vda.size

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.