Назад | Перейти на главную страницу

Как разрешить Ansible показывать разницу только что созданного файла в режиме проверки?

Допустим, я управляю файлом 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"