我在Ansible playbook中有一个文件列表,我想对它们执行以下任务:
mycmd
(例如mycmd --file myfile
)。我只想对已更改的文件运行mycmd
,因为它涉及一些昂贵的(相对于其他任务)API调用。
我知道如何从列表中复制文件(copy
模块+ with_items
),但我能解决的问题是如何使用以下文件运行mycmd
已被复制但仅在文件已更改时。 notify
似乎不合适,因为完整的命令运行会因文件而异。
实现这一结果的最佳方法是什么,假设它在Ansible中可行?
答案 0 :(得分:1)
注册copy
的结果并迭代它:
- copy:
src: "{{ item }}"
dest: /tmp/
with_items:
- fff1.txt
- fff2.txt
register: copy_res
- command: echo {{ item.dest }}
with_items: "{{ copy_res.results | select('changed') | list }}"
loop_control:
label: "{{ item.item }}"
我使用select('changed')
仅将列表缩减为changed
项并定义label
以使输出更具人性化。