我正在尝试使用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"
答案 0 :(得分:79)
我不建议使用shell,因为Ansible有专门为此目的设计的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:
如果apt缓存早于cache_valid_time,则更新apt缓存。这个 选项设置为秒。
因此,如果您不想在最近更新后更新缓存,那么最好包含。
要以ad-hoc命令执行此操作,您可以运行:
$ ansible all -m apt -a "upgrade=yes update_cache=yes cache_valid_time=86400" --become
ad-hoc命令详细描述了here
请注意,我使用的是--become
和become: true
。这是通过Ansible进行典型权限提升的示例。您使用-u user
和-K
(要求提供权限提升密码)。使用适用于您的任何一种,这只是为了向您展示最常见的形式。
答案 1 :(得分:1)
只需在答案中添加风味即可。这是清单文件中指定的所有主机中的可执行剧本。
- hosts: all
become: yes
tasks:
- name: Update and upgrade apt packages
apt:
upgrade: yes
update_cache: yes
cache_valid_time: 86400
答案 2 :(得分:0)
使用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.
我只想评论原始答案,但尚未获得许可...
参考: The value True (type bool) in a string field was converted to u'True' (type string)