saltstack二次开发构建自己的api

首先saltstack的介绍这里略去

官方网站

github网站https://github.com/saltstack/salt

中文网站 (@绿小小肥创建的,得到官方认可的中文网站)

国内QQ交流群 294953305(已满员) 220852394(可加入)

salt的python API ?highlight=api

看看salt能干什么呢

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

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

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

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

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

views.py的内容如下

# Create your views here.# coding=utf-8# author: itnihao#qq.com# # date: 2013-12-05from django.http import HttpResponsefrom django.contrib import authfrom django.views.decorators.csrf import csrf_exemptimport saltimport jsonimport yaml@csrf_exemptdef 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,servicenameavailable 服务是否有效,,参数id,servicenameget_all获取所有的服务状态,参数idget_enabled 获取所有已经开启的服务,参数idenable设置开机自启动,参数id,servicenameenabled返回开机是否为自启动状态,参数id,servicenameget_disabled获取所有已经关闭的服务,参数iddisable设置开机不自启动,参数id,servicenamedisabled 返回开机是否为不自启动状态,参数id,servicenamestart开启服务,参数id,servicenamestop停止服务,参数id,servicenamerestart重启服务,参数id,servicenamereload热加载配置文件,参数id,servicenamestatus查看服务状态,参数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页面的交互操作,再者,上面的例子是没有考虑到用户认证和安全等因素的。

开始模拟测试了

换其他参数

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

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

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

好了,本文已经结束。

本文出自 “itnihao的运维技术博客” 博客,请务必保留此出处

每天告诉自己一次,『我真的很不错』

saltstack二次开发构建自己的api

相关文章:

你感兴趣的文章:

标签云: