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