Как правильно обновить установленные пакеты с помощью Ansible?

Давайте предположим, что у меня есть следующая простая книга игр Ansible:

---
  tasks:
    - name: Upgrade installed packages
      become: true
      apt:
        upgrade: safe

    - name: Install NGINX web server
      become: true
      apt:
        name: nginx
        state: latest
      notify:
        - Restart NGINX

  handlers:
    - name: Restart NGINX
      become: true
      service:
        name: nginx
        state: restarted

Как видите, я сначала обновляю установленные пакеты APT, а затем проверяю, что у меня установлена ​​последняя версия Nginx. Проблема в том, что если есть обновление для Nginx, оно будет установлено в первой задаче, и если так, вторая задача не будет помечена как измененная, и обработчик не будет запущен. Это правда? Или Ansible достаточно умен, чтобы каким-то образом запускать этот дескриптор, только когда Nginx был обновлен в первой задаче?

Интересно о лучшей практике для этого случая. Есть ли лучший способ, чем перенести все отдельные задачи установки (которые должны запускать обработчики при их изменении) до задачи, которая обновляет все установленные пакеты?

Спасибо!

1 ответ

Это не "The Ansible way", но это вариант.

одна из причин, почему вы можете сделать это с помощью lsof найти все pid Необходимо перезапустить и передать эту информацию в systemd, чтобы получить имя службы для каждого pid. А затем просмотрите список служб и перезапустите каждый из них.

кто-то все готовый написал такой Perl-скрипт - см. пример здесь: https://rwmj.wordpress.com/2014/07/10/which-services-need-restarting-after-an-upgrade/

другой вариант, но такой же, как скрипт restart-services из репозитория / пакета debian-goodies.

Другие вопросы по тегам