如何确保使用 apt 安装更新不会重新启动网络服务?

如何确保使用 apt 安装更新不会重新启动网络服务?

我有一个 Ansible 剧本,用于配置新的 Linux VM。我最近用 Ubuntu 22.04 构建了一个新的 VM。剧本将编写一些与网络等相关的配置文件,然后该过程的最后一步是使用 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 更改。

ansible.builtin.wait_for_connection如果尚未启动且无法访问,则可以从开始进行未来的播放,作为一种方便的重试方式。

ansible.builtin.reboot理论上,模块可以重启,等待主机恢复,然后继续。但是它没有很好的方法可以重启一个 IP 地址,然后以另一个 IP 地址恢复。

答案2

另一种可能的方法是我为虚拟机使用静态 IP,而不是动态分配 IP。不重新启动网络守护进程可能会导致运行剧本时出现其他问题

或者你可以这样做

- name: Update package cache and install updates
  ansible.builtin.package:
    name: "*"
    state: latest
    update_cache: yes
    force: no
  become: yes

force: no 阻止包管理器强制更新或重新启动服务

相关内容