loops - 在 Ansible 中组合多个循环的输出
问题描述
我正在使用 Ansible,在我的剧本中我正在运行以下任务,其中我有多个循环以便从特定的 xml 中检索不同的标签:
- name: Retrieve multiple xml tags valuei
xml:
xmlstring: "{{ item.string }}"
xpath: "{{ item.path }}"
content: text
loop:
- { path: "/rpc-reply/vlan-instance-information/vlan-instance-group/vlan-member/vlan-tag", string: "{{topology.xml}}" }
- { path: "/rpc-reply/vlan-instance-information/vlan-instance-group/vlan-member/vlan-member-interface", string: "{{topology.xml}}" }
register: tags_value
- debug:
msg: "{{ item.matches }}"
loop: "{{ tags_value.results }}"
loop_control:
label: "{{ item.matches }}"
所以我得到以下信息:
ok: [sss-sd1-02] => (item=[{u'vlan-member-interface': u'et-0/0/0.0*'}, {u'vlan-member-interface': u'et-0/0/1.0*'}]) => {
"msg": [
{
"vlan-member-interface": "et-0/0/0.0*"
},
{
"vlan-member-interface": "et-0/0/1.0*"
}
]
}
和这个
ok: [sss-sd1-02] => (item=[{u'vlan-tag': u'4071'}, {u'vlan-tag': u'4072'}]) => {
"msg": [
{
"vlan-tag": "4071"
},
{
"vlan-tag": "4072"
}
]
}
有没有办法将 "vlan-member-interface": "et-0/0/0.0*" 和 "vlan-tag": "4071" 分组到 1 个结果中,无论是在这个任务中还是在另一个结果中?还有一种方法可以创建一个只有 {4071, 4072} 的列表吗?因为我现在无法处理它!
解决方案
这个问题可以简化。让我们有数据
results:
- [A: a1, A: a2]
- [B: b1, B: b2]
Q1:“组“A:a1”和“B:b1”在1个结果中”
- 答:使用zip
功能。例如
- set_fact:
my_groups: "{{ results.0|zip(results.1)|list }}"
- debug:
var: my_groups
给
"my_groups": [
[
{
"A": "a1"
},
{
"B": "b1"
}
],
[
{
"A": "a2"
},
{
"B": "b2"
}
]
]
}
Q2:“创建一个只有 [b1, b2] 的列表”
- 答:用途dict2items
和json_query
功能。例如
- set_fact:
my_values: "{{ results.1|map('dict2items')|list|json_query('[].value') }}"
- debug:
var: my_values
给
"my_values": [
"b1",
"b2"
]
问题 1 是替换: Group "vlan-member-interface": "et-0/0/0.0*" and "vlan-tag": "4071" in 1 result
问题 2 是替换:创建一个只有 { 4071, 4072}
变量结果是tags_value.results的替换
推荐阅读
- c - MPI 检查通讯器是否为 MPI_COMM_WORLD
- oracle - 是否有 Oracle XE 数据库的官方 Docker 映像?
- ios - 如何在诗丽吉中使用 TouchID
- sql-server - T-SQL UDF 聚合函数
- html - 文本是多行时如何消除多余的空间
- javascript - react redux reducer中缺少数组
- php - 将任何base64文件转换为文件并移动到php / Symfony 4中的目标路径
- jekyll - 设置 url 后服务器地址更改
- reactjs - Reactjs - Webpack 构建错误:错误:插件/预设文件不允许导出对象,只有函数
- sql-server-2008 - 将表格结果转换为 JSON 格式