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  in  [ 'id' , 'status' ]:
             if  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  in  [ 'servicename' ]:
                 if  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  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,如需转载请自行联系原作者

相关文章
|
2月前
|
JSON 缓存 JavaScript
深入浅出:使用Node.js构建RESTful API
在这个数字时代,API已成为软件开发的基石之一。本文旨在引导初学者通过Node.js和Express框架快速搭建一个功能完备的RESTful API。我们将从零开始,逐步深入,不仅涉及代码编写,还包括设计原则、最佳实践及调试技巧。无论你是初探后端开发,还是希望扩展你的技术栈,这篇文章都将是你的理想指南。
|
27天前
|
安全 API 数据安全/隐私保护
自学记录HarmonyOS Next DRM API 13:构建安全的数字内容保护系统
在完成HarmonyOS Camera API开发后,我深入研究了数字版权管理(DRM)技术。最新DRM API 13提供了强大的工具,用于保护数字内容的安全传输和使用。通过学习该API的核心功能,如获取许可证、解密内容和管理权限,我实现了一个简单的数字视频保护系统。该系统包括初始化DRM模块、获取许可证、解密视频并播放。此外,我还配置了开发环境并实现了界面布局。未来,随着数字版权保护需求的增加,DRM技术将更加重要。如果你对这一领域感兴趣,欢迎一起探索和进步。
85 18
|
1月前
|
JSON JavaScript 前端开发
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发作为连接用户与数据的桥梁,扮演着至关重要的角色。本文将引导您步入Node.js的奇妙世界,通过实践操作,掌握如何使用这一强大的JavaScript运行时环境构建高效、可扩展的RESTful API。我们将一同探索Express框架的使用,学习如何设计API端点,处理数据请求,并实现身份验证机制,最终部署我们的成果到云服务器上。无论您是初学者还是有一定基础的开发者,这篇文章都将为您打开一扇通往后端开发深层知识的大门。
58 12
|
2月前
|
监控 安全 API
深入浅出:构建高效RESTful API的最佳实践
在数字化时代,API已成为连接不同软件和服务的桥梁。本文将带你深入了解如何设计和维护一个高效、可扩展且安全的RESTful API。我们将从基础概念出发,逐步深入到高级技巧,让你能够掌握创建优质API的关键要素。无论你是初学者还是有经验的开发者,这篇文章都将为你提供实用的指导和启示。让我们一起探索API设计的奥秘,打造出色的后端服务吧!
|
2月前
|
JSON 缓存 测试技术
构建高效RESTful API的后端实践指南####
本文将深入探讨如何设计并实现一个高效、可扩展且易于维护的RESTful API。不同于传统的摘要概述,本节将直接以行动指南的形式,列出构建RESTful API时必须遵循的核心原则与最佳实践,旨在为开发者提供一套直接可行的实施框架,快速提升API设计与开发能力。 ####
|
2月前
|
JavaScript NoSQL API
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发如同一座灯塔,指引着数据的海洋。本文将带你航行在Node.js的海域,探索如何从一张白纸到完成一个功能完备的RESTful API。我们将一起学习如何搭建开发环境、设计API结构、处理数据请求与响应,以及实现数据库交互。准备好了吗?启航吧!
|
2月前
|
JSON API 数据格式
探索后端开发:从零构建简易RESTful API
在数字时代的浪潮中,后端开发如同搭建一座桥梁,连接着用户界面与数据世界。本文将引导读者步入后端开发的殿堂,通过构建一个简易的RESTful API,揭示其背后的逻辑与魅力。我们将从基础概念出发,逐步深入到实际操作,不仅分享代码示例,更探讨如何思考和解决问题,让每一位读者都能在后端开发的道路上迈出坚实的一步。
|
2月前
|
JSON 前端开发 API
使用Python和Flask构建简易Web API
使用Python和Flask构建简易Web API
151 3
|
2月前
|
存储 API 数据库
使用Python和Flask构建简单的RESTful API
使用Python和Flask构建简单的RESTful API
|
2月前
|
安全 测试技术 API
构建高效RESTful API:后端开发的艺术与实践####
在现代软件开发的浩瀚星空中,RESTful API如同一座桥梁,连接着前端世界的绚丽多彩与后端逻辑的深邃复杂。本文旨在探讨如何精心打造一款既高效又易于维护的RESTful API,通过深入浅出的方式,剖析其设计原则、实现技巧及最佳实践,为后端开发者提供一份实用的指南。我们不深入晦涩的理论,只聚焦于那些能够即刻提升API品质与开发效率的关键点,让你的API在众多服务中脱颖而出。 ####
40 0

热门文章

最新文章