Я использую 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