API (RaaS) 是指 SaltStack Config 用戶端連線到的應用程式伺服器。這些用戶端包括 SaltStack Config 的使用者介面元件、正確設定的主節點以及 RaaS 的其他使用者。應用程式伺服器也稱為 eAPI 伺服器。

RaaS 將組織整理成模組 (稱為「資源」) 和函數 (稱為「方法」)。在 API 呼叫 test.echo(‘hello, world’) 中,資源為 test,方法為 echo()。可以按位置或關鍵字將引數傳遞至方法。

RaaS 可透過兩種方式進行存取:RPC 用戶端和 HTTP (或 HTTPS) 橋接器。

若要連線至 RaaS,請在 client = APIClient() 中設定這些選項:

  • 伺服器
  • username
  • 密碼
  • config_name=’internal’ (如果使用 LDAP,則變更為驗證後端名稱)
  • timeout=60 # (執行任何作業最多需要 60 秒)
  • ssl_key=None
  • ssl_cert=None
  • ssl_context=None
  • ssl_validate_cert=True (如果使用自我簽署憑證,則設定為 False)

範例:

from sseapiclient import APIClient
client = APIClient('https://localhost', 'root', 'PASSWORD', ssl_validate_cert=False)
備註:

在 6.2 之前的版本中,使用 SyncClient.connect() 進行 API 連線,這一點仍與 6.2 及更高版本相容。如果使用 SyncClient.connect(),則不需要進行變更。

API 語法

client.api.<interface>.<method>(parameter=parameter_value)

範例:

from sseapiclient import APIClient
client = APIClient('https://localhost', 'root', 'PASSWORD')
client.api.sec.download_content(auto_ingest=True)

將 API (RaaS) 與 Curl 搭配使用

也可以將 RaaS 直接與 HTTP 和 JSON 搭配使用。將 API 與 curl 搭配使用的範例如下。請注意,如果 xsrf 已啟用,則需要先取得 xsrf Cookie 和 Token。請參閱 HTTP 橋接器,以瞭解如何取得並使用 xsrf Token 和 Cookie。使用 Python API 用戶端時,此操作預設會自動完成。

範例:

curl --user 'root:PASSWORD' --url 'https://localhost/rpc' \
  --data '{
    "resource": "sec",
    "method": "download_content",
    "kwarg": {"auto_ingest": true}
  }'

授權

授權即將到期時,SaltStack Config 使用者介面會顯示警告通知。身為 RaaS 使用者,您必須使用 [授權] 工作區來追蹤授權狀態並確保其保持作用中狀態。如果授權到期,RaaS 服務便會停止。

RPC 用戶端

sseapiclient 模組中的程式設計 RPC 用戶端可與 Python 2.7 版和 Python 3.5 版或更新版本一起使用。這些用戶端會透過 HTTP 或 HTTPS 連線至 SSE 並進行驗證。使用 RPC 用戶端的優勢在於,比 HTTP 橋接器更便於使用。

HTTP 橋接器

HTTP (或 HTTPS) 橋接器接受以 POST 形式傳遞到 SSE 公開之端點的 JSON 裝載,將裝載轉換為 RPC 呼叫,然後以 JSON 形式傳回結果。端點支援以 Cookie 為基礎的驗證,因此每個工作階段只需傳遞一次驗證認證。此外,橋接器還允許在單一裝載中傳送多個呼叫。

如果在 /etc/raas/raas.conf (tornado_xsrf_cookies_enabled: True) 中啟用了 xsrf (在狀態安裝中為預設設定),則需要在 REST 呼叫的標頭上提供 X-Xsrftoken:。最佳方式是儲存具有 GET 呼叫的 cookie,然後使用此 cookie 提供標頭 Token。此 cookie 將儲存在 $HOME (使用者首頁) 目錄中。裝載是字典。

具有 xsrf 標頭的 curl 呼叫範例:

curl -k -c $HOME/eAPICookie.txt -u root:PASSWORD 'https://localhost/account/login' >/dev/null
curl -k -u root:PASSWORD -b $HOME/eAPICookie.txt \
  -H 'X-Xsrftoken: '$(grep -w '_xsrf' $HOME/eAPICookie.txt | cut -f7)'' \
  -X POST https://localhost/rpc \
  -d '{
    "resource": "sec",
    "method": "download_content",
    "kwarg": {"auto_ingest": true}
  }'

這些範例假設:

  • client=APIClient(<addr>,<user>, <pwd>)
  • 以預設狀態為基礎安裝 eAPI
  • SSL 已啟用
  • 匯入 sseapiclient。範例:
    from sseapiclient import APIClient