如何通过 Ansibleshell 运行 apt 更新和升级

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

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

我知道你可以用:

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"

130046 次浏览

我不推荐使用 shell 来实现这个目的,因为 Anble 的 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值可以省略,它在 医生中的用途是:

如果 apt 缓存的时间早于 cache _ valid_ time,则更新 apt 缓存 选项以秒为单位设置。

因此,如果您不想在缓存最近才更新的情况下更新它,那么最好包含。

要将其作为 ad-hoc 命令执行,可以运行:

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

Ad-hoc 命令详细描述了 给你

注意,我使用的是 --becomebecome: true。这是一个典型的穿越 Ansible 的权限提升。你可以使用 -u user-K(询问权限提升密码)。使用任何适合你的方法,这只是为了向你展示最常见的形式。

使用 Ubuntu 16.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 (类型 bool)被转换为 u‘ True’(类型 string)

只是为了给答案增加点味道。这是一个可执行的剧本在所有主机指定的库存文件。

- 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