首页 > 其他分享 >基于django+ansible+webssh运维自动化管理系统

基于django+ansible+webssh运维自动化管理系统

时间:2023-04-23 12:11:36浏览次数:41  
标签:name 运维 models webssh dic back django user password

基于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': '[email protected]'}
            clean_data = form_obj.cleaned_data  # 将校验通过的数据字典赋值给一个变量
            # 将字典里面的confirm_password键值对删除
            clean_data.pop('confirm_password')  # {'username': 'jason', 'password': '123', 'email': '[email protected]'}

            # 直接操作数据库保存数据 这里 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
 
注:其他问题请参看视频讲解,都有介绍,一定要认真看完哦!

标签:name,运维,models,webssh,dic,back,django,user,password
From: https://www.cnblogs.com/guosaike/p/17346171.html

相关文章

  • 破防了,这才是机房运维的高效方法
    在云计算、5G等新业务野蛮生长的催化下,机房规模与容量也呈倍速扩张。机房安全是业务发展的底座。提升机房设备安全和管理效率,避免人为因素导致的事故发生,是机房运维的必要前提。安全生产重于泰山,除了日常的科学防护,中外运维也曾一致的走近玄学。了解工作性质,似乎也不难理解这个现象......
  • 如何做好今天的运维
    近年来很多声音讨论运维岗是不是会被替代的问题。但随着ChatGPT的出现和更多大模型的发布,似乎每个岗位都应该考虑下自己被替代的问题了。无论未来如何变化,现实是今天的我们仍然需要做好自己的工作,站好自己的岗。今天我将分享我所认为的优秀运维和架构师应该是怎样的。最后是关于运......
  • 运维 —— IMP-00030: failed to create file import_sys for write
    IMP-00030:failedtocreatefileimport_sysforwriteIMP-00000:Importterminatedunsuccessfully原因:操作系统用户oracle对dmp文件没有权限drwxr-xr-x 2root  root       42Feb 316:57dmp_dir解决办法:登录root用户,对用户oracle赋予dmp文件一些权限在root......
  • 阿里云1+X云计算开发与运维实战——在ECS中部署容器化应用Nginx
    1.1 实验概述开始实验后,系统自动创建一个Linux的ECS实例。根据实验步骤操作说明,安装Docker应用,熟悉Docker的基本指令,拉取容器化应用Nginx的镜像,部署Nginx应用,最后验证部署结果。1.2 实验目的熟悉Docker的安装和基本指令,熟悉部署Docker应用基本方法。1.3实验架构1.4实验准备实验......
  • django前后端连接数据库的增删查改
    目录配置修改1.templates目录修改路径2.如果要添加新的应用的话则需要在installed_apps里面加上去3.static静态文件的配置成动态文件4.连接数据库5.前期发送post请求需要注释掉配置文件中的某一行urls.py存储网址后缀与函数名对应的关系(开设接口)数据库数据数据展现功能1.t......
  • 阿里云1+X云计算开发与运维实战——使用kubectl命令行工具对容器进行操作
    1、实验概述使用Kubectl 命令行工具操作 kubernetes 集群是最直接的管理集群的途径。开始实验后,系统自动在阿里云上创建一个Kubernetes集群。根据实验步骤操作说明,远程登陆集群master节点,然后使用kubectl命令行工具,对集群进行基本操作。包括创建资源对象,显示和查找资源对象,更新......
  • Django框架基础5
    本节知识重点:  1、判断变量值是否相等(equal)  2、extends模板继承标签  3、load加载标签或过滤器  4、模板继承的应用(block与extends)  5、路由分发函数(include)  6、url标签实现反向解析(先app_name='index',再{%url%})  7、reverse()函数实现反向解析(......
  • Django笔记十二之defer、only指定返回字段
    本文首发于公众号:Hunter后端原文链接:Django笔记十二之defer、only指定返回字段本篇笔记将介绍查询中的defer和only两个函数的用法,笔记目录如下:deferonly1、deferdefer的英语单词的意思是延迟、推迟,我们可以通过将字段作为参数传入,可以达到在获取数据的时候指定不获......
  • Django 知识库:path()路径映射
    网站地址是由统一资源定位符表示的,也是就我们常说的url。Django中有非常强大的path()方法,可以动态构造出你想要的各种不同形态的url。基本写法如下:fromdjango.urlsimportpathurlpatterns=[#固定地址path('articles/2003/',...),#可传入int参......
  • Django—Form两种解决表单数据无法动态刷新的方法
    一、无法动态更新数据的实例#Createyourmodelshere.classClasses(models.Model):title=models.CharField(max_length=32)def__str__(self):returnself.titleclassTeacher(models.Model):name=models.CharField(max_length=32)t2c=model......