#ansible
#ansible
Вопрос:
У меня certbot успешно выполняется через Ansible с:
- name: Create and Install Cert Using Nginx Plugin
command: "certbot --nginx {% for host in certbot_domains %} -d {{ host }} {% endfor %} -m {{ certbot_email }} --agree-tos --noninteractive --redirect"
become: true
become_user: root
Однако, даже когда ничего не меняется, Ansible помечает его как «измененный».
Я наткнулся на этот комментарий к проблеме, в котором предлагается обойти его, используя использовать Post-хук, чтобы коснуться file ( --post-hook "touch change_occured"
), но я не уверен, что делать дальше.
Должен ли я регистрировать результат и использовать a changed_when:
для обнаружения этого файла? Если да, то каков синтаксис? Все проверки существования файлов, которые я могу найти, кажутся целой задачей, а не в changed_when:
инструкции.
Есть ли лучший способ определить, действительно ли certbot внес какие-либо изменения?
Комментарии:
1. Включает ли команда текст в свои выходные данные, который сообщает вам о произошедшем изменении, или это просто молчание? И, в любом случае, с точки зрения ansible, я полагаю, вы бы хотели
--post-hook "echo ///CHANGED///"
, тогдаregister: certbot
иchanged_when: '"///CHANGED" in certbot.stdout'
введите deal2. Я могу придумать веские причины для использования Ansible для этого, но я просто хочу убедиться, что вы взвесили их с учетом простоты и надежности
cron
обновления ваших сертификатов. Или вы можете использовать оба —cron
для обновления и Ansible, чтобы убедиться, что сертификату меньше X дней.3. @mdaniel Я выяснил нечто подобное вскоре после публикации… Если выполняется post-перехват, Ansible объявляет «Запуск команды post-hook : ….». Поэтому я использовал
--post-hook "echo > /dev/null 2>amp;1
иchanged_when: "'Running post-hook command' in certbot_output.stdout"
. Если вы хотите опубликовать его в качестве ответа, я с радостью приму его4. Хороший вопрос @bitinerant! Это небольшая часть гораздо более крупного сборника заданий Ansible (который также добавляет задачу cron для обновления сертификатов). Основная цель — позволить мне снова запустить playbook для других изменений без того, чтобы certbot сказал, что что-то изменилось, когда этого не произошло
Ответ №1:
С точки зрения ansible, я полагаю, вы хотели --post-hook "/bin/true"
бы, тогда register: certbot_output
и changed_when: '"Running post-hook command' in certbot_output.stdout
:
- name: Create and Install Cert Using Nginx Plugin
command: >-
certbot --nginx {% for host in certbot_domains %} -d {{ host }} {% endfor %}
-m {{ certbot_email }}
--agree-tos --noninteractive --redirect
--post-hook "/bin/true"
register: certbot_output
changed_when: "'Running post-hook command' in certbot_output.stdout"
become: true
become_user: root
С точки зрения ansible проще использовать определение строки в выводе процесса, поскольку для определения временной метки любого записанного файла потребуется 2 stat:
-я задача, что делает «изменилась ли команда certbot» неудобным вопросом для ответа