Ansible 使用文件模块幂等元更改权限

Ansible 使用文件模块幂等元更改权限,ansible,idempotent,Ansible,Idempotent,我每天晚上都会通过cron作业运行我的ansible剧本,时不时地添加到剧本中 如果确实有更改,我希望每个模块的输出仅表示changed=(num),但一些特定模块表示在根本没有更改时已更改 例: 运行任务之前的路径包含与请求的权限和组相同的组和权限。因此,当任务运行时,它们不会改变,但结果ansible说它“改变了” 我查找了这个问题并发现,但我正在运行ansible 2.2.1.0。所以我的理解是,它们表明文件模块是幂等的 有什么建议可以使它幂等吗 当任务运行时,它们不会改变,但结果Ansi

我每天晚上都会通过cron作业运行我的ansible剧本,时不时地添加到剧本中

如果确实有更改,我希望每个模块的输出仅表示changed=(num),但一些特定模块表示在根本没有更改时已更改

例:

运行任务之前的路径包含与请求的权限和组相同的组和权限。因此,当任务运行时,它们不会改变,但结果ansible说它“改变了”

我查找了这个问题并发现,但我正在运行ansible 2.2.1.0。所以我的理解是,它们表明文件模块是幂等的

有什么建议可以使它幂等吗

当任务运行时,它们不会改变,但结果Ansible说它“改变了”

它说它改变了,因为当你对一个文件运行时,时间戳会改变

不要使用
触摸
,请使用其他适当的状态(
文件
目录
链接



否则,您可以在:false时设置
changed\u,但考虑到您想要检查输出,我认为这没有意义。

触摸文件的幂等选项是:

- command: touch file
  args:
    creates: file

为了使用ansible中的文件模块以幂等方式创建文件,您必须分别检查文件是否存在、创建文件以及设置任何权限(无论文件是否已存在,您都希望正确设置这些权限)

这可以通过以下3项任务来完成:

- name: Check if file exists
  stat:
    path: /tmp/file
  register: tmp_file

- name: Create file
  file:
    path: /tmp/file
    state: touch
  when: tmp_file.stat.exists == false

- name: Set perms of file
  file:
    path: /tmp/file
    state: file
    owner: user
    group: group
    mode: 0600

问题在于,默认情况下,
state:touch
会更改目标路径的访问和修改时间。所以,即使没有其他变化,触摸也会导致变化

由于Ansible 2.7,您可以使用变量
访问时间
修改时间
使
文件
具有
触摸
幂等项

- name: Touch file
  file:
    path: /etc/file.conf
    state: touch
    access_time: preserve
    modification_time: preserve

(原始解决方案由)

我想我想使用触摸状态来确保它存在,但我只是在现在之前运行一个统计模块来检查它是否存在
- name: Touch file
  file:
    path: /etc/file.conf
    state: touch
    access_time: preserve
    modification_time: preserve