如何在Ansible Playbook中查看find命令的输出值?
如何查看Ansible注册变量内容并修复目录删除任务的错误
首先,你要查看files_matched变量的内容非常简单——只需要把你注释掉的debug任务恢复并修正缩进就可以了。Ansible的debug模块是查看变量内容最直接的方式:
方法1:查看完整的注册变量
把你注释的debug任务取消注释,调整好Ansible要求的严格缩进:
- name: Debug matched files variable debug: var: files_matched
运行playbook后,你会看到files_matched的完整结构,包括每个with_items迭代返回的结果细节。
方法2:逐个查看每个匹配结果
如果想更清晰地查看每个bucket_with_items项对应的匹配结果,可以遍历files_matched.results:
- name: Debug each individual match result debug: msg: "当前项匹配结果: {{ item }}" loop: "{{ files_matched.results }}"
这样你能精准看到每个迭代项对应的files列表(也就是找到的目录集合)。
顺便说一下你遇到的'list object' has no attribute 'path'错误:这是因为item.files是一个列表类型(哪怕只找到一个目录,find模块返回的files依然是列表),你直接访问item.files.path相当于试图给整个列表取path属性,这显然不符合逻辑。要修复这个删除任务,你需要嵌套遍历每个结果里的files列表:
修复后的删除任务
使用subelements过滤器来处理嵌套列表:
- name: Remove directories file: path: "{{ file_entry.path }}" state: absent loop: "{{ files_matched.results | subelements('files', skip_missing=True) }}" vars: file_entry: "{{ item.1 }}"
skip_missing=True是为了防止某个bucket_with_items项没有匹配到任何目录时触发错误。
或者你也可以用两层循环的方式实现:
- name: Remove directories file: path: "{{ file.path }}" state: absent loop: "{{ item.files }}" loop_control: loop_var: file with_items: "{{ files_matched.results }}"
这里用loop_control来避免变量名冲突,确保内层循环的变量不会覆盖外层的item。
内容的提问来源于stack exchange,提问作者Ranjit Singh
相关产品推荐
相关产品推荐

