标签:salt
# -*- coding: utf-8 -*- from django.http import HttpResponse from django.http import HttpResponseRedirect from django.shortcuts import render_to_response import urllib2,urllib import time import re try: import json except ImportError: import simplejson as json #class SaltAPI(object): # __token_id = ‘‘ # def __init__(self,url,username,password): # self.__url = url.rstrip(‘/‘) # self.__user = username # self.__password = password # # def token_id(self): # ‘‘‘ user login and get token id ‘‘‘ # 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‘] # except KeyError: # raise KeyError #tgt = ‘computer‘ class SaltAPI: def __init__(self,url,username,password): self.__url = url.rstrip(‘/‘) self.__user = username self.__password = password self.__token_id = self.token_id() def token_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‘] return token except KeyError: raise KeyError def postRequest(self,obj,prefix=‘/‘): url = self.__url + prefix headers = {‘X-Auth-Token‘ : self.__token_id} req = urllib2.Request(url, obj, headers) opener = urllib2.urlopen(req) content = json.loads(opener.read()) return content def list_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‘] return minions,minions_pre def delete_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‘] return ret def accept_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‘] return ret def remote_noarg_execution(self,tgt,fun): ‘‘‘ Execute commands without parameters ‘‘‘ params = {‘client‘: ‘local‘, ‘tgt‘: tgt, ‘fun‘: fun} # return HttpResponse(params) obj = urllib.urlencode(params) self.token_id() content = self.postRequest(obj) ret = content[‘return‘][0][tgt] return ret def remote_execution(self,tgt,fun,arg): ‘‘‘ Command execution with parameters ‘‘‘ 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] return ret def target_remote_execution(self,tgt,fun,arg): ‘‘‘ Use targeting for remote execution ‘‘‘ 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‘] return jid def deploy(self,tgt,arg): ‘‘‘ Module deployment ‘‘‘ params = {‘client‘: ‘local‘, ‘tgt‘: tgt, ‘fun‘: ‘state.sls‘, ‘arg‘: arg} obj = urllib.urlencode(params) self.token_id() content = self.postRequest(obj) return content def async_deploy(self,tgt,arg): ‘‘‘ Asynchronously send a command to connected minions ‘‘‘ 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‘] return jid def target_deploy(self,tgt,arg): ‘‘‘ Based on the node group forms deployment ‘‘‘ 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‘] return jid def main(): sapi = SaltAPI(url=‘https://113.31.43.140:8888‘,username=‘saltapi‘,password=‘yao‘) ad = sapi.remote_noarg_execution(‘computer‘,‘grains.items‘) ipv4 = ad["ipv4"] i = len(ipv4) for a in range(0, i): if ipv4[a][0:3] == "113": print ipv4[a] #sapi.token_id() #print sapi.list_all_key() #sapi.delete_key(‘test-01‘) # print sapi.accept_key() #sapi.deploy(‘test-01‘,‘nginx‘) #print sapi.remote_noarg_execution(‘test-01‘,‘grains.items‘) if __name__ == ‘__main__‘: main()相关文章
- Expo大作战(三十七)--expo sdk api之 GLView,GestureHandler,Font,Fingerprint,DeviceMotion,Brightness
- c#调用API的CreateFontIndirect设置字体,编译提示“值不在预期范围”求解?
- Java的字体类详解(Font)-摘自Java API文档
- 基于ArcGIS API for Javascript的地图编辑工具
- 在cocoa应用程序中从GPS设备(USG-MR350)获取位置数据的API /方法?
- 腾讯出品小程序自动化测试框架【Minium】系列(五)API详解(中)
- 尝试使用Java6API读取java代码
- 使用带有Moodle表单的文件Api可以从外部moodle项目访问文件
- Moodle中文API之导航API
- moodle的一些api翻译~$page翻译