loops - Ansible:强化列表以填充字典
问题描述
remote_address_phase2:
- 192.168.88.0/24
- 192.168.1.0/24
任务:
i have to create a firewall group
- name: "addrgrp"
fortios_firewall_addrgrp:
vdom: "{{ vdom }}"
state: "present"
firewall_addrgrp:
allow_routing: "disable"
#category: "default"
color: "21"
comment: "try"
exclude: "disable"
fabric_object: "disable"
member:
- name: "NET-{{ item}}"
name: "try"
type: "default"
with_items: "{{ remote_address_phase2 }}"
如果我进行此活动,我有 2 个不同的任务,但最后一个操作会覆盖第一个
任何想法?
解决方案
按照模块文档中的示例,该参数似乎member:
采用了一个字典列表。
模块文档中的示例:
member:
-
name: "default_name_7 (source firewall.address.name firewall.addrgrp.name)"
还没有测试过,但是我们可以在"addrgrp"
任务之前创建一个类似的结构set_fact
并使用新创建的变量。
- set_fact:
fw_members: "{{ fw_members | default([]) + [{'name': 'NET-' ~ item}] }}"
loop: "{{ remote_address_phase2 }}"
这给出了:
"fw_members": [
{
"name": "NET-192.168.88.0/24"
},
{
"name": "NET-192.168.1.0/24"
}
]
然后应该可以将此变量作为值传递给member:
参数。例子:
- set_fact:
fw_members: "{{ fw_members | default([]) + [{'name': 'NET-' ~ item}] }}"
loop: "{{ remote_address_phase2 }}"
- name: "addrgrp"
fortios_firewall_addrgrp:
vdom: "{{ vdom }}"
state: "present"
firewall_addrgrp:
allow_routing: "disable"
#category: "default"
color: "21"
comment: "try"
exclude: "disable"
fabric_object: "disable"
member: "{{ fw_members }}"
name: "try"
type: "default"
推荐阅读
- javascript - 在另一个函数中使用一个函数的事件处理程序中声明的变量
- ibm-mq - 文件夹 usr 进入消息正文
- python - 使用 Pandas 数据框查找不同小数位的值
- c# - 如何在我想要的 ASP.NET Core 2.0 中获取 DbContext 的实例?
- ruby - 为在 AWS Lambda 中运行的 Webscraping 优化 Ruby 代码
- angularjs - 在指令 angularJS 中调用自定义服务
- c++ - 这个表达式是左值还是右值?
- android - 反应本机提示用户从 App Store 下载应用程序
- android - 如何通过 AlarmManager 正确使用警报
- unity3d - Unity 测试广告突然停止在构建中运行,但在编辑器中运行没有任何错误