简体   繁体   中英

What is the proper way to upgrade installed packages with Ansible

Let's assume I have the next simple Ansible playbook:

---
  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

As you see, I upgrade installed APT packages first and only then make sure I have the latest Nginx version. The problem is that if there's an update for Nginx, it will be installed in the first task and if so, the second task won't be marked as changed and the handler won't be fired. Is it true? Or Ansible is clever enough to somehow fire this handle only when Nginx was upgraded in the first task?

I wonder about the best practice for this case. Is there a better way than move all the separate installation tasks (which should fire handlers on their change) before the task which upgrades all the installed packages?

Thanks!

This is not "The Ansible way", but it is an option.

one why you can do it is by using lsof to find all the pid 's which need restart and pass this information to systemd to get the service name for each pid. And then go over the list of services and restart each one of them.

some one all ready wrote a perl-script like that - see example here: https://rwmj.wordpress.com/2014/07/10/which-services-need-restarting-after-an-upgrade/

another option is but the same is the restart-services script from the debian-goodies repo/package.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM