ansible - ansible - 将字符串附加到存储在变量中的每个列表项
问题描述
开发者社区您好!
我目前正在开发一些 Ansible 剧本来管理 Citrix NetScaler 配置,并希望获得以下方面的帮助。我在 YAML 文件中定义了以下数据结构:
prefix_header: "foo"
prefix_trailer: "bar"
nsapp_cs_vserver:
- name: "testwebvserver-4_SSL_443"
policybindings:
- policyname: "TO_testwebservice-3"
priority: "100"
- policyname: "To-be-deleted"
priority: "110"
我正在尝试找到一种简单的方法将“policybindings”列表变量的内容动态转换为以下格式:(我想将标题和尾部前缀附加到“policyname”的实际值)
policybindings:
- policyname: "foo_TO_testwebservice-3_bar"
priority: "100"
- policyname: "foo_To-be-deleted_bar"
priority: "110"
我想使用带有标题和尾部前缀的策略名称来调用netscaler_cs_vserver Ansible 模块来配置内容切换。
- name: "Bind CS policy(ies) to CS vServer(s) on ACTIVE node"
netscaler_cs_vserver:
name: "{{ prefix_header }}{{ item.name }}{{ prefix_trailer}}"
policybindings: "{{ item.policybindings }}"
register: bind_nsapp_cs_policy_result
loop: "{{ nsapp_cs_vserver }}"
有人可以建议实现这一目标的正确有效方法是什么吗?
提前谢谢了!
解决方案
可以循环include_tasks
处理嵌套列表。例如文件
shell> cat convert-list.yml
- set_fact:
policybindings: []
- set_fact:
policybindings: "{{ policybindings +
[item|combine({'policyname':
item.policyname|
regex_replace( myregex, myreplace)})] }}"
loop: "{{ outer_item.policybindings }}"
vars:
myregex: '^(.*)$'
myreplace: "{{ prefix_header ~ '_\\1_' ~ prefix_trailer }}"
- set_fact:
nsapp_cs_vserver2: "{{ nsapp_cs_vserver2|default([]) +
[outer_item|combine({'policybindings': policybindings})] }}"
包含在“外循环”任务中
- include_tasks: convert-list.yml
loop: "{{ nsapp_cs_vserver }}"
loop_control:
loop_var: outer_item
- debug:
var: nsapp_cs_vserver2
给
"nsapp_cs_vserver2": [
{
"name": "testwebvserver-4_SSL_443",
"policybindings": [
{
"policyname": "foo_TO_testwebservice-3_bar",
"priority": "100"
},
{
"policyname": "foo_To-be-deleted_bar",
"priority": "110"
}
]
}
]
推荐阅读
- javascript - 在 Javascript 网站上过滤熊猫数据框
- sql - SQL 填充第二个表中的值
- python - 比较超出递归深度
- speech - 加快/减慢英语口语(非音乐)录音的最佳方法
- flutter - Flutter 中的 fontSize 和 textScaleFactor 有什么区别?
- c# - 将代码从 C# windows 窗体更改为类
- java - 使用 JUnit 调用 Activity 构造函数没有引发运行时异常?
- c# - 递归遍历对象的属性会引发 StackOverflowException
- .net - vb.net 创建一个对象的引用
- android - 如何构建自己的自定义 android ROM?