saltstack二次开发构建自己的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的内容如下
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,如需转载请自行联系原作者
saltstack二次开发构建自己的api相关推荐
- 手机微信群控二次开发SDK的部分API功能
手机微信群控二次开发SDK的部分API功能: 微信加好友功能API 1.导入手机通讯录 2.手机通讯录加好友 3.加指定微信群好友 4.自动通过微信好友请求 5.手机模拟定位 6.附近人加好友 7.各 ...
- SaltStack二次开发api
salt-api官方文档: http://www.unixhot.com/docs/saltstack/ref/netapi/all/salt.netapi.rest_cherrypy.html#a- ...
- ArcEngine二次开发-构建获取栅格图层属性表(ITable)
Arcgis Engine二次开发C#常用库封装:Github源码 有时候生成的栅格图层没有属性表,需要自己构建属性表.其中,不能为 32 位浮点像素类型的栅格数据集构建栅格属性表. 因此,首先要判断 ...
- 个人微信号二次开发的实现,api接口
各位兄弟姐妹们大家好!!!! 我又瞧到了好玩的微信机器人分享给大家! 社群运营这几年风头正盛,不能落伍啊,我们也赶紧组建了社群. 但是微信群还是社交属性为主的,当我们运营多个社群的时候会发现效率过低, ...
- 自动化(Automation)基础概念:二次开发接口(API)与插件(Addin)
二次开发接口(API)与插件(Addin) 许式伟 (版权声明) 2007-4-20 在前文,我们已经解释了: 自动化(Automation)基础概念:COM组件(Component)与接口(Inte ...
- python二次开发bim软件_BIM软件的二次开发有哪些工具?API工具你用过吗?
今天跟大家聊一聊api二次开发的问题,在传统的CAD软件或者现有的BIM软件都涉及到一个软件内核的问题.因为内核软件多由外国开放的,针对该软件所适应的设计规范往往都是内置了外国的设计规范,而国内不能过 ...
- catia三维轴承_浅谈基于CATIA二次开发的单排四点接触球轴承三维设计论文
浅谈基于CATIA二次开发的单排四点接触球轴承三维设计论文 一.概述 单排四点接触球转盘轴承是一种能够同时承受较大轴向负荷.径向负荷和倾覆力矩等综合载荷,集支承.旋转.传动.固定等多种功能于一身的特殊 ...
- 个人微信ipad二次开发
通过 API可以实现 个性化微信功能 (例:营销系统.云发单助手.社群管家webot.客服系统等),用来自动管理微信消息. 具体功能可以看一下图片了解,全面实用 可开发的功能包括以下功能: 好友管理: ...
- 快速搭建离线地图开发环境(局域网地图开发工具)离线地图二次开发
相关下载:For Linux版本下载 快速搭建离线地图开发环境 局域网地图服务 离线地图数据服务 二次开发 一.软件介绍 BIGEMAP离线地图服务器,提供一站式搭 ...
最新文章
- .NET中IDisposable接口的基本使用
- python读写二进制
- java中的方法 net.中的函数_.Net转Java.01.从Main(main)函数说起
- 用 Python 做数据处理必看:12 个使效率倍增的 Pandas 技巧(下)
- 缺失值和异常值的识别与处理_识别异常值-第一部分
- 余宏德:Sun所有的核心技术都是开放的
- Codeforces Gym 100463A Crossings 逆序数
- 游戏筑基开发之栈、队列及基本功能实现(使用C语言链表的相关知识)
- accp8.0转换教材第6章连接MySQL理解与练习
- 职场,最需要的是主动
- 接收子元素focus_获取元素的直接的子元素childen
- idea格式化代码失效
- 腾讯因“在岗时间不满8小时”辞退41岁员工,遭追讨1200多万
- 计算机win7无法安装,为什么自己的电脑老是安装不上Win7系统呢
- 【历史上的今天】4 月 18 日:第一款交互式电子游戏;IBM 率先研发兆位芯片;硬件公司 Roland 成立
- 计算机风扇维修,千米快修电脑维修:电脑风扇散热不好,经常出问题怎么办?...
- 如何查看自己的电脑硬盘是不是固态硬盘
- 【啃书】《智能优化算法及其MATLAB实例》例6.1基本粒子群算法进行sphere函数寻优
- [关键字]volatile
- 音视频入门-02-RGB拼图
热门文章
- cropper.js 图像旋转问题_JavaScript开源良心插件,纯前端网页图片剪裁插件——cropperjs...
- java %= %,JavaWeb
- 表框mysql_mysql 表的操作
- r - 求平均成绩_2019深圳市公务员考试笔试成绩公布!
- Vue-router进阶:导航守卫
- vue组件中的样式属性:scoped,解决在父组件中无法修改子组件样式问题
- 对spring 中IOC 的理解
- Java程序员的日常—— 《编程思想》关于类的使用常识
- php 之 数据访问 增删改查
- Android 用Animation-list实现逐帧动画