使用 Ansible 升级 APT 包的正确方法是什么?

What's correct way to upgrade APT packages using Ansible?

设置新的 Linux 服务器时,我通常 运行 apt-get update 然后 apt-get upgrade。第一个命令更新可用包及其版本的列表,但它不安装或升级任何包。第二个命令实际上安装了我拥有的软件包的更新版本。

在 Ansible 中执行此操作的正确方法是什么?您可以这样做的一种方法是:

- name: update and upgrade apt packages
  apt: >
    upgrade=yes
    update_cache=yes
    cache_valid_time=3600

或者您可以分两步完成:

- name: update apt packages
  apt: >
    update_cache=yes
    cache_valid_time=3600

- name: upgrade apt packages
  apt: upgrade=yes

如果您采用第一种方式,Ansible 是否足够聪明,知道它应该 运行 'update' 在 'upgrade' 之前? Ansible apt documentation 没有解决这个更细微的问题。

apt module documentation 实际上声明它将首先 运行 更新:

Run the equivalent of apt-get update before the operation. Can be run as part of the package installation or as a separate step.

(强调我的)

所以这两个剧本在功能上应该是一样的。

这里是升级更新包更好的版本。以下可执行剧本将更新和升级包到清单文件中指定的所有主机。

- hosts: all
  become: yes
  tasks:
  - name: Update and upgrade apt packages
    apt:
      upgrade: yes
      update_cache: yes
      cache_valid_time: 86400 # 1 day

cache_valid_time 值是可选的。文档说:

Update the apt cache if its older than the cache_valid_time. This option is set in seconds.

如果您不想在最近才更新缓存时更新缓存,我认为包含此内容是个好习惯。