如何让 Ansible 在检查模式下显示新创建文件的差异?

如何让 Ansible 在检查模式下显示新创建文件的差异?

假设我myfile.conf使用 Ansible 管理文件,例如:

- template:
    src: "myfile.conf.j2"
    dest: "/etc/myfile.conf"

然后我可以在试运行中看到差异,如下所示:

$ ansible-playbook --check --diff myplaybook.yaml

很酷。但似乎只有当文件存在于远程主机上时才会显示差异。如果文件不存在,除了任务 OK 之外,我看不到其他输出。

如果文件当前不存在,我该如何告诉 Ansible 显示差异?

可能类似于 Git 在新创建文件的提交中显示差异的方式,其风格类似于/dev/nulldiff 中的 with as base:

--- /dev/null
+++ b/myfile.conf.j2

答案1

对我有用(ansible 2.7.9):

  - name: Create haproxy.cfg
    template:
      src: templates/haproxy.cfg.j2
      dest: /var/tmp/haproxy-keepalived/haproxy.cfg

ansible-playbook --check --diff haproxy-keepalived.yaml
...
changed: [kmaster2]
--- before
+++ after: /root/.ansible/tmp/ansible-local-31057pak66sgj/tmp_de6cqgb/haproxy.cfg.j2
@@ -0,0 +1,33 @@
+global
+  daemon
+  log 127.0.0.1 local0 debug
...

也许它与版本有关或者您正在点击max_diff_size(默认 104448 字节)。

答案2

该用例并未真正在 Ansible 中实现,但如果在创建文件之前文件不存在,您可以通过向文件中添加虚拟内容来获取所需的输出,如下所示:

---

- name: check if file exists
  stat:
    path: /etc/myfile.conf
  register: file

- name: add dummy line to file
  lineinfile:
    dest: /etc/myfile.conf
    state: present
    line: "bump"
    create: True
  when: file.stat.exists == False

- template:
    src: "myfile.conf.j2"
    dest: "/etc/myfile.conf"

相关内容