基于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运维自动化管理系统的更多相关文章

  1. Ansible 运维自动化 ( 配置管理工具 )

    背景 出差背景,要搞项目的自动化部署.因为只直接对接生产分发,机器又非常多,这样以往使用的bat只能作为应急方案了,还是得考虑使用专业化的工具来做这个事情! 当下有许多的运维自动化工具( 配置管理 ) ...

  2. 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 ...

  3. Ansible运维自动化

    Ansible运维自动化 一.Ansible-playbook的初步使用 playbook的使用,playbook可以把ansible的模块进行组合 ln -s /usr/local/python/b ...

  4. 运维自动化神器ansible之user模块

    运维自动化神器ansible之user模块 一.概述   user模块 可管理远程主机上的 用户,比如创建用户.修改用户.删除用户.为用户创建密钥对等操作. 二.参数介绍   name: 用于指定操作 ...

  5. 运维自动化之ansible的安装与使用 转

    运维自动化之ansible的安装与使用 随着服务器数量的增长,我们需要一个批量工具去提高工作效率,之前用的是puppet,ansible的简单,适用让我眼前一亮,决定写一篇ansible从安装到基本配 ...

  6. 运维自动化之1 - ansible 批量主机管理

    2000 - 2016 年,维护的小型机.linux刚开始的2台增加到上千台,手工检查.日常版本升级需要管理太多设备,必须通过运维自动化实现 特别是版本升级,需要到同类机器部署代码.起停设备,必须在一 ...

  7. lykops运维自动化

    lykops lykops是一套web可视化的运维自动化项目,基于python3+django开发的. 已实现功能 1.用户管理 详情 2.主机管理 主要功能:收录主机,为其他模块(例如:执行任务)直 ...

  8. 运维自动化之salt笔记

    1:saltstack的基本介绍 2:salt的安装 1:服务端1:安装2:配置文件3:运行4:注意事项2:客户端1:安装2:配置文件3:运行4:注意事项 3:salt的使用: 1:基础知识1:tar ...

  9. 运维自动化之puppet3分钟入门

    运维自动化之puppet3分钟入门 几个月前曾因为项目需求而学了点puppet的一些知识,最近因为要给别人讲一下,也就借此博文来做一下回忆,当然了,这个puppet用起来还是很不错的,尤其对我这种懒人 ...

  10. 运维自动化管理服务器 CheungSSH

    CheungSSH 是一款中国人自主研发的Linux运维自动化管理服务器软件,后端使用 Python 语言+Django 的 Web 框架,前端使用 Bootstrap+Javascript+jQue ...

随机推荐

  1. ES5及ES6的新增特性

    介绍 es表示ECMASCript ,他是从es3,es5,es6,es5是2009.12月发布的,es6是2015.6月发布的.vue2完全支持es5的(vue3完全支持es6的),react完全支 ...

  2. http请求的方法

    1.OPTIONS 返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送'*'的请求来测试服务器的功能性. 2.HEAD 向服务器索要与GET请求相一致的相应,只不过响应体将不 ...

  3. IT工具知识-13: 如何编辑SVG图像文件并转换为ICO图标文件

    使用背景 最近做了个小软件, 但是桌面快捷方式图标不好看, 于是想着找个好看点的图标, 但是网上搜了一圈, 发现好看的几乎都要钱, 常用的话, 付费倒也不反感, 但是, 仅仅只用那么一两次, 为这个付 ...

  4. AD使用积累 - 相同网络的覆铜和走线无法自动连接问题

    像下图中这样,铜皮和走线是同一个网络,却没有连在一起. 解决方法: 选中目标铜皮,在在Properties中的Fill Mode中找到这个部分,先择Pour Over All Same Net Obj ...

  5. html超链接相关代码

    1. <IDOCTYPE html>< html><head><title>图像和超链接</title><meta http-equi ...

  6. web自动化--窗口切换

    窗口切换 handles = driver.window_handles ------获取所有窗口句柄,返回的数据是一个列表类型 driver.switch_to.window(handles[-1] ...

  7. 06-Spring整合mybatis实现简易登录

    1. 文件结构 pojo-Users: //属性名与数据库列名一致 public class Users implements Serializable { private int uid; priv ...

  8. 使用Wireshark查看HTTPS中TLS握手过程

    通过使用Wireshark抓包分析TLS握手的过程,可以更容易理解和验证TLS协议,本文将先介绍Wireshark解密HTTPS流量的方法,然后分别验证TLS握手过程和TLS会话恢复的过程. 一.使用 ...

  9. 手把手教你蜂鸟e203移植(以Nexys4DDR为例)

    准备工作:(网盘链接:) 1.蜂鸟e203的RTL源码: 2.一段分频代码: 3.顶层设计文件(system.v) 4.开发板文件: 5.Nexys4DDR电路图: 6.Nexys4DDR管脚约束模板 ...

  10. MS-08-067 windows smb服务 远程命令执行漏洞

    漏洞概要 MS-08-067是Windows平台中smb服务445端口的远程代码执行漏洞 利用成功可以远程控制主机 影响范围为:windows2000.xp.server 2003.server 20 ...