簡體   English   中英

用Ansible升級已安裝軟件包的正確方法是什么

[英]What is the proper way to upgrade installed packages with 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的更新,它將被安裝在第一個任務中,如果是的話,第二個任務將不會被標記為已更改,並且不會觸發處理程序。 是真的嗎 還是只有在第一個任務中升級了Nginx時,Ansible才足夠聰明地以某種方式觸發此句柄?

我想知道這種情況下的最佳做法。 有沒有比升級所有已安裝軟件包的任務之前移動所有單獨的安裝任務(應該在更改時觸發處理程序)更好的方法了?

謝謝!

這不是“ Ansible方式”,而是一種選擇。

為什么可以這樣做是通過使用lsof查找所有需要重新啟動的pid並將此信息傳遞給systemd以獲得每個pid的服務名稱。 然后遍歷服務列表,然后重新啟動每個服務。

所有人都准備好編寫這樣的perl腳本 -參見此處的示例: https : //rwmj.wordpress.com/2014/07/10/which-services-need-restarting-after-an-upgrade/

另一個選擇是,但相同的是debian-goodies repo / package中的restart-services腳本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM