saltstack二次开发构建自己的api

简介:

看看salt能干什么呢

205801712.png

   也就是salt.states和salt.modules这2部分功能。

   salt-cloud,salt-ssh等众多功能,具有很强大的功能和当下最需要的功能,所以saltstack在当前,以及未来,都有很大的发展空间。

   在这个例子中,是用django+salt来提供api(restful api),方便给其他运维管理系统统一调度

   其实官方是有api的,但是我这里为什么要自己写,是因为官方的api和自己的应用以及想法有出入,所以只能自己造轮子。

   给出一个django views.py的例子,至于django的其他配置,这里不演示,所以本文也只能做部分参考,仅仅是思路(别说照着本文做不出来哦,更多的内容,请学习官方文档)

   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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# Create your views here.
# coding=utf-8
# author:  itnihao#qq.com
# http://www.itnihao.com
# date: 2013-12-05
from  django.http  import  HttpResponse
from  django.contrib  import  auth
from  django.views.decorators.csrf  import  csrf_exempt
import  salt
import  json
import  yaml
@csrf_exempt
def  control(request):
     if  request.method  = =  "POST" :
         for  k  in  [ 'id' , 'status' ]:
             if  k  not  in  request.POST:
                 data = 'give arg "{0}" a value' . format (k)
                 return  HttpResponse(data,mimetype = 'application/json' )
         id = request.POST[ 'id' ]
         #servicename=request.POST['servicename']
         status = request.POST[ 'status' ]
         id = str ( id )
         #servicename=str(servicename)
         status = str (status)
         result = {}
         '''
         必须接的参数是status,可接的参数为id,servicename
         available   服务是否有效,参数id,servicename
         get_all     获取所有的服务状态,参数id
         get_enabled 获取所有已经开启的服务,参数id
         enable      设置开机自启动,参数id,servicename
         enabled     返回开机是否为自启动状态,参数id,servicename
         get_disabled获取所有已经关闭的服务,参数id
         disable     设置开机不自启动,参数id,servicename
         disabled    返回开机是否为不自启动状态,参数id,servicename
         start       开启服务,参数id,servicename
         stop        停止服务,参数id,servicename
         restart     重启服务,参数id,servicename
         reload      热加载配置文件,参数id,servicename
         status      查看服务状态,参数id,servicename
         '''
         if  status  not  in  [ 'get_all' , 'get_disabled' , 'get_enabled' , 'available' , 'disable' , 'disabled' , 'enable' , 'enabled' , 'start' , 'stop' , 'restart' , 'reload' , 'status' ]:
             data = 'status must in [available|get_all|get_disabled|disable|disabled|get_enabled|enable|enabled|start|stop|restart|reload|status]'
             return  HttpResponse(data,mimetype = 'application/json' )
         cmd = 'service.{0}' . format (status)
         id = id .split( ',' )
         if  status  in  [ 'get_all' , 'get_disabled' , 'get_enabled' ]:
             ret_dict = salt.client.LocalClient().cmd( id ,cmd,expr_form = 'list' ,timeout = 30 )
         if  status  in  [ 'available' , 'disable' , 'disabled' , 'enable' , 'enabled' , 'start' , 'stop' , 'restart' , 'reload' , 'status' ]:
             for  k  in  [ 'servicename' ]:
                 if  k  not  in  request.POST:
                     data = 'give arg "{0}" a value' . format (k)
                     return  HttpResponse(data,mimetype = 'application/json' )
             servicename = request.POST[ 'servicename' ]
             ret = salt.client.LocalClient().cmd( id ,cmd,[servicename],expr_form = 'list' ,timeout = 300 )
             ret_dict = {}
             for  k  in  ret.keys():
                 is_true = ret[k]
                 msg = 'service name: {0},action: {1},result:  ' . format (servicename,status)
                 if  is_true:
                     s1 = { 'id' :k, 'status' : '1' , 'msg' :msg + 'ok' }
                     ret_dict.update(s1)
                 else :
                     s2 = { 'id' :k, 'status' : '0' , 'msg' :msg + 'not ok' }
                     ret_dict.update(s2)
         result.update(ret_dict)
         data = json.dumps(result,sort_keys = True ,indent = 4 ,separators = ( ',' , ':' ))
         return  HttpResponse(data,mimetype = 'application/json' )
     else :
         return  HttpResponse( 'method is not allowed' ,mimetype = 'application/json' )


   在浏览器里面执行写好的应用,我这里的地址如下,如图演示的是在火狐浏览器,用插件rest client模拟html提交数据,当然正式的环境是需要给用户一个html页面的交互操作,再者,上面的例子是没有考虑到用户认证和安全等因素的。

   开始模拟测试了

210659415.jpg

换其他参数

210957422.png

执行命令里面返回了结果,一个类restful api接口。


以上只是抛砖引玉的一段实现代码,希望对大家有所帮助,更详细的内容就不写了。

大家可以多研究下官方文档,去实现更多功能。

好了,本文已经结束。



本文转自it你好 51CTO博客,原文链接:http://blog.51cto.com/itnihao/1336699,如需转载请自行联系原作者

相关文章
|
机器学习/深度学习 JSON 监控
如何通过API技术提升电商客户忠诚度:构建智能化客户关系引擎
在电商竞争激烈的当下,客户忠诚度成为核心壁垒。通过API技术构建智能化客户关系系统,整合全渠道数据,实现个性化推荐与自动化运营,提升用户黏性与复购率。结合实时行为分析、差异化定价、积分系统等手段,打造高效忠诚度管理体系,助力企业实现长期增长。
|
数据采集 机器学习/深度学习 搜索推荐
利用通义大模型构建个性化推荐系统——从数据预处理到实时API部署
本文详细介绍了基于通义大模型构建个性化推荐系统的全流程,涵盖数据预处理、模型微调、实时部署及效果优化。通过采用Qwen-72B结合LoRA技术,实现电商场景下CTR提升58%,GMV增长12.7%。文章分析了特征工程、多任务学习和性能调优的关键步骤,并探讨内存优化与蒸馏实践。最后总结了大模型在推荐系统中的适用场景与局限性,提出未来向MoE架构和因果推断方向演进的建议。
1992 11
|
安全 Java API
使用 Java 构建强大的 REST API 的四个基本技巧
本文结合探险领域案例,分享Java构建REST API的四大核心策略:统一资源命名、版本控制与自动化文档、安全防护及标准化异常处理,助力开发者打造易用、可维护、安全可靠的稳健API服务。
686 116
|
监控 安全 数据挖掘
构建自定义电商数据分析API
在电商业务中,构建自定义数据分析API可实现销售、用户行为等指标的实时分析。本文介绍如何设计并搭建高效、可扩展的API,助力企业快速响应市场变化,提升决策效率。
|
人工智能 API 开发工具
构建AI智能体:一、初识AI大模型与API调用
本文介绍大模型基础知识及API调用方法,涵盖阿里云百炼平台密钥申请、DashScope SDK使用、Python调用示例(如文本情感分析、图像文字识别),助力开发者快速上手大模型应用开发。
3600 18
构建AI智能体:一、初识AI大模型与API调用
|
运维 NoSQL Serverless
《第四纪元》玩得轻松,构建也轻松 | 阿里云云原生 API 网关、函数计算助力 IGame 快速构建轻休闲游戏
在轻休闲游戏流量波动大、生命周期短的背景下,传统架构难以应对成本与扩展挑战。本文介绍了基于阿里云函数计算 FC 和 Redis 构建的新一代服务器架构,实现弹性伸缩、成本优化与高效运维,助力轻休闲游戏快速迭代与稳定运营,提升开发效率并降低运维复杂度。
《第四纪元》玩得轻松,构建也轻松 | 阿里云云原生 API 网关、函数计算助力 IGame 快速构建轻休闲游戏
|
监控 安全 API
构建坚不可摧的防线:全方位保障API接口数据安全
在数字化时代,API作为系统间数据沟通的桥梁,其安全性至关重要。本文系统解析API安全的四大基石:身份认证、授权管理、数据完整性与机密性,并深入探讨HTTPS加密、强认证机制、精细授权、数据保护及纵深防御等关键技术实践,帮助企业构建全面的API安全体系,防范数据泄露与攻击风险,保障数据传输安全与业务稳定运行。
|
监控 安全 测试技术
从0到1构建电商API:如何用规范设计省下百万维护成本?
本文系统解析电商API接口开发全流程,涵盖需求分析、架构设计、安全实践、测试上线及文档维护等关键环节,结合技术规范与实际案例,助力构建高可用、可扩展的电商系统。
|
SQL 安全 BI
Dataphin数据服务API行级权限管控解决方案 ——构建企业级数据安全的精细化管控体系
Dataphin数据服务推出行级权限管控功能,解决传统权限管理中用户权限分散、管控复杂等问题。支持直连与代理双模式访问,实现API与SQL权限统一管理,满足金融、零售、医疗等行业对数据访问的精细化控制需求。通过动态权限决策引擎和自动化继承体系,确保数据安全且提升应用开发效率。
1401 0

推荐镜像

更多