使用文件模块幂等的ansible更改权限

时间:2018-07-12 14:54:28

标签: ansible idempotent

当我不时地添加它们时,我每天晚上都会通过一项cron作业来运行我的ansible剧本。

我希望每个输出仅在实际发生更改的情况下才说change =(num),但是有几个特定的​​模块说根本没有更改时就已经更改。

EX:

- name: (name)
  file:
    state: touch
    path: (path)
    group: (group)
    mode: (perms)

运行任务之前的路径包含与所请求的权限和组相同的组和权限。因此它们在运行任务时不会改变,但是结果ansible表示它已经“改变”。

我查看了此问题,发现https://github.com/ansible/ansible/issues/21124,但是运行的是2.2.1.0版。因此,据我了解,它们表示文件模块是幂等的。

有什么建议可以使其幂等吗?

4 个答案:

答案 0 :(得分:1)

  

运行任务时它们没有改变,但是结果Ansible说它已经“改变”。

它说它已更改,因为当您对文件运行touch command时,时间戳会更改。

不要使用touch,请使用其他适当的状态(filedirectorylink)。


否则,您可以设置changed_when: false,但是考虑到您要检查输出,我认为这没有任何意义。

答案 1 :(得分:1)

为了使用ansible在文件模块上创建文件,您必须单独检查文件是否存在,创建文件并设置任何权限(因为要正确设置文件权限是否已存在)

这可以使用以下3个任务来完成:

"test" : "jest -- --watch"

答案 2 :(得分:1)

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

从 Ansible 2.7 开始,您可以使用变量 access_timemodification_time 使 file 具有 touch 幂等性。

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

Nklya 的原始解决方案)

答案 3 :(得分:0)

触摸文件的幂等选项为:

- command: touch file
  args:
    creates: file