Django开发运维后台(五):formview结合salt执行命令

简介:

远程执行命令我使用saltstack这个运维工具,执行一些系统命令可以直接使用salt,执行一些相关的游戏脚本,则可以使用salt的模块功能,最后还可以把结果存入数据库,太方便了

saltstack 自定义modules:http://lihuipeng.blog.51cto.com/3064864/1396279

saltstack return的使用:http://lihuipeng.blog.51cto.com/3064864/1403387

saltstack API的使用:http://docs.saltstack.cn/ref/clients/index.html#localclient

我这里使用了多数据库,django多数据库的配置参考:http://lihuipeng.blog.51cto.com/3064864/1415141


models.py(这个salt官方需要的两个表)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class  QjshsaJids(models.Model):
     _database  =  'kaifu'
     id  =  models.IntegerField(primary_key = True )
     jid  =  models.CharField(unique = True , max_length = 255 )
     load  =  models.TextField()
     class  Meta:
         managed  =  False
         db_table  =  'QjshSa_jids'
 
class  QjshsaSaltreturns(models.Model):
     _database  =  'kaifu'
     id  =  models.IntegerField(primary_key = True )
     fun  =  models.CharField(max_length = 50 )
     jid  =  models.CharField(max_length = 255 )
     result  =  models.TextField()
     host  =  models.CharField(max_length = 255 )
     success  =  models.CharField(max_length = 10 )
     full_ret  =  models.TextField()
     class  Meta:
         managed  =  False
         db_table  =  'QjshSa_saltreturns'

forms.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
systemcommand  =  [
                         ( 'df -lh' , 'df -lh' ),
                         ( 'free -m' , 'free -m' ),
                         ( 'uptime' , 'uptime' ),
                         ( 'netstat -tunlp' , 'netstat -tunlp' ),
                         ( 'ps aux | grep "daemon"' , 'ps aux | grep "daemon"' ),
                         ( 'crontab -l' 'crontab -l' ),
                      ]
 
 
class  ExecuteSystemForm(forms.Form):
     plat  =  forms.CharField(required = True ,
                            widget = forms.TextInput(attrs = { 'readonly' : 'True' 'class' : "form-control" }))
     server_id  =  forms.CharField(required = True ,
                                 widget = forms.TextInput(attrs = { 'readonly' : 'True' 'class' : "form-control" }))
     server_name  =  forms.CharField(required = True ,
                                 widget = forms.TextInput(attrs = { 'readonly' : 'True' 'class' : "form-control" }))
     host  =  forms.CharField(required = True ,
                            widget = forms.TextInput(attrs = { 'readonly' : 'True' 'class' : "form-control" }))
     command  =  forms.ChoiceField(required = True ,
                                 choices = systemcommand,
                                 widget = forms.Select(attrs = { 'class' : "form-control" }))

我限定了可以执行某些命令,感觉这样我安心一些。。。


views.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class  ExecuteSystem(FormView):
     template_name  =  'execute_system.jinja.html'
     form_class  =  ExecuteSystemForm
 
 
     def  get_initial( self * * kwargs):
         initial  =  {}
         kaifuid  =  self .kwargs[ 'pk' ]
         serverinfo  =  ServerList.objects.get(kaifu_id = kaifuid)
         initial[ 'plat' =  serverinfo.plat
         initial[ 'server_id' =  serverinfo.server_id
         initial[ 'server_name' =  serverinfo.server_name
         initial[ 'host' =  serverinfo.dx_ip
         return  initial
 
     def  form_valid( self , form):
         formdata  =  form.cleaned_data
         host  =  formdata[ 'host' ]
         command  =  formdata[ 'command' ]
         saltconnection  =  salt.client.LocalClient()
         result  =  saltconnection.cmd(host,  'cmd.run' , [command], ret = 'qjsh_mysql' )
         result  =  result[host]
         messages.success( self .request, '执行成功!' )
         return  render_to_response( self .template_name,
                                   { 'form' :form, 'kaifuid' : self .kwargs[ 'pk' ], 'result' :result},
                                   context_instance = RequestContext( self .request))
 
 
     def  get_context_data( self * * kwargs):
         context  =  super (ExecuteSystem, self ).get_context_data( * * kwargs)
         context[ 'kaifuid' =  self .kwargs[ 'pk' ]
         return  context

get_inital是初始化form

form_valid是表单通过验证后执行的

execute_system.jinja.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
{% from "form_macro.html" import render_field, render_checkbox%}
{% extends "execute_cmd_index.jinja.html" %}
{% set active_page2 = 'executesystem' -%}
{% block content %}
     < div  class = "row" >
         < div  class = "col-md-6" >
             < form  class = "form-inline"  role = "form"  method = "POST" >{% csrf_token %}
                 < table  class = "table table-bordered table-hover" >
                     < tr >
                         < td >平台名称:</ td >
                         < td >{{ form.plat|safe }}</ td >
                     </ tr >
                     < tr >
                         < td >服务器ID:</ td >
                         < td >{{ form.server_id|safe }}</ td >
                     </ tr >
                     < tr >
                         < td >服务器名称:</ td >
                         < td >{{ form.server_name|safe }}</ td >
                     </ tr >
                     < tr >
                         < td >执行IP:</ td >
                         < td >{{ form.host|safe }}</ td >
                     </ tr >
                     < tr >
                         < td >执行命令:</ td >
                         < td >
                             < div  class = "form-group" >
                                 {{ form.command|safe }}
                             </ div >
                         </ td >
                     </ tr >
                     < tr >
                         < td  colspan = "2" >< center >< button  type = "submit"  class = "btn btn-info" >确定</ button ></ center ></ td >
                     </ tr >
                 </ table >
             </ form >
         </ div >
     </ div >
     {% if result %}
     < hr >
     < div  class = "row" >
         < div  class = "panel panel-primary" >
             < div  class = "panel-heading" >
                 < h3  class = "panel-title" >执行结果:</ h3 >
             </ div >
             < div  class = "panel-body" >
                 < pre >< core >`result`</ core ></ pre >
             </ div >
         </ div >
     </ div >
     {% endif %}
{% endblock %}

最后我实现的效果:

wKiom1PMzc3xw83eAAFklYkH6s0158.jpg

wKioL1PMzuijHJM2AAIRjGr_jKY071.jpg

本文转自运维笔记博客51CTO博客,原文链接http://blog.51cto.com/lihuipeng/1440954如需转载请自行联系原作者


lihuipeng


相关文章
|
4月前
|
人工智能 运维 Kubernetes
别再手动敲命令了!运维自动化才是打工人的“自救之道”
别再手动敲命令了!运维自动化才是打工人的“自救之道”
112 8
|
4月前
|
SQL 运维 自然语言处理
Dataphin智能化重磅升级!编码难题一扫光,开发运维更高效!
Dataphin重磅推出三大核心智能化能力:智能代码助手提升SQL开发效率;智能运维助手实现移动化任务管理;智能分析通过自然语言生成SQL,助力数据价值释放。未来将持续开放智能ETL、安全助手等能力,助力企业构建高效、稳定的数据资产体系。
424 0
|
5月前
|
人工智能 OLAP 数据处理
解锁数仓内AI流水线,AnalyticDB Ray基于多模ETL+ML提效开发与运维
AnalyticDB Ray 是AnalyticDB MySQL 推出的全托管Ray服务,基于开源 Ray 的丰富生态,经过多模态处理、具身智能、搜索推荐、金融风控等场景的锤炼,对Ray内核和服务能力进行了全栈增强。
|
8月前
|
人工智能 运维 安全
AI大模型运维开发探索第四篇:智能体分阶段演进路线
本文探讨了智能体工程的演进历程,从最初的思维链(智能体1.0)到实例化智能体(智能体2.0),再到结构化智能体(智能体3.0),最终展望了自演进智能体(智能体4.0)。文章详细分析了各阶段遇到的问题及解决策略,如工具调用可靠性、推理能力提升等,并引入了大模型中间件的概念以优化业务平台与工具间的协调。此外,文中还提到了RunnableHub开源项目,为读者提供了实际落地的参考方案。通过不断迭代,智能体逐渐具备更强的适应性和解决问题的能力,展现了未来AI发展的潜力。
|
4月前
|
敏捷开发 运维 数据可视化
DevOps看板工具中的协作功能:如何打破开发、测试与运维之间的沟通壁垒
在DevOps实践中,看板工具通过可视化任务管理和自动化流程,提升开发与运维团队的协作效率。它支持敏捷开发、持续交付,助力团队高效应对需求变化,实现跨职能协作与流程优化。
|
4月前
|
人工智能 运维 自然语言处理
首个智能体模型实测:产品、开发、运维“全包了”
2025年,AI进入“动手”时代。智谱发布新一代大模型GLM-4.5,全球排名第三、国产第一,专为智能体设计,融合推理、编码与智能体能力,实现自主规划与执行任务。通过8个Demo展示其强大能力,涵盖网页设计、课件制作、小游戏开发等,展现其“带手的脑”特性,推动AI从实验室走向真实场景。
267 0
|
4月前
|
存储 测试技术 数据库
Django模型迁移指南:从命令用法到最佳实践
Django迁移系统是数据库版本控制工具,通过生成迁移文件、应用迁移和回滚操作,实现模型与数据库结构的同步。支持迁移生成、应用、冲突解决及遗留数据库集成,确保开发过程中的数据模型一致性与灵活性。
213 0
|
8月前
|
弹性计算 人工智能 运维
摆脱繁琐命令-让运维更加流畅-阿里云ECS操作系统控制台运维篇
阿里云操作系统控制台提供了便捷的服务器监控与管理功能,简化了运维工作。通过将多台服务器纳入统一监控平台,用户可以快速查看CPU、内存、磁盘和网络等关键资源的使用情况,避免了逐一远程连接查询的繁琐操作。此外,该工具支持自动化数据汇总,极大地方便了日报、周报和月报的编写。测试过程中,系统展示了良好的稳定性和响应速度,尤其在网络抖动和大文件健康状态测试中表现出色。整体体验流畅,显著提升了运维效率。 操作系统控制台地址:[点击访问](https://alinux.console.aliyun.com/)
237 26
摆脱繁琐命令-让运维更加流畅-阿里云ECS操作系统控制台运维篇
|
11月前
|
存储 分布式计算 Hadoop
【产品升级】Dataphin V4.4重磅发布:开发运维提效、指标全生命周期管理、智能元数据生成再升级
Dataphin V4.4版本引入了多项核心升级,包括级联发布、元数据采集扩展、数据源指标上架、自定义属性管理等功能,大幅提升数据处理与资产管理效率。此外,还支持Hadoop集群管理、跨Schema数据读取、实时集成目标端支持Hudi及MaxCompute delta等技术,进一步优化用户体验。
890 3
【产品升级】Dataphin V4.4重磅发布:开发运维提效、指标全生命周期管理、智能元数据生成再升级
|
10月前
|
运维
阿里云服务器批量执行命令(系统运维管理oos)
阿里云【系统运维管理oos】批量执行详情
194 5

热门文章

最新文章