0

我在 AWX 中有以下剧本,它根据 Mac 地址查找 Infoblox 主机,然后以更用户友好的格式输出信息。

当前剧本的工作前提是存在具有该 Mac 地址的单个主机,但如果存在多个则失败。

---
- hosts: localhost
  connection: local

  vars:
    niosip: ""
    niosmac: ""
    niosdhcp: ""
    nioshostname: ""
    niossearchcatagory: "{{ 'name' if searchcatagory == 'Hostname' else 'ipv4addr' if searchcatagory == 'IP Address' else 'mac' if searchcatagory == 'Mac Address'}}"

  pre_tasks:
    - include_vars: 
        file: creds.yml

  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 != [] 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

    - name: Host not found
      debug:
        msg: 'Cant find related host'
      when: host == []

    - name: Display Display Registration Info
      debug:
        msg:
        - Hostname = {{ nioshostname }}
        - IP = {{ niosip }}
        - Mac Address {{ niosmac }}
        - Registered for DHCP = {{ niosdhcp }}
      when: host != [] and host.ipv4addrs[0].mac is defined

变量 niossearchcatagory 和 searchcriteria 通过 AWX 调查传递到剧本中。

我已经搜索了使用循环或拆分输出的可能选项,但我真的不知道处理这个的最佳方法。

如果输出与此匹配,则剧本按预期工作

{
    "changed": false,
    "ansible_facts": {
        "host": [
            {
                "_ref": "record:host/ZG5zLmhvc3QkLl9kZWZhdWx0LnVrLmFjLmJoYW0udGVzdC5zbmF0LWF3eHRlc3Q1:snat-awxtest5.test.com/Internal",
                "ipv4addrs": [
                    {
                        "_ref": "record:host_ipv4addr/ZG5zLmhvc3RfYWRkcmVzcyQuX2RlZmF1bHQudWsuYWMuYmhhbS50ZXN0LnNuYXQtYXd4dGVzdDUuMTQ3LjE4OC4zMS40Lg:192.168.31.4/snat-awxtest5.test.com/Internal",
                        "configure_for_dhcp": false,
                        "host": "snat-awxtest5.test.com",
                        "ipv4addr": "192.168.31.4",
                        "mac": "10:20:30:40:50:60"
                    }
                ],
                "name": "snat-awxtest5.test.com",
                "view": "Internal"
            },
        ]
    },
    "_ansible_no_log": false
}

这是一个返回多个值的例子

{
    "changed": false,
    "ansible_facts": {
        "host": [
            {
                "_ref": "record:host/ZG5zLmhvc3QkLl9kZWZhdWx0LnVrLmFjLmJoYW0udGVzdC5zbmF0LWF3eHRlc3Q1:snat-awxtest5.test.com/Internal",
                "ipv4addrs": [
                    {
                        "_ref": "record:host_ipv4addr/ZG5zLmhvc3RfYWRkcmVzcyQuX2RlZmF1bHQudWsuYWMuYmhhbS50ZXN0LnNuYXQtYXd4dGVzdDUuMTQ3LjE4OC4zMS40Lg:192.168.31.4/snat-awxtest5.test.com/Internal",
                        "configure_for_dhcp": false,
                        "host": "snat-awxtest5.test.com",
                        "ipv4addr": "192.168.31.4",
                        "mac": "10:20:30:40:50:60"
                    }
                ],
                "name": "snat-awxtest5.test.com",
                "view": "Internal"
            },
            {
                "_ref": "record:host/ZG5zLmhvc3QkLl9kZWZhdWx0LnVrLmFjLmJoYW0udGVzdC5zbmF0LW15d2Vi:snat-myweb.test.com/Internal",
                "ipv4addrs": [
                    {
                        "_ref": "record:host_ipv4addr/ZG5zLmhvc3RfYWRkcmVzcyQuX2RlZmF1bHQudWsuYWMuYmhhbS50ZXN0LnNuYXQtbXl3ZWIuMTQ3LjE4OC4zMS4yLg:192.168.31.2/snat-myweb.test.com/Internal",
                        "configure_for_dhcp": false,
                        "host": "snat-myweb.test.com",
                        "ipv4addr": "192.168.31.2",
                        "mac": "10:20:30:40:50:60"
                    }
                ],
                "name": "snat-myweb.test.com",
                "view": "Internal"
            },
            {
                "_ref": "record:host/ZG5zLmhvc3QkLl9kZWZhdWx0LnVrLmFjLmJoYW0udGVzdC5zbmF0LXdlYg:snat-web.test.com/Internal",
                "ipv4addrs": [
                    {
                        "_ref": "record:host_ipv4addr/ZG5zLmhvc3RfYWRkcmVzcyQuX2RlZmF1bHQudWsuYWMuYmhhbS50ZXN0LnNuYXQtd2ViLjE0Ny4xODguMzEuMy4:192.168.31.3/snat-web.test.com/Internal",
                        "configure_for_dhcp": false,
                        "host": "snat-web.test.com",
                        "ipv4addr": "192.168.31.3",
                        "mac": "10:20:30:40:50:60"
                    }
                ],
                "name": "snat-web.test.com",
                "view": "Internal"
            }
        ]
    },
    "_ansible_no_log": false
}

这会导致错误,因为变量 host.name、host.ipv4addrs 等不存在,我认为这是因为有多个变量。

我们将不胜感激地收到有关如何输出每个注册的任何帮助。

4

0 回答 0