如何使用Ansible zypper更新OpenSUSE/SUSE上的所有软件包
如何使用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