Ansible zypper更新OpenSUSE/SUSE上的所有软件包
如何使用Ansible的zypper模块更新所有服务器集群文件?
在SUSE/OpenSUSE上进行内核升级时,如何使用Ansible进行系统更新并重新引导服务器?
使我们的基于OpenSUSE/SUSE Linux的系统保持最新,并应用所有安全补丁,对于系统管理员和开发人员而言是一项基本任务。
可以使用Ansible的zypper模块来管理OpenSUSE Linux的rpm软件包。
此模块可以使用远程服务器上的zypper命令或rpm命令进行软件包管理。
同样,最好使用Ansible的重新启动模块重新启动服务器,等待其关闭,重新启动并响应命令。
本页说明了如何通过Ansible运行zypper更新/升级所有软件包,以及如何在内核更新后重启计算机。
Ansible zypper更新所有软件包
Zypper是SUSE和OpenSUSE Linux的命令行软件包管理器。
通常,系统管理员和开发人员使用zypper命令运行以下命令来刷新程序包缓存:
sudo zypper refresh
如何刷新OpenSUSE Linux存储库
升级所有软件包,键入:
sudo zypper update
有关更多信息,请参阅SUSE 15更新安装的软件包以获取安全性。
在OpenSUSE/SUSE上使用Ansible升级所有zypper/rpm软件包
以下仅适用于openSUSE 11.1+版和SUSE Linux Enterprise Server/Desktop 11.0+。
- name: Update all packages on OpenSUSE/SUSE Linux zypper: name: '*' state: latest
其中:
name:'*'
:说明软件包名称或软件包说明符或二者之一的列表。 *表示所有包装。- state:最新状态:当状态设置为最新状态时,Ansible将确保已安装软件包的最新版本。换句话说,更新所有软件包
仅在OpenSUSE/SUSE Linux上应用所有可用补丁
如下更新Ansible剧本:
- name: Update all packages on OpenSUSE/SUSE Linux zypper: name: '*' state: latest type: patch
。
类型设置为补丁。
换句话说,zypper仅适用于补丁。
找出我们是否需要重启服务器
如果文件/boot/do_purge_kernels存在,则需要重新引导SUSE或OpenSUSE Linux系统。
如果文件/boot/do_purge_kernels在系统上存在,我们需要注册一个新变量,如下所示:
- name: Check if a reboot is needed on all SUSE/OpenSUSE based servers register: linux_reboot_required_file stat: path=/boot/do_purge_kernels get_md5=no
其中:
register:linux_reboot_required_file
:register关键字决定将哪个变量保存到结果中,我们将按如下方式使用它来重启机器。stat:path =/boot/do_purge_kernels
:查找是否存在路径(/boot/do_purge_kernels)get_md5 = no
:确定文件校验和的算法。在此示例中,我们使用的是md5,但可以使用sha1,sha224,sha256,sha384和sha512。
请注意,文件/boot/do_purge_kernels等效于Debian/Ubuntu Linuxs/var/run/reboot所需的文件。
安装新内核后重新引导SUSE/OpenSUSE服务器
当内核更新如下时,我们将使用重启模块来重启Linux服务器:
- name: Reboot the SUSE/OpenSUSE 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: linux_reboot_required_file.stat.exists
其中:
test_command:uptime
:在重新启动的SUSE/OpenSUSE云服务器上执行uptime命令,并期望成功确定机器已准备好执行其他任务并运行守护程序。当:linux_reboot_required_file.stat.exists
时:首先,使用名为linux_reboot_required_file的变量检查名为/boot/do_purge_kernels的文件是否存在。只有当该文件存在并且在以下情况下使用以下命令来实施时,重新启动模块才起作用:
使用Ansible进行SUSE/OpenSUSE更新并在必要时重新启动服务器
现在您知道基本的逻辑,让我们在Linux上创建一个新的主机文件:
vi hosts
追加以下内容:
## set up ssh user name and path to python3 ## [all:vars] ansible_user='Hyman' ansible_become=yes ansible_become_method=sudo ansible_python_interpreter='/usr/bin/env python3' ########################## ## our server name ## www-1 may be mapped using /etc/hosts or ~/.ssh/config ## you can use ip address here too ########################### [opensuseservers] www-1 www-2 www-3
playbook示例
创建一个名为opensuse.yml的新文件,如下所示:
vi opensuse.yml
附加以下Ansbile代码:
-- - hosts: opensuseservers become: true become_user: root tasks: - name: Update all packages on OpenSUSE/SUSE Linux zypper: name: '*' state: latest - name: Check if a reboot is needed on all SUSE/OpenSUSE based servers register: linux_reboot_required_file stat: path=/boot/do_purge_kernels get_md5=no - name: Reboot the SUSE/OpenSUSE 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: linux_reboot_required_file.stat.exists
确保设置ssh密钥并按如下所示运行它:
ansible-playbook -i hosts opensuse.yml