0

我有一个从 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 中,相同的播放仅返回主机和 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 的值,因此它崩溃了。如果定义了 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

干杯斯宾塞

4

1 回答 1

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
于 2019-06-20T21:50:08.893 回答