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

Как проверить, идентичны ли два файла на одном хосте с помощью ansible?

Я использую Ansible для управления узлами и хочу проверить часовой пояс на своих узлах.

Я обнаружил, что в centos я должен заменить / etc / localtime на соответствующий файл / usr / share / zoneinfo / {{timezone}}.

Я пишу эту задачу в своей доступной книге:

- name: sync timezone file if different
  command: "rsync --itemize-changes --checksum --copy-links /usr/share/zoneinfo/{{ timezone }} /etc/localtime"

который работает.

Моя цель - выполнять действие только в том случае, если это необходимо, поэтому в этом случае localtime будет записываться, только если что-то изменилось.

Но моя проблема в том, что я также хочу использовать Ansible для проверки любых изменений на моих узлах. А когда ansible выполняет команду, она всегда помечается в отчете «изменено = 1», даже если изменений нет.

Я пытаюсь использовать файловые модули ansible, но независимо от того, копировать ли он удаленный на локальный или локальный на удаленный, но не с удаленного на удаленный.

Я также пытаюсь использовать опцию проверки с регистрацией с этой задачей:

- name: Copy timezone {{ timezone }} to /etc/localtime
  shell: "[[ $(md5sum /usr/share/zoneinfo/Europe/Paris | cut -d' ' -f1) = $(md5sum /etc/localtime | cut -d' ' -f1) ]]"
  register: timezone_check

Но это та же проблема, команда всегда выполняется, поэтому измененное увеличивается.

Есть идеи, как я мог это сделать?

Почему бы вам просто не создать символическую ссылку напрямую?

- name: Set timezone
  file: src=/usr/share/zoneinfo/{{ timezone }} dest=/etc/localtime state=link

Возможно заменить измененный результат.

В вашем случае вы можете проверить результат своей команды оболочки и при необходимости переопределить измененный статус.

Полная задача с результатом изменения переопределения:

- name: Check timezone conf
  command: "rsync --itemize-changes --checksum --copy-links /usr/share/zoneinfo/{{ timezone }} /etc/localtime"
  register: timezone_check
  changed_when: "timezone_check.stdout.find('>') != -1"
  become: yes