API (RaaS) 指的是 SaltStack Config 客户端连接的应用程序服务器。这些客户端包括 SaltStack Config 的用户界面组件、正确配置的主节点以及 RaaS 的其他用户。应用程序服务器也称为 eAPI 服务器。

RaaS 分为模块(称为“资源”)和函数(称为“方法”)。在 API 调用 test.echo(‘hello, world’) 中,资源是 test,方法是 echo()。参数可以通过位置或关键字传递到方法。

可通过两种方式访问 RaaS:通过 RPC 客户端和通过 HTTP(或 HTTPS)网桥。

要连接到 RaaS,请在 client = APIClient() 中设置以下选项:

  • 服务器
  • 用户名
  • 密码
  • config_name=’internal’ 如果使用的是 LDAP,则更改为身份验证后端名称
  • timeout=60 # 执行任何操作时最多需要 60 秒
  • ssl_key=无
  • ssl_cert=无
  • ssl_context=无
  • 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)

通过 Curl 使用 API (RaaS)

也可以直接通过 HTTP 和 JSON 使用 RaaS。以下是通过 curl 使用 API 的示例。请注意,启用 xsrf 时,首先需要获取 xsrf cookie 和令牌。有关如何获取并使用 xsrf 令牌和 cookie 的信息,请参见 HTTP 网桥。使用 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 提供标头令牌。此 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