Назад | Перейти на главную страницу

Использование более продвинутых фильтров с модулем настройки ansible

Я новичок в анзибле, но не могу найти ответ на этот вопрос, который, на мой взгляд, выглядит довольно простым ..

В playbooks вы можете получить факты в анзибле на примере {{ ansible_eth0["ipv4"]["address"] }} или {{ ansible_eth0.ipv4.address }}.

Как я могу получить ту же информацию, что и информационная команда, используя что-то вроде ansible all -m setup -a "filter=???"

Так как filter, Я пробовал как синтаксисы, которые вы хотите использовать в учебниках, так и несколько более экзотических с комбинацией *.

Это вообще правильный способ сбора таких данных?

К сожалению, это не поддерживается. Из онлайн-документация:

Параметр фильтра фильтрует только подраздел первого уровня ниже ansible_facts.

Как ansible_interface fact - это подраздел первого уровня в структуре документа JSON, минимум, к которому вы можете получить доступ, выглядит примерно так:

# ansible localhost -m setup -a 'filter=ansible_p5p1'
localhost | success >> {
    "ansible_facts": {
        "ansible_p5p1": {
            "active": true,
            "device": "p5p1",
            "ipv4": {
                "address": "10.0.0.2",
                "netmask": "255.255.255.0",
                "network": "10.0.0.0"
            },
            "ipv6": [
                {
                    "address": "fd6c:xxxx:xxxx::2",
                    "prefix": "64",
                    "scope": "global"
                },
                {
                    "address": "fe80::xxxx:xxxx:xxxx:5a56",
                    "prefix": "64",
                    "scope": "link"
                }
           ],
            "macaddress": "xx:xx:xx:xx:xx:xx",
            "module": "foo",
            "mtu": 1500,
            "promisc": false,
            "type": "ether"
        }
    },
    "changed": false
}

Если в ваших системах facter или ohai установлен, вы можете получить доступ к той же информации из ansible:

# ansible localhost -m setup -a 'filter=facter_ipaddress_p5p1'
localhost | success >> {
    "ansible_facts": {
        "facter_ipaddress_p5p1": "10.0.0.2"
    },
    "changed": false
}