Я новичок в анзибле, но не могу найти ответ на этот вопрос, который, на мой взгляд, выглядит довольно простым ..
В 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
}