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')]]}