[英]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.