#-*-coding:utf-8-*-fromdjango.httpimportHttpResponsefromdjango.httpimportHttpResponseRedirectfromdjango.shortcutsimportrender_to_responseimporturllib2,urllibimporttimeimportretry:importjsonexceptImportError:importsimplejsonasjson#classSaltAPI(object):#__token_id=''#def__init__(self,url,username,password):#self.__url=url.rstrip('/')#self.__user=username#self.__password=password##deftoken_id(self):#'''userloginandgettokenid'''#params={'eauth':'pam','username':self.__user,'password':self.__password}#encode=urllib.urlencode(params)#obj=urllib.unquote(encode)#content=self.postRequest(obj,prefix='/login')#try:#self.__token_id=content['return'][0]['token']#exceptKeyError:#raiseKeyError#tgt='computer'classSaltAPI:def__init__(self,url,username,password):self.__url=url.rstrip('/')self.__user=usernameself.__password=passwordself.__token_id=self.token_id()deftoken_id(self):params={'eauth':'pam','username':self.__user,'password':self.__password}encode=urllib.urlencode(params)obj=urllib.unquote(encode)headers={'X-Auth-Token':''}url=self.__url+'/login'req=urllib2.Request(url,obj,headers)opener=urllib2.urlopen(req)content=json.loads(opener.read())try:token=content['return'][0]['token']returntokenexceptKeyError:raiseKeyErrordefpostRequest(self,obj,prefix='/'):url=self.__url+prefixheaders={'X-Auth-Token':self.__token_id}req=urllib2.Request(url,obj,headers)opener=urllib2.urlopen(req)content=json.loads(opener.read())returncontentdeflist_all_key(self):params={'client':'wheel','fun':'key.list_all'}obj=urllib.urlencode(params)self.token_id()content=self.postRequest(obj)minions=content['return'][0]['data']['return']['minions']minions_pre=content['return'][0]['data']['return']['minions_pre']returnminions,minions_predefdelete_key(self,node_name):params={'client':'wheel','fun':'key.delete','match':node_name}obj=urllib.urlencode(params)self.token_id()content=self.postRequest(obj)ret=content['return'][0]['data']['success']returnretdefaccept_key(self,node_name):params={'client':'wheel','fun':'key.accept','match':node_name}obj=urllib.urlencode(params)self.token_id()content=self.postRequest(obj)ret=content['return'][0]['data']['success']returnretdefremote_noarg_execution(self,tgt,fun):'''Executecommandswithoutparameters'''params={'client':'local','tgt':tgt,'fun':fun}#returnHttpResponse(params)obj=urllib.urlencode(params)self.token_id()content=self.postRequest(obj)ret=content['return'][0][tgt]returnretdefremote_execution(self,tgt,fun,arg):'''Commandexecutionwithparameters'''params={'client':'local','tgt':tgt,'fun':fun,'arg':arg}obj=urllib.urlencode(params)self.token_id()content=self.postRequest(obj)ret=content['return'][0][tgt]returnretdeftarget_remote_execution(self,tgt,fun,arg):'''Usetargetingforremoteexecution'''params={'client':'local','tgt':tgt,'fun':fun,'arg':arg,'expr_form':'nodegroup'}obj=urllib.urlencode(params)self.token_id()content=self.postRequest(obj)jid=content['return'][0]['jid']returnjiddefdeploy(self,tgt,arg):'''Moduledeployment'''params={'client':'local','tgt':tgt,'fun':'state.sls','arg':arg}obj=urllib.urlencode(params)self.token_id()content=self.postRequest(obj)returncontentdefasync_deploy(self,tgt,arg):'''Asynchronouslysendacommandtoconnectedminions'''params={'client':'local_async','tgt':tgt,'fun':'state.sls','arg':arg}obj=urllib.urlencode(params)self.token_id()content=self.postRequest(obj)jid=content['return'][0]['jid']returnjiddeftarget_deploy(self,tgt,arg):'''Basedonthenodegroupformsdeployment'''params={'client':'local_async','tgt':tgt,'fun':'state.sls','arg':arg,'expr_form':'nodegroup'}obj=urllib.urlencode(params)self.token_id()content=self.postRequest(obj)jid=content['return'][0]['jid']returnjiddefmain():sapi=SaltAPI(url='https://xxxx:8888',username='saltapi',password='yao')ad=sapi.remote_noarg_execution('computer','grains.items')ipv4=ad["ipv4"]i=len(ipv4)forainrange(0,i):ifipv4[a][0:3]=="113":printipv4[a]#sapi.token_id()#printsapi.list_all_key()#sapi.delete_key('test-01')#printsapi.accept_key()#sapi.deploy('test-01','nginx')#printsapi.remote_noarg_execution('test-01','grains.items')if__name__=='__main__':main()