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