基于django+ansible+webssh运维自动化管理系统
基于django+ansible+webssh运维自动化管理系统
前言
最初开发这个基于Django ansible运维自动化管理系统的想法其实从大学时候就已经有了,但是苦于技术原因和没有线上环境原因一直没有开发,现在有了这个技术和环境之后开始着手开发了这个项目,项目难点在于你要理解如何设计数据库,如果调用ansible_api,怎么调用web_ssh插件来管理主机,感谢那些总结好ansible_api和webssh大佬,有了这个丝路之后开发一个成熟的项目就是增删改查和具体插件也就不是很难了
1、项目说明
基于django+ansible+webssh运维自动化管理系统
项目需要安装pycharm专业版以及MySQL环境(环境搭建可以看我的B站里的视频有讲解)
- 首先需要创建数据库数据库名字叫做order_test(这里你可以自己换数据库名称)
- 运行sql导入数据或者也可以直接用命令生成(视频有讲解)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'order_test',
'USER': 'root',
'PASSWORD': 'password',
'HOST': 'host',
'PORT': 3306,
}
}
CREATE DATABASE `order_test` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci */;
- 需要安装一下下面的模块(如果运行提示有模块未安装,安装一下即可,命令同下,改一下模块名即可)
项目需要安装 Django、及其附带的其他一些模块
安装命令如下:
pip3 install -r requirements.txt
2、项目主要技术
python编程技术
mysql数据库技术
django框架技术
Ansible使用
Webssh
前端技术
3、 项目主要功能
- 分为管理员,用户两个角色,管理可以增删改查用户
- 管理可以增删改查主机
- 管理员可以为用户分配不同的组
- 用户可以操作对应组的主机
- 实现远程web_ssh连接服务器
- 实现用户可以执行playbook剧本
- 实现用户可以执行 ad_hoc 命令
- 实现审计功能,可以查看玩家历史操作
- 集成bootstrap前端模板
4、项目结构
Ansible_renwu 主程序(项目的配置文件、主路由)
Ansible_web 主要视图逻辑增删改查
templates 前端页面
manage.py 程序的入口
5、部分源码
models.py
class UserInfo(AbstractUser):
# user_name = models.CharField(u'用户名',max_length=30)
# user_pass = models.CharField(u'密码',max_length=80,blank=True,null=True,default="")
user_email = models.EmailField(verbose_name='邮箱',max_length=60)
phone = models.BigIntegerField(verbose_name='手机号', null=True, blank=True)
create_time = models.DateField(auto_now_add=True)
user_group = models.ManyToManyField("group",related_name='yonghuzu')
def __unicode__(self):
return self.user_email
def __unicode__(self):
return self.group_name
class zhuji(models.Model):
zhujiname = models.CharField(verbose_name='主机名',max_length=255)
ipaddr = models.CharField(verbose_name='ip地址',max_length=255)
zhuji_group = models.ForeignKey("group",verbose_name='主机组',max_length=255,on_delete=models.CASCADE)
zhuji_source = models.CharField(verbose_name='主机来源',max_length=255)
# 定义ansible执行任务的任务的主机-playbook_url-playbook_name
class ansible_renwu(models.Model):
playbook_name=models.CharField(verbose_name='playbook_name',max_length=255,default='')
zhuji=models.CharField(verbose_name='主机',max_length=255)
mokuai=models.CharField(verbose_name='mokuai',max_length=255,default='')
6、后端部分代码:
# 用户注册接口
def register(request):
form_obj = MyRegForm()
if request.method == 'POST':
back_dic = {"code": 1000, 'msg': ''}
# 校验数据是否合法
form_obj = MyRegForm(request.POST)
# 判断数据是否合法
if form_obj.is_valid():
# print(form_obj.cleaned_data) # {'username': 'jason', 'password': '123', 'confirm_password': '123', 'email': '123@qq.com'}
clean_data = form_obj.cleaned_data # 将校验通过的数据字典赋值给一个变量
# 将字典里面的confirm_password键值对删除
clean_data.pop('confirm_password') # {'username': 'jason', 'password': '123', 'email': '123@qq.com'}
# 直接操作数据库保存数据 这里 create_user 创建的密码是密文状态
models.UserInfo.objects.create_user(**clean_data)
back_dic['url'] = '/login/'
else:
back_dic['code'] = 2000
back_dic['msg'] = form_obj.errors
return JsonResponse(back_dic)
return render(request, 'register.html', locals())
# 用户登陆接口
def login(request):
if request.method == 'POST':
back_dic = {'code': 1000, 'msg': ''}
username = request.POST.get('username')
password = request.POST.get('password')
user_obj = auth.authenticate(request,username=username,password=password)
# print(user_obj)
print(username,password)
# user = models.UserInfo.objects.filter(user_name=username, user_pass=password).first()
if user_obj:
print('123')
auth.login(request, user_obj)
back_dic['url'] = '/ansible/'
back_dic['msg'] = '登录成功'
print(back_dic)
else:
back_dic['code'] = 2000
back_dic['msg'] = '用户名或密码错误'
# 这里对应 POST 必须返回一个 return 方法
return JsonResponse(back_dic)
return render(request, 'login.html',locals())
6、运行截图
首页

用户增删改查,分组


执行任务


web_ssh 远程连接


7、项目总结
本项目是一个针对想入行运维,运维开发的同学入门非常友好的视频,是我多年来的精华,对我们的Django框架技术以及开发经验的提升,完善简历提高技能都有有很大的帮助,推荐大家学习研究这个项目,搞懂其中的业务逻辑流程以及各个知识点非常关键。
项目资料截图:

资料获取地址:微信:gsk19980509
B站视频讲解地址:https://b23.tv/BG4JMQs
注:其他问题请参看视频讲解,都有介绍,一定要认真看完哦!
基于django+ansible+webssh运维自动化管理系统的更多相关文章
- Ansible 运维自动化 ( 配置管理工具 )
背景 出差背景,要搞项目的自动化部署.因为只直接对接生产分发,机器又非常多,这样以往使用的bat只能作为应急方案了,还是得考虑使用专业化的工具来做这个事情! 当下有许多的运维自动化工具( 配置管理 ) ...
- Ansible运维自动化工具19个常用模块使用实例【转】
一.模块列表 1.setup 2.ping 3.file 4.copy 5.command 6.shell 7.script 8.cron 9.yum 10.service 11.group 12.u ...
- Ansible运维自动化
Ansible运维自动化 一.Ansible-playbook的初步使用 playbook的使用,playbook可以把ansible的模块进行组合 ln -s /usr/local/python/b ...
- 运维自动化神器ansible之user模块
运维自动化神器ansible之user模块 一.概述 user模块 可管理远程主机上的 用户,比如创建用户.修改用户.删除用户.为用户创建密钥对等操作. 二.参数介绍 name: 用于指定操作 ...
- 运维自动化之ansible的安装与使用 转
运维自动化之ansible的安装与使用 随着服务器数量的增长,我们需要一个批量工具去提高工作效率,之前用的是puppet,ansible的简单,适用让我眼前一亮,决定写一篇ansible从安装到基本配 ...
- 运维自动化之1 - ansible 批量主机管理
2000 - 2016 年,维护的小型机.linux刚开始的2台增加到上千台,手工检查.日常版本升级需要管理太多设备,必须通过运维自动化实现 特别是版本升级,需要到同类机器部署代码.起停设备,必须在一 ...
- lykops运维自动化
lykops lykops是一套web可视化的运维自动化项目,基于python3+django开发的. 已实现功能 1.用户管理 详情 2.主机管理 主要功能:收录主机,为其他模块(例如:执行任务)直 ...
- 运维自动化之salt笔记
1:saltstack的基本介绍 2:salt的安装 1:服务端1:安装2:配置文件3:运行4:注意事项2:客户端1:安装2:配置文件3:运行4:注意事项 3:salt的使用: 1:基础知识1:tar ...
- 运维自动化之puppet3分钟入门
运维自动化之puppet3分钟入门 几个月前曾因为项目需求而学了点puppet的一些知识,最近因为要给别人讲一下,也就借此博文来做一下回忆,当然了,这个puppet用起来还是很不错的,尤其对我这种懒人 ...
- 运维自动化管理服务器 CheungSSH
CheungSSH 是一款中国人自主研发的Linux运维自动化管理服务器软件,后端使用 Python 语言+Django 的 Web 框架,前端使用 Bootstrap+Javascript+jQue ...
随机推荐
- SQL优化:重新编译存储过程和表
最近发现原来执行很快的存储过程,突然慢了下来,而很多存储过程每天就运行一次,所以打算把存储过程重新编译,另外,考虑到数据在不断变化,所以也要更新表的统计信息,这样能生成比较好的执行计划. 下面是具体的 ...
- (c语言描述 函数递归汉诺塔)
汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小顺序 ...
- Ubuntu解决无法远程连接
检查SSH是否安装 ssh localhost 如果没有安装,通过APT的命令安装 sudo apt install openssh-server 无法连接Ubuntu中的root用户 其他用户可以连 ...
- Keil MDK5编译时出现错误:error: L6002U: Could not open file …\obj\main.o: No such file or directory,
原因:电脑系统用户名中存在中文字符 解决:用户环境变量,找到变量 TEMP 和 TMP,将变量值中的"%USERPROFILE%"使用"C:\user\default&q ...
- 编写简单的button配合input实现上传文件操作
<template> <button> 导入文件 <input type="file" @change="fileChange" ...
- typescript开发vue项目二次封装的axios用return Promise.reject(error) 返回异常,提示[Vue warn]: Error in v-on handler (Promise/async)
二次封装axios时刻意服务端模拟了延迟返回数据的场景,用return Promise.reject(error) 返回异常,报如下错误, [Vue warn]: Error in v-on hand ...
- Rethinking Table Recognition using Graph Neural Networks
摘要:CNN用来视觉特征提取:图网络用来处理结构问题:由于缺少大量的数据,作者建立了一个合成数据集的数据库. 关键词:表格识别,结果分析:图神经网络,文档模型:图模型:数据库 源码地址;https:/ ...
- Thingsboard3.2.2本地部署
Thingboard3.2.2本地安装编译详细教程!!! 一:拉取源码. 创建一个空的文件夹 在此处使用git拉取源码. git clone https://github.com/thingsboar ...
- 什么是Markdown
什么是markdown? Markdown是一种轻量级标记语言,它允许人们使用已读一些的纯文本格式编写文档,然后转换成有效的XHTML(或者HTML)文档.这种语言吸收了很多在电子邮件中已有的纯文本标 ...
- jQuery下载步骤以及相关使用
jQuery下载 进入相关网址执行下载操作,网址在这里:http://www.jq22.com/jquery-info122 进入页面之后,页面的左侧,会有这样的显示: 我们需要自主在这里选择自己需要 ...