当我不时地添加它们时,我每天晚上都会通过一项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版。因此,据我了解,它们表示文件模块是幂等的。
有什么建议可以使其幂等吗?
答案 0 :(得分:1)
运行任务时它们没有改变,但是结果Ansible说它已经“改变”。
它说它已更改,因为当您对文件运行touch
command时,时间戳会更改。
不要使用touch
,请使用其他适当的状态(file
,directory
,link
)。
否则,您可以设置changed_when: false
,但是考虑到您要检查输出,我认为这没有任何意义。
答案 1 :(得分:1)
为了使用ansible在文件模块上创建文件,您必须单独检查文件是否存在,创建文件并设置任何权限(因为要正确设置文件权限是否已存在)
这可以使用以下3个任务来完成:
"test" : "jest -- --watch"
答案 2 :(得分:1)
问题是state: touch
默认会改变目标路径的访问和修改时间。所以即使没有其他变化,触摸也会导致变化。
从 Ansible 2.7 开始,您可以使用变量 access_time
和 modification_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