Ansible 在设置事实后创建新列表
我有一本这样的剧本Ansible 在设置事实后创建新列表,ansible,Ansible,我有一本这样的剧本 --- - hosts: localhost gather_facts: false connection: local vars: addresses: ['10.10.10.0/28', '10.11.11.0/28'] list_address: [] tasks: - name: set empty list for cidr set_fact:
---
- hosts: localhost
gather_facts: false
connection: local
vars:
addresses: ['10.10.10.0/28', '10.11.11.0/28']
list_address: []
tasks:
- name: set empty list for cidr
set_fact:
ips_and_masks: []
- name: set up address fact
set_fact:
address: "{{ item.split('/')[0] }} {{ item | ipaddr('netmask') }}"
loop: "{{ item.addresses }}"
- name: create new list
set_fact:
list_address: "{{ list_address + [address] }}"
- name: debug new list
debug:
msg: "Addresses: {{ list_address }}"
我正在努力使输出正确
"Address": [
"10.10.10.0 255.255.255.240",
"10.11.11.0 255.255.255.240"
]
但是循环的第二次迭代覆盖了第一次迭代,所以我以
"Address": [
"10.11.11.0 255.255.255.240"
]
有没有办法附加它而不是覆盖它?您根本不需要
地址事实。将您的任务更改为:
- name: set up address fact
set_fact:
list_address: "{{ (list_address | default([])) + [ (item.split('/')[0]) + (item | ipaddr('netmask')) ] }}"
loop: "{{ addresses }}"
然后,您可以删除createnewlist
任务
您还可以删除list\u-address
var声明,因为它已在set\u-fact
中初始化(正如@Zeitounator在评论中所说)a定义空var的必要性:使用默认值:address:{{address}默认([])+[(item.split[0])+(item{ipaddr('netmask')]]}