saltstack本身是用python写的,用python调用saltstack相对来说比较简单.
我这里采用的是第一种方法,但不同的是用tornado自封装了一层api
1. Python client API
http://docs.saltstack.com/en/latest/ref/clients/#salt.wheel.WheelClient.cmd
优点:
- 最简单,只要机器安装了saltstack,直接在python代码里
import salt
即可.
缺点:
- 只有python语言才能这样使用.
- 必须得与salt master部署在同一台机器.
- saltstack任务执行时,某些处理是在调用方进程里执行,这样意味调用方的必须与salt master同用户,否则到时会没有权限往
/var/cache/salt/master
目录写缓存文件. 比如salt master是root用户运行,那么django网站调用salt时也必须得也root用户运行.
2. salt api
https://salt-api.readthedocs.org/en/latest/
优点:
- 以 http rest api形式提供访问,这样什么语言都可以调用.
- 调用方可以不与salt master在同一机器.
- 调用方完全可用普通用户运行.
缺点:
- 需要自己对rest api做一次封装.
- 调用
salt.modules.cp.push
时,文件存放在 salt master上面.这个时候需要拿到文件必须得走NFS或自定义接口.
3. salt command
直接在程序里调用 salt 命令来执行任务
优点:
- 简单粗暴
缺点:
- 需要自己解决命令执行结果,出错处理太难.
如果需要通过第三方来调用SaltStack时,使用SaltStack自带的Python API并不能很好的满足需求。可以通过使用SaltStack基于RESTful风格的HTTP API。该API模块并不是内置的,需要单独安装。
Salt REST API简介
这里简单的说明下,SaltStack官方支持三种REST API,分别是rest_cherry; rest_tonado和rest_wsgi
- rest_cherry和rest_tonado两个模块支持监听所有IP的指定端口接收请求
shell> lsof -i:1559
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
salt-api 13443 root 14u IPv4 21888585 0t0 TCP *:web2host (LISTEN)
- rest_wsgi只支持本机访问,只绑定了127.0.0.1
shell> lsof -i:1559
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
salt-api 13443 root 14u IPv4 21888585 0t0 TCP 127.0.0.1:web2host (LISTEN)
本文选择使用rest_cherry模块来实现SaltStack的HTTP API
安装Salt-API服务
一般情况下,salt-api会使用HTTPS,首次配置成功后,使用用户名和密码登陆,获得Token,Token创建后,默认有效期是12小时,在有效期之内,使用该Token可以代替使用用户名和密码来访问API(该有效时间可在salt-master配置文件中修改)
必备安装包
shell> yum -y install gcc make python-devel libffi-devel
shell> pip install pyOpenSSL==0.15.1
借助salt工具来生成证书
shell> salt-call --local tls.create_self_signed_cert
local:
Created Private Key: "/etc/pki/tls/certs/localhost.key." Created Certificate: "/etc/pki/tls/certs/localhost.crt."
salt-call是salt-minion的工具,如果没有这个命令,可以在master端安装minion,然后再执行以上命令
安装salt-api
shell> yum -y install salt-api
配置用户及权限
shell> useradd -M -s /sbin/nologin sa
shell> echo "sapassword" | passwd sa --stdin
在salt-master的配置文件最后添加如下配置
external_auth:
pam: #认证模式,pam指的是用Linux本身的用户认证模式
sa: #Linux系统中真实存在的用户名
- '*': #设置用户的权限,允许该用户操作哪些主机,*代表全部
- test.* #允许操作的模块及方法
- cmd.*
其他认证模式可以参考官方文档:http://docs.saltstack.com/en/latest/topics/eauth/index.html
配置示例一:多用户(官方文档)
external_auth:
pam:
thatch:
- 'web*':
- test.*
- network.*
steve:
- .*
配置示例二:指定用户组(官方文档)
external_auth:
pam:
admins%:
- '*':
- 'pkg.*'
使用%
来表示用户组
配置示例三:操作模块组(官方文档)
external_auth:
pam:
thatch:
- '@wheel' # to allow access to all wheel modules
- '@runner' # to allow access to all runner modules
- '@jobs' # to allow access to the jobs runner and/or wheel module
配置salt-api服务
在salt-master的配置文件最后添加如下配置
rest_cherrypy:
port: 1559 #默认监听所有IP的1559端口
ssl_crt: /etc/pki/tls/certs/localhost.crt #引用的正是前面创建的证书
ssl_key: /etc/pki/tls/certs/localhost.key
其他配置参数可以参考官方文档:https://docs.saltstack.com/en/latest/ref/netapi/all/salt.netapi.rest_cherrypy.html
标签:API,调用,rest,api,master,saltstack,salt From: https://blog.51cto.com/u_6186189/6458284