API 指南
使用 Red Hat Satellite Representational State Transfer(REST)API 的指南
摘要
向红帽文档提供反馈 复制链接链接已复制到粘贴板!
我们感谢您对文档提供反馈信息。请让我们了解如何改进文档。
您可以通过在 Bugzilla 中记录一个 ticket 来提交反馈:
- 导航到 Bugzilla 网站。
-
在 Component 字段中,使用
Documentation。 - 在 Description 字段中,输入您要改进的建议。包括文档相关部分的链接。
- 点 Submit Bug。
第 1 章 简介 复制链接链接已复制到粘贴板!
红帽卫星提供了一个具象状态传输(REST)API。API 可让软件开发人员和系统管理员在标准 Web 界面之外控制其红帽卫星环境。REST API 对于旨在将 Red Hat Satellite 的功能与通过 HTTP 访问 API 的自定义脚本或外部应用程序集成的开发人员和管理员很有用。
1.1. Red Hat Satellite API 概述 复制链接链接已复制到粘贴板!
使用 REST API 的优点包括:
- 广泛的客户端支持 - 支持 HTTP 协议的任何编程语言、框架或系统都可以使用 API。
- 自助服务应用程序 - 客户端应用程序需要最少的 Red Hat Satellite 基础架构知识,因为用户在运行时发现多个详情。
- 基于资源的模式 - 基于资源的 REST 模型提供了管理虚拟化平台的自然方式。
您可以使用 REST API 执行以下任务:
- 与企业 IT 系统集成。
- 与第三方应用程序集成。
- 执行自动化维护或错误检查任务。
- 使用脚本自动执行重复任务。
当您准备升级卫星服务器时,请确保使用包含 Satellite API 命令的任何脚本都保持最新状态。API 命令因 Satellite 版本而异。
1.2. Satellite API 与 Hammer CLI 工具的比较 复制链接链接已复制到粘贴板!
对于许多任务,您可以使用 Hammer 和 Satellite API。您可以使用 Hammer 作为卫星 API 的人类可读界面。例如,要在脚本中应用对 API 调用的响应,请使用 --debug 选项检查 Hammer 问题的 API 调用: hammer --debug 组织列表。
在背景中,每个 Hammer 命令首先建立到 API 的绑定,然后发送请求。这在按顺序执行大量 Hammer 命令时存在性能影响。与之相反,使用 API 命令的脚本直接与卫星 API 通信。
请注意,您必须手动更新使用 API 命令的脚本,而 Hammer 会自动反映 API 中的更改。如需更多信息,请参阅 Hammer CLI 指南。
第 2 章 API 参考 复制链接链接已复制到粘贴板!
完整的 API 引用位于 https://satellite.example.com/apidoc/v2.html 的卫星服务器上。请注意,即使有 Satellite 6 API 的版本 1 和 2,红帽仅支持版本 2。
2.1. 了解 API 语法 复制链接链接已复制到粘贴板!
以下示例请求使用 python3 来格式化 Satellite 服务器中的 respone。在 RHEL 7 和一些较旧的系统中,您必须使用 python 而不是 python3。
内置 API 引用显示 API 路由或路径,前面带有 HTTP 动词:
HTTP_VERB API_ROUTE
HTTP_VERB API_ROUTE
要使用 API,请使用 curl 命令语法和参考文档中的 API 路由来构造命令:
- 1
- 要将
curl用于 API 调用,请使用--request选项指定 HTTP 动词。例如:--request POST。 - 2
- 添加
--insecure选项以跳过 SSL peer 证书验证检查。 - 3
- 使用
--user选项提供用户凭据。 - 4
- 5 6
- 7
- 从卫星服务器下载内容时,请使用
--output选项指定输出文件。 - 8
- 使用以下格式的 API 路由:
https://satellite.example.com/katello/api/activation_keys。在 Satellite 6 中,API 的版本 2 是默认值。因此,不需要在 API 调用的 URL 中使用v2。 - 9
- 将输出重定向到 Python
json.tool模块,以便更轻松地读取输出。
2.1.1. 使用 GET HTTP Verb 复制链接链接已复制到粘贴板!
使用 GET HTTP 动词从 API 中获取现有条目或资源的数据。
示例
这个示例请求 Satellite 主机的数量:
请求示例:
curl --request GET --insecure --user sat_username:sat_password \ https://satellite.example.com/api/hosts | python3 -m json.tool
$ curl --request GET --insecure --user sat_username:sat_password \
https://satellite.example.com/api/hosts | python3 -m json.tool
响应示例:
来自 API 的响应表示总共有两个结果,这是结果的第一个页面,每个页面最大结果设置为 20。更多信息请参阅 第 2.2 节 “了解 JSON 响应格式”。
2.1.2. 使用 POST HTTP Verb 复制链接链接已复制到粘贴板!
使用 POST HTTP 动词将数据提交到 API 以创建条目或资源。您必须使用 JSON 格式提交数据。更多信息请参阅 第 4.1.1 节 “将 JSON 数据传递给 API 请求”。
示例
这个示例创建了一个激活码。
创建一个测试文件,如
activation-key.json,其内容如下:{"organization_id":1, "name":"TestKey", "description":"Just for testing"}{"organization_id":1, "name":"TestKey", "description":"Just for testing"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过在
activation-key.json文件中应用数据来创建激活码:请求示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 响应示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 验证新激活码是否存在。在 Satellite Web UI 中,导航到 Content > Activation keys 以查看您的激活码。
2.1.3. 使用 PUT HTTP Verb 复制链接链接已复制到粘贴板!
使用 PUT HTTP 动词更改现有值或附加到现有资源。您必须使用 JSON 格式提交数据。更多信息请参阅 第 4.1.1 节 “将 JSON 数据传递给 API 请求”。
示例
本例更新了上例中创建的 TestKey 激活码。
编辑之前创建的
activation-key.json文件,如下所示:{"organization_id":1, "name":"TestKey", "description":"Just for testing","max_hosts":"10" }{"organization_id":1, "name":"TestKey", "description":"Just for testing","max_hosts":"10" }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 应用 JSON 文件中的更改:
请求示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 响应示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 在 Satellite Web UI 中,导航到 Content > Activation keys 来验证更改。
2.1.4. 使用 DELETE HTTP Verb 复制链接链接已复制到粘贴板!
要删除资源,可将 DELETE 动词与 API 路由一起使用,该路由中包含您要删除的资源 ID。
示例
这个示例删除 ID 为 2 的 TestKey 激活码:
请求示例:
curl --header "Accept:application/json" \ --header "Content-Type:application/json" --request DELETE \ --user sat_username:sat_password --insecure \ https://satellite.example.com/katello/api/activation_keys/2 \ | python3 -m json.tool
$ curl --header "Accept:application/json" \
--header "Content-Type:application/json" --request DELETE \
--user sat_username:sat_password --insecure \
https://satellite.example.com/katello/api/activation_keys/2 \
| python3 -m json.tool
响应示例:
2.1.5. 将 API 错误消息与 API 引用有关 复制链接链接已复制到粘贴板!
API 使用 RAILs 格式来指示错误:
Nested_Resource.Attribute_Name
Nested_Resource.Attribute_Name
这会转换为 API 引用中使用的以下格式:
Resource[Nested_Resource_attributes][Attribute_Name_id]
Resource[Nested_Resource_attributes][Attribute_Name_id]
2.2. 了解 JSON 响应格式 复制链接链接已复制到粘贴板!
调用 API 返回的结果,采用 JSON 格式。API 调用返回单选响应或响应集合的结果。
以下示例请求使用 python3 来格式化 Satellite 服务器中的 respone。在 RHEL 7 和一些较旧的系统中,您必须使用 python 而不是 python3。
单一对象的 JSON 响应格式
您可以使用单一对象 JSON 响应来操作单个对象。对单个对象的 API 请求需要对象的唯一标识符 :id。
这是 Satellite 域的单对象请求格式的示例,ID 为 23:
请求示例:
curl --request GET --insecure --user sat_username:sat_password \ https://satellite.example.com/api/domains/23 | python3 -m json.tool
$ curl --request GET --insecure --user sat_username:sat_password \
https://satellite.example.com/api/domains/23 | python3 -m json.tool
响应示例:
集合的 JSON 响应格式
集合是主机和域等对象列表。集合 JSON 响应的格式由 metadata 字段和 results 部分组成。
以下是 Satellite 域列表的集合请求格式的示例:
请求示例:
curl --request GET --insecure --user sat_username:sat_password \ https://satellite.example.com/api/domains | python3 -m json.tool
$ curl --request GET --insecure --user sat_username:sat_password \
https://satellite.example.com/api/domains | python3 -m json.tool
响应示例:
响应元数据字段
API 响应使用以下元数据字段:
-
total- 没有搜索参数的对象总数。 -
subtotal- 返回给定搜索参数的对象数量。如果没有搜索,则 subtotal 等于 total。 -
页面- 页面号。 -
per_page- 每个页面返回的最大对象数量。 -
limit- 在集合响应中返回指定的对象数量。 -
offset- 返回集合前跳过的对象数量。 -
search- 基于scoped_scoped语法的搜索字符串。 sort-
by- 通过什么字段指定 API 对集合进行排序。 -
order- 排序顺序,即 ASC 升序,或 DESC 表示降序。
-
-
结果- 对象的集合。
第 3 章 API 调用身份验证 复制链接链接已复制到粘贴板!
与 Satellite API 交互需要与卫星服务器 CA 证书进行 SSL 身份验证,并与有效的 Satellite 用户凭证进行身份验证。本章概述了可以使用的验证方法。
3.1. SSL 身份验证概述 复制链接链接已复制到粘贴板!
Red Hat Satellite 使用 HTTPS,在与 Red Hat Satellite Server 通信时提供一定程度的加密和身份验证。Satellite 6.12 不支持非 SSL 通信。
每个红帽卫星服务器都使用自签名证书。此证书同时充当服务器证书,以验证加密密钥和证书颁发机构(CA)以信任卫星服务器的身份。
3.1.1. 配置 SSL 身份验证 复制链接链接已复制到粘贴板!
使用以下步骤为 API 请求配置到卫星服务器的 SSL 身份验证。
流程
从卫星服务器获取您要使用以下选项之一进行通信的证书:
如果您从远程服务器执行命令,请使用 SSH 获取证书:
scp root@satellite.example.com:/var/www/html/pub/katello-server-ca.crt /etc/pki/ca-trust/source/anchors/satellite.example.com-katello-server-ca.crt
$ scp root@satellite.example.com:/var/www/html/pub/katello-server-ca.crt /etc/pki/ca-trust/source/anchors/satellite.example.com-katello-server-ca.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您直接在 Satellite 服务器上执行命令,请将证书复制到
/etc/pki/ca-trust/source/anchors目录中:cp /var/www/html/pub/katello-server-ca.crt /etc/pki/ca-trust/source/anchors/satellite.example.com-katello-server-ca.crt
$ cp /var/www/html/pub/katello-server-ca.crt /etc/pki/ca-trust/source/anchors/satellite.example.com-katello-server-ca.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow
将证书添加到可信 CA 列表中:
update-ca-trust extract
update-ca-trust extractCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
输入没有
--cacert选项的 API 请求来验证 NSS 数据库中是否存在证书:curl --request GET \ --user sat_username:sat_password \ https://satellite.example.com/api/v2/hosts
$ curl --request GET \ --user sat_username:sat_password \ https://satellite.example.com/api/v2/hostsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2. HTTP 身份验证概述 复制链接链接已复制到粘贴板!
所有对 Satellite API 的请求都需要有效的 Satellite 用户名和密码。API 使用 HTTP 基本身份验证对这些凭证进行编码,并添加到 Authorization 标头中。有关基本身份验证的更多信息,请参阅 RFC 2617 HTTP Authentication: Basic 和 Digest Access Authentication。如果请求没有包括适当的 Authorization 标头,API 会返回 401 Authorization Required 错误
基本身份验证涉及潜在的敏感信息,例如,它会以纯文本形式发送密码。REST API 需要 HTTPS 进行纯文本请求的传输级别加密。
有些 base64 库可将编码的凭证拆分为多行,并使用换行符终止每行。这会导致标头无效,并导致一个错误的请求。Authorization 标头要求编码的凭证位于标题中的一行中。
3.3. 个人访问令牌身份验证概述 复制链接链接已复制到粘贴板!
Red Hat Satellite 支持可用于验证 API 请求的个人访问令牌,而不使用您的密码。您可以为个人访问令牌设置过期日期。如果您决定它应在过期日期前过期,可以撤销它。
3.3.1. 创建一个个人访问令牌 复制链接链接已复制到粘贴板!
使用这个流程创建个人访问令牌。
流程
- 在 Satellite Web UI 中,进入到 Administer > Users。
- 选择您要为其创建个人访问令牌的用户。
- 在 Personal Access Tokens 选项卡中,点 Add Personal Access Token。
- 输入个人访问令牌的名称。
- 可选:选择 Expires 日期来设置过期日期。如果您没有设置过期日期,您的个人访问令牌将永远不会过期,除非被撤销。
点 Submit。到此,在 Personal Access Tokens 选项卡会包括您可用的个人访问令牌。
重要确保存储您的个人访问令牌,因为您将无法在离开页面或创建新的个人访问令牌后再次访问它。您可以点 Copy to clipboard 复制个人访问令牌。
验证
向 Satellite 服务器发出 API 请求,并使用您的个人访问令牌进行身份验证:
curl https://satellite.example.com/api/status --user My_Username:My_Personal_Access_Token
# curl https://satellite.example.com/api/status --user My_Username:My_Personal_Access_TokenCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您应该收到状态为
200的响应,例如:{"satellite_version":"6.12.0","result":"ok","status":200,"version":"3.5.1.10","api_version":2}{"satellite_version":"6.12.0","result":"ok","status":200,"version":"3.5.1.10","api_version":2}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您再次返回 Personal Access Tokens 选项卡,您可以在个人访问令牌旁看到最后使用时间。
3.3.2. 撤销个人访问令牌 复制链接链接已复制到粘贴板!
使用这个流程在过期日期前撤销个人访问令牌。
流程
- 在 Satellite Web UI 中,进入到 Administer > Users。
- 选择您要撤销个人访问令牌的用户。
- 在 Personal Access Tokens 选项卡中,找到您要撤销的个人访问令牌。
- 在您要撤销的个人访问令牌旁边的 Actions 列中点 Revoke。
验证
向 Satellite 服务器发出 API 请求,并尝试使用撤销的个人访问令牌进行身份验证:
curl https://satellite.example.com/api/status --user My_Username:My_Personal_Access_Token
# curl https://satellite.example.com/api/status --user My_Username:My_Personal_Access_TokenCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您会收到以下出错信息:
{ "error": {"message":"Unable to authenticate user My_Username"} }{ "error": {"message":"Unable to authenticate user My_Username"} }Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4. OAuth 身份验证概述 复制链接链接已复制到粘贴板!
作为基本身份验证的替代选择,您可以使用有限的 OAuth 1.0 身份验证。这有时被称为协议 1.0a 中的1分支 OAuth。
要查看 Satellite Web UI 中的 OAuth 设置,请导航至 Administer > Settings > Authentication。OAuth 使用者密钥是 供所有 OAuth 客户端使用的令牌。
Satellite 将 OAuth 设置存储在 /etc/foreman/settings.yaml 文件中。使用 satellite-installer 脚本配置这些设置,因为 Satellite 在升级时会覆盖对此文件的任何手动更改。
3.4.1. 配置 OAuth 复制链接链接已复制到粘贴板!
要更改 OAuth 设置,请使用所需选项输入 satellite-installer。输入以下命令列出所有 OAuth 相关安装程序选项:
satellite-installer --full-help | grep oauth
# satellite-installer --full-help | grep oauth
启用 OAuth 映射
默认情况下,Satellite 将所有 OAuth API 请求授权为内置的匿名 API 管理员帐户。因此,API 响应包括所有 Satellite 数据。但是,您也可以指定Foreman 用户发出请求并限制对该用户的数据访问。
要启用 OAuth 用户映射,请输入以下命令:
satellite-installer --foreman-oauth-map-users true
# satellite-installer --foreman-oauth-map-users true
卫星没有为 OAuth 请求中的标头签名。具有有效使用者键的任何人都可以模拟任何 Foreman 用户。
3.4.2. OAuth 请求格式 复制链接链接已复制到粘贴板!
每个 OAuth API 请求都需要一个带有现有 Foreman 用户的登录和 Authorization 标头的 FOREMAN-USER 标头,格式为:
--header 'FOREMAN-USER: sat_username' \ --header 'Authorization: OAuth oauth_version="1.0",oauth_consumer_key="secretkey",oauth_signature_method="hmac-sha1",oauth_timestamp=timestamp,oauth_signature=signature'
--header 'FOREMAN-USER: sat_username' \
--header 'Authorization: OAuth oauth_version="1.0",oauth_consumer_key="secretkey",oauth_signature_method="hmac-sha1",oauth_timestamp=timestamp,oauth_signature=signature'
使用 OAuth 客户端库构建所有 OAuth 参数。有关使用 requests_oauthlib Python 模块的示例,请参阅红帽知识库中的 如何通过 Red Hat Satellite 6 中的 python 脚本使用 OAuth 身份验证方法执行 API 调用。
示例
本例列出了使用 OAuth 进行身份验证的架构。请求在 FOREMAN-USER 标头中使用 sat_username 用户名。当 --foreman-oauth-map-users 被设置为 true 时,响应仅包含用户有权访问的构架。签名反映了每个参数、HTTP 方法和 URI 更改。
请求示例:
curl 'https://satellite.example.com/api/architectures' \ --header 'Content-Type: application/json' \ --header 'Accept:application/json' \ --header 'FOREMAN-USER: sat_username' \ --header 'Authorization: OAuth oauth_version="1.0",oauth_consumer_key="secretkey",oauth_signature_method="hmac-sha1",oauth_timestamp=1321473112,oauth_signature=Il8hR8/ogj/XVuOqMPB9qNjSy6E='
$ curl 'https://satellite.example.com/api/architectures' \
--header 'Content-Type: application/json' \
--header 'Accept:application/json' \
--header 'FOREMAN-USER: sat_username' \
--header 'Authorization: OAuth oauth_version="1.0",oauth_consumer_key="secretkey",oauth_signature_method="hmac-sha1",oauth_timestamp=1321473112,oauth_signature=Il8hR8/ogj/XVuOqMPB9qNjSy6E='
第 4 章 不同语言的 API 请求 复制链接链接已复制到粘贴板!
本章概述了通过 curl、Ruby 和 Python 向 Red Hat Satellite 发送 API 请求,并提供示例。
4.1. 使用 curl 进行 API 请求 复制链接链接已复制到粘贴板!
本节概述了如何使用 curl 和 Satellite API 执行各种任务。
Red Hat Satellite 需要使用 HTTPS,默认证书进行主机识别。如果您还没有添加 Satellite 服务器证书,如 第 3.1 节 “SSL 身份验证概述” 所述,您可以使用 --insecure 选项绕过证书检查。
对于用户身份验证,您可以使用 --user 选项以 --user username:password 格式提供卫星用户凭证,或者如果您未包含密码,该命令会提示您输入该密码。要降低安全风险,不要将密码包括在命令中,因为它随后成为您的 shell 历史记录的一部分。本节中的示例只包括用于简单起性的密码。
请注意,如果您使用 --silent 选项,curl 不会显示进度计量或任何错误消息。
本章示例使用 Python json.tool 模块来格式化输出。
4.1.1. 将 JSON 数据传递给 API 请求 复制链接链接已复制到粘贴板!
您可以使用 API 请求将数据传递给卫星服务器。数据必须采用 JSON 格式。当使用 --data 选项指定 JSON 数据时,您必须使用 --header 选项设置以下 HTTP 标头:
--header "Accept:application/json" \ --header "Content-Type:application/json"
--header "Accept:application/json" \
--header "Content-Type:application/json"
使用以下选项之一使用 --data 选项包括数据:
用大括号
{}括起的带引号 JSON 格式的数据。当为 JSON 类型参数传递值时,您必须转义引号"with backslashes\。例如,在大括号中,您必须将"Example JSON Variable"格式化为\"Example JSON Variable\":--data {"id":44, "smart_class_parameter":{"override":"true", "parameter_type":"json", "default_value":"{\"GRUB_CMDLINE_LINUX\": {\"audit\":\"1\",\"crashkernel\":\"true\"}}"}}--data {"id":44, "smart_class_parameter":{"override":"true", "parameter_type":"json", "default_value":"{\"GRUB_CMDLINE_LINUX\": {\"audit\":\"1\",\"crashkernel\":\"true\"}}"}}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 未加引号的 JSON 格式数据包括在文件中,并由
@符号和文件名指定。例如:--data @file.json
--data @file.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 对 JSON 格式的数据使用外部文件有以下优点:
- 您可以使用您首选的文本编辑器。
- 您可以使用语法检查器来查找和避免错误。
- 您可以使用工具检查 JSON 数据的有效性或重新格式化它。
验证 JSON 文件
使用 json_verify 工具检查 JSON 文件的有效性:
json_verify < test_file.json
$ json_verify < test_file.json
4.1.2. 检索资源列表 复制链接链接已复制到粘贴板!
本节概述了如何使用 Satellite 6 API 使用 curl 来从 Satellite 部署请求信息。这些示例包括 requests 和 响应。每个部署都有不同的结果。
以下示例请求使用 python3 来格式化 Satellite 服务器中的 respone。在 RHEL 7 和一些较旧的系统中,您必须使用 python 而不是 python3。
列出用户
这个示例是返回 Satellite 资源列表的基本请求,本例中为 Satellite 用户。这些请求会返回元数据中嵌套的数据列表,其他请求类型仅返回实际对象。
请求示例:
curl --request GET --insecure --user sat_username:sat_password \ https://satellite.example.com/api/users | python3 -m json.tool
$ curl --request GET --insecure --user sat_username:sat_password \
https://satellite.example.com/api/users | python3 -m json.tool
响应示例:
4.1.3. 创建和修改资源 复制链接链接已复制到粘贴板!
本节概述了如何使用 curl 和 Satellite 6 API 来操作卫星服务器上的资源。这些 API 调用要求您通过 API 调用以 json 格式传递数据。更多信息请参阅 第 4.1.1 节 “将 JSON 数据传递给 API 请求”。
创建用户
这个示例使用 --data 选项创建用户,以提供所需信息。
请求示例:
curl --header "Accept:application/json" \
--header "Content-Type:application/json" --request POST \
--user sat_username:sat_password --insecure \
--data "{\"firstname\":\"Test Name\",\"mail\":\"test@example.com\",\"login\":\"test_user\",\"password\":\"password123\",\"auth_source_id\":1}" \
https://satellite.example.com/api/users | python3 -m json.tool
$ curl --header "Accept:application/json" \
--header "Content-Type:application/json" --request POST \
--user sat_username:sat_password --insecure \
--data "{\"firstname\":\"Test Name\",\"mail\":\"test@example.com\",\"login\":\"test_user\",\"password\":\"password123\",\"auth_source_id\":1}" \
https://satellite.example.com/api/users | python3 -m json.tool
修改用户
这个示例修改在 创建用户 中创建的 first name 并登录 test_user。
请求示例:
curl --header "Accept:application/json" \
--header "Content-Type:application/json" --request PUT \
--user sat_username:sat_password --insecure \
--data "{\"firstname\":\"New Test Name\",\"mail\":\"test@example.com\",\"login\":\"new_test_user\",\"password\":\"password123\",\"auth_source_id\":1}" \
https://satellite.example.com/api/users/8 | python3 -m json.tool
$ curl --header "Accept:application/json" \
--header "Content-Type:application/json" --request PUT \
--user sat_username:sat_password --insecure \
--data "{\"firstname\":\"New Test Name\",\"mail\":\"test@example.com\",\"login\":\"new_test_user\",\"password\":\"password123\",\"auth_source_id\":1}" \
https://satellite.example.com/api/users/8 | python3 -m json.tool
4.2. 使用 Ruby 进行 API 请求 复制链接链接已复制到粘贴板!
本节概述了如何使用 Ruby 与 Satellite API 执行各种任务。
这些是示例脚本和命令。在使用前,请确保仔细检查这些脚本,并替换任何变量、用户名、密码和其他信息,以适应您自己的部署。
4.2.1. 使用 Ruby 创建对象 复制链接链接已复制到粘贴板!
此脚本连接到 Red Hat Satellite 6 API,并创建组织,然后在组织中创建三个环境。如果该组织已存在,脚本将使用该组织。如果组织中已存在任何环境,该脚本会引发错误并退出。
4.2.2. 在 Ruby 中使用 Apipie Bindings 复制链接链接已复制到粘贴板!
Apipie 绑定是pipie 记录的 API 调用的 Ruby 绑定。它们从 Satellite 获取并缓存 API 定义,然后根据需要生成 API 调用。本例创建组织,然后在组织中创建三个环境。如果该组织已存在,脚本将使用该组织。如果组织中已存在任何环境,该脚本会引发错误并退出。
4.3. 使用 Python 的 API 请求 复制链接链接已复制到粘贴板!
本节概述了如何使用 Python 和 Satellite API 执行各种任务。
这些是示例脚本和命令。在使用前,请确保仔细检查这些脚本,并替换任何变量、用户名、密码和其他信息,以适应您自己的部署。
本节中的示例脚本不使用 SSL 验证与 REST API 交互。
4.3.1. 使用 Python 创建对象 复制链接链接已复制到粘贴板!
此脚本连接到 Red Hat Satellite 6 API,并创建组织,然后在组织中创建三个环境。如果该组织已存在,脚本将使用该组织。如果组织中已存在任何环境,该脚本会引发错误并退出。
Python 2 示例
4.3.2. 使用 Python 从 API 请求信息 复制链接链接已复制到粘贴板!
这是一个示例脚本,它使用 Python 进行各种 API 请求。
Python 2 示例
Python 3 示例
第 5 章 使用 Red Hat Satellite API 复制链接链接已复制到粘贴板!
本章介绍了如何使用 Red Hat Satellite API 执行不同任务的示例。您可以通过 HTTPS 在端口 443 上使用 API,或者在端口 8443 上通过 HTTPS 在胶囊服务器中使用。
您可以在脚本本身中处理这些不同的端口要求。例如,在 Ruby 中,您可以指定 Satellite 和 Capsule URL,如下所示:
url = 'https://satellite.example.com/api/v2/' capsule_url = 'https://capsule.example.com:8443/api/v2/' katello_url = 'https://satellite.example.com/katello/api/v2/'
url = 'https://satellite.example.com/api/v2/'
capsule_url = 'https://capsule.example.com:8443/api/v2/'
katello_url = 'https://satellite.example.com/katello/api/v2/'
对于订阅到卫星服务器或胶囊服务器的主机,您可以在 [server] 部分的端口条目中确定从 /etc/rhsm/rhsm.conf 文件访问 API 所需的正确端口。您可以使用这些值来完全自动化脚本,删除任何需要验证要使用哪些端口。
本章使用 curl 来发送 API 请求。更多信息请参阅 第 4.1 节 “使用 curl 进行 API 请求”。
本章示例使用 Python json.tool 模块来格式化输出。
5.1. 使用主机 复制链接链接已复制到粘贴板!
以下示例请求使用 python3 来格式化 Satellite 服务器中的 respone。在 RHEL 7 和一些较旧的系统中,您必须使用 python 而不是 python3。
列出主机
本例返回 Satellite 主机列表。
请求示例:
curl -request GET --insecure --user sat_username:sat_password \ https://satellite.example.com/api/v2/hosts | python3 -m json.tool
$ curl -request GET --insecure --user sat_username:sat_password \
https://satellite.example.com/api/v2/hosts | python3 -m json.tool
响应示例:
为主机请求信息
此请求返回主机 satellite.example.com 的信息。
请求示例:
curl --request GET --insecure --user sat_username:sat_password \ https://satellite.example.com/api/v2/hosts/satellite.example.com \ | python3 -m json.tool
$ curl --request GET --insecure --user sat_username:sat_password \
https://satellite.example.com/api/v2/hosts/satellite.example.com \
| python3 -m json.tool
响应示例:
列出主机事实
此请求返回主机 satellite.example.com 的所有事实。
请求示例:
curl --request GET --insecure --user sat_username:sat_password \ https://satellite.example.com/api/v2/hosts/satellite.example.com/facts \ | python3 -m json.tool
$ curl --request GET --insecure --user sat_username:sat_password \
https://satellite.example.com/api/v2/hosts/satellite.example.com/facts \
| python3 -m json.tool
响应示例:
使用匹配模式搜索主机
此查询会返回与模式"example"匹配的所有主机。
请求示例:
curl --request GET --insecure --user sat_username:sat_password \ https://satellite.example.com/api/v2/hosts?search=example \ | python3 -m json.tool
$ curl --request GET --insecure --user sat_username:sat_password \
https://satellite.example.com/api/v2/hosts?search=example \
| python3 -m json.tool
响应示例:
在环境中搜索主机
此查询会返回生产环境中的所有主机。
请求示例:
curl --request GET --insecure --user sat_username:sat_password \ https://satellite.example.com/api/v2/hosts?search=environment=production \ | python3 -m json.tool
$ curl --request GET --insecure --user sat_username:sat_password \
https://satellite.example.com/api/v2/hosts?search=environment=production \
| python3 -m json.tool
响应示例:
使用特定事实值搜索主机
此查询会返回所有带有模型名称 RHEV Hypervisor 的主机。
请求示例:
curl --request GET --insecure --user sat_username:sat_password \ https://satellite.example.com/api/v2/hosts?search=model=\"RHEV+Hypervisor\" \ | python3 -m json.tool
$ curl --request GET --insecure --user sat_username:sat_password \
https://satellite.example.com/api/v2/hosts?search=model=\"RHEV+Hypervisor\" \
| python3 -m json.tool
响应示例:
删除主机
此请求将删除名称为 host1.example.com 的主机。
请求示例:
curl --request DELETE --insecure --user sat_username:sat_password \ https://satellite.example.com/api/v2/hosts/host1.example.com \ | python3 -m json.tool
$ curl --request DELETE --insecure --user sat_username:sat_password \
https://satellite.example.com/api/v2/hosts/host1.example.com \
| python3 -m json.tool
下载完整引导磁盘镜像
此请求根据其 ID 为主机下载完整引导磁盘镜像。
请求示例:
curl --request GET --insecure --user sat_username:sat_password \ https://satellite.example.com/api/bootdisk/hosts/host_ID?full=true \ --output image.iso
$ curl --request GET --insecure --user sat_username:sat_password \
https://satellite.example.com/api/bootdisk/hosts/host_ID?full=true \
--output image.iso
5.2. 使用生命周期环境 复制链接链接已复制到粘贴板!
卫星将应用程序生命周期划分为不同的生命周期环境,这些环境代表应用程序生命周期的每个阶段。生命周期环境从路径链接到。要使用 API 创建链接的生命周期环境,请使用 prior_id 参数。
您可以在 https://satellite.example.com/apidoc/v2/lifecycle_environments.html 找到用于生命周期环境的内置 API 参考。API 路由包括 /katello/api/environments 和 /katello/api/organizations/:organization_id/environments。
以下示例请求使用 python3 来格式化 Satellite 服务器中的 respone。在 RHEL 7 和一些较旧的系统中,您必须使用 python 而不是 python3。
列出生命周期环境
使用此 API 调用列出您 Satellite 上默认机构的所有当前生命周期环境,ID 为 1。
请求示例:
curl --header "Accept:application/json" \ --header "Content-Type:application/json" \ --request GET --user sat_username:sat_password --insecure \ https://satellite.example.com/katello/api/organizations/1/environments \ | python3 -m json.tool`
$ curl --header "Accept:application/json" \
--header "Content-Type:application/json" \
--request GET --user sat_username:sat_password --insecure \
https://satellite.example.com/katello/api/organizations/1/environments \
| python3 -m json.tool`
响应示例:
创建链接的生命周期环境
使用本例来创建生命周期环境路径。
此流程使用 ID 为 1 的默认库环境,作为创建生命周期环境的起点。
选择您要用作起点的现有生命周期环境。使用其 ID 列出环境,在这个示例中,ID 为
1的环境:请求示例:
curl --request GET --user sat_username:sat_password --insecure \ https://satellite.example.com/katello/api/environments/1 \ | python3 -m json.tool
$ curl --request GET --user sat_username:sat_password --insecure \ https://satellite.example.com/katello/api/environments/1 \ | python3 -m json.toolCopy to Clipboard Copied! Toggle word wrap Toggle overflow 响应示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个 JSON 文件,如
life-cycle.json,其中包含以下内容:{"organization_id":1,"label":"api-dev","name":"API Development","prior":1}{"organization_id":1,"label":"api-dev","name":"API Development","prior":1}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
prior选项设置为1来创建生命周期环境。请求示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 响应示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在命令输出中,您可以看到此生命周期环境的 ID 为
2,且该生命周期环境是1。使用 ID 为2的生命周期环境,为这个环境创建一个成功。编辑之前创建的
生命周期.json文件,更新标签、名称和之前的值。{"organization_id":1,"label":"api-qa","name":"API QA","prior":2}{"organization_id":1,"label":"api-qa","name":"API QA","prior":2}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
prior选项设置为2来创建生命周期环境。请求示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 响应示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在命令输出中,您可以看到此生命周期环境的 ID 是
3,且该生命周期环境是2。
更新生命周期环境
您可以使用 PUT 命令更新生命周期环境。
这个示例请求更新了生命周期环境的描述,其 ID 为 3。
请求示例:
响应示例:
删除生命周期环境
您可以删除一个没有后续者的生命周期环境。因此,使用以下格式的命令以相反顺序删除它们:
请求示例:
curl --request DELETE --user sat_username:sat_password --insecure \ https://satellite.example.com/katello/api/environments/:id
$ curl --request DELETE --user sat_username:sat_password --insecure \
https://satellite.example.com/katello/api/environments/:id
5.3. 将内容上传到卫星服务器 复制链接链接已复制到粘贴板!
本节概述了如何使用 Satellite 6 API 将大型文件上传并导入到 Satellite 服务器中。这个过程涉及四个步骤:
- 创建上传请求。
- 上传内容。
- 导入内容。
- 删除上传请求。
您可以上传的最大文件大小为 2MB。有关上传更大内容的详情请参考 上传大于 2 MB 的内容。
流程
将软件包名称分配给
变量名称:请求示例:
export name=jq-1.6-2.el7.x86_64.rpm
$ export name=jq-1.6-2.el7.x86_64.rpmCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将文件的 checksum 分配给变量
checksum:请求示例:
export checksum=$(sha256sum $name|cut -c 1-65)
$ export checksum=$(sha256sum $name|cut -c 1-65)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将文件大小分配给变量
大小:请求示例:
export size=$(du -bs $name|cut -f 1)
$ export size=$(du -bs $name|cut -f 1)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下命令创建一个新的上传请求,并使用
大小和checksum返回请求的上传 ID。请求示例:
curl -H 'Content-Type: application/json' -X POST -k \ -u sat_username:sat_password -d "{\"size\": \"$size\", \ \"checksum\":\"$checksum\"}" \ https://$(hostname -f)/katello/api/v2/repositories/76/content_uploads$ curl -H 'Content-Type: application/json' -X POST -k \ -u sat_username:sat_password -d "{\"size\": \"$size\", \ \"checksum\":\"$checksum\"}" \ https://$(hostname -f)/katello/api/v2/repositories/76/content_uploadsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在这种情况下,76 是一个存储库 ID 示例。
请求示例:
{"upload_id":"37eb5900-597e-4ac3-9bc5-2250c302fdc4"}{"upload_id":"37eb5900-597e-4ac3-9bc5-2250c302fdc4"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将上传 ID 分配给变量
upload_id:请求示例:
export upload_id=37eb5900-597e-4ac3-9bc5-2250c302fdc4
$ export upload_id=37eb5900-597e-4ac3-9bc5-2250c302fdc4Copy to Clipboard Copied! Toggle word wrap Toggle overflow 分配您要上传到变量
路径的软件包路径:export path=/root/jq/jq-1.6-2.el7.x86_64.rpm
$ export path=/root/jq/jq-1.6-2.el7.x86_64.rpmCopy to Clipboard Copied! Toggle word wrap Toggle overflow 上传您的内容。确定在您上传数据时使用正确的 MIME 类型。API 使用 application/json MIME 类型,大多数请求都对 Satellite 6 使用。组合 upload_id、MIME 类型和其他参数来上传内容。
请求示例:
curl -u sat_username:sat_password -H Accept:application/json -H \ Content-Type:multipart/form-data -X PUT --data-urlencode size=$size --data-urlencode offset=0 \ --data-urlencode content@${path} \ https://$(hostname -f)/katello/api/v2/repositories/76/content_uploads/$upload_id$ curl -u sat_username:sat_password -H Accept:application/json -H \ Content-Type:multipart/form-data -X PUT --data-urlencode size=$size --data-urlencode offset=0 \ --data-urlencode content@${path} \ https://$(hostname -f)/katello/api/v2/repositories/76/content_uploads/$upload_idCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将内容上传到卫星服务器后,您需要将其导入到适当的存储库。在完成此步骤前,卫星服务器不会检测到新内容。
请求示例:
curl -H "Content-Type:application/json" -X PUT -u \ sat_username:sat_password -k -d \ "{\"uploads\":[{\"id\": \"$upload_id\", \"name\": \"$name\", \ \"checksum\": \"$checksum\" }]}" \ https://$(hostname -f)/katello/api/v2/repositories/76/import_uploads$ curl -H "Content-Type:application/json" -X PUT -u \ sat_username:sat_password -k -d \ "{\"uploads\":[{\"id\": \"$upload_id\", \"name\": \"$name\", \ \"checksum\": \"$checksum\" }]}" \ https://$(hostname -f)/katello/api/v2/repositories/76/import_uploadsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 成功上传并导入内容后,您可以删除上传请求。这会释放在上传过程中使用的所有临时磁盘空间。
请求示例:
curl -H 'Content-Type: application/json' -X DELETE -k \ -u sat_username:sat_password -d "{}" \ https://$(hostname -f)/katello/api/v2/repositories/76/content_uploads/$upload_id$ curl -H 'Content-Type: application/json' -X DELETE -k \ -u sat_username:sat_password -d "{}" \ https://$(hostname -f)/katello/api/v2/repositories/76/content_uploads/$upload_idCopy to Clipboard Copied! Toggle word wrap Toggle overflow
上传大于 2 MB 的内容
以下示例演示了如何将大文件分成块,创建上传请求,上传单个文件,将其导入到 Satellite,然后删除上传请求。请注意,本示例使用示例内容、主机名、用户名、存储库 ID 和文件名。
将软件包名称分配给
变量名称:export name=bpftool-3.10.0-1160.2.1.el7.centos.plus.x86_64.rpm
$ export name=bpftool-3.10.0-1160.2.1.el7.centos.plus.x86_64.rpmCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将文件的 checksum 分配给变量
checksum:export checksum=$(sha256sum $name|cut -c 1-65)
$ export checksum=$(sha256sum $name|cut -c 1-65)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将文件大小分配给变量
大小:export size=$(du -bs $name|cut -f 1)
$ export size=$(du -bs $name|cut -f 1)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下命令创建一个新的上传请求,并使用
大小和checksum返回请求的上传 ID。请求示例:
curl -H 'Content-Type: application/json' -X POST -k \ -u sat_username:sat_password -d "{\"size\": \"$size\", \ \"checksum\":\"$checksum\"}" \ https://$(hostname -f)/katello/api/v2/repositories/76/content_uploads$ curl -H 'Content-Type: application/json' -X POST -k \ -u sat_username:sat_password -d "{\"size\": \"$size\", \ \"checksum\":\"$checksum\"}" \ https://$(hostname -f)/katello/api/v2/repositories/76/content_uploadsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在这种情况下,76 是一个存储库 ID 示例。
输出示例
{"upload_id":"37eb5900-597e-4ac3-9bc5-2250c302fdc4"}{"upload_id":"37eb5900-597e-4ac3-9bc5-2250c302fdc4"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将上传 ID 分配给变量
upload_id:export upload_id=37eb5900-597e-4ac3-9bc5-2250c302fdc4
$ export upload_id=37eb5900-597e-4ac3-9bc5-2250c302fdc4Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将文件分成 2MB 块:
split --bytes 2MB --numeric-suffixes \ --suffix-length=1 bpftool-3.10.0-1160.2.1.el7.centos.plus.x86_64.rpm bpftool
$ split --bytes 2MB --numeric-suffixes \ --suffix-length=1 bpftool-3.10.0-1160.2.1.el7.centos.plus.x86_64.rpm bpftoolCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将拆分文件的前缀分配给变量路径。
export path=/root/tmp/bpftool
$ export path=/root/tmp/bpftoolCopy to Clipboard Copied! Toggle word wrap Toggle overflow 上传文件块。偏移时间从 0 开始,第一个块的块开始,为每个文件增加 2000000。注意使用偏移参数以及如何与文件大小相关。另请注意,索引在 path 变量后使用,如 ${path}0、${path}1。
请求示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将完整上传导入到存储库:
curl -H "Content-Type:application/json" -X PUT -u \ sat_username:sat_password -k -d \ "{\"uploads\":[{\"id\": \"$upload_id\", \ \"name\": \"$name\", \"checksum\": \"$checksum\" }]}" \ https://$(hostname -f)/katello/api/v2/repositories/76/import_uploads$ curl -H "Content-Type:application/json" -X PUT -u \ sat_username:sat_password -k -d \ "{\"uploads\":[{\"id\": \"$upload_id\", \ \"name\": \"$name\", \"checksum\": \"$checksum\" }]}" \ https://$(hostname -f)/katello/api/v2/repositories/76/import_uploadsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 删除上传请求:
curl -H 'Content-Type: application/json' -X DELETE -k \ -u sat_username:sat_password -d "{}" \ https://$(hostname -f)/katello/api/v2/repositories/76/content_uploads/$upload_id$ curl -H 'Content-Type: application/json' -X DELETE -k \ -u sat_username:sat_password -d "{}" \ https://$(hostname -f)/katello/api/v2/repositories/76/content_uploads/$upload_idCopy to Clipboard Copied! Toggle word wrap Toggle overflow
上传重复内容
请注意,如果您试图使用以下内容上传重复的内容:
请求示例:
curl -H 'Content-Type: application/json' -X POST -k \
-u sat_username:sat_password -d "{\"size\": \"$size\", \"checksum\":\"$checksum\"}" \
https://$(hostname -f)/katello/api/v2/repositories/76/content_uploads
$ curl -H 'Content-Type: application/json' -X POST -k \
-u sat_username:sat_password -d "{\"size\": \"$size\", \"checksum\":\"$checksum\"}" \
https://$(hostname -f)/katello/api/v2/repositories/76/content_uploads
这个调用会返回内容单元 ID 而不是上传 ID,如下所示:
{"content_unit_href":"/pulp/api/v3/content/file/files/c1bcdfb8-d840-4604-845e-86e82454c747/"}
{"content_unit_href":"/pulp/api/v3/content/file/files/c1bcdfb8-d840-4604-845e-86e82454c747/"}
您可以复制此输出并直接调用导入上传,将内容添加到存储库中:
请求示例:
curl -H "Content-Type:application/json" -X PUT -u \
sat_username:sat_password -k \-d \
"{\"uploads\":[{\"content_unit_id\": \"/pulp/api/v3/content/file/files/c1bcdfb8-d840-4604-845e-86e82454c747/\", \
\"name\": \"$name\", \ \"checksum\": \"$checksum\" }]}" https://$(hostname -f)/katello/api/v2/repositories/76/import_uploads
$ curl -H "Content-Type:application/json" -X PUT -u \
sat_username:sat_password -k \-d \
"{\"uploads\":[{\"content_unit_id\": \"/pulp/api/v3/content/file/files/c1bcdfb8-d840-4604-845e-86e82454c747/\", \
\"name\": \"$name\", \ \"checksum\": \"$checksum\" }]}" https://$(hostname -f)/katello/api/v2/repositories/76/import_uploads
请注意,调用使用 upload_id 更改为使用 content_unit_id。
5.4. 将勘误应用到主机或主机集合 复制链接链接已复制到粘贴板!
您可以使用 API 将勘误表应用到主机、主机组或主机集合。以下是 PUT 请求的基本语法:
curl --header "Accept:application/json" \ --header "Content-Type:application/json" --request PUT \ --user sat_username:sat_password --insecure \ --data json-formatted-data https://satellite7.example.com
$ curl --header "Accept:application/json" \
--header "Content-Type:application/json" --request PUT \
--user sat_username:sat_password --insecure \
--data json-formatted-data https://satellite7.example.com
您可以浏览 API doc 内置的文件来查找用于应用勘误的 URL。您可以使用 Satellite Web UI 来帮助发现搜索查询的格式。进入 Hosts > Host Collections 并选择一个主机集合。进入 Collection Actions > Errata Installation 并注意搜索查询框内容。例如,对于名为 my-collection 的主机集合,搜索框包含 host_collection="my-collection"。
将勘误应用到主机
这个示例使用 API URL 用于批量操作 /katello/api/hosts/bulk/install_content,以显示简单搜索所需的格式。
请求示例:
curl --header "Accept:application/json" \
--header "Content-Type:application/json" --request PUT \
--user sat_username:sat_password --insecure \
--data "{\"organization_id\":1,\"included\":{\"search\":\"my-host\"},\"content_type\":\"errata\",\"content\":[\"RHBA-2016:1981\"]}" \
https://satellite.example.com/api/v2/hosts/bulk/install_content
$ curl --header "Accept:application/json" \
--header "Content-Type:application/json" --request PUT \
--user sat_username:sat_password --insecure \
--data "{\"organization_id\":1,\"included\":{\"search\":\"my-host\"},\"content_type\":\"errata\",\"content\":[\"RHBA-2016:1981\"]}" \
https://satellite.example.com/api/v2/hosts/bulk/install_content
将勘误应用到主机集合
在本例中,请注意传递搜索字符串 host_collection="my-collection" 所需的级别,如 Satellite Web UI 所示。
请求示例:
curl --header "Accept:application/json" \
--header "Content-Type:application/json" --request PUT \
--user sat_username:sat_password --insecure \
--data "{\"organization_id\":1,\"included\":{\"search\":\"host_collection=\\\"my-collection\\\"\"},\"content_type\":\"errata\",\"content\":[\"RHBA-2016:1981\"]}" \
https://satellite.example.com/api/v2/hosts/bulk/install_content
$ curl --header "Accept:application/json" \
--header "Content-Type:application/json" --request PUT \
--user sat_username:sat_password --insecure \
--data "{\"organization_id\":1,\"included\":{\"search\":\"host_collection=\\\"my-collection\\\"\"},\"content_type\":\"errata\",\"content\":[\"RHBA-2016:1981\"]}" \
https://satellite.example.com/api/v2/hosts/bulk/install_content
5.5. 使用扩展搜索 复制链接链接已复制到粘贴板!
您可以在 Web UI 中查找用于构建搜索查询的搜索参数。如需更多信息,请参阅 管理 Red Hat Satellite 中的 构建搜索查询。
例如,要搜索主机,请完成以下步骤:
- 在 Satellite Web UI 中,导航到 Hosts > All Hosts,然后点击 Search 字段来显示搜索参数列表。
- 找到您要使用的搜索参数。在本例中,找到 os_title 和 模型。
在您的 API 查询中组合搜索参数,如下所示:
请求示例:
curl --insecure --user sat_username:sat_password \ https://satellite.example.com/api/v2/hosts?search=os_title=\"RedHat+7.7\",model=\"PowerEdge+R330\" \ | python3 -m json.tool
$ curl --insecure --user sat_username:sat_password \ https://satellite.example.com/api/v2/hosts?search=os_title=\"RedHat+7.7\",model=\"PowerEdge+R330\" \ | python3 -m json.toolCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意示例请求使用
python3来格式化 Satellite 服务器中的 respone。在 RHEL 7 和一些较旧的系统中,您必须使用python而不是python3。响应示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.6. 使用带有 Pagination Control 的搜索 复制链接链接已复制到粘贴板!
您可以使用 per_page 和 page 分页参数来限制 API 搜索查询返回的搜索结果。per_page 参数指定每个页面的结果数,page 参数指定按 per_page 参数计算的页面,以便返回。
当您不指定任何分页参数时,要返回的默认项数量被设置为 1000,但 per_page 值的默认值为 20,在指定 page 参数时应用默认值。
列出内容视图
本例在页面中返回一个 Content Views 列表。列表中每个页面包含 10 个键并返回第三个页面。
请求示例:
curl --request GET --user sat_username:sat_password \ https://satellite.example.com/katello/api/content_views?per_page=10&page=3
$ curl --request GET --user sat_username:sat_password \
https://satellite.example.com/katello/api/content_views?per_page=10&page=3
列出激活码
这个示例返回带有 ID 1 在页中的机构的激活码列表。列表中每个页面包含 30 个密钥,并返回第二页。
请求示例:
curl --request GET --user sat_username:sat_password \ https://satellite.example.com/katello/api/activation_keys?organization_id=1&per_page=30&page=2
$ curl --request GET --user sat_username:sat_password \
https://satellite.example.com/katello/api/activation_keys?organization_id=1&per_page=30&page=2
返回多个页面
您可以使用 for 循环结构获取多个结果页面。
这个示例将页面 1 返回为 3 个内容视图,每个页面有 5 个结果:
for i in seq 1 3; do \ curl --request GET --user sat_username:sat_password \ https://satellite.example.com/katello/api/content_views?per_page=5&page=$i; \ done
$ for i in seq 1 3; do \
curl --request GET --user sat_username:sat_password \
https://satellite.example.com/katello/api/content_views?per_page=5&page=$i; \
done
5.7. 覆盖智能类参数 复制链接链接已复制到粘贴板!
您可以使用 API 搜索智能参数并提供一个值来覆盖类中的智能参数。您可以在 https://satellite.example.com/apidoc/v2/smart_class_parameters/update.html 的内置 API 参考中找到可以修改的属性的完整列表。
查找您要更改的 Smart Class 参数的 ID:
列出所有智能类参数。
请求示例:
curl --request GET --insecure --user sat_username:sat_password \ https://satellite.example.com/api/smart_class_parameters
$ curl --request GET --insecure --user sat_username:sat_password \ https://satellite.example.com/api/smart_class_parametersCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您知道 Puppet 类 ID,如 5,您可以限制范围:
请求示例:
curl --request GET --insecure --user sat_username:sat_password \ https://satellite.example.com/api/puppetclasses/5/smart_class_parameters
$ curl --request GET --insecure --user sat_username:sat_password \ https://satellite.example.com/api/puppetclasses/5/smart_class_parametersCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这两个调用都接受 search 参数。您可以在 Satellite Web UI 中查看可搜索字段的完整列表。导航到 Configure > Smart variables,然后在搜索查询框中点击以显示字段列表。
两个特别有用的搜索参数是
puppetclass_name和key,可用于搜索特定参数。例如,使用--data选项传递 URL 编码数据。请求示例:
curl --request GET --insecure --user sat_username:sat_password \ --data 'search=puppetclass_name = access_insights_client and key = authmethod' \ https://satellite.example.com/api/smart_class_parameters
$ curl --request GET --insecure --user sat_username:sat_password \ --data 'search=puppetclass_name = access_insights_client and key = authmethod' \ https://satellite.example.com/api/smart_class_parametersCopy to Clipboard Copied! Toggle word wrap Toggle overflow Satellite 支持标准范围搜索语法。
找到 参数的 ID 时,列出包括当前覆盖值的完整详情。
请求示例:
curl --request GET --insecure --user sat_username:sat_password \ https://satellite.example.com/api/smart_class_parameters/63
$ curl --request GET --insecure --user sat_username:sat_password \ https://satellite.example.com/api/smart_class_parameters/63Copy to Clipboard Copied! Toggle word wrap Toggle overflow 启用覆盖参数值。
请求示例:
curl --header "Accept:application/json" \ --header "Content-Type:application/json" \ --request PUT --insecure --user sat_username:sat_password \ --data '{"smart_class_parameter":{"override":true}}' \ https://satellite.example.com/api/smart_class_parameters/63$ curl --header "Accept:application/json" \ --header "Content-Type:application/json" \ --request PUT --insecure --user sat_username:sat_password \ --data '{"smart_class_parameter":{"override":true}}' \ https://satellite.example.com/api/smart_class_parameters/63Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,您无法手动创建或删除参数。您只能修改其属性。Satellite 仅在从代理导入的类时创建和删除参数。
添加自定义覆盖匹配器。
请求示例:
curl --header "Accept:application/json" \ --header "Content-Type:application/json" \ --request PUT --insecure --user sat_username:sat_password \ --data '{"smart_class_parameter":{"override_value":{"match":"hostgroup=Test","value":"2.4.6"}}}' \ https://satellite.example.com/api/smart_class_parameters/63$ curl --header "Accept:application/json" \ --header "Content-Type:application/json" \ --request PUT --insecure --user sat_username:sat_password \ --data '{"smart_class_parameter":{"override_value":{"match":"hostgroup=Test","value":"2.4.6"}}}' \ https://satellite.example.com/api/smart_class_parameters/63Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关覆盖值的更多信息,请参阅
https://satellite.example.com/apidoc/v2/override_values.html。您可以删除覆盖值。
请求示例:
curl --request DELETE --user sat_username:sat_password \ https://satellite.example.com/api/smart_class_parameters/63/override_values/3
$ curl --request DELETE --user sat_username:sat_password \ https://satellite.example.com/api/smart_class_parameters/63/override_values/3Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.8. 使用外部文件修改智能类参数 复制链接链接已复制到粘贴板!
使用外部文件简化了使用 JSON 数据的过程。使用语法高亮显示的编辑器可以帮助您避免和查找错误。
以下示例请求使用 python3 来格式化 Satellite 服务器中的 respone。在 RHEL 7 和一些较旧的系统中,您必须使用 python 而不是 python3。
使用外部文件修改智能类参数
本例使用 MOTD Puppet 清单。
按名称搜索 Puppet 类
motd。请求示例:
curl --header "Accept:application/json" \ --header "Content-Type:application/json" \ --request GET --user sat_user:sat_password --insecure \ https://satellite.example.com/api/smart_class_parameters?search=puppetclass_name=motd \ | python3 -m json.tool
$ curl --header "Accept:application/json" \ --header "Content-Type:application/json" \ --request GET --user sat_user:sat_password --insecure \ https://satellite.example.com/api/smart_class_parameters?search=puppetclass_name=motd \ | python3 -m json.toolCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查以下输出:每个智能类参数都有一个 ID,对于同一 Satellite 实例来说是全局的。
motd类的内容参数在这一卫星服务器中具有id=3。不要将此与 Puppet Class 名称前面显示的 Puppet Class ID 混淆。响应示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用参数 ID
3获取特定于motd参数的信息,并将输出重定向到文件,如 output_file.json。请求示例:
curl --header "Accept:application/json" \ --header "Content-Type:application/json" --request GET \ --user sat_user:sat_password --insecure \` https://satellite.example.com/api/smart_class_parameters/3 \ | python3 -m json.tool > output_file.json
$ curl --header "Accept:application/json" \ --header "Content-Type:application/json" --request GET \ --user sat_user:sat_password --insecure \` https://satellite.example.com/api/smart_class_parameters/3 \ | python3 -m json.tool > output_file.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将上一步中创建的文件复制到要编辑的新文件,例如
changed_file.json:cp output_file.json changed_file.json
$ cp output_file.json changed_file.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow 修改文件中所需的值。在本例中,将
motd模块的 content 参数更改,这需要将override选项从false改为true:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑文件后,请验证其是否如下所示,然后保存更改:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将更改应用到 Satellite 服务器:
curl --header "Accept:application/json" \ --header "Content-Type:application/json" \ --request PUT --user sat_username:sat_password --insecure \ --data @changed_file.json \ https://satellite.example.com/api/smart_class_parameters/3
$ curl --header "Accept:application/json" \ --header "Content-Type:application/json" \ --request PUT --user sat_username:sat_password --insecure \ --data @changed_file.json \ https://satellite.example.com/api/smart_class_parameters/3Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.9. 删除 OpenSCAP 报告 复制链接链接已复制到粘贴板!
在卫星服务器中,您可以删除一个或多个 OpenSCAP 报告。但是,当您删除报告时,您必须一次删除一个页面。如果要删除所有 Openscap 报告,请使用如下 bash 脚本。
以下示例请求和示例脚本使用 python3 来格式化来自 Satellite 服务器的响应。在 RHEL 7 和一些较旧的系统中,您必须使用 python 而不是 python3。
删除 OpenSCAP 报告
要删除 OpenSCAP 报告,请完成以下步骤:
列出所有 OpenSCAP 报告。记录您要删除的报告 ID。
请求示例:
curl --insecure --user username:_password_ \ https://satellite.example.com/api/v2/compliance/arf_reports/ | python3 -m json.tool
curl --insecure --user username:_password_ \ https://satellite.example.com/api/v2/compliance/arf_reports/ | python3 -m json.toolCopy to Clipboard Copied! Toggle word wrap Toggle overflow 响应示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用上一步中的 ID,删除 OpenSCAP 报告。重复您要删除的每个 ID。
请求示例:
curl --insecure --user username:_password_ \ --header "Content-Type: application/json" \ --request DELETE https://satellite.example.com/api/v2/compliance/arf_reports/405
# curl --insecure --user username:_password_ \ --header "Content-Type: application/json" \ --request DELETE https://satellite.example.com/api/v2/compliance/arf_reports/405Copy to Clipboard Copied! Toggle word wrap Toggle overflow 响应示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
BASH 脚本删除所有 OpenSCAP 报告示例
使用以下 bash 脚本删除所有 OpenSCAP 报告:
附录 A. API 响应代码 复制链接链接已复制到粘贴板!
Red Hat Satellite 6 API 为 API 调用提供 HTTP 响应状态代码。以下代码适用于 Satellite API 中所有资源:
| 响应 | 解释 |
|---|---|
| 200 OK | 对于成功请求操作:显示、索引、更新或删除(GET、PUT、DELETE 请求)。 |
| 201 已创建 | 用于成功的创建操作(POST 请求)。 |
| 301 永久移动 | 当 Satellite 限制为使用 HTTPS 但尝试使用 HTTP 时,会进行重定向。 |
| 400 错误请求 | 缺少需要的参数,或者搜索查询具有无效的语法。 |
| 401 未授权 | 无法授权用户(例如,不正确的凭证)。 |
| 403 Forbidden | 用户没有足够的权限来执行操作或读取资源,或一般不支持该操作。 |
| 404 not Found | 带有给定 ID 的记录不存在。当请求的记录不存在时,它可能出现在显示和删除操作中;或者,当其中一个关联的记录不存在时,可以对其进行创建、更新和删除操作。 |
| 409 冲突 | 由于现有依赖项(例如,带有主机的主机组)无法删除记录。 |
| 415 不支持的 Media 类型 | HTTP 请求的内容类型不是 JSON。 |
| 422 不可处理实体 | 因验证错误而创建实体失败。仅适用于创建或更新操作。 |
| 500 内部服务器错误 | 意外的内部服务器错误。 |
| 503 服务 Unavailable | 服务器没有运行。 |
附录 B. API 权限列表 复制链接链接已复制到粘贴板!
红帽卫星 6 API 支持大量需要特定权限的操作。下表列出了 API 权限名称、与这些权限关联的操作以及关联的资源类型。
| 权限名称 | Actions | 资源类型 |
|---|---|---|
| view_activation_keys |
| Katello::ActivationKey |
| create_activation_keys |
| Katello::ActivationKey |
| edit_activation_keys |
| Katello::ActivationKey |
| destroy_activation_keys |
| Katello::ActivationKey |
| logout |
| |
| view_architectures |
| |
| create_architectures |
| |
| edit_architectures |
| |
| destroy_architectures |
| |
| view_audit_logs |
| |
| view_authenticators |
| |
| create_authenticators |
| |
| edit_authenticators |
| |
| destroy_authenticators |
| |
| view_bookmarks |
| |
| create_bookmarks |
| |
| edit_bookmarks |
| |
| destroy_bookmarks |
| |
| download_bootdisk |
| |
| manage_capsule_content |
| SmartProxy |
| view_capsule_content |
| SmartProxy |
| view_compute_profiles |
| |
| create_compute_profiles |
| |
| edit_compute_profiles |
| |
| destroy_compute_profiles |
| |
| view_compute_resources |
| |
| create_compute_resources |
| |
| edit_compute_resources |
| |
| destroy_compute_resources |
| |
| view_compute_resources_vms |
| |
| create_compute_resources_vms |
| |
| edit_compute_resources_vms |
| |
| destroy_compute_resources_vms |
| |
| power_compute_resources_vms |
| |
| console_compute_resources_vms |
| |
| view_config_groups |
| |
| create_config_groups |
| |
| edit_config_groups |
| |
| destroy_config_groups |
| |
| view_config_reports |
| |
| destroy_config_reports |
| |
| upload_config_reports |
| |
| view_containers |
| Container |
| commit_containers |
| Container |
| create_containers |
| Container |
| destroy_containers |
| Container |
| power_compute_resources_vms |
| ComputeResource |
| view_content_views |
| Katello::ContentView |
| create_content_views |
| Katello::ContentView |
| edit_content_views |
| Katello::ContentView |
| destroy_content_views |
| Katello::ContentView |
| publish_content_views |
| Katello::ContentView |
| promote_or_remove_content_views |
| Katello::ContentView |
| export_content_views |
| Katello::ContentView |
| access_dashboard |
| |
| view_discovered_hosts |
| 主机 |
| submit_discovered_hosts |
| 主机 |
| auto_provision_discovered_hosts |
| 主机 |
| provision_discovered_hosts |
| 主机 |
| edit_discovered_hosts |
| 主机 |
| destroy_discovered_hosts |
| 主机 |
| view_discovery_rules |
| DiscoveryRule |
| create_discovery_rules |
| DiscoveryRule |
| edit_discovery_rules |
| DiscoveryRule |
| execute_discovery_rules |
| DiscoveryRule |
| destroy_discovery_rules |
| DiscoveryRule |
| view_domains |
| |
| create_domains |
| |
| edit_domains |
| |
| destroy_domains |
| |
| view_environments |
| |
| create_environments |
| |
| edit_environments |
| |
| destroy_environments |
| |
| import_environments |
| |
| view_external_usergroups |
| |
| create_external_usergroups |
| |
| edit_external_usergroups |
| |
| destroy_external_usergroups |
| |
| view_external_variables |
| |
| create_external_variables |
| |
| edit_external_variables |
| |
| destroy_external_variables |
| |
| view_facts |
| |
| upload_facts |
| |
| view_filters |
| |
| create_filters |
| |
| edit_filters |
| |
| destroy_filters |
| |
| view_arf_reports |
| |
| destroy_arf_reports |
| |
| create_arf_reports |
| |
| view_policies |
| ForemanOpenscap::Policy |
| edit_policies |
| ForemanOpenscap::Policy |
| create_policies |
| ForemanOpenscap::Policy |
| destroy_policies |
| ForemanOpenscap::Policy |
| assign_policies |
| ForemanOpenscap::Policy |
| view_scap_contents |
| ForemanOpenscap::ScapContent |
| view_scap_contents |
| ForemanOpenscap::ScapContent |
| edit_scap_contents |
| ForemanOpenscap::ScapContent |
| create_scap_contents |
| ForemanOpenscap::ScapContent |
| destroy_scap_contents |
| ForemanOpenscap::ScapContent |
| edit_hostgroups |
| 主机 |
| view_job_templates |
| JobTemplate |
| create_job_templates |
| JobTemplate |
| edit_job_templates |
| |
| edit_job_templates |
| |
| edit_remote_execution_features |
| RemoteExecutionFeature |
| destroy_job_templates |
| JobTemplate |
| lock_job_templates |
| JobTemplate |
| create_job_invocations |
| JobInvocation |
| view_job_invocations |
| JobInvocation |
| execute_template_invocation | TemplateInvocation | |
| filter_autocompletion_for_template_invocation |
| TemplateInvocation |
| view_foreman_tasks |
| ForemanTasks::Task |
| edit_foreman_tasks |
| ForemanTasks::Task |
| create_recurring_logics | ForemanTasks::RecurringLogic | |
| view_recurring_logics |
| ForemanTasks::RecurringLogic |
| edit_recurring_logics |
| ForemanTasks::RecurringLogic |
| view_globals |
| |
| create_globals |
| |
| edit_globals |
| |
| destroy_globals |
| |
| view_gpg_keys |
| Katello::GpgKey |
| create_gpg_keys |
| Katello::GpgKey |
| edit_gpg_keys |
| Katello::GpgKey |
| destroy_gpg_keys |
| Katello::GpgKey |
| view_host_collections |
| Katello::HostCollection |
| create_host_collections |
| Katello::HostCollection |
| edit_host_collections |
| Katello::HostCollection |
| destroy_host_collections |
| Katello::HostCollection |
| edit_classes |
| |
| create_params |
| |
| edit_params |
| |
| destroy_params |
| |
| view_hostgroups |
| |
| create_hostgroups |
| |
| edit_hostgroups |
| |
| destroy_hostgroups |
| |
| view_hosts |
| |
| create_hosts |
| |
| edit_hosts |
| |
| destroy_hosts |
| |
| build_hosts |
| |
| power_hosts |
| |
| console_hosts |
| |
| ipmi_boot |
| |
| puppetrun_hosts |
| |
| search_repository_image_search |
| Docker/ImageSearch |
| view_images |
| |
| create_images |
| |
| edit_images |
| |
| destroy_images |
| |
| view_lifecycle_environments |
| Katello::KTEnvironment |
| create_lifecycle_environments |
| Katello::KTEnvironment |
| edit_lifecycle_environments |
| Katello::KTEnvironment |
| destroy_lifecycle_environments |
| Katello::KTEnvironment |
| promote_or_remove_content_views_to_environments | Katello::KTEnvironment | |
| view_locations |
| |
| create_locations |
| |
| edit_locations |
| |
| destroy_locations |
| |
| assign_locations |
| |
| view_mail_notifications |
| |
| view_media |
| |
| create_media |
| |
| edit_media |
| |
| destroy_media |
| |
| view_models |
| |
| create_models |
| |
| edit_models |
| |
| destroy_models |
| |
| view_operatingsystems |
| |
| create_operatingsystems |
| |
| edit_operatingsystems |
| |
| destroy_operatingsystems |
| |
| view_organizations |
| |
| create_organizations |
| |
| edit_organizations |
| |
| destroy_organizations |
| |
| assign_organizations |
| |
| view_ptables |
| |
| create_ptables |
| |
| edit_ptables |
| |
| destroy_ptables |
| |
| lock_ptables |
| |
| view_plugins |
| |
| view_products |
| Katello::Product |
| create_products |
| Katello::Product |
| edit_products |
| Katello::Product |
| destroy_products |
| Katello::Product |
| sync_products |
| Katello::Product |
| export_products |
| Katello::Product |
| view_provisioning_templates |
| |
| create_provisioning_templates |
| |
| edit_provisioning_templates |
| |
| destroy_provisioning_templates |
| |
| deploy_provisioning_templates |
| |
| lock_provisioning_templates |
| |
| user_logout |
| |
| my_account |
| |
| api_status |
| |
| view_puppetclasses |
| |
| create_puppetclasses |
| |
| edit_puppetclasses |
| |
| destroy_puppetclasses |
| |
| import_puppetclasses |
| |
| view_realms |
| |
| create_realms |
| |
| edit_realms |
| |
| destroy_realms |
| |
| view_search |
| |
| view_cases |
| |
| attachments |
| |
| 配置 |
| |
| app_root |
| |
| view_log_viewer |
| |
| logs |
| |
| rh_telemetry_api |
| |
| rh_telemetry_view |
| |
| rh_telemetry_configurations |
| |
| view_roles |
| |
| create_roles |
| |
| edit_roles |
| |
| destroy_roles |
| |
| access_settings |
| |
| view_smart_proxies |
| |
| create_smart_proxies |
| |
| edit_smart_proxies |
| |
| destroy_smart_proxies |
| |
| view_smart_proxies_autosign |
| |
| create_smart_proxies_autosign |
| |
| destroy_smart_proxies_autosign |
| |
| view_smart_proxies_puppetca |
| |
| edit_smart_proxies_puppetca |
| |
| destroy_smart_proxies_puppetca |
| |
| view_subnets |
| |
| create_subnets |
| |
| edit_subnets |
| |
| destroy_subnets |
| |
| import_subnets |
| |
| view_subscriptions |
| 机构(Organization) |
| attach_subscriptions |
| 机构(Organization) |
| unattach_subscriptions |
| 机构(Organization) |
| import_manifest |
| 机构(Organization) |
| delete_manifest |
| 机构(Organization) |
| view_sync_plans |
| Katello::SyncPlan |
| create_sync_plans |
| Katello::SyncPlan |
| edit_sync_plans |
| Katello::SyncPlan |
| destroy_sync_plans |
| Katello::SyncPlan |
| my_organizations |
| |
| view_usergroups |
| |
| create_usergroups |
| |
| edit_usergroups |
| |
| destroy_usergroups |
| |
| view_users |
| |
| create_users |
| |
| edit_users |
| |
| destroy_users |
|