假设我myfile.conf
使用 Ansible 管理文件,例如:
- template:
src: "myfile.conf.j2"
dest: "/etc/myfile.conf"
然后我可以在试运行中看到差异,如下所示:
$ ansible-playbook --check --diff myplaybook.yaml
很酷。但似乎只有当文件存在于远程主机上时才会显示差异。如果文件不存在,除了任务 OK 之外,我看不到其他输出。
如果文件当前不存在,我该如何告诉 Ansible 显示差异?
可能类似于 Git 在新创建文件的提交中显示差异的方式,其风格类似于/dev/null
diff 中的 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"