如何確保使用 apt 安裝更新不會重新啟動網路服務?

如何確保使用 apt 安裝更新不會重新啟動網路服務?

我有一個 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 阻止套件管理器強制更新或重新啟動服務

相關內容