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

nad*_*rmx 43 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"

Tom*_*eld 97

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

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

- name: Update and upgrade apt packages
  become: true
  apt:
    upgrade: yes
    update_cache: yes
    cache_valid_time: 86400 #One day
Run Code Online (Sandbox Code Playgroud)

cache_valid_time值可以省略.其目的来自文档:

如果apt缓存早于cache_valid_time,则更新apt缓存.此选项在几秒钟内设置.

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

要以ad-hoc命令执行此操作,您可以运行:

--become

ad-hoc命令在此处详细描述

请注意,我正在使用become: true-u user.这是通过Ansible进行典型权限提升的示例.您使用-Kcache_valid_time(请求权限提升密码).使用适用于您的任何一种,这只是为了向您展示最常见的形式.

  • 谢谢。如果在具有以下环境的公司代理后面进行参考,也可以使用:http_proxy:“ http:// {{proxy_user}}:{{vault_proxy_password}} @ {{proxy_host}}:{{proxy_port}}” https_proxy:“ http:// {{proxy_user}}:{{vault_proxy_password}} @ {{proxy_host}}:{{proxy_port}}“ no_proxy:” {{proxy_no_proxy}}“` (2认同)

ewa*_*lel 10

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

- hosts: all
  become: true
  tasks:
  - name: Update and upgrade apt packages
    apt:
      upgrade: yes
      update_cache: yes
      cache_valid_time: 86400 
Run Code Online (Sandbox Code Playgroud)

  • 成为应该具有“真实”值而不是“是” (2认同)

mar*_*cio 6

使用Ubuntu 16.04,我做了一些调整:

- name: Update and upgrade apt packages
  become: true
  apt:
    update_cache: yes
    upgrade: 'yes'
Run Code Online (Sandbox Code Playgroud)

我只是将升级放在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.
Run Code Online (Sandbox Code Playgroud)

2020年,我只想评论原来的答案,但当时没有足够的声誉......

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