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

时间:2017-01-08 17:52:28

标签: ansible ansible-playbook

我正在尝试使用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"

3 个答案:

答案 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

请注意,我使用的是--becomebecome: 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)