ansible - 使用 Ansible 循环访问已注册的文件模块数据
问题描述
我已经尝试在Ansible 文档以及 Stackoverflow 和其他网站和博客上找到解决方案。我还使用了已注册数据结构的调试输出,并确认我可以在静态引用数据时访问数据。最后,我使用了嵌套循环来尝试解决这个问题。
相关的 Ansible 戏剧:
- name: Return the list of application folders
win_find:
paths:
- C:\Applications\
patterns: [ 'app*' ]
file_type: directory
register: app_folders
- name: Return the list of rotated log files to purge
win_find:
paths:
- "{{ item.path }}\\logs"
patterns: applog-\d{4}-\d{2}-\d{2}\.\d{2}
use_regex: yes
loop: "{{ app_folders.files }}"
register: logs_to_purge
- name: Purge rotated log files
win_file:
path: "{{ item.path }}"
state: absent
#loop: "{{ logs_to_purge.results }}"
#with_nested:
#- "{{ logs_to_purge.results }}"
#- ['files']
结果是一个dict项目列表,一些项目是普通的dict名称值对,一些项目值是dict本身,一些项目值是其他普通dict项目名称值对的列表。
我试图循环的数据可以这样表示:
"logs_to_purge": {
results:[
{
"name": value,
"name2": value2,
"name3": { }
"files": [{
"filevalue1": value,
"filevalue2": value,
"path": value_of_interest
},
{
"filevalue1": value,
"filevalue2": value,
"path": value_of_interest
}
]
},
{
One more like above for every "app_folders"
with zero or more files matches.
}
]
所以“结果”是一个字典列表。每个结果字典都包含一个字典项“文件”,其中包含一个字典列表作为值。这些字典中的每一个都包含一个“路径”项,它是感兴趣的值。
上面注释掉的“清除旋转的日志文件”Ansible Play 的最后四行是我花了很多时间无济于事的地方。
解决方案
使用 json_query。下面的任务
- debug:
var: item
loop: "{{ logs_to_purge.results|json_query('[*].files[*].path')|flatten }}"
给
"item": "value_of_interest"
"item": "value_of_interest"
推荐阅读
- jenkins - Jenkins 在 Jenkins 的不同节点上并行运行测试给了我在步骤中找不到这样的 DSL 方法“代理”
- google-sheets - 如何查看每一行的 ARRAYFORMULA SUMIF?
- python - 在 Mac 上安装 SIP for Python 2.7
- facebook - 在 Facebook Graph API 中指定日期时遇到问题
- r - 按字符值填充缺失数据
- c++ - 没有默认构造函数的 C++17 映射 emplace(私有默认构造函数)
- javascript - 将 state 属性传递给 React Native 卡片标题属性
- javascript - Angular 1 ui-router 1.0.24:以编程方式更改 url,无需重新加载控制器,保留历史记录和手动更改 url
- excel - Excel - 如何防止公式范围在无效时转换为 #Ref?
- python - 将整个列表的值存储在同一 csv 行中