我有一本正在AWX上运行的Ansible剧本。播放使用Infoblox nios模块检索有关Infoblox主机注册的信息。
我正在使用set_fact模块获取查询的输出,然后定义一些新的事实,以便在剧本的其他地方使用
。我遇到的问题是,查询可以根据注册的格式返回不同数量的变量,这会破坏剧本。
如果只有在原始查询中返回了特定变量的情况下,我才可以设置新的事实,我想做的就是锻炼。
我尝试使用“如果已定义”,但这似乎不起作用。
在示例1中,播放“获取主机记录”返回以下值。主机,ipv4addr和mac作为主机,在Infoblox中具有Mac地址
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中,同一播放仅返回host和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 Address作为事实主机且不包含host.ipv4addrs [0] .mac的值时才起作用,因此它崩溃了。我想添加一些逻辑,仅在定义host.ipv4addrs [0] .mac时尝试设置niosmac。
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
欢呼 斯彭斯
答案 0 :(得分:0)
对不起,我必须再次输入错误,因为我再次尝试过,它现在似乎可以正常工作。这是用于澄清的正确代码。
- 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 != [] and host.ipv4addrs[0].mac is defined
- name: Set niosip
set_fact:
niosip: "{{ host.ipv4addrs[0].ipv4addr }}"
nioshostname: "{{ host.name }}"
niosdhcp: "{{ host.ipv4addrs[0].configure_for_dhcp }}"
when: host != [] and host.ipv4addrs[0].mac is undefined