我正在将一个应用程序的现有安装Shell脚本转换为Ansible作业。我现在有步骤,我必须找到给定的文件集,然后在嵌套循环中的其他属性中将它们用于其他任务。问题是我找不到如何将查找结果转换为可用形式的方法。
步骤:
- name: Finds files to use
find:
paths: "{{ item }}"
file_type: file
use_regex: yes
recurse: yes
patterns:
- ".*\\.xml$"
- ".*\\.yml$"
- ".*\\.hcl$"
- ".*\\.json$"
with_items:
- /etc/<<some_folder>>
- /opt/<<some_folder>>/conf
- /opt/<<some_folder>>/x-cluster
- /opt/<<some_folder>>/config
- /opt/<<some_folder>>/x_worker/config
register: "findoutput"
- name: Replace var strings
replace:
path: "{{ item.0.path }}"
regexp: "{{ item.1 }}"
replace: "{{ item.2 }}"
with_nested:
- "{{ findoutput | **<<insert_magic>>** | list }}"
- "{{ replace_values | dictsort }}"
这种方法一直失败,因为我从一个搜索迭代中接收到5个值的列表,这些值嵌套了所有找到的文件,但我还没有找到访问此方法的方法。
我将很高兴为您提供帮助或指出正确的方向。
答案 0 :(得分:1)
在执行查找任务之后,将find
的输出展平并仅获取path
的值,如下所示:
- set_fact:
formatted_result: "{{ findoutput.results | json_query('[*].files[*].path') | list | flatten }}"
然后在下一个任务中使用formatted_result
列表替换字符串。