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

概述

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

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

方案演示

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

image

系统架构

系统总体架构为:

  • 后台框架:Django

  • 异步任务框架:Celery

  • 前端框架:Bootstrap

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

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

image

特点和优势

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

  • 执行Playbook的最小单位为Role(角色),每个Role能独立完成一项配置或部署任务,如环境初始化、安装redis、安装kafka等,且支持单机和集群模式安装。

  • 多个Role可自由组合,能满足各种配置部署需求。

  • 可直接在页面上方便地查看和修改每个Role所涉及的变量,且查看和修改时只显示已勾选的Role的变量。

  • 添加新的Role时,只需在服务器上按照约定编写即可,不需要修改程序代码。

  • 傻瓜式操作,天才式效果,所有变量都有默认值,大部分时候只需鼠标点击即可,只有需要修改变量时才需键盘输入。

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
  • 所有的变量都在group_vars/all中定义,且应根据实际情况设置不同类型的变量。部分变量定义如下:
#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
  • 统一playbook入口:ansible只设置一个名为all.yml的playbook,所有的role都包含在这个playbook里,每个role设置一个同名的tag。需要执行特定的role时,通过--tags传入参数来指定。all.yml的内容如下:
---
- 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路上跨出了一大步。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容