Ansible zypper更新OpenSUSE/SUSE上的所有软件包

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

如何使用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