Ansible apt更新Ubuntu/Debian Linux上的所有软件包

时间:2020-01-09 10:37:07  来源:igfitidea点击:

如何使用Ansible的apt模块更新它们?
在内核升级时,如何使用Ansible进行系统更新并重新启动该框?
对于系统管理员和开发人员而言,使系统保持最新状态并应用所有安全补丁是一项基本任务。
可以使用Ansible的apt模块来管理基于Debian/Ubuntu的Linux发行版的apt软件包。
此模块可以使用远程服务器上的aptitude或apt-get命令进行软件包管理。
同样,最好使用Ansible的重新启动模块重新启动计算机,等待其关闭,重新启动并响应命令。
本页说明如何运行apt/apt-get更新并通过Ansible升级所有软件包并在需要时重新启动计算机。

Ansible apt使用apt模块更新所有软件包

通常,您运行以下命令以使用apt-get命令或apt命令刷新程序包缓存:

sudo apt-get update

要使用Ansible更新存储库缓存,请执行以下操作:

- name: Update apt-get repo and cache
      apt: update_cache=yes force_apt_get=yes cache_valid_time=3600

其中:

  • update_cache = yes在所有服务器上运行apt-get update命令的等效命令
  • force_apt_get = yes不要使用aptitude命令,而是在Debian/Ubuntu框上使用apt-get命令
  • cache_valid_time = 3600如果apt缓存早于cache_valid_time,则更新它。此选项以秒为单位设置。在此示例中,它设置为3600秒。

使用Ansible升级所有apt软件包

语法为:

- name: Upgrade all apt packages
      apt: upgrade=dist force_apt_get=yes

其中:

  • upgrade = dist在所有Ubuntu或Debian Linux服务器上运行apt-get upgrade命令的等效命令。换句话说,将所有软件包升级到最新版本。
  • force_apt_get = yes使用apt-get代替aptitude。

找出我们是否需要重启服务器

如果文件/var/run/reboot-required存在,则需要重新启动Debian或Ubuntu Linux机器。
如果系统上存在/var/run/reboot-required文件,则需要注册一个新变量,如下所示:

- name: Check if a reboot is needed for Debian and Ubuntu boxes
      register: reboot_required_file
      stat: path=/var/run/reboot-required get_md5=no

其中:

  • register:reboot_required_fileregister关键字决定将结果保存到哪个变量,我们将按以下方式使用它来重新启动盒子。
  • stat:path =/var/run/reboot-required确定是否存在路径(/var/run/reboot-required)
  • get_md5 = no确定文件校验和的算法。在此示例中,我使用的是md5,但可以使用sha1,sha224,sha256,sha384和sha512。

安装新内核后重新引导服务器

当内核更新如下时,可以使用命令或外壳模块重新引导Linux服务器:

- name: Reboot the Debian or Ubuntu server
      reboot:
        msg: "Reboot initiated by Ansible due to kernel updates"
        connect_timeout: 5
        reboot_timeout: 300
        pre_reboot_delay: 0
        post_reboot_delay: 30
        test_command: uptime
      when: reboot_required_file.stat.exists

其中:

  • test_command:正常运行时间在重新启动的服务器上执行正常运行时间命令,并期望成功可以确定机器已准备好执行其他任务。
  • 何时:reboot_required_file.stat.exists`首先,使用名为reboot_required_file的变量检查名为/var/run/reboot-required的文件是否存在。重新启动模块仅在该文件存在且在以下情况下强制使用时才起作用:reboot_required_file.stat.exists Ansible条件。

使用Ansible进行系统更新并在必要时重启Linux服务器

现在您已经了解了基本逻辑,让我们创建一个新的主机文件:

vi hosts

追加以下内容:

## set up ssh user name and path to python3 ##
[all:vars]
ansible_user='ubuntu'
ansible_become=yes
ansible_become_method=sudo
ansible_python_interpreter='/usr/bin/env python3'
 
##########################
## our aws server names
## aws-ls-www-1 may be mapped using /etc/hosts or ~/.ssh/config
## you can use ip address here too
###########################
[servers]
aws-ls-www-1
aws-ls-www-2
aws-ls-www-3
aws-ls-www-4

样本剧本

创建一个名为update.yml的新文件,如下所示:

vi update.yml

附加以下Ansbile代码:

--
- hosts: servers
  become: true
  become_user: root
  tasks:
    - name: Update apt repo and cache on all Debian/Ubuntu boxes
      apt: update_cache=yes force_apt_get=yes cache_valid_time=3600

    - name: Upgrade all packages on servers
      apt: upgrade=dist force_apt_get=yes

    - name: Check if a reboot is needed on all servers
      register: reboot_required_file
      stat: path=/var/run/reboot-required get_md5=no

    - name: Reboot the box if kernel updated
      reboot:
        msg: "Reboot initiated by Ansible for kernel updates"
        connect_timeout: 5
        reboot_timeout: 300
        pre_reboot_delay: 0
        post_reboot_delay: 30
        test_command: uptime
      when: reboot_required_file.stat.exists

确保设置ssh密钥并按如下所示运行它:

ansible-playbook -i hosts update.yml