本文共 3514 字,大约阅读时间需要 11 分钟。
看看salt能干什么呢
也就是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页面的交互操作,再者,上面的例子是没有考虑到用户认证和安全等因素的。
开始模拟测试了
换其他参数
执行命令里面返回了结果,一个类restful api接口。
以上只是抛砖引玉的一段实现代码,希望对大家有所帮助,更详细的内容就不写了。
大家可以多研究下官方文档,去实现更多功能。
好了,本文已经结束。
本文转自it你好 51CTO博客,原文链接:http://blog.51cto.com/itnihao/1336699,如需转载请自行联系原作者