首页 > 编程语言 > 详细

Python2调用Salt API

时间:2020-05-25 17:08:36      阅读:59      评论:0      收藏:0      [点我收藏+]

 

 

#!/usr/bin/env python
#coding=utf-8
#For Python2
import urllib,urllib2,json,sys,importlib,argparse
reload(sys)
sys.setdefaultencoding(utf-8)


class saltAPI():

    def __init__(self):
        self.url = http://10.160.25.116:8000
        self.data = {username : uxin_salt-api,
                     password : uxin_salt-api,
                     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

        # self.headers[‘Accept‘] = ‘application/x-yaml‘
        # self.headers[‘Content-Type‘] = ‘application/json‘
    #获取token
    def get_token(self):
        postdata = urllib.urlencode(self.data).encode(utf8)
        content = self.post_request(/login,postdata)
        try:
            token = content[return][0][token]
            return token
        except Exception as ErrorMsg:
            print(ErrorMsg)

    #发送post
    def post_request(self,prefix=/,postdata=None):
        try:
            request = urllib2.Request(self.url+ prefix,postdata,headers=self.headers)
            reponse = urllib2.urlopen(request).read()
            content  = json.loads(reponse.decode(utf8))
            return content
        except Exception as ErrorMsg:
            print(ErrorMsg)
            exit()

    
    def SaltCmd_Exec(self,tgt,fun=cmd.run,expr_form=glob,arg=None,**kwargs):
        #通过json格式提交参数,需要指定Content-Type,用户自行选择是否指定Shell=PowerShell,可以运行grains.item、cmd.run、cmd.script等命令
        #多台主机同时执行cmd.script,使用expr_form=list
        self.headers[Content-Type] = application/json
        # params = [{‘client‘: ‘local‘, ‘tgt‘: tgt, ‘fun‘: fun,‘expr_form‘:expr_form,‘arg‘:arg ,‘kwarg‘:kwargs }]
        params = {client: local, tgt: tgt, fun: fun,expr_form:expr_form,arg:arg }
        #检查kwargs是否为空,不为空则将其加入到params中
        kwargs2 = {}
        if kwargs :
            for k,v in kwargs.items():
                if kwargs[k] != None:
                    kwargs2[k] = kwargs[k]
        if kwargs2 :
        #     params = dict(list(params.items())+list(kwargs2.items()))
            params[kwarg] = kwargs2
        print(params)
        #json.loads() transform str to dict;json.dumps() transform dict to str.
        # obj = bytes(json.dumps([params])) #Python2,可用
        obj = json.dumps([params]).encode(utf8) #Python2,可用
        ret = self.post_request(prefix=/,postdata=obj)
        return ret
        
    def listkeys(self):
        params = {client:wheel,fun:key.list_all}
        obj = urllib.urlencode(params).encode(UTF8)
        ret = self.post_request(prefix=/,postdata=obj)
        print(ret)

    def AuthTest(self):
        print(self.headers)


#为运行grins.items命令的返回结果进行处理
def res_proc_grainsitem(data):
    for k,v in data.items():
        d2 = data[k]
        d2[biosversion]
        d2[biosversion].find(Hyper-V)
        if d2[biosversion].find(Hyper-V) >= 0:
            sn = HV00000
        else:
            sn  = d2[serialnumber]
        print(d2[id],d2[host],d2[windowsdomain],d2[manufacturer],d2[productname],sn,d2[virtual],d2[cpu_model],d2[num_cpus],d2[mem_total],d2[os],d2[osfullname],d2[kernelrelease])


###################################### Main Start #######################################
parser = argparse.ArgumentParser(description=Input args)
parser.add_argument(--host,dest=host,type=str,help=Input Server IP)
parser.add_argument(--cmd_salt,dest=cmd_salt,type=str,help=Input Salt Command)
parser.add_argument(--cmd_srv,dest=cmd_srv,type=str,help=Input Server Command)
parser.add_argument(--spt_args,dest=spt_args,type=str,help=Input Server Script Args)
parser.add_argument(--shell,dest=shell,type=str,help=Specify an alternate shell)
args=parser.parse_args()
# parser.print_help()

sapi= saltAPI()
# sapi.AuthTest()

# 单台主机执行命令使用glob,多台主机执行命令使用list参数
if args.host.find(,) >= 0:
    exprform = list
elif args.host.find(-) >= 0: #自定义组都包含了"-"字符
    exprform = nodegroup
else:
    exprform = glob

cmdExec = sapi.SaltCmd_Exec(args.host,args.cmd_salt,exprform,args.cmd_srv,args=args.spt_args,shell=args.shell)


if args.cmd_salt == grains.items :
    res_proc_grainsitem(cmdExec[return][0])
elif args.cmd_salt == cmd.run :
    dd3 = cmdExec[return][0]
    for k,v in dd3.items():
        print(k,dd3[k])
    # print(dd3[tgt].replace(‘\r‘,‘‘))
elif args.cmd_salt == cmd.script :
    dd3 = cmdExec[return][0]
    for k,v in dd3.items():
        print(k,dd3[k][stdout])
else :
    print(cmdExec)

 

Python2调用Salt API

原文:https://www.cnblogs.com/dreamer-fish/p/12957639.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!