如何使用Ansible zypper更新OpenSUSE/SUSE上的所有软件包

时间:2019-11-20 08:54:19  来源:igfitidea点击:

如何使用Ansible在SUSE/OpenSUSE上内核升级并重新启动服务器?
如何使用Ansible的zypper模块来更新多台Linux服务器软件包?

可以使用Ansible的zypper模块来管理opensuselinux的rpm包。
此模块可以在远程服务器上使用zypper命令或者rpm命令进行包管理。
同样,我们可以使用Ansible的reboot模块来重新启动服务器。

使用Ansible zypper更新所有软件包

Zypper是一个用于SUSE和OPENSUSE的命令行包管理器。
通常,系统管理员和开发人员使用zypper命令运行以下命令来刷新软件包缓存:

如何刷新OpenSUSE Linux存储库:

sudo zypper refresh

升级所有软件包

sudo zypper update

在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: latest: 当state设置为“latest”时,Ansible将确保安装了包的最新版本。

在OpenSUSE/SUSE Linux上只应用所有可用的补丁

将类型设置为“patch”,只处理补丁。

          - name: Update all packages on OpenSUSE/SUSE Linux
            zypper:
                    name: '*'
                    state: latest
                    type: patch

检查是否需要重启服务器

如果更新系统后,有/boot/do_purge_kernels文件,则说明需要重启SUSE 或者 OpenSUSE Linux 系统。

          - 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文件存在,则linux_reboot_required_file值为真
get_md5=no: 计算文件checksum的算法, 可以是md5,sha1, sha224, sha256, sha384, and sha512.

当新内核安装后,重启SUSE/OpenSUSE服务器

当内核更新如下时,我们将使用reboot模块重新启动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命令
when: linux_reboot_required_file.stat.exists:首先,使用变量linux_reboot_required_file检查文件/boot/do_purge_kernels是否存在。reboot模块只有在该文件存在时才执行。

使用Ansible更新SUSE/OpenSUSE 并在必要时重启

我们已经知道了Ansible执行的逻辑。

现在创建一个文件hosts。

vi hosts

内容如下:

## 设置登录用户和python3路径 ##
[all:vars]
ansible_user='Hyman'
ansible_become=yes
ansible_become_method=sudo
ansible_python_interpreter='/usr/bin/env python3'

## 服务器名或者IP ## 
[opensuseservers]
www-1
www-2
192.168.1.100
192.168.1.101

playbook示例

创建一个opensuse.yml文件

vi opensuse.yml

内容如下:

---
- 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

执行ansible playbook

ansible-playbook -i hosts opensuse.yml