首页 > 解决方案 > 使用文件模块幂等的ansible更改权限

问题描述

我每天晚上通过一个 cron 作业运行我的 ansible 剧本,并时不时地添加它们。

我希望我的每个输出仅在实际发生更改时才说 changed=(num) ,但是一些特定模块在根本没有更改时会说已更改。

前任:

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

任务运行前的路径包含与请求的权限和组相同的组和权限。所以他们在任务运行时不会改变,但结果ansible说它已经“改变”了。

我查看了这个问题并找到了https://github.com/ansible/ansible/issues/21124但我正在运行 ansible 2.2.1.0。所以我的理解是他们表明文件模块是幂等的。

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

标签: ansibleidempotent

解决方案


为了使用 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

推荐阅读