saltstack的实例
编写python脚本请求salt api接口
自定义一个类,首先初始化时候获得token,然后使用token认证去请求相应的json文件。
salt命令在shell中使用方式是salt 客户端 方法 参数(例子:salt ‘client’ cmd.run ‘free -m’)。
这里salt命令方法我们已经封装好了,想使用salt的什么方法就传入对应的客户端、方法、参数即可。下面是saltapi.py的文件
import json
import requests
class SaltServer(object):
def __init__(self):
self.session = requests.session()
self.token = self.getToken()
def getToken(self):
url = "http://192.168.48.135: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 runModules(self, minionid, fun, arg=None):
url = "http://192.168.48.135:8000"
data = {
"client": "local",
"tgt": minionid,
"fun": fun,
"arg": arg
}
resultBean = dict()
try:
res = self.session.post(url=url, data=data)
text = res.text
data = json.loads(text).get("return")
resultBean['code'] = 0
resultBean['message'] = "success"
resultBean['data'] = data
except Exception as e:
resultBean['code'] = 0
resultBean['message'] = "success"
resultBean['data'] = e
finally:
return resultBean
def runRunner(self, fun, arg=None):
url = "http://192.168.48.135:8000"
data = {
"client": "runner",
"fun": fun,
"arg": arg
}
resultBean = dict()
try:
res = self.session.post(url=url, data=data)
text = res.text
data = json.loads(text).get("return")
resultBean['code'] = 0
resultBean['message'] = "success"
resultBean['data'] = data
except Exception as e:
resultBean['code'] = 0
resultBean['message'] = "success"
resultBean['data'] = e
finally:
return resultBean
def nginx():
resultBean = dict()
__salt__['cp.get_file']("salt:_shell/app/nginx.sh /usr/local/src/installnginx.sh")
jid = __salt__['cmd.async']
cmd = "sh /usr/local/src/installnginx.sh"
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
- 下面是installApp.py的文件内容
def nginx():
resultBean = dict()
__salt__['cp.get_file']("salt:_shell/app/nginx.sh /usr/local/src/installnginx.sh")
jid = __salt__['cmd.async']
cmd = "sh /usr/local/src/installnginx.sh"
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
- 我们把都封装到util中
- 这是调用的脚本
from lesson31.util.saltapi import SaltServer
saltServer = SaltServer()
result1 = saltServer.runModules('192.168.48.129', 'cp.get_file', ['salt://_shell/app/nginx.sh', '/usr/local/src/installnginx.sh'])
print(result1)
result2 = saltServer.runModules('192.168.48.129', 'installApp.nginx')
print(result2)
- 直接执行就可以安装nginx了。