У меня Ansible playbook, который я запускаю из AWX. Воспроизведение использует модуль Infoblox nios для получения информации о регистрациях хостов Infoblox.
Я использую модуль set_fact для получения результата запроса, а затем определяю ряд новых фактов, которые можно использовать в других местах книги.
Проблема, с которой я столкнулся, заключается в том, что запрос может возвращать различное количество переменных в зависимости от формата регистрации, и это нарушает playbook.
То, что я пытаюсь сделать, - это тренировка, если я могу установить новый факт, только если конкретная переменная возвращается в исходном запросе.
Я пытался использовать «если определено», но, похоже, это не сработало.
В примере 1 пьеса «Получить запись хоста» возвращает следующие значения. host, ipv4addr и mac, поскольку у хоста есть Mac-адрес в Infoblox
ok: [localhost] => {
"ansible_facts": {
"host": {
"ipv4addrs": [
{
"host": "myhost1.test.com",
"ipv4addr": "192.168.30.1",
"mac": "00:22:33:11:44:55"
}
],
"name": "myhost1.test.com",
"view": "Internal"
}
},
"changed": false
}
В примере 2 та же игра возвращает только хост и ipv4addr, поскольку хост не имеет зарегистрированного Mac-адреса.
ok: [localhost] => {
"ansible_facts": {
"host": {
"ipv4addrs": [
{
"host": "myhost2.test.com",
"ipv4addr": "192.168.30.2"
}
],
"name": "myhost2.test.com",
"view": "Internal"
}
},
"changed": false
}
Моя книга воспроизведения содержит следующее и работает только в том случае, если хост содержит Mac-адрес в качестве фактического хоста, не содержит значения для host.ipv4addrs [0] .mac, поэтому он вылетает. Я хотел бы добавить логику, чтобы попытаться установить niosmac, только если определен host.ipv4addrs [0] .mac.
tasks:
- name: fetch host record
set_fact:
host: "{{ lookup('nios', 'record:host', filter={niossearchcatagory: searchcriteria, 'view': 'Internal'}, provider=nios_provider) }}"
- name: Set niosip
set_fact:
niosip: "{{ host.ipv4addrs[0].ipv4addr }}"
nioshostname: "{{ host.name }}"
niosdhcp: "{{ host.ipv4addrs[0].configure_for_dhcp }}"
niosmac: "{{ host.ipv4addrs[0].mac }}"
Вот версия, которую я пытался использовать, определена
tasks:
- name: fetch host record
set_fact:
host: "{{ lookup('nios', 'record:host', filter={niossearchcatagory: searchcriteria, 'view': 'Internal'}, provider=nios_provider) }}"
- name: Set niosip
set_fact:
niosip: "{{ host.ipv4addrs[0].ipv4addr }}"
nioshostname: "{{ host.name }}"
niosdhcp: "{{ host.ipv4addrs[0].configure_for_dhcp }}"
niosmac: "{{ host.ipv4addrs[0].mac }}"
when: host.ipv4addrs[0].mac is defined
Приветствие
Спенс