如何使用Ansible更新Debian/Ubuntu内核并重启等待
时间:2019-11-20 08:54:18 来源:igfitidea点击:
使用DevOps工具和Ansible自动化运维来更新大量云服务器已经很普遍。
安装新内核后,必须重新启动Debian或者Ubuntu 服务器。
本教程将介绍如何使用Ansible playbook来更新Debian/Ubuntu并进行远程重启。
需要使用的Ansible模块
apt–管理Debian/Ubuntu Linux的apt包,例如安装新软件包或者更新软件包。
command或者 shell-使用shell模块在节点中执行命令。使用command模块在远程节点上执行命令。当内核更新时,使用其中1个模块来重新启动机器。
wait_for_connection–等待远程系统可以被访问/可用。
使用Ansible更新Debian/Ubuntu内核更新并重启等待
在Ansible中更新Debian或者Ubuntu服务器
playbook内容:
- name: Update all packages apt: update_cache: yes upgrade: dist
使用shell模块让Ansible等待服务器重新启动
- name: Reboot box if kernel/libs updated and requested by the system shell: sleep 10 && /sbin/shutdown -r now 'Rebooting box to update system libs/kernel as needed' args: removes: /var/run/reboot-required async: 300 poll: 0 ignore_errors: true
如果在Debian或者Ubuntu中,文件 /var/run/reboot-required 存在。我们需要使用shutdown/reboot命令重新启动Linux服务器。
请注意,在 shutdown -r 之前添加了sleep命令.
然后使用async。它以异步方式执行shell模块。
removes是条件的简短形式。如果文件/var/run/reboot-required不存在,则不会运行shutdown命令。如果内核更新了,我们只需要运行reboot命令或者shutdown命令。
重启,等待重启完成
- name: Wait for system to become reachable again wait_for_connection: delay: 60 timeout: 300
Ansible现在总共等待300秒。同时增加60秒延迟时间。
使用Ansible Playbook远程重启主机
Ansible对Debian/Ubuntu进行内核更新并重新启动等待。完整示例:
update.yml文件
--- - hosts: cluster tasks: - name: Update all packages on a Debian/Ubuntu apt: update_cache: yes upgrade: dist - name: Reboot box if kernel/libs updated and requested by the system shell: sleep 10 && /sbin/shutdown -r now 'Rebooting box to update system libs/kernel as needed' args: removes: /var/run/reboot-required async: 300 poll: 0 ignore_errors: true - name: Wait for system to become reachable again wait_for_connection: delay: 60 timeout: 300 - name: Verify new update (optional) command: uname -mrs register: uname_result - name: Display new kernel version debug: var: uname_result.stdout_lines
hosts文件:
[all:vars] ansible_user=Hyman ansible_port=22 ansible_python_interpreter='/usr/bin/env python3' ansible_become=yes ansible_become_method=sudo [cluster] mysql2 ansible_host=192.168.1.100 mysql1 ansible_host=192.168.1.101 mysql3 ansible_host=192.168.1.102
执行ansible任务
$ ansible-playbook -i hosts update.yml