看看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 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页面的交互操作,再者,上面的例子是没有考虑到用户认证和安全等因素的。

开始模拟测试了

换其他参数

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

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

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

好了,本文已经结束。

本文转自it你好 51CTO博客,原文链接:http://blog.51cto.com/itnihao/1336699,如需转载请自行联系原作者

saltstack二次开发构建自己的api相关推荐

  1. 手机微信群控二次开发SDK的部分API功能

    手机微信群控二次开发SDK的部分API功能: 微信加好友功能API 1.导入手机通讯录 2.手机通讯录加好友 3.加指定微信群好友 4.自动通过微信好友请求 5.手机模拟定位 6.附近人加好友 7.各 ...

  2. SaltStack二次开发api

    salt-api官方文档: http://www.unixhot.com/docs/saltstack/ref/netapi/all/salt.netapi.rest_cherrypy.html#a- ...

  3. ArcEngine二次开发-构建获取栅格图层属性表(ITable)

    Arcgis Engine二次开发C#常用库封装:Github源码 有时候生成的栅格图层没有属性表,需要自己构建属性表.其中,不能为 32 位浮点像素类型的栅格数据集构建栅格属性表. 因此,首先要判断 ...

  4. 个人微信号二次开发的实现,api接口

    各位兄弟姐妹们大家好!!!! 我又瞧到了好玩的微信机器人分享给大家! 社群运营这几年风头正盛,不能落伍啊,我们也赶紧组建了社群. 但是微信群还是社交属性为主的,当我们运营多个社群的时候会发现效率过低, ...

  5. 自动化(Automation)基础概念:二次开发接口(API)与插件(Addin)

    二次开发接口(API)与插件(Addin) 许式伟 (版权声明) 2007-4-20 在前文,我们已经解释了: 自动化(Automation)基础概念:COM组件(Component)与接口(Inte ...

  6. python二次开发bim软件_BIM软件的二次开发有哪些工具?API工具你用过吗?

    今天跟大家聊一聊api二次开发的问题,在传统的CAD软件或者现有的BIM软件都涉及到一个软件内核的问题.因为内核软件多由外国开放的,针对该软件所适应的设计规范往往都是内置了外国的设计规范,而国内不能过 ...

  7. catia三维轴承_浅谈基于CATIA二次开发的单排四点接触球轴承三维设计论文

    浅谈基于CATIA二次开发的单排四点接触球轴承三维设计论文 一.概述 单排四点接触球转盘轴承是一种能够同时承受较大轴向负荷.径向负荷和倾覆力矩等综合载荷,集支承.旋转.传动.固定等多种功能于一身的特殊 ...

  8. 个人微信ipad二次开发

    通过 API可以实现 个性化微信功能 (例:营销系统.云发单助手.社群管家webot.客服系统等),用来自动管理微信消息. 具体功能可以看一下图片了解,全面实用 可开发的功能包括以下功能: 好友管理: ...

  9. 快速搭建离线地图开发环境(局域网地图开发工具)离线地图二次开发

         相关下载:For Linux版本下载   快速搭建离线地图开发环境     局域网地图服务   离线地图数据服务  二次开发 一.软件介绍     BIGEMAP离线地图服务器,提供一站式搭 ...

最新文章

  1. .NET中IDisposable接口的基本使用
  2. python读写二进制
  3. java中的方法 net.中的函数_.Net转Java.01.从Main(main)函数说起
  4. 用 Python 做数据处理必看:12 个使效率倍增的 Pandas 技巧(下)
  5. 缺失值和异常值的识别与处理_识别异常值-第一部分
  6. 余宏德:Sun所有的核心技术都是开放的
  7. Codeforces Gym 100463A Crossings 逆序数
  8. 游戏筑基开发之栈、队列及基本功能实现(使用C语言链表的相关知识)
  9. accp8.0转换教材第6章连接MySQL理解与练习
  10. 职场,最需要的是主动
  11. 接收子元素focus_获取元素的直接的子元素childen
  12. idea格式化代码失效
  13. 腾讯因“在岗时间不满8小时”辞退41岁员工,遭追讨1200多万
  14. 计算机win7无法安装,为什么自己的电脑老是安装不上Win7系统呢
  15. 【历史上的今天】4 月 18 日:第一款交互式电子游戏;IBM 率先研发兆位芯片;硬件公司 Roland 成立
  16. 计算机风扇维修,千米快修电脑维修:电脑风扇散热不好,经常出问题怎么办?...
  17. 如何查看自己的电脑硬盘是不是固态硬盘
  18. 【啃书】《智能优化算法及其MATLAB实例》例6.1基本粒子群算法进行sphere函数寻优
  19. [关键字]volatile
  20. 音视频入门-02-RGB拼图

热门文章

  1. cropper.js 图像旋转问题_JavaScript开源良心插件,纯前端网页图片剪裁插件——cropperjs...
  2. java %= %,JavaWeb
  3. 表框mysql_mysql 表的操作
  4. r - 求平均成绩_2019深圳市公务员考试笔试成绩公布!
  5. Vue-router进阶:导航守卫
  6. vue组件中的样式属性:scoped,解决在父组件中无法修改子组件样式问题
  7. 对spring 中IOC 的理解
  8. Java程序员的日常—— 《编程思想》关于类的使用常识
  9. php 之 数据访问 增删改查
  10. Android 用Animation-list实现逐帧动画