如何 运行 通过 Ansible shell 进行 apt 更新和升级

How to run apt update and upgrade via Ansible shell

我正在尝试使用 Ansible 运行 以下两个命令:

sudo apt-get update && sudo apt-get upgrade -y

我知道你可以使用 ansible:

ansible all -m shell -u user -K -a "uptime"

运行使用下面的命令可以吗?或者我必须使用某种 raw 命令

ansible all -m shell -u user -K -a "sudo apt-get update && sudo apt-get upgrade -y"

我不建议为此使用 shell,因为 Ansible 具有专门为此目的设计的 apt 模块。我在下面详细介绍了如何使用 apt。

在剧本中,您可以像这样更新和升级:

- name: Update and upgrade apt packages
  become: true
  apt:
    upgrade: yes
    update_cache: yes
    cache_valid_time: 86400 #One day

cache_valid_time值可以省略。其目的来自 docs:

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

因此,如果您不想在最近才更新缓存时更新缓存,那么最好包括在内。

要将此作为临时命令执行,您可以 运行:

$ ansible all -m apt -a "upgrade=yes update_cache=yes cache_valid_time=86400" --become

详细描述了临时命令here

请注意,我使用的是 --becomebecome: true。这是通过 Ansible 进行典型权限升级的示例。您使用 -u user-K(要求提权密码)。使用适合您的方式,这只是向您展示最常见的形式。

使用Ubuntu16.04,我做了一点调整:

- name: Update and upgrade apt packages
  become: true
  apt:
    update_cache: yes
    upgrade: 'yes'

我只是将升级 yes 放在撇号之间以避免令人讨厌的警告:

[WARNING]: The value True (type bool) in a string field was converted to u'True' (type string). If this does
not look like what you expect, quote the entire value to ensure it does not change.

我只想对原始答案发表评论,但没有获得许可...

参考: 字符串字段中的值 True(布尔型)已转换为 u'True'(字符串型)

只是为了给答案增添风味。这是一份在您的清单文件中指定的所有主机中的可执行剧本。

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

我们使用以下命令来更新和升级所有包:

ansible all -m apt -a "name='*' state=latest update_cache=yes upgrade=yes" -b --become-user root