saltstack二次開発で自分のアプリを構築する


まずはsaltstackの紹介はここで省略します.
公式サイトhttp://www.saltstack.com/
サイトhttps://github.com/saltstack/salt
中国語サイトhttp://saltstack.cn/  (@緑小肥が作成した、公式に認められた中国語サイト)
国内QQ交流群  294953305(満席)     220852394(加入可能)
saltのpython APIhttp://docs.saltstack.com/ref/clients/index.html?highlight=api
saltさんは何ができますか?
205801712.png
   つまり、salt.statesとsalt.modulesの2つの機能です.
   salt-cloud、salt-sshなどの多くの機能は、非常に強い機能と今一番必要な機能を持っていますので、saltstackは現在と未来において、大きな発展空間があります.
   この例では、django+saltを用いてapiを提供し、他のオペレーティングシステムに対して統一的にスケジューリングするのに便利である.
   実は公式にはappiがありますが、ここでなぜ自分で書くのかというと、公式のアプリと自分のアイデアが違っていますので、自分で輪を作るしかないです.
   django view.pyの例を示します.djangoの他の構成については、ここではデモンストレーションしていません.ですから、ここでは一部の参考しかできません.構想だけです.
   views.pyの内容は以下の通りです.
# 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')
   ブラウザで作成したアプリケーションを実行します.ここのアドレスは以下の通りです.図のように、ファイア狐ブラウザでデータを提出する場合、もちろん正式な環境では、ユーザーに一つのhtmlページのインタラクティブ操作が必要です.
   シミュレーションテストを開始しました.
210659415.jpg
他のパラメータを変えます
210957422.png
実行コマンドの中から結果を返します.
以上はれんがを投げて玉の1段の実現コードを引くだけで、みんなに対してある程度助けることを望んで、更に詳しい内容は書きません.
皆さんは公式文書を多く研究して、より多くの機能を実現してください.
はい、この文章はもう終わりました.