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. Vue项目发布的问题--http://localhost:8088/static/fonts/fontawesome-webfont.af7ae50.woff2

    问题:ngnix将8080转成80对外访问,找不对woff2等文件 一\ 搭建环境 ngnix-->conf中 server { listen 80; server_name 10.9.240. ...

  2. 2020国防科大综述:3D点云深度学习—综述(点云形状识别部分)

    目录 摘要 1.引言: 2.背景 2.1 数据集 2.2评价指标 3.3D形状分类 3.1基于多视图的方法 3.2基于体素的方法 3.3基于点的方法 3.3.1 点对多层感知机方法 3.3.2基于卷积 ...

  3. 使用 Python 翻译 CHM 帮助文档

    此方法绝对切实可行 翻译成品项目: https://github.com/foyoux/InstallShield2020-Documents 效果预览 安装 docts 库 pip install ...

  4. 【LeetCode】34. 在排序数组中查找元素的第一个和最后一个位置

    34. 在排序数组中查找元素的第一个和最后一个位置 知识点:数组,二分查找: 题目描述 给定一个按照升序排列的整数数组 nums,和一个目标值 target.找出给定目标值在数组中的开始位置和结束位置 ...

  5. Linux 数据库操作(一)

    我们可以将用于数据服务的数据库分为关系型数据库和非关系型数据库,关系型数据库最典型的就是Mysql,以及和他同源的MariaDB数据库,oracle等,非关系型数据库则有redis数据库,mongod ...

  6. vue菜单切换

    HTML: <div id="box"> <ul> <li v-for= "(item,index) in arry"> & ...

  7. python自动化之(自动化测试报告)

    前言: 给予你们最关心的3步骤 什么是自动化测试报告?  答:在自动化测试过程中自动生成的测试报告 为什么要做自动生成测试报告? 答:真正的解放双手; 可以形成直观的测试结果; 给自己一个装X的机会; ...

  8. tomcat启动时启动窗口出现乱码一招搞定

    先来看看问题(图示),在tomcat的启动窗口打印的启动信息中包含了大量的中文乱码,虽然这些对tomcat本身的使用没有任何影响,但却非常碍眼,影响视觉效果! tomcat启动时启动窗口出现乱码的解决 ...

  9. 『Java』String类使用方法

    Java中的字符串 java.lang.String类表示字符串类,Java程序中所有字符串文字都可以看作实现该类的实例. 特点: 字符串不可变:字符串的值在创建后不能在发生改变 public cla ...

  10. 生成二维码项目pom.xml中QRCode依赖报错

    pom.xml报错如下: 解决方法: 1.将QRCode.jar包下载到E盘下 网盘下载地址: 链接:https://pan.baidu.com/s/1sY1NK5ekCkNH0uqraZMnKw 提 ...