gpt4 book ai didi

dictionary - ansible 扁平化 map 过滤结果

转载 作者:行者123 更新时间:2023-12-02 17:19:41 25 4
gpt4 key购买 nike

我正在使用 Ansible 的 map 过滤器来提取数据,但输出是一个列表列表;我需要的是一个扁平的列表。我最接近的是下面的“energy.yml”剧本。调用为

ansible-playbook ./energy.yml --extra-vars='src=solar'

---
- hosts: localhost
vars:
region: [ 'east', 'west' ]
sources:
wind:
east:
filenames:
- noreaster.txt
- gusts.txt
- drafty.txt
west:
filenames:
- zephyr.txt
- jetstream.txt
solar:
east:
filenames:
- sunny.txt
- cloudy.txt
west:
filenames:
- blazing.txt
- frybaby.txt
- skynuke.txt
src: wind
tasks:
- name: Do the {{ src }} data
debug:
msg: "tweak file '/energy/{{src}}/{{ item[0] }}/{{ item[1] }}'."
with_nested:
- "{{ region }}"
- "{{
(region|map('extract',sources[src],'filenames')|list)[0] +
(region|map('extract',sources[src],'filenames')|list)[1]
}}"
when: "item[1] in sources[src][item[0]].filenames"

map() 过滤器的输出是一些与“区域”长度相同的列表。 Jinja 的“+”运算符是我发现的唯一连接列表的机制,但由于它是二元运算符而不是过滤器,所以我不能将它应用于任意数量的列表。上面的代码依赖于长度为 2 的“区域”,并且必须多次 map() 是极端丑陋的。

重组数据(或问题)不是一种选择。我想关注的方面是扁平化 map() 输出,或者生成正确的“msg:”行的其他方式,上面的代码确实如此

最佳答案

sum 过滤器与 start=[] 是你的 friend :

region | map('extract',sources[src],'filenames') | sum(start=[])

来自这里:

[
[
"noreaster.txt",
"gusts.txt",
"drafty.txt"
],
[
"zephyr.txt",
"jetstream.txt"
]
]

它会这样做:

[
"noreaster.txt",
"gusts.txt",
"drafty.txt",
"zephyr.txt",
"jetstream.txt"
]

关于dictionary - ansible 扁平化 map 过滤结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43937910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com