使用Salt-API可以更加方便的对salt进行管理。配置salt-api主要有这样几个步骤:
1、证书
2、配置文件
3、验证。使用PAM验证
4、启动salt-api
验证配置
添加用户:
# useradd -M -s /sbin/nologin saltapi
设置密码:
# passwd saltapi
设置密钥:
1
<code>[root@node1 </code><code>/etc/pki/tls/certs</code><code>]</code><code># make testcert</code>
在另一个目录中设置不需要密码验证的key:
2
3
<code>[root@node1 </code><code>/etc/pki/tls/private</code><code>]</code><code># openssl rsa -in localhost.key -out salt_nopass.key</code>
<code>Enter pass phrase </code><code>for</code> <code>localhost.key:</code>
<code>writing RSA key</code>
此时会生成salt_nopass.key的key.
安装CherryPy配置master
安装salt-api:
<code># yum install salt-api -y</code>
使用pip安装配置CherryPy:
<code># pip install CherryPy==3.2.6</code>
修改master的配置文件,打开注释,将默认配置放在master.d中:
<code># vim /etc/salt/master </code>
<code>default_include: master.d/*.conf</code>
在对应的路径下创建api.conf:
4
5
6
<code>[root@node1 </code><code>/etc/salt/master</code><code>.d]</code><code># cat api.conf </code>
<code>rest_cherrypy:</code>
<code> </code><code>host: 172.16.10.60</code>
<code> </code><code>port: 8000</code>
<code> </code><code>ssl_crt: </code><code>/etc/pki/tls/certs/localhost</code><code>.crt </code>
<code> </code><code>ssl_key: </code><code>/etc/pki/tls/private/salt_nopass</code><code>.key</code>
创建授权文件:
7
<code>[root@node1 </code><code>/etc/salt/master</code><code>.d]</code><code># cat eauth.conf </code>
<code>external_auth:</code>
<code> </code><code>pam:</code>
<code> </code><code>saltapi:</code>
<code> </code><code>- .* </code><code># 权限,代表所有模块</code>
<code> </code><code>- </code><code>'@wheel'</code> <code># 指定key saltkey</code>
<code> </code><code>- </code><code>'@runner'</code> <code># 机器是否在线</code>
重启salt-master:
<code># systemctl restart salt-master</code>
启动salt-api:
<code># systemctl start salt-api</code>
查看8000端口是否开启:
<code># netstat -lntp|grep 8000</code>
<code>tcp 0 0 172.16.10.60:8000 0.0.0.0:* LISTEN 41783</code><code>/python</code>
请求token进行验证:
8
9
10
11
12
13
14
15
<code># curl -k https://172.16.10.60:8000/login \</code>
<code> </code><code>-H </code><code>'Accept: application/x-yaml'</code> <code>\</code>
<code> </code><code>-d username=saltapi \</code>
<code> </code><code>-d password=saltapi \</code>
<code> </code><code>-d eauth=pam</code>
<code>return</code><code>:</code>
<code>- eauth: pam</code>
<code> </code><code>expire: 1480035796.270958</code>
<code> </code><code>perms:</code>
<code> </code><code>- .*</code>
<code> </code><code>- </code><code>'@wheel'</code>
<code> </code><code>- </code><code>'@runner'</code>
<code> </code><code>start: 1479992596.270957</code>
<code> </code><code>token: 1723b0f260664994bce5b171e7844f1a12979a44</code>
<code> </code><code>user: saltapi</code>
使用API执行salt
使用token获取指定主机的grance信息:
# curl -k https://172.16.10.60:8000/minions/node1 -H 'Accept: application/x-yaml' \
-H 'X-Auth-Token:1723b0f260664994bce5b171e7844f1a12979a44'
使用api检测机器的状态:
<code># curl -k https://172.16.10.60:8000/ \</code>
<code> </code><code>-H </code><code>'Accept: application/x-yaml'</code> <code>\</code>
<code> </code><code>-H </code><code>'X-Auth-Token:1723b0f260664994bce5b171e7844f1a12979a44'</code> <code>\</code>
<code> </code><code>-d client=</code><code>'runner'</code> <code>\ </code><code>#runner 在master上执行</code>
<code> </code><code>-d fun=</code><code>'manage.status'</code> <code>#查看主机在线状态</code>
<code>#返回结果:</code>
<code>- down: []</code>
<code> </code><code>up:</code>
<code> </code><code>- node1</code>
<code> </code><code>- node2</code>
使用api 执行命令:
<code># curl -k https://172.16.10.60:8000/ \</code>
<code> </code><code>-H </code><code>'Accept: application/x-yaml'</code> <code>\</code>
<code> </code><code>-H </code><code>'X-Auth-Token:1723b0f260664994bce5b171e7844f1a12979a44'</code>
<code> </code><code>-d client=</code><code>'local'</code> <code>-d tgt=</code><code>'*'</code> <code>\ </code><code>#在minion端本地执行</code>
<code> </code><code>-d fun=</code><code>'test.ping'</code> <code># 执行test.ping命令</code>
<code>#执行结果:</code>
<code>- node1: </code><code>true</code>
<code> </code><code>node2: </code><code>true</code>
使用api执行salt高级状态:
<code># curl -k https://172.16.10.60:8000/ \</code>
<code> </code><code>-H </code><code>'X-Auth-Token:1723b0f260664994bce5b171e7844f1a12979a44'</code> <code>\</code>
<code> </code><code>-d client=</code><code>'local'</code> <code>\</code>
<code> </code><code>-d tgt=</code><code>'*'</code> <code>\</code>
<code> </code><code>-d fun=</code><code>'state.highstate'</code>
使用API获取Jobs信息:
<code># curl -k https://172.16.10.60:8000/jobs \ # 返回jobs信息</code>
<code> </code><code>-H </code><code>'Accept: application/x-yaml'</code> <code>\</code>
<code> </code><code>-H </code><code>'X-Auth-Token:1723b0f260664994bce5b171e7844f1a12979a44'</code>
查看具体某一个jobs的信息:
<code># curl -k https://172.16.10.60:8000/jobs/20161124212822336420 \ # 指定job ID查询</code>
<code> </code><code>-H </code><code>'Accept: application/x-yaml'</code> <code>\</code>
参考资料:
本文转自 酥心糖 51CTO博客,原文链接:http://blog.51cto.com/tryingstuff/1876383