Допустим, я управляю файлом myfile.conf
с Ansible, например:
- template:
src: "myfile.conf.j2"
dest: "/etc/myfile.conf"
Затем я могу увидеть разницу в пробном прогоне, например:
$ ansible-playbook --check --diff myplaybook.yaml
Прохладно. Но, похоже, он отображает разницу только тогда, когда файл существует на удаленном хосте. Если файл отсутствует, я не вижу вывода, кроме задачи ОК.
Как мне сказать Ansible показать разницу, если файл в данный момент отсутствует?
Возможно, это похоже на то, как Git будет показывать разницу в фиксации вновь созданного файла в стиле, например, с /dev/null
в качестве базы в diff:
--- /dev/null
+++ b/myfile.conf.j2
У меня работает (доступно 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 байт).
Этот вариант использования на самом деле не реализован в 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"