首页 > 解决方案 > Ansible 同步总是设置改变

问题描述

我需要将 dest 文件夹的内容设置为与我的 src 文件夹相同。所以我正在使用同步模块:

- name: files for /lib/user/ based on the Runtime version
  synchronize:
    src: "/data/managedFiles/lib/{{ runtime.version }}/user/"
    dest: "{{ mule_directory }}{{ mule_runtime_name }}/lib/user/"
    delete: yes
  register: result

但这会将结果“更改”设置为“真”,即使没有更改。我只需要将此设置为“true”,如果有一些更改,因为下一个任务测试此状态。

如果我在此之后立即重复相同的同步任务,它不会将“更改”设置为“真”。但是那个总是不会设置为“真”。

在不改变 src ("/data/managedFiles/lib/{{ runtime.version }}/user/") 的后续运行中,总是将结果设置为 'changed'。

标签: ansible

解决方案


默认情况下,文件的时间戳包含在检测何时复制文件的测试中。由于文件是从 git 中提取的,因此每次播放的时间戳都不同,从而产生错误信号。但当相同的同步连续运行两次时则不然。解决方案是将校验和参数设置为yes,以便不检查时间戳。但这还需要设置递归和归档参数:

- name: files for /lib/user/ based on the Runtime version
  synchronize:
    src: "/data/managedFiles/lib/{{ runtime.version }}/user/"
    dest: "{{ mule_directory }}{{ mule_runtime_name }}/lib/user/"
    recursive: yes
    archive: no
    checksum: yes
    delete: yes
  register: result

推荐阅读