Ansible作为老牌的自动化运维工具,由Python开发,应用广泛,但其默认只提供了命令行下的使用方式,好在提供有完善的API支持二次开发,可以很方便的集成到我们的自动化运维系统中

最近一个朋友跳槽到了新公司转做DevOps开发,接到的第一个需求就是基于Ansible研发简单的任务中心,而他欠缺相关经验就找我帮忙,我就花了两天时间从熟悉Ansible开始写了个项目,由于我们的任务都是通过自研的一套自定义任务引擎Probius来实现的,之前从未正式用过Ansible,趁此机会也算是熟悉了

本篇文章只有思路没有代码,主要帮助新手了解流程整理思路,从而更好的理解代码

思路整理

可以通过Web运行Ansible的Module和Playbook这是我们的目标,要实现这个目标我们要做哪些功能呢?我大概画了个脑图帮助整理思路

前端页面

根据上边的思路,我们来想一下都需要编写哪些页面,首先需要一个任务执行页面,在这个页面里需要选择是本次任务是运行module还是Playbook,如果是需要运行module,则需要用户选择具体的module和输入参数,如果需要运行playbook,则需要用户选择具体的playbook和输入参数,无论是运行module还是playbook,都需要确定在哪些主机上运行

通常情况下我们的主机信息都是通过CMDB系统维护的,而对于任务的执行,大多也是针对项目或服务,所以对主机的选择就转换成了对项目或服务的选择,选择了项目服务就确定了运行主机,由此一个完整的任务执行页面就确定了

上边的页面有两个下拉选择框,其一是项目的选择,我们通过选择项目来确定运行的主机,这些数据需要去CMDB获取,这就需要CMDB提供2个API,一个用来获取项目服务的列表,供页面上选择,另外还需要一个根据项目服务查询项目服务下主机列表的API,以确定任务要运行的主机列表

另外一个下拉框是playbook的选择,这就需要另外一个playbook管理的页面,管理playbook就需要进行增删改查,一个简单的页面如下

任务执行过程中需要一个实时展示日志的页面,可以及时的观察任务执行过程中遇到的问题,点击运行按钮直接跳转到任务执行日志页面,观察任务执行日志

任务执行完成后还需要一个历史任务的列表页面,可以查看所有历史执行的任务,以及可以根据条件方便的过滤任务

简单的几个页面就将整个流程清晰的展示了出来

后端逻辑

上边讲了前端页面的设计思路,而后端的逻辑又是怎样的,我们同样从这几个页面入手思考

ansible执行页面,当用户点击提交按钮的同时会将所选项目、所选模块/playbook,以及参数传给后端,后端根据所选的项目获取到项目下的主机,然后将主机、module/playbook、参数,以及任务创建时间、创建用户等信息写入数据库,同时调用AnsibleAPI异步执行,最后跳转到任务详情页面

AnsibleAPI执行过程中将日志实时写入缓存,同时可以通过websocket推给任务详情页面,任务详情页面接受到数据之后展示,如果觉得使用websocket没必要也可以像我一样直接在任务详情页启动一个循环,每秒请求日志将更新追加到页面上,在任务执行完成后,将缓存数据写入数据库,这样的好处是可以减少对数据库的读写,提高效率,整个流程大概如下

以上是运行和任务详情页面的后端逻辑,而对于playbook和任务历史两个页面就比较简单了,就是普通的增删改查而已,不过多介绍

后记

一个新项目在开始编写代码之前就需要对这个项目有相对清晰的认识,在脑海里过一下基本逻辑,这一步也可以借助思维导图来完成,然后搭框架填内容水到渠成

Django+Ansible构建任务中心思路的更多相关文章

  1. Django + Ansible 主机管理(有源码)

    本文给大家介绍如何利用 Django + Ansible 进行 Web 项目管理.   Django介绍 一个可以使 Web 开发工作愉快并且高效的 Web 开发框架,能够以最小的代价构建和维护高质量 ...

  2. Python+Django+ansible playbook自动化运维项目实战☝☝☝

    Python+Django+ansible playbook自动化运维项目实战☝☝☝  一.入门引导 DevOPSDevOps(英文Development和Operations的组合)是一组过程.方法 ...

  3. Python+Django+ansible playbook自动化运维项目实战✍✍✍

    Python+Django+ansible playbook自动化运维项目实战  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受 ...

  4. Python+Django+Ansible Playbook自动化运维项目实战

    Python+Django+AnsiblePlaybook自动化运维项目实战 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单 ...

  5. 英特尔® 至强® 平台集成 AI 加速构建数据中心智慧网络

    英特尔 至强 平台集成 AI 加速构建数据中心智慧网络 SNA 通过 AI 方法来实时感知网络状态,基于网络数据分析来实现自动化部署和风险预测,从而让企业网络能更智能.更高效地为最终用户业务提供支撑. ...

  6. 使用Ansible实现数据中心自动化运维管理

    长久以来,IT 运维在企业内部一直是个耗人耗力的事情.随着虚拟化的大量应用.私有云.容器的不断普及,数据中心内部的压力愈发增加.传统的自动化工具,往往是面向于数据中心特定的一类对象,例如操作系统.虚拟 ...

  7. 【转】使用 Ansible 实现数据中心自动化管理

    长久以来,IT 运维在企业内部一直是个耗人耗力的事情.随着虚拟化的大量应用.私有云.容器的不断普及,数据中心内部的压力愈发增加.传统的自动化工具,往往是面向于数据中心特定的一类对象,例如操作系统.虚拟 ...

  8. App 组件化/模块化之路——构建开发架构思路

    App 组件化/模块化开发架构思路 随着业务的发展 App 开发技术也越来越成熟,对开发者来说 App 代码量也迅速地增长到一个数量级.对于如何架构 App 已经每个开发者面临的实际问题.好的架构可以 ...

  9. Django中多表查询思路

    需求: 1.有一张文章表和一张评论表 2.两张表的关系是一对多 3.规则:若是有新评论,则将对应的文章置顶,若是有新文章则将新文章置顶. 思路: 在文章表中增加一个最后评论时间的字段.然后采用分组排序 ...

随机推荐

  1. (Opencv07)绘制边框

    (Opencv07)绘制边框 cv2.boundingRect(img) 这个函数可以获得一个图像的最小矩形边框一些信息 cv2.rectangle()可以画出该最小矩形边框 x, y ,w, h = ...

  2. tp3 联表查询

    联表查询D("column") ->field("{$DbPrefix}column.pid,{$DbPrefix}news.*") ->where ...

  3. gitlab维护之修改clone地址

    因为配置了域名访问gitlab私有仓库,但是在项目clone这里,显示的还是ip地址,并且还带端口,每次访问,clone都需要自己修改,比较不方便. 修改方法: sudo vim /opt/gitla ...

  4. 记一次在Windows10桌面环境搭建Jekins的吐血经历

    目录 写在前面 故事背景 踩坑详情 最后总结 写在前面 首先声明,除非万不得已,千万不要在Windows环境做这个事情,否则就等着各种坑吧. 本人一贯的立场都是坚持用正确的方法做事,显然在Window ...

  5. ELK+kafka docker快速搭建+.NetCore中使用

    ELK开源实时日志分析平台.ELK是Elasticsearch,Logstash,Kibana 的缩写. Elasticsearch:是个开源分布式搜索引擎,简称ESLogstash:是一个完全开源的 ...

  6. 基于ivy的源代码调试方法

    项目PORJ_TEST是项目PROJ的测试项目.在它的ivy中引用了PROJ的jar包.由于PROJ正处于开发阶段,源代码更改频繁, 在运行PROJ_TEST中的测试时,需要进入PROJ的jar包内部 ...

  7. nohup 启动命令

    start.sh #!/bin/bash nohup $PWD/node_exporter > /dev/null 2>&1 &

  8. docker 安装prometheus和grafna

    一.拉取镜像 docker pull prom/prometheus 二.配置 sudo mkdir /etc/prometheus/ sudo vim /etc/prometheus/prometh ...

  9. iOS-block循环引用详解和应用

    Block循环引用 什么情况下block会造成循环引用 ARC 情况下 block为了保证代码块内部对象不被提前释放,会对block中的对象进行强引用,就相当于持有了其中的对象,而如果此时block中 ...

  10. 题解 Six(留坑)

    传送门 考场上搞了个三进制状压,结果正确性假了-- 有想到从约数下手,但觉得就光预处理约数复杂度就爆炸就没往这边想-- 首先是关于约数个数的证明,再一次感谢战神: 因为 \(n = \prod p_i ...