Ansible:复制文件列表并运行任何已更改的命令

时间:2017-10-26 09:28:33

标签: ansible

我在Ansible playbook中有一个文件列表,我想对它们执行以下任务:

  1. 将每个文件从我的控制台复制到受管节点。
  2. 当且仅当当前文件已更改时,请在受管节点上以文件名作为参数运行mycmd(例如mycmd --file myfile)。
  3. 我只想对已更改的文件运行mycmd,因为它涉及一些昂贵的(相对于其他任务)API调用。

    我知道如何从列表中复制文件(copy模块+ with_items),但我能解决的问题是如何使用以下文件运行mycmd已被复制但仅在文件已更改时。 notify似乎不合适,因为完整的命令运行会因文件而异。

    实现这一结果的最佳方法是什么,假设它在Ansible中可行?

1 个答案:

答案 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以使输出更具人性化。