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_file
register关键字决定将结果保存到哪个变量,我们将按以下方式使用它来重新启动盒子。- 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