
我有一個 Ansible playbook,用於設定新的 Linux VM。我最近正在使用 Ubuntu 22.04 建立一個新的虛擬機器。該劇本將編寫一些與網路等相關的配置文件,然後該過程的最後一步是使用 Ansiblesansible.builtin.package
安裝所有軟體包更新。
- name: "Install updates"
become: true
ansible.builtin.package:
upgrade: "dist"
register: res_pkg_updates
notify: "reboot system"
tags: [ never, updates ]
我的虛擬機器是根據我幾個月前製作的模板創建的,因此 Ubuntu 作業系統有一些過時的軟體包,這並不令人意外。問題是其中一個軟體包必須支援或提供網路功能。因此,當package
模組在安裝更新的路徑上啟動虛擬機器時,網路守護程序將重新啟動,並且虛擬機器將獲取先前在我的劇本中配置的新 IP。這會導致 Ansible 任務掛起,等待重新連線到位於不同 IP 的電腦。
我想知道如何配置我的ansible.builtin.package
任務來安裝軟體包更新,但是不是重新啟動所有服務,尤其是網路服務。
答案1
將 IP 位址變更與打包交易和遊戲的其餘部分分開。
首先更新軟體包並執行其他操作。
作為本劇的最後一件事,更新該主機的 IP 位址,但暫時不要在新 IP 上啟動介面。也許透過更改設定檔。安排在將來重新啟動該主機,例如使用ansible.posix.at
模組。最後,更新 DNS,以便 Ansible 清單了解 IP 變更。比賽結束。隨後主機自行重新啟動,完成軟體更新和 IP 變更。
未來的遊戲可以從 a 開始,ansible.builtin.wait_for_connection
作為一種方便的重試方式(如果尚未啟動且無法訪問)。
ansible.builtin.reboot
理論上模組可以重新啟動,等待主機回來,然後繼續。但它沒有好的方法來重新啟動一個 IP 位址並以另一個 IP 位址返回。
答案2
一種可能不同的方法是,我會為虛擬機器使用靜態 IP,而不是動態地分配它。執行 playbook 時不重新啟動網路守護程式可能會導致其他問題
或者你可以這樣做
- name: Update package cache and install updates
ansible.builtin.package:
name: "*"
state: latest
update_cache: yes
force: no
become: yes
force: no 阻止套件管理器強制更新或重新啟動服務