天天看點

Salt API

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