一、salt-api简介
SaltStack 官方提供有REST API格式的 salt-api 项目,将使Salt与第三方系统集成变得尤为简单。
官方提供了三种api模块:
rest_cherrypy
rest_tornado
rest_wsgi
官方链接:https://docs.saltstack.com/en/latest/ref/netapi/all/index.html#all-netapi-modules
二、salt-api配置及使用
安装salt-api:
[root@server1 ~]# yum install salt-api -y
生成证书:
[root@server1 ~]# cd /etc/pki/tls/private
[root@server1 private]# openssl genrsa 2048 > localhost.key
Generating RSA private key, 2048 bit long modulus
.................+++
...............+++
e is 65537 (0x10001)
[root@server1 private]# cd /etc/pki/tls/certs
[root@server1 certs]# make testcert //根据提示填写相关信息即可
这时我们生成了证书(localhost.crt)和key(localhost.key)。
创建用户认证文件:
[root@server1 certs]# cd /etc/salt/master.d/
[root@server1 master.d]# vim tls.conf
[root@server1 master.d]# cat tls.conf
rest_cherrypy:
port: 8000
ssl_crt: /etc/pki/tls/certs/localhost.crt
ssl_key: /etc/pki/tls/private/localhost.key
创建用户授权文件:
[root@server1 master.d]# vim auth.conf
[root@server1 master.d]# cat auth.conf
external_auth:
pam: #热插拔模式
saltapi: #用户
- .*
- '@wheel'
- '@runner'
- '@jobs'
创建用户并配置密码:
[root@server1 master.d]# useradd -s /sbin/nologin saltapi
[root@server1 master.d]# passwd saltapi
重启master服务并启动salt-api服务:
[root@server1 master.d]# systemctl restart salt-master.service
[root@server1 master.d]# systemctl start salt-api.service
启动后8000端口以开启:
[root@server1 master.d]# netstat -antlup | grep 8000
\tcp 0 0 0.0.0.0:8000 0.0.0.0:* LISTEN 20021/salt-api
获取认证token:
[root@server1 master.d]# curl -sSk https://localhost:8000/login -H 'Accept: application/x-yaml' -d username=saltapi -d password=redhat -d eauth=pam
return:
- eauth: pam
expire: 1589864868.838355
perms:
- .*
- '@wheel'
- '@runner'
- '@jobs'
start: 1589821668.838354
token: 738aea2609580fdf80011eaa0794657016a29a4b
user: saltapi
在返回的信息中包含我们需要的token。
测试推送任务:
命令中token为上各命令的返回值,从返回值可以看出salt-api配置成功。
测试其他命令:
[root@server1 master.d]# curl -sSk https://localhost:8000 -H 'Accept: application/x-yaml' -H 'X-Auth-Token: 738aea2609580fdf80011eaa0794657016a29a4b' -d client=local -d tgt='*' -d fun=cmd.run -d arg=hostname
return:
- server2: server2
server3: server3
也可以调用state模块:
[root@server1 master.d]# curl -sSk https://localhost:8000 -H 'Accept: application/x-yaml' -H 'X-Auth-Token: 738aea2609580fdf80011eaa0794657016a29a4b' -d client=local -d tgt='*' -d fun=state.sls -d arg=keepalived
也可以基于这个api开发自动化运维系统(github上有现成的项目,搜索oms)。