编程开发自动化运维

通过web界面来灵活执行ansible playbook的一种精

2019-11-20  本文已影响0人  Markus_17bc

概述

Ansible作为新一代的配置管理工具,基于Python开发,以高可读性的yaml语言作为配置语言,实现了批量系统配置、命令执行等强大功能。

Ansible是一个命令行工具,意味着所有操作都必须登录到服务器执行。虽然RedHat提供了Ansible Tower作为Ansible的web管理界面,但Ansible Tower操作比较复杂,且很难与公司自研的运维平台集成,并不是一个很好的选择。目前网上也有不少开源的Ansible Web方案,但基本都是简单地将原本的命令操作转移到页面上,并没有降低操作的复杂性,没有产生什么建设性的意义

方案演示

为了能够让即使未使用过ansible的人也能自行操作,我设计并开发了执行Ansible Playbook的WEB界面支持,该方案可以集成现有CMDB,用一种非常简单有效的方式来灵活执行playbook完成各种配置部署任务,实现资源和服务的快速交付。方案最终效果演示如下:

image

系统架构

系统总体架构为:

所使用的ansible版本为2.6.7,该方案仅依赖原平台的CMDB模块用于获取主机信息,可以很容易修改为其他方式。目前playbook的执行使用的是同步执行,并未用到Celery,用户可根据自己的需要修改为Celery异步的方式来执行。

整个操作界面只有一个页面,页面截图如下:

image

特点和优势

该方案最有价值的地方在于可以很方便地修改变量并灵活执行playbook组合,并没有过多关注一些次要细节。该方案具有以下特点和优势:

playbook设计

该方案基于playbook已经编写好并能成功执行的情况,页面只提供修改变量的功能,并不能修改playbook本身。该方案的一个重点在于playbook的设计,主要体现在三方面:playbook的目录结构设计、变量规划和统一playbook入口。

├── all.yml
├── group_vars
│   └── all
└── roles
    ├── common
    │   ├── files
    │   ├── handlers
    │   ├── tasks
    │   └── templates
    ├── jdk
    │   ├── files
    │   ├── handlers
    │   ├── tasks
    │   └── templates
    ├── kafka
    │   ├── files
    │   ├── handlers
    │   ├── tasks
    │   └── templates
#kafka
kafka:
  xmx: "1G"
  xms: "1G"
  port: 9092
  name: "common-kafka"
  version:
    - "2.11-0.10.1.1"
    - "2.10-0.8.1.1"
  jdk_ver:
    - 1.7
    - 1.8
  ver_index: 0
  install_monitor: true
  monitor_port: 8989
---
- hosts: all
  become: yes
  gather_facts: false
  roles:
    - role: common
      tags: common
    - role: nrpe
      tags: nrpe
    - role: collectd
      tags: collectd
    - role: confd
      tags: confd
    - role: monit
      tags: monit
    - role: jdk
      tags: jdk

关键技术点

该方案的关键技术点和流程如下:

  1. 打开页面时,后台通过读取all.yml来动态获取所有的Role并返回给页面。

  2. 在页面上选中角色并点击“参数”时,后台通过查找该Role目录下所有包含jinja2模板的文件,来获取涉及的所有变量,并以json格式返回给页面。

  3. 页面获取到后台返回的json格式变量后,将其转换成表单的形式,以便查看和修改。boolean类型转换成checkbox,list类型转换成下拉列表,string类型转换成文本输入,dict类型则将变量名进行转换后通过递归转换成上述的几种形式。

  4. 在页面上选择主机后,点击“执行”,通过serializeArray()方法将表单数据转换成数组,再将数组转成对象,提交到后台。

  5. 后台从CMDB查询相应的主机信息并生成临时inventory文件;将参数转换成json格式并生成临时变量文件。

  6. 后台直接调用ansible-playbook命令,指定inventory文件、tags以及EXTRA_VARS文件,执行playbook并将结果返回给页面。

总结

该方案实现了通过页面来灵活执行ansible playbook,并将操作复杂度降到最低,让完全不懂ansible的人也能立即上手部署各种服务,大大提升了交付效率,让运维工作在DevOps路上跨出了一大步。

上一篇 下一篇

猜你喜欢

热点阅读