使用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