salt-api
本文于620天之前发表,文中内容可能已经过时。
###基础说明
salt-api对外提供https api接口,方便使用salt相关的功能
salt-api需要部署在master的机器上
[官方文档] (http://salt-api.readthedocs.io/en/latest/ref/netapis/all/saltapi.netapi.rest_cherrypy.html#a-rest-api-for-salt),附件中是官方文档pdf版
参考blog
###接口安全方面
salt-api使用前需要调用login api(帐号密码)来获取token,后续的api请求使用token即可
###依赖
使用pip安装salt时,默认已经安装了salt-ai
salt-api对外提供http服务,依赖Python的CherryPy库,这里需要检查本机是否已安装
###配置过程
生成https证书
1
2
3
4
5
6 cd /etc/pki/tls/certs
# 生成自签名证书, 过程中需要输入key密码及RDNs
make testcert
cd /etc/pki/tls/private/
# 解密key文件,生成无密码的key文件, 过程中需要输入key密码,该密码为之前生成证书时设置的密码
openssl rsa -in localhost.key -out localhost_nopass.key
创建salt-api的用户
1
2 useradd -M -s /sbin/nologin salt-api
echo "salt-api-passwd" | passwd salt-api —stdin
配置权限, eauth官网文档
1
2
3
4
5
6
7 #/etc/salt/master.d/eauth.conf
external_auth:
pam:
salt-api:
- .*
- '@wheel'
- '@runner'
配置api端口、证书等, 这里使用了cherrypy库(python的web库)
1
2
3
4
5 #/etc/salt/master.d/api.conf
rest_cherrypy:
port: 8000
ssl_crt: /etc/pki/tls/certs/localhost.crt
ssl_key: /etc/pki/tls/private/localhost_nopass.key
启动
1
2 salt-api -d --log-file-level=all
#这里的日志级别为all是为了测试用,日志级别包含:'all', 'garbage', 'trace', 'debug', 'profile', 'info', 'warning','error', 'critical', 'quiet'. Default: 'warning'
###api接口列表1
返回JSON格式,head中增加Accept:application/json
1 | #GET |
/login
1 Log in to recieve a session token
/logout
1
2 #POST
Destroy the currently active session and expire the session cookie
/minions
1
2
3
4
5
6 #GET /minions/(mid)
有mid时,查询mid机器的详细信息,没有mid时查询所有的minion的详细信息
#POST /minions
远程执行命令,并返回jobid,相当于/执行命令中的client=local_async
这里并没直接返回结果,需要通过jobs结果查询返回结果
适合异步的场景
/jobs
1
2
3
4 #GET /jobs/(jid)
A convenience URL for getting lists of previously run jobs or getting the return from a single job
有jid时,查询该job的详细结果
无jid,返回job列表(执行job时的参数和jobid)
/run
1
2 #POST
不使用token的方式执行,这里需要每次请求带着用户名密码等认证信息
/events
1 #GET 需要深入了解
/ws
1
2
3 #GET /ws/(token)
Return a websocket connection of Salt's event stream
对url api的补充,大数据量时可以使用这个。
/hook
1
2 #POST /hook 具体用途还需了解
Fire an event in Salt with a custom event tag and data
/stats
1
2 #GET /stats
Expose statistics on the running CherryPy server