播放返回多个值时是否可以设置/查找Ansible事实

时间:2019-06-21 10:58:25

标签: ansible yaml ansible-facts ansible-awx

我在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等不存在。我认为这是因为存在多个倍数。

我们将非常感谢您提供有关输出每个注册的任何帮助。

0 个答案:

没有答案