0

我的主机有 3 个网络 IP 地址,稍后在我的剧本中需要其中一个。

在我的剧本中,我运行了以下设置模块:

- name: Gather Networks Facts into Variable
  setup:
  register: setup

- name: Debug Set Facts
  debug:
    var: setup.ansible_facts.ansible_ip_addresses

提供以下输出:

{
    "setup.ansible_facts.ansible_ip_addresses": [
        "10.0.2.15", 
        "fe80::85ae:2178:df12:8da0", 
        "192.168.99.63", 
        "fe80::3871:2201:c0ab:6e39", 
        "192.168.0.63", 
        "fe80::79c5:aa03:47ff:bf65", 
        "fd89:8d5f:2227:0:79c5:aa03:47ff:bf65", 
        "2a02:c7f:9420:7100:79c5:aa03:47ff:bf65"
    ]
}

我正在尝试通过使用前三个八位字节或 192.168.0 进行搜索来找到 192.168.0.63。然后,我还想将该值转化为事实,以便稍后在我的剧本中使用它。

使用 Ansible 或 Jinja2 搜索和找到该值的最佳方法是什么?

4

1 回答 1

1

这会吗?

- set_fact:
    my_fact: "{{ (setup.ansible_facts.ansible_ip_addresses | select('match','192.168.0.') | list)[0] }}"

如果有多个匹配模式的值,它将按顺序获取第一个。

于 2017-10-09T09:47:52.740 回答