我的主机有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搜索和查找该值的最佳方法是什么?
答案 0 :(得分:1)
这会吗?
- set_fact:
my_fact: "{{ (setup.ansible_facts.ansible_ip_addresses | select('match','192.168.0.') | list)[0] }}"
如果有多个值匹配模式,它将按顺序获得第一个。