Ansible对接操作系统升级脚本(一)

转自公众号:运维小工
http://mp.weixin.qq.com/s?__biz=MzkxOTQyNjE5Nw==&mid=2247483657&idx=1&sn=c08d553377417aefaa17925e9c44a8ec

01

引言                   

在服务器操作系统版本的升级过程中,需要系统管理员登录每台服务器执行系统升级脚本,这种系统升级方式耗费大量人力且升级效率不高。为解决这个问题,我们使用ansible对接操作系统升级脚本,实现批量自动升级操作系统。现将整个项目记录如下,ansible批量升级系统程序目前适用于RedHat Linux系统,其余系统是否适用目前还未进行测试。

在我们生产环境中,操作系统的升级由服务器的系统版本升级、服务器重启以及vmtools安装三部分组成。

本次项目的目标有两点:

  1. ansible对接操作系统升级脚本实现批量自动升级服务器系统。

  2. 系统版本升级、服务器重启和vmtools安装三部分即可以统一运行又可各部分互不影响独立运行。

存在的难点:在实现中,如何实现服务器重启部分和其余两个部分的衔接。这里需要考虑以下几点:

  1. 如何判断服务器是否需要重启?

  2. 如何判断服务器是否重启成功?

  3. 如何避免服务器重启过程中ansible会话的断开?

    具体的实现过程以及难点解决方法将在后续的内容进行介绍。

名词解释

控制节点: 部署ansible环境以及存放playbook的主机。

受管主机: 执行playbook中的任务的主机。

02

             项目介绍 

Ansible对接操作系统升级脚本(一)
Ansible对接操作系统升级脚本(一)

图1 项目中playbook的运行流程

在项目中我们创建一个单独的ansible角色,角色名为update_os。整个ansible角色分为检测任务、主机升级任务、重启任务、vmtools安装任务。各任务的功能如下:

  1. 检测任务:判断主机是否在线。

  2. 主机升级任务:升级操作系统、记录升级日志、判断升级是否成功。

  3. 重启任务:判断主机是否升级成功、重启服务器、判读主机重启是否成功。

  4. vmtools安装任务:安装vmtools、记录安装日志、判断是否安装成功。

Ansible对接操作系统升级脚本(一)

图2  update_os角色的目录结构

各个playbook的内容:

site.yml文件是updata_os角色的入口,使用roles导入update_so角色。

---- name: update os  gather_facts: no  hosts: test  roles:      - update_os

update_os角色的tasks目录中的文件有main.yml、ping.yml、 update.yml、reboot.yml、install_vmtools.yml五个playbook文件。

main.yml文件的内容如下:

---- name: check if host is online  include: ping.yml  tags: always
- name: Start system upgrade  block:    - name: decide to proceed      setup:      tags: always        - name: include update playbook      include_tasks:          file: update.yml          apply:             tags: update_os      tags: always    - name: include reboot playbook      include_tasks:         file: reboot.yml         apply:            tags: reboot_singal      tags: always    - name: include vmtools playbook      include_tasks:          file: install_vmtools.yml          apply:             tags:  vmtools      tags: always  when:  >    ( ping.failed is defined and ping.failed == false ) or      ( ping2.failed is defined and ping2.failed == false )

main.yml文件中实现对其余四个playbook文件的调用。在main.yml文件中先导入ping.yml文件来检测在主机是否在线,之后只对在线的主机执行block块(Start system upgrade)中的内容。在(Start system upgrade)块中,main.yml文件依次导入update.yml, reboot.yml和install_vmtools.yml三个playbook。main.yml文件中也使用了ansible的tags功能,这样可以让主机升级、重启、安装vmtools三个任务既可以单个执行又可以统一执行,适用于多种场景的使用。例如:

]# ansible-playbook  site.yml   # 统一执行

]# ansible-playbook  site.yml  –tags update_os  #只执行标签update_os即主机升级任务

]# ansible-playbook  site.yml  –tags reboot_singal  #只执行标签

reboot_singal即主机重启任务。

ping.yml文件内容如下: 

---- name: test if linux is alive  block:  - name: 1st ping linux    ping:    register: ping    failed_when: false    ignore_unreachable: yes    ignore_errors: yes   - name: 2nd ping linux    ping:    register: ping2    failed_when: false    ignore_unreachable: yes    ignore_errors: yes    when: >        (ping.failed is defined and ping.failed == true) or        (ping.unreachable is defined and ping.unreacheable == true)  when: (ansible_connection is defined) and ((ansible_connection == \'ssh\') or (ansible_connection == \'\'))

ping.yml文件的编写机制为: 第一次对受管主机执行ansible的ping模块,并使用register记录结果。对于第一次ping失败时的主机,playbook将执行第二次ping。第二次ping的原因是为了避免网络抖动等因素导致第一次ping失败。只有第一次或第二次ping成功的受管主机才进行之后的任务。

03

 文献参考          

Ansible对接操作系统升级脚本(一)

[1]https://github.com/skippie81/ansible-os-update

[2]https://github.com/D34m0nN0n3/ansible-update-os

[3]https://github.com/joe-speedboat/ansible.os_update

Ansible对接操作系统升级脚本(一)
Ansible对接操作系统升级脚本(一)
Ansible对接操作系统升级脚本(一)

文章作者:王振杰

排版设计:王蔚棋

手绘插画:岳   媛

Ansible对接操作系统升级脚本(一)

求分享

求点赞

Ansible对接操作系统升级脚本(一)

求在看

原创文章,作者:EBCloud,如若转载,请注明出处:https://www.sudun.com/ask/33151.html

Like (0)
EBCloud的头像EBCloud
Previous 2024年4月2日 下午3:28
Next 2024年4月2日

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注