zoukankan      html  css  js  c++  java
  • Python操作Saltstack

    1.代码

    # -*- coding:utf-8 -*-
    import urllib.request
    import urllib.parse
    import json
    
    
    class saltAPI():
    
        def __init__(self):
            self.url = 'http://192.168.174.128:8000'
            self.data = {'username' : 'saltapi',
                         'password' : 'saltapi',
                         'eauth' : 'pam'}
            self.headers = {'User-Agent':'Mozilla/5.0 (X11; Fedora; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
            self.token = self.get_token()
            self.headers['X-Auth-Token'] = self.token
    
        #发送post
        def post_request(self,prefix='/',postdata=None):
            request = urllib.request.Request(self.url+ prefix,postdata,headers=self.headers)
            reponse = urllib.request.urlopen(request).read()
            content  = json.loads(reponse.decode('utf8'))
            return content
    
        #获取token
        def get_token(self):
            postdata = urllib.parse.urlencode(self.data).encode('utf8')
            content = self.post_request('/login',postdata)
            try:
                token = content['return'][0]['token']
                return token
            except KeyError:
                raise KeyError
    
        #获取grains
        def get_grains(self,minion=''):
            if minion and minion!='*':
                prefix = '/minions/'+minion
            else:
                prefix = '/minions'
            content = self.post_request(prefix)
            return content
    
        #执行命令->get_jid
        def SaltCmd(self,tgt,fun,client='local_async',expr_form='glob',arg=None,**kwargs):
            params = {'client':client, 'fun':fun, 'tgt':tgt, 'expr_form':expr_form}
            if arg:
                a=arg.split(',') #参数按逗号分隔
                for i in a:
                    b=i.split('=') #每个参数再按=号分隔
                    if len(b)>1:
                        params[b[0]]='='.join(b[1:]) #带=号的参数作为字典传入
                    else:
                        params['arg%s'%(a.index(i)+100)]=i
            if kwargs:
                params=dict(list(params.items())+list(kwargs.items()))
            obj = urllib.parse.urlencode(params).encode('UTF8')
            ret = self.post_request(prefix='/',postdata=obj)
            jid = ret['return'][0]['jid']
            prefix = '/jobs/'+jid
            content = self.post_request(prefix)
            return content['info'][0]['Result']
    
        def test(self):
            print(self.headers)
    
    if __name__ == '__main__':
        tester = saltAPI()
        token = tester.SaltCmd('*','test.ping')
        print(token)
  • 相关阅读:
    51 nod 1046 A^B Mod C
    51nod 1027 大数乘法
    Subversion基础:概念、安装、配置和基本操作(转)
    IOS 网络请求中设置cookie
    iOS设备控制打印机输出文本
    Xcode6中如何添加pch文件
    iOS8 PUSH解决方法
    iOS8 Push Notifications
    xcode升级到6.0以后遇到的警告错误 原帖链接http://www.cocoachina.com/bbs/simple/?t112432.html
    xcode升级到6.0以后遇到的警告错误解决方法
  • 原文地址:https://www.cnblogs.com/mascot1/p/9964245.html
Copyright © 2011-2022 走看看