調用saltapi接口實例
阿新 • • 發佈:2018-07-09
port star login gets username ict api else sts
1、編寫python腳本請求salt api接口
自定義一個類,首先初始化時候獲得token,然後使用token認證去請求相應的json文件。
salt命令在shell中使用方式是salt 客戶端 方法 參數(例子:salt ‘client’ cmd.run ‘free -m’)。
這裏salt命令方法我們已經封裝好了,想使用salt的什麽方法就傳入對應的客戶端、方法、參數即可。
示例:saltapi.py
#定義modules和runner接口
import json
import requests
class SaltServer(object):
def __init__(self):
self.session = requests.session()
self.token = self.getToken() #獲取token,如果這裏不寫的話可以在下面函數調用也一樣
self.url = "http://192.168.137.130:8000"
# print(self.session.cookies) #通過resquests模塊也可以獲取到token,不過需要再執行過濾,這個看具體使用
def getToken(self): #定義獲取token的函數
url = "http://192.168.137.130:8000/login"
headers = {"Accept": "application/json"}
data = {
"username": "saltapi",
"password": "saltapi",
"eauth": "pam"
}
res = self.session.post(url=url, headers=headers, data=data)
text = res.text
result = json.loads(text)
token = result.get("return")[0].get("token")
return token
def resBean(self, datas): #定義res接口規範函數,方便下面調用,一般都使用這個規範!
resultBean = dict()
try:
res = self.session.post(url=self.url, data=datas)
text = res.text
data = json.loads(text).get("return")
resultBean[‘code‘] = 0
resultBean[‘message‘] = "success"
resultBean[‘data‘] = data
except Exception as e:
resultBean[‘code‘] = -1
resultBean[‘message‘] = "error"
resultBean[‘data‘] = e
finally:
return resultBean
def runModules(self, minionid, fun, arg=None): #定義module函數,三個參數分別是客戶端,函數和參數
# url = "http://192.168.137.130:8000"
data = {
# "X-Auth-Token": self.getToken(), #在上面構造函數裏定義了這裏就可以不用再寫這個參數了
"client": "local", #調用module使用local
"tgt": minionid, #定義minion的id
"fun": fun, #使用的函數
"arg": arg #函數使用的參數
}
return self.resBean(data)
def runRunner(self, fun, arg=None): #定義runner函數,兩個參數分別是函數和參數
# url = "http://192.168.137.130:8000"
data = {
# "X-Auth-Token": self.getToken(),
"client": "runner",
"fun": fun,
"arg": arg
}
return self.resBean(data)
安裝app的模塊(可以定義多個函數,每個函數表示安裝的軟件,這裏只是示例安裝nginx)
#調用腳本安裝相關軟件
import commands
def nginx():
resultBean = dict()
__salt__[‘cp.get_file‘](‘salt://_shell/app/nginx.sh‘, ‘/usr/local/src/installnginx.sh‘) #調用cp模塊傳送shell腳本到minion端
cmd = ‘sh /usr/local/src/installnginx.sh && systemctl restart nginx‘ #執行minion端的shell腳本
status, output = commands.getstatusoutput(cmd)
if status == 0:
resultBean[‘code‘] = 0
resultBean[‘message‘] = ‘success‘
resultBean[‘data‘] = output
else:
resultBean[‘code‘] = -1
resultBean[‘message‘] = ‘install nginx error‘
resultBean[‘data‘] = output
return resultBean
測試:test.py
調用saltapi接口實例