Salt-API安裝配置及使用

Salt-API安裝配置及使用

SaltStack 官方提供有REST API格式的 salt-api 項目,將使Salt與第三方系統集成變得尤爲簡單。本文講帶你瞭解如何安裝配置Salt-API, 如何利用Salt-API獲取想要的信息。

環境說明

  • 操作系統環境: CentOS 6.4,已配置EPEL源
  • Salt Master/Minion版本: 0.17.2, Master IP地址爲 192.168.3, 用於本次測試的Minion ID爲 minion-01.example.com

開工

Note

以下操作如非特別註明,均在Master上進行

安裝Salt-API

Note

當前EPEL中的salt-api版本爲0.8.2, 存在幾處bug, 本文講使用pip方式安裝0.8.3版本

# 安裝salt-api
pip install salt-api

# 下載服務維護腳本
wget https://raw.github.com/saltstack/salt-api/develop/pkg/rpm/salt-api -O /etc/init.d/salt-api
chmod +x /etc/init.d/salt-api
chkconfig salt-api on

配置Salt-API

生成自簽名證書(用於ssl)

cd  /etc/pki/tls/certs
# 生成自簽名證書, 過程中需要輸入key密碼及RDNs
make testcert
cd /etc/pki/tls/private/
# 解密key文件,生成無密碼的key文件, 過程中需要輸入key密碼,該密碼爲之前生成證書時設置的密碼
openssl rsa -in localhost.key -out localhost_nopass.key

Salt-API配置

  • 創建用於salt-api的用戶
useradd -M -s /sbin/nologin pengyao
echo "pengyao_pass" | passwd pengyao —stdin
  • 配置eauth, /etc/salt/master.d/eauth.conf
external_auth:
  pam:
    pengyao:
      - .*
      - '@wheel'
      - '@runner'
  • 配置Salt-API, /etc/salt/master.d/api.conf
rest_cherrypy:
  port: 8000
  ssl_crt: /etc/pki/tls/certs/localhost.crt
  ssl_key: /etc/pki/tls/private/localhost_nopass.key
  • 啓動Salt-API
service salt-api start

Salt-API使用

  • 測試工具爲操作系統自帶的 curl

Login

  • Request
curl -k https://192.168.38.10:8000/login -H "Accept: application/x-yaml" \
     -d username='pengyao' \
     -d password='pengyao_pass' \
     -d eauth='pam'
  • Response
return:
- eauth: pam
  expire: 1385579710.806725
  perms:
  - .*
  start: 1385536510.8067241
  token: 784ee23c63794576a50ca5d3d890eb71efb0de6f
  user: pengyao

其中 token 後邊的串爲認證成功後獲取的token串,之後可以不用再次輸入密碼,直接使用本Token即可

查詢Minion(minion-01.example.com)的信息

  • Request
curl -k https://192.168.38.10:8000/minions/minion-01.example.com \
     -H "Accept: application/x-yaml" \
     -H "X-Auth-Token: 8e211da5d6bbb51fbffe6468a3ca0c6a24b3e535"

其中 X-Auth-Token 後邊的串爲之前Login獲取到的Token串, 如果請求的URL不包含 minion-01.example.com ,則請求的爲所有Minion的信息

  • Response
return:
- minion-01.example.com:
    cpu_flags:
    - fpu
    - vme
    - de
    ......

job管理

獲取緩存的jobs列表

  • Request
curl -k https://192.168.38.10:8000/jobs/ \
     -H "Accept: application/x-yaml" \
     -H "X-Auth-Token: 8e211da5d6bbb51fbffe6468a3ca0c6a24b3e535"
  • Response
return:
- '20131127065003726179':
    Arguments: []
    Function: test.ping
    Start Time: 2013, Nov 27 06:50:03.726179
    Target: '*'
    Target-type: glob
    User: sudo_vagrant

查詢指定的job

  • Request
curl -k https://192.168.38.10:8000/jobs/20131127065003726179 \
     -H "Accept: application/x-yaml" \
     -H "X-Auth-Token: 8e211da5d6bbb51fbffe6468a3ca0c6a24b3e535"
  • Response
return:
- minion-01.example.com: true

遠程執行模塊

  • Request
curl -k https://192.168.38.10:8000/ \
     -H "Accept: application/x-yaml" \
     -H "X-Auth-Token: 8e211da5d6bbb51fbffe6468a3ca0c6a24b3e535" \
     -d client='local' \
     -d tgt='*' \
     -d fun='test.ping'

也可以請求 https://192.168.38.10:8000/run ,不過該方法爲一次性使用,無法使用Token, 只能使用username和password

  • Response:
return:
- minion-01.example.com: true

運行runner

  • Request
curl -k https://192.168.38.10:8000/ \
     -H "Accept: application/x-yaml" \
     -H "X-Auth-Token: 8e211da5d6bbb51fbffe6468a3ca0c6a24b3e535" \
     -d client='runner' \
     -d fun='manage.status'
  • Response
return:
- down: []
  up:
  - minion-01.example.com

運行wheel

curl -k https://localhost:8000/ \
     -H "Accept: application/x-yaml" \
     -H "X-Auth-Token: 8e211da5d6bbb51fbffe6468a3ca0c6a24b3e535" \
     -d client='wheel' \
     -d fun='key.list_all'
  • Response
return:
- data:
    _stamp: 2013-12-23_04:54:22.483159
    fun: wheel.key.list_all
    jid: '20131223045422481844'
    return:
      local:
      - master.pem
      - master.pub
      minions:
      - minion-01.example.com
      minions_pre: []
      minions_rejected: []
     success: true
     tag: salt/wheel/20131223045422481844
     user: pengyao
   tag: salt/wheel/20131223045422481844

Targeting

謝謝 苦咖啡 提供

如果想在api中使用salt的 Targeting 功能,可以在Request的Post Data中增加expr_form (默認是 glob )及值即可:

依然以curl爲例:

curl -k https://192.168.38.10:8000/ \
     -H "Accept: application/x-yaml" \
     -H "X-Auth-Token: 8e211da5d6bbb51fbffe6468a3ca0c6a24b3e535" \
     -d client='local' \
     -d tgt='webcluster' \
     -d expr_form='nodegroup' \
     -d fun='test.ping'

將利用 nodegroup 匹配到名爲 webcluster 的target。

總結

Salt API幾乎涵蓋了所有的salt操作,功能強勁,尤其是需要salt和第三方系統集成的場景,值得擁有。

發佈了1 篇原創文章 · 獲贊 2 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章