如何使用Ansible apt更新Ubuntu/Debian Linux上的所有包
使用Ansible的apt模块可以批量管理很多Ubuntu和debian的apt包。
该模块可以在远程服务器上使用aptitude或者apt-get命令进行包管理。
本教程将介绍如何使用Ansible进行系统更新,并在内核升级时重新启动设备?
Ansible使用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缓存的时间早于缓存有效时间,则更新该缓存。以秒为单位。
使用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.
安装新内核后重新启动服务器
内核更新后可以使用命令或者shell模块重新启动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: uptime在重新启动的服务器上执行uptime命令
when: reboot_required_file.stat.exists使用reboot_required_file变量检查/var/run/reboot required文件是否存在。只有在该文件存在,reboot模块才会工作。
使用Ansible进行系统更新,必要时重启Linux服务器
我们已经了解了基本逻辑,让我们创建一个新的主机文件:
vi hosts
添加以下内容:
## 设置ssh登录的用户名,python3的路径 ## [all:vars] ansible_user='ubuntu' ansible_become=yes ansible_become_method=sudo ansible_python_interpreter='/usr/bin/env python3' ########################## ## servers中添加服务器名 ## 和/etc/hosts中列表对应 ## 或者直接写ip ########################### [servers] oit-server-1 oit-server-2 192.168.1.100
创建playbook
创建一个新文件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
执行ansible命令:
# ansible-playbook -i hosts update.yml
总结
我们学习了如何使用Ansible更新Debian和UbuntuLinux设备上的所有软件包。