saltstack提供rest_cherrypy
地址:https://docs.saltstack.com/en/latest/ref/netapi/all/salt.netapi.rest_cherrypy.html
首先,我们在salt-master上面配置resful api,创建一个saltapi的用户,设置密码,
然后在salt-master配置文件中加入resful api 的配置:
resful api的地址就是:http://ip:8080
记得重启salt-master.
使用salt-api的原理就是:获取用户认证获取token->发送指令执行->返回结果
首先我们认证获取token:
在view中:
def get_token():
url= 'http://IP:8080/login'
login_data = {'username':'saltapi','password':'密码','eauth':'pam'}
headers = {'Accept':'application/json'}
res = requests.post(url,headers=headers,data=login_data)
token = res.json()['return'][0]['token']
return token
获取 token之后,我们在写一个执行指令的方法:
def saltCmd(ip,fun,*args,**kwargs):
token = get_token()
url = "http://IP:8080"
headers = {'Accept':'application/json',"X-Auth-Token":token}
res = requests.post(url,headers=headers,json=\
{'client':'local','tgt':ip,'fun':fun,'arg':list(args),'kwarg':kwargs})
response = res.json()['return']
return response
编写一个前端交互的控制器:
@login_required
def saltstack(request,ip):
fun = request.GET['fun']
args = request.GET['args']
kwargs = request.GET['kwargs']
res = saltCmd(ip,fun,args,kwargs)
return HttpResponse(res) #只是简单的测试,没有去渲染到html去了
url中:
url(r'^salt/(.+)$', views.saltstack,name='saltstack'),
前端执行命令测试: