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,如需转载请自行联系原作者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值