使用 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']

结果是字典项的列表,某些项是普通字典名称值对,某些项值是字典本身,某些项值是其他普通字典项名称值对的列表。

我尝试循环访问的数据可以表示如下:

"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"

相关内容

最新更新