在centos7中,我试图定义一个远程主机,其中IP是后端或前端IP 然后我订购了IPADDR过滤器并且存在一些障碍。
例如,
# {{ ansible_all_ipv4.addresses | ipaddr('192.168.0.0/22') }}
['192.168.1.2', '192.168.2.2']
# {{ ansible_all_ipv4.addresses | ipaddr('192.168.1.0/24') }}
['192.168.1.2']
就我而言,由于在VM中有两个不同的IP,如192.168.56.101和172.16.1.10,我想通过变量预先定义网络和前缀来获取192.168.56.101。然后我设置:
[defaults/main.yml]
backend:
network: 192.168.56.0
prefix: 24
[tasks/main.yml]
- debug: var="{{item}}"
with_items:
- "ansible_all_ipv4_addresses|ipaddr('''{{backend.network}}/{{backend.prefix}}''')"
result:
TASK [test : debug] ************************************************************
ok: [localhost] => (item=ansible_all_ipv4_addresses|ipaddr('''192.168.56.0/24''')) => {
"ansible_all_ipv4_addresses|ipaddr('''192.168.56.0/24''')": [
"192.168.56.101" <------ THAT IS WHAT I WANT
],
"changed": false,
"item": "ansible_all_ipv4_addresses|ipaddr('''192.168.56.0/24''')"
然后我尝试设置事实并导出结果,这不是我想要的。
- name: define backend ip
set_fact: backendIP="{{ item }}"
with_items:
- "ansible_all_ipv4_addresses|ipaddr('''{{network}}/{{prefix}}''')"
- debug: var=backendIP
result:
TASK [test : define backend ip] ***********************************************************
ok: [localhost] => (item=ansible_all_ipv4_addresses|ipaddr('''192.168.56.0/24'''))
TASK [test : debug] ************************************************************
ok: [localhost] => {
"backendIP": "ansible_all_ipv4_addresses|ipaddr('''192.168.56.0/24''')"
那么如何通过这种情况设置变量
答案 0 :(得分:1)
由于您需要单个结果,因此不需要任何循环。
这就是你想要的(如果你确定你的过滤器匹配一个地址):
set_fact:
backend: "{{ ansible_all_ipv4_addresses|ipaddr(backend.network + '/' + backend.prefix|string) }}"