API 指南
Red Hat Satellite 6.2
使用 Satellite 的 Representational State Transfer (REST) API 的参考文档
1.0 版
摘要
Red Hat Satellite 6.2 Representational State Transfer (REST) API 指南解释了 REST API 背后的概念,并提供各种请求的示例用法。这为管理员和开发人员提供了编写自定义脚本并将 Red Hat Satellite 与第三方应用程序集成的基础。
第 1 章 Red Hat Satellite API 简介 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
Red Hat Satellite 是一个系统管理解决方案,允许组织在物理、虚拟和云环境中部署、配置和维护其系统。它可通过单一的集中工具对多个 Red Hat Enterprise Linux 部署进行调配、远程管理和监控。Red Hat Satellite Server 同步红帽客户门户网站中的内容,并提供具体生命周期管理、用户和组基于角色的访问控制、集成订阅管理以及高级 GUI、CLI 或 API 访问等功能。
1.1. Red Hat Satellite API 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
Red Hat Satellite 提供了一个 Representational State Transfer (REST) API。API 为软件开发人员和系统管理员提供在标准 Web 界面之外控制其 Red Hat Satellite 环境。REST API 对于旨在将 Red Hat Satellite 功能与通过 HTTP 访问 API 的自定义脚本或外部应用程序集成在一起的开发人员和管理员很有用。
注意
Satellite 服务器上提供了完整的 API 参考 https://satellite6.example.com/apidoc/v2.html (将 satellite6.example.com 替换为 Satellite 服务器的主机名)。请注意,即使 Satellite 6 API 版本 1 和 2 可用,但红帽只支持版本 2。
REST API 的优点包括:
- 广泛的客户端支持 :任何支持 HTTP 协议的编程语言、框架或系统都可以使用 API;
- 自我描述性 :客户端应用程序需要最少了解 Red Hat Satellite 基础架构,因为在运行时发现很多详细信息;
- 基于资源的模型 :基于资源的 REST 模型提供了管理虚拟化平台的自然方法。
这为开发人员和管理员提供了以下功能:
- 与企业 IT 系统集成;
- 与第三方应用程序集成;
- 执行自动维护或错误检查任务;
- 使用脚本自动执行重复性任务。
1.2. Representational State Transfer 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
Representational State Transfer (REST)是一种软件设计架构,侧重于特定服务的资源及其表示。资源表示是与服务器上的一个特定受管元素对应的一个关键信息抽象。客户端将请求发送到位于统一资源标识符(URI)的服务器元素,并使用标准 HTTP 方法(如
GET、POST、PUT 和 DELETE )执行操作。这在客户端和服务器之间提供了无状态通信,每个请求都独立于任何其他请求,并包含完成请求所需的所有信息。
1.3. Satellite API 与 Hammer CLI 工具的比较 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
对于许多任务,Hammer 和 Satellite API 都同样适用。Hammer 可用作 Satellite API 的人友好界面,例如在脚本中应用 API 调用前测试对 API 调用的响应(使用
-d 选项检查 Hammer 发布的 API 调用,如 hammer -d 机构列表)。API 中的更改会自动反映在 Hammer 中,而使用 API 的脚本必须直接手动更新。
在后台,每个 Hammer 命令首先建立到 API 的绑定,然后发送请求。这在按顺序执行大量 Hammer 命令时可能会有性能影响。相反,与 API 直接通信的脚本只建立一次绑定。如需更多信息,请参阅 Hammer CLI 指南。
第 2 章 API 参考 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
Satellite 服务器上提供了完整的 API 参考 https://satellite6.example.com/apidoc/v2.html (将 satellite6.example.com 替换为 Satellite 服务器的主机名)。请注意,即使 Satellite 6 API 版本 1 和 2 可用,但红帽只支持版本 2。
2.1. 了解 API 语法 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
内置 API 引用显示 API 路由或路径,前面带有 HTTP 动词:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
API 使用的 HTTP 动词为 GET、POST、PUT 和 DELETE。有关一些示例,请参见位于 http://satellite6.example.com/apidoc/v2/hosts.html 的 API 参考文档的 HOSTS 部分。如果您已熟悉 API 语法,并且 curl 命令您可以跳过本节。
HTTP_VERB API_ROUTE
HTTP_VERB API_ROUTE
要使用 API,请使用参考文档中的 API 路由和命令语法中的 API 路由构建命令。例如: curl 手册页显示以下基本语法:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
本指南中使用的选项包括:--
curl [options] [URL...]
curl [options] [URL...]
X、--request 命令,其中 command 是 HTTP 动词。
使用 GET HTTP Verb
GET HTTP 动词用于从 API 获取现有条目或资源的数据。
将 API HOSTS 部分中的示例(如
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Satellite 只支持连接到 API 的 HTTPS,并且需要某种形式的身份验证。
GET /api/hosts 和 curl 语法)相结合: curl -X GET https://satellite6.example.com/api/hosts
curl -X GET https://satellite6.example.com/api/hosts
对于可用的示例,我们必须至少添加带有 the
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
上述 API 响应表明总计有两个结果,在下面返回两个结果,这是结果的第一个页面,每个页面的最大结果设置为 20。这在 第 2.2 节 “了解 JSON 响应格式” 中更为详细地解释。
-u 选项的用户名,并使用 -k 选项跳过 SSL 对等证书验证检查:
API 引用中的一些示例包括以
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
这些是 API 路由参数,且必须替换为适当的值。路由参数以冒号开头,并以
:参数 形式前面以冒号开头的术语。例如: GET /api/hosts/:id
GET /api/hosts/:id
id 结尾。
注意
在 Satellite 6 中,API 的版本 2 是默认值。因此,在 API 调用的 URL 中不需要使用
v2。
使用 POST HTTP Verb
POST HTTP 动词用于将数据提交到 API,以创建新条目或资源。数据必须采用 JSON 格式,并可使用
-d, --data 选项包含内联,后跟带引号的 JSON 格式的数据(用大括号 {} 括起)。或者,未加引号的 JSON 格式的数据可以包含在文件中,并使用 curl 命令的 @ 选项指定。例如,-d @file.json。
将外部文件用于 JSON 格式的数据的优点包括较少的问题:引用和转义,可以使用您喜欢的编辑器,以帮助查找和避免错误,以及外部工具检查 JSON 数据的有效性或重新格式化它。例如,ya jl 软件包包含 json_verify 工具和 json_reformat 工具。
使用 json_verify 工具,您可以检查 JSON 文件的有效性,如下所示:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
json_verify < test_file.json
$ json_verify < test_file.json
API 调用返回的无结构 JSON 数据可以通过 python 模块 json.tool 传送:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Alternately,使用 json_reformat 工具:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
输出格式在 第 2.2 节 “了解 JSON 响应格式” 中解释。
curl API_call | python -m json.tool
curl API_call | python -m json.tool
curl API_call | json_reformat
curl API_call | json_reformat
API 参考在 Activation keys 部分中包括以下内容:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
POST /katello/api/activation_keys
POST /katello/api/activation_keys
这是
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
POST /katello/api/activation_keys 命令的可能格式:
curl -X POST -k -u sat_username:sat_password \ -d @file_of_json-formatted_data \ https://satellite6.example.com/katello/api/activation_keys
curl -X POST -k -u sat_username:sat_password \
-d @file_of_json-formatted_data \
https://satellite6.example.com/katello/api/activation_keys
要查看 POST HTTP 动词如何工作,请创建一个测试文件,如
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
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
要在 Web UI 中查看此条目,请导航到 → 。记住在任何更改后重新加载页面。
使用 PUT HTTP Verb
PUT HTTP 动词用于将数据提交到 API,以更新现有条目或资源。与 POST API 调用类似,数据必须采用 JSON 格式,并可使用
-d, --data 选项加上带引号的 JSON 格式的数据(用大括号 {} 括起)。或者,未加引号的 JSON 格式的数据可以包含在文件中,并使用 curl 命令的 @ 选项指定。例如,-d @file.json。
若要更改现有值或附加到现有资源,可使用 PUT HTTP 动词。API 引用有以下条目可用于更新激活码:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
PUT /katello/api/activation_keys/:id
PUT /katello/api/activation_keys/:id
要更新现有的激活码,请使用以下格式的命令:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
使用要更新的激活码的 ID 替换 :id。将 PUT 命令与相同值一起使用多次 不会创建 多个条目。
curl -X PUT -k -u sat_username:sat_password \ -d @file_of_json-formatted_data \ https://satellite6.example.com/katello/api/activation_keys/:id
curl -X PUT -k -u sat_username:sat_password \
-d @file_of_json-formatted_data \
https://satellite6.example.com/katello/api/activation_keys/:id
例如,可以通过编辑之前创建的文件来更新上例中创建的 test Activation 密钥,如下所示:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
按如下所示使用命令在 JSON 文件中应用更改:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
{"organization_id":1, "name":"TestKey", "description":"Just for testing","max_hosts":"10" }
{"organization_id":1, "name":"TestKey", "description":"Just for testing","max_hosts":"10" }
使用 DELETE HTTP Verb
要删除资源,请将 DELETE 动词与包含要删除的资源的 ID 的 API 路由一起使用。
要删除现有的激活码,请使用以下格式的命令:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
使用要删除的激活码的 ID 替换 :id。例如:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
curl -X DELETE -k -u sat_username:sat_password \ https://satellite6.example.com/katello/api/activation_keys/:id
curl -X DELETE -k -u sat_username:sat_password \
https://satellite6.example.com/katello/api/activation_keys/:id
与 API 参考相关的 API 错误消息
API 使用 RAILs 格式来指示错误:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
这会转换为 API 引用中使用的以下格式:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
Nested_Resource.Attribute_Name
Nested_Resource.Attribute_Name
Resource[Nested_Resource_attributes][Attribute_Name_id]
Resource[Nested_Resource_attributes][Attribute_Name_id]
2.2. 了解 JSON 响应格式 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
使用 GET 调用 API 将以 JSON 格式返回结果。通过 Python json.tool 模块传递输出会带来更人类可读的格式。
Collections 的 JSON 响应格式
集合是对象列表,如主机和域。集合 JSON 响应的格式由 metadata 字段部分组成,后跟 results 部分。以下是使用 API 路由
GET /api/domains 时用于域列表的集合 JSON 响应的格式示例。输出通过 json.tool 传送,以便更轻松地阅读结果部分。
响应元数据字段如下所述:
total- 没有搜索参数的对象总数。- Subtotal- 使用给定搜索参数返回的对象数量(如果没有搜索,则
subtotal等于 total)。 page- 页面号。per_page- 每个页面返回的最大对象数。Limit- 在集合响应中返回指定数量的对象。offset- 返回集合前跳过的对象数量。search- 基于scoped_scoped语法的搜索字符串。排序按- 集合排序的字段。顺序-排序顺序,可以是升序的 ASC 或 DESC (降序)。
results- 对象集合。
单个对象的 JSON 响应格式
单对象 JSON 响应用于显示单个对象。GET 请求需要对象的唯一标识符
:id 或 :name。请注意,:name 不能始终用作唯一标识符,但 :id 始终可以被使用。单对象 JSON 响应的格式仅由对象的属性组成。
以下是使用 API 路由
GET /api/domains/23 或 GET /api/domains/qa.lab.example.com 时,单对象 JSON 响应的格式示例。
第 3 章 身份验证 API 调用 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
与 Satellite API 交互需要身份验证。您可以将 Satellite 服务器 CA 证书下载到本地主机,以便在每个 API 请求中使用以提供 SSL 身份验证。每个 API 请求都需要有效的用户名和密码。在以下部分中讨论每个选项。
3.1. 使用 SSL 身份验证 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
Red Hat Satellite 使用 HTTPS,在与 Red Hat Satellite Server 通信时提供一定程度的加密和身份验证。Satellite 6 不支持非 SSL 通信。
每个 Red Hat Satellite 服务器都使用自签名证书。此证书同时充当服务器证书,以验证加密密钥和证书颁发机构(CA)以信任 Satellite 服务器的身份。以下步骤演示了如何为 Satellite 服务器设置 SSL 身份验证(本例中为 satellite6.example.com):
- 使用以下选项之一从您要与之通信的Satellite服务器获取证书:
- 要使用 SSH 获取证书,请运行以下命令:
scp root@satellite6.example.com:/var/www/html/pub/katello-server-ca.crt ./
$ scp root@satellite6.example.com:/var/www/html/pub/katello-server-ca.crt ./Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 如果您直接在 Satellite 服务器上执行命令,请运行以下命令从本地可用副本获取证书:
cp /var/www/html/pub/katello-server-ca.crt ./
$ cp /var/www/html/pub/katello-server-ca.crt ./Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 要使用 HTTP 获取证书,请运行以下命令:
curl -O http://satellite6.example.com/pub/katello-server-ca.crt
$ curl -O http://satellite6.example.com/pub/katello-server-ca.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 警告使用未加密的 HTTP 连接检索证书可能会存在安全风险。
- 使用客户端中的证书作为证书颁发机构来验证 Satellite 服务器的身份:
curl -X GET -u sat_username:sat_password \ -H "Accept:application/json" --cacert katello-server-ca.crt \ https://satellite6.example.com/katello/api/organizations
$ curl -X GET -u sat_username:sat_password \ -H "Accept:application/json" --cacert katello-server-ca.crt \ https://satellite6.example.com/katello/api/organizationsCopy to Clipboard Copied! Toggle word wrap Toggle overflow GET 是默认操作,因此此处可以省略 so -X GET 属性。 - 创建网络安全服务(NSS)数据库来存储证书:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 NSS 数据库已存在,系统将提示您输入密码,如下所示:Enter Password or Pin for "NSS Certificate DB":
Enter Password or Pin for "NSS Certificate DB":Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用以下命令,将证书永久包含在 NSS 数据库中:
certutil -d sql:$HOME/.pki/nssdb -A -t TC -n "Red Hat Satellite" \ -i katello-server-ca.crt
$ certutil -d sql:$HOME/.pki/nssdb -A -t TC -n "Red Hat Satellite" \ -i katello-server-ca.crtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这会将证书导入到 NSS 数据库中,这意味着您可以省略每个请求的-cacert选项。您可以按照以下方式测试它:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2. 使用 HTTP 身份验证 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
对 Satellite API 的所有请求都需要合适的用户名和密码。API 使用 HTTP 基本身份验证 [1] 对这些凭证进行编码,然后添加到 Authorization 标头中。如果请求没有包括适当的 Authorization 标头,API 会返回 401 Authorization Required 错误。
重要
基本身份验证涉及潜在的敏感信息,如密码,以纯文本形式发送。REST API 需要 HTTPS 进行纯文本请求的传输级别加密。
有些 base64 库将编码的凭据分成多行,并使用换行符终止每行。这会使标头无效,并导致请求出现故障。授权标头要求编码的凭据位于标头中的一行中。
3.3. 使用 OAuth 身份验证 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
作为基本身份验证的替代选择,API 中支持有限的 OAuth 1.0 身份验证(有时在协议 1.0 中称为 1leged OAuth)。
3.3.1. 配置 OAuth 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
OAuth 在 Satellite 6.2 中默认启用。配置设置存储在
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
/etc/foreman/settings.yaml 配置文件中,并可通过 → → 在 Web UI 中查看。 是所有 OAuth 客户端要使用的令牌。Web UI 中的某些值无法更改。这些值只能通过使用新选项再次运行 satellite-installer 脚本来更改。请注意,升级时会丢失对该文件的任何手动更改。输入以下命令查看所有 OAuth 相关的安装程序选项:
satellite-installer --full-help | grep oauth
# satellite-installer --full-help | grep oauth
如果您希望使用 OAuth 进行的所有 API 请求作为内置匿名 API 管理员帐户授权,请在
/etc/foreman/settings.yaml 文件中将 设置为 false。如果要指定发出请求的用户,请将此配置选项更改为 true。这允许客户端发送带有现有 Foreman 用户登录的 FOREMAN-USER 标头。
重要
标头没有在 OAuth 请求中签名,因此可以伪造。具有有效消费者密钥的任何人都可以模拟任何 Foreman 用户。
3.3.2. 发出 OAuth 请求 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
通常,OAuth 客户端库用于生成请求。此处显示了使用 curl 的 OAuth 请求示例,以帮助了解它的工作原理。
例 3.1. 使用 curl 的 OAuth 请求示例
curl 'https://satellite6.example.com/api/architectures' \ -H 'Content-Type: application/json' \ -H 'Accept: application/json,version=2' \ -H 'FOREMAN-USER: User1' \ -H '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://satellite6.example.com/api/architectures' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json,version=2' \
-H 'FOREMAN-USER: User1' \
-H 'Authorization: OAuth oauth_version="1.0",oauth_consumer_key="secretkey",oauth_signature_method="hmac-sha1",oauth_timestamp=1321473112,oauth_signature=Il8hR8/ogj/XVuOqMPB9qNjSy6E='
oauth_timestamp 更改而改变。另外,签名也会反映每个参数、HTTP 方法和 URI 更改。因此,建议您使用 OAuth 客户端库来构造所有 OAuth 参数。
第 4 章 Red Hat Satellite API 入门 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
本章提供了如何使用 Red Hat Satellite API 执行不同任务的示例。这些示例侧重于将 HTTPS 用于端口 443 的 Satellite 服务器。您还可以通过 Satellite Capsule 访问 API,但您需要使用端口 8443 或 API 调用会失败。
您可以在脚本本身中满足这些不同的端口要求。例如,在 Ruby 中,您可以指定 Satellite 和 Capsule URL,如下所示:
url = 'https://satellite6.example.com/api/v2/' capsule_url = 'https://capsule.example.com:8443/api/v2/' katello_url = 'https://satellite6.example.com/katello/api/v2/'
url = 'https://satellite6.example.com/api/v2/'
capsule_url = 'https://capsule.example.com:8443/api/v2/'
katello_url = 'https://satellite6.example.com/katello/api/v2/'
如果主机订阅了 Satellite 服务器或 Capsule 服务器,您可以在 [server] 部分的
port 条目中确定从 /etc/rhsm/rhsm.conf 文件访问 API 所需的正确端口。您可以使用这些值来完全自动化脚本,无需验证要使用的端口。
4.1. 使用 Curl 的 API 示例 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
本节论述了如何使用 curl 使用 Satellite API 执行各种任务。
4.1.1. 执行简单查询 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
以下示例演示了如何使用 curl 搜索 Satellite 部署的信息。这些示例包括实际命令和一些示例输出,以及用户名和密码的示例值。每个部署都有不同的结果。这些示例也使用 python -m json.tool 命令格式化输出。
注意
Red Hat Satellite 需要使用 HTTPS,默认是主机识别的证书。如果您还没有添加 Satellite 服务器证书,如 第 3.1 节 “使用 SSL 身份验证” 所述,您可以使用
-k (不安全)选项绕过证书检查。
对于用户身份验证,您可以使用表单
-u 用户名:password 或者如果没有包含密码,命令会提示您输入它。红帽建议不要将密码包含在命令中,因为它会成为 shell 历史记录的一部分,并可能会存在安全风险。这些示例仅包含简单性的密码。
请注意,如果您在 curl 中使用 the
-s (silent)选项,则不会看到进度计量或任何错误消息。
检索资源列表
以下是返回资源列表的基本查询。此类请求返回嵌套在元数据中的数据列表,而其他请求类型则仅返回实际对象。
例 4.1. 列出用户
运行通用主机查询
以下查询返回主机 satellite6.example.com 的信息:
为特定主机搜索事实
以下查询返回主机 satellite6.example.com 的所有事实:
搜索所有主机匹配模式
以下查询返回与模式 "example" 匹配的所有主机:
搜索特定环境中的所有主机
以下查询返回 "production" 环境中的所有主机:
使用特定事实值搜索所有主机
以下查询返回带有模型名称"RHEV Hypervisor"的所有主机:
4.1.2. 创建和修改资源 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
您可以使用 Satellite API 来操作 Satellite 服务器上的资源。这些 API 调用要求您在要查询的简单用户名、密码和 URI 之外传递各种参数。例如,若要将内容上传到 Satellite 服务器,或修改 Satellite 资源,您需要在构建请求时在标头中包含额外信息。
您可以在标头中指定 API 的版本,如以下示例中所述,或作为 URL 的一部分。例如: https://satellite6.example.com/api/v2/architectures 等同于在请求标头中使用
Accept:version=2。URL 规格具有优先权。
以下是 POST 请求的基本语法:
curl -H "Accept:application/json,version=2" \
-H "Content-Type:application/json" -X POST \
-u username:password -k \
-d json-formatted-data https://satellite6.example.com
$ curl -H "Accept:application/json,version=2" \
-H "Content-Type:application/json" -X POST \
-u username:password -k \
-d json-formatted-data https://satellite6.example.com
例如,要创建新架构,您可以使用以下示例请求:
curl -H "Accept:application/json,version=2" \
-H "Content-Type:application/json" -X POST -u sat_username:sat_password \
-k -d "{\"architecture\":{\"name\":\"i686\"}}" \
https://satellite6.example.com/api/architectures
$ curl -H "Accept:application/json,version=2" \
-H "Content-Type:application/json" -X POST -u sat_username:sat_password \
-k -d "{\"architecture\":{\"name\":\"i686\"}}" \
https://satellite6.example.com/api/architectures
这会返回类似如下的输出:
{"name":"i686","id":3,"created_at":"2015-10-29T13:21:09Z","updated_at":"2015-10-29T13:21:09Z","operatingsystems":[],"images":[]}
{"name":"i686","id":3,"created_at":"2015-10-29T13:21:09Z","updated_at":"2015-10-29T13:21:09Z","operatingsystems":[],"images":[]}
您可以使用以下命令来验证架构是否已创建:
您还可以使用 Satellite 服务器上的 hammer 来验证结果:
例 4.2. 创建新用户
curl -H "Accept:application/json,version=2" \
-H "Content-Type:application/json" -X POST \
-u sat_username:sat_password -k \
-d "{\"firstname\":\"Test\",\"lastname\":\"API-User\",\"mail\":\"test@example.com\",\"login\":\"test_api\",\"password\":\"123456\",\"auth_source_id\":1}" \
https://satellite6.example.com/api/users
$ curl -H "Accept:application/json,version=2" \
-H "Content-Type:application/json" -X POST \
-u sat_username:sat_password -k \
-d "{\"firstname\":\"Test\",\"lastname\":\"API-User\",\"mail\":\"test@example.com\",\"login\":\"test_api\",\"password\":\"123456\",\"auth_source_id\":1}" \
https://satellite6.example.com/api/users
4.1.2.1. 将内容上传到 Satellite 服务器 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
本节论述了如何将 curl 与 Satellite 6 API 搭配使用,将大型文件上传到 Satellite 服务器。这个过程涉及四个步骤:
- 创建上传请求。
- 上传内容。
- 导入内容。
- 删除上传请求。
您可以上传的最大文件大小大约为 30 MB。要上传更大的内容,请参阅 例 4.3 “上传内容大概超过 30 MB”。
过程 4.1. 将内容上传到 Satellite 服务器
- 创建上传请求。确保修改示例参数以适合您的部署:
curl -H "Accept:application/json,version=2" \ -H "Content-Type:application/json" \ -X POST \ -u sat_username:sat_password -k -d "{}" \ https://satellite6.example.com/katello/api/repositories/3/content_uploads$ curl -H "Accept:application/json,version=2" \ -H "Content-Type:application/json" \ -X POST \ -u sat_username:sat_password -k -d "{}" \ https://satellite6.example.com/katello/api/repositories/3/content_uploadsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这个命令返回类似如下的upload_id:{"upload_id":"0be156b1-f373-4cad-89d0-924f8f4491d2","_href":"/pulp/api/v2/content/uploads/0be156b1-f373-4cad-89d0-924f8f4491d2/"}{"upload_id":"0be156b1-f373-4cad-89d0-924f8f4491d2","_href":"/pulp/api/v2/content/uploads/0be156b1-f373-4cad-89d0-924f8f4491d2/"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 上传您的内容。确保在上传数据时使用正确的 MIME 类型。"application/json" MIME 类型用于大多数对 Satellite 6 的请求。组合
upload_id、MIME 类型和其他参数以上传内容:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 将内容上传到 Satellite 服务器后,您需要将它导入到适当的存储库中。在完成此步骤前,Satellite 服务器不会了解新内容:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 成功上传并导入内容后,您可以删除上传请求。这会释放上传过程中使用的任何临时磁盘空间:
curl -H "Accept:application/json,version=2" \ -H "Content-Type:application/json" \ -X DELETE -d "{}" \ -u sat_username:sat_password \ -k https://satellite6.example.com/katello/api/repositories/3/content_uploads/0be156b1-f373-4cad-89d0-924f8f4491d2$ curl -H "Accept:application/json,version=2" \ -H "Content-Type:application/json" \ -X DELETE -d "{}" \ -u sat_username:sat_password \ -k https://satellite6.example.com/katello/api/repositories/3/content_uploads/0be156b1-f373-4cad-89d0-924f8f4491d2Copy to Clipboard Copied! Toggle word wrap Toggle overflow
例 4.3. 上传内容大概超过 30 MB
以下示例演示了如何将大型文件分成块,创建上传请求,上传单个文件,将它们导入到 Satellite,然后删除上传请求。请注意,本示例使用示例内容、主机名、用户名和文件名。
- 下载示例模块:
wget https://forgeapi.puppetlabs.com/v3/files/theforeman-foreman-5.0.1.tar.gz?_ga=1.267255502.1792403825.1430297670 -O theforeman-foreman-5.0.1.tar.gz
$ wget https://forgeapi.puppetlabs.com/v3/files/theforeman-foreman-5.0.1.tar.gz?_ga=1.267255502.1792403825.1430297670 -O theforeman-foreman-5.0.1.tar.gzCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将模块分成 50,000 字节块:split --bytes 50000 --numeric-suffixes --suffix-length=1 theforeman-foreman-5.0.1.tar.gz foreman_module.
$ split --bytes 50000 --numeric-suffixes --suffix-length=1 theforeman-foreman-5.0.1.tar.gz foreman_module.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看生成的文件:ls -la theforeman-foreman-5.0.1.tar.gz foreman_module.* -rw-r--r--. 1 root root 50000 Nov 4 04:42 foreman_module.0 -rw-r--r--. 1 root root 32928 Nov 4 04:42 foreman_module.1 -rw-r--r--. 1 root root 82928 Nov 4 04:41 theforeman-foreman-5.0.1.tar.gz
$ ls -la theforeman-foreman-5.0.1.tar.gz foreman_module.* -rw-r--r--. 1 root root 50000 Nov 4 04:42 foreman_module.0 -rw-r--r--. 1 root root 32928 Nov 4 04:42 foreman_module.1 -rw-r--r--. 1 root root 82928 Nov 4 04:41 theforeman-foreman-5.0.1.tar.gzCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 创建新的上传请求(这等同于 Satellite 服务器上的 cat )。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以上命令返回一个上传 ID:{"upload_id":"9585528f-07ad-4bb1-9c80-ccece249b2b7","_href":"/pulp/api/v2/content/uploads/9585528f-07ad-4bb1-9c80-ccece249b2b7/"}{"upload_id":"9585528f-07ad-4bb1-9c80-ccece249b2b7","_href":"/pulp/api/v2/content/uploads/9585528f-07ad-4bb1-9c80-ccece249b2b7/"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 上传您在第 1 步中创建的文件块。请注意,在本示例中使用
offset参数,以及如何与文件大小相关:Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 将完整上传到存储库:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 删除上传请求:
curl -H "Accept:application/json,version=2" \ -H "Content-Type:application/json" \ -X DELETE -d "{}" \ -u sat_username:sat_password \ -k https://ibm-vm01.example.com/katello/api/repositories/2/content_uploads/9585528f-07ad-4bb1-9c80-ccece249b2b7$ curl -H "Accept:application/json,version=2" \ -H "Content-Type:application/json" \ -X DELETE -d "{}" \ -u sat_username:sat_password \ -k https://ibm-vm01.example.com/katello/api/repositories/2/content_uploads/9585528f-07ad-4bb1-9c80-ccece249b2b7Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 登录到 Satellite 服务器,检查该文件是否已正确传输:
ls -la /var/lib/pulp/content/puppet_module/theforeman-foreman-5.0.1.tar.gz -rw-r--r--. 1 apache apache 82928 Nov 4 04:55 /var/lib/pulp/content/puppet_module/theforeman-foreman-5.0.1.tar.gz
$ ls -la /var/lib/pulp/content/puppet_module/theforeman-foreman-5.0.1.tar.gz -rw-r--r--. 1 apache apache 82928 Nov 4 04:55 /var/lib/pulp/content/puppet_module/theforeman-foreman-5.0.1.tar.gzCopy to Clipboard Copied! Toggle word wrap Toggle overflow 比较文件:cmp /var/lib/pulp/content/puppet_module/theforeman-foreman-5.0.1.tar.gz theforeman-foreman-5.0.1.tar.gz
$ cmp /var/lib/pulp/content/puppet_module/theforeman-foreman-5.0.1.tar.gz theforeman-foreman-5.0.1.tar.gzCopy to Clipboard Copied! Toggle word wrap Toggle overflow echo $? 0
$ echo $? 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.1.3. 覆盖智能类参数 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
您可以使用 API 搜索智能参数,并提供值来覆盖类中的智能参数。有关可修改的属性的完整列表,请访问 https://satellite6.example.com/apidoc/v2/smart_class_parameters/update.html 的内置 API 参考。
例如,若要列出所有智能类参数,API 路由显示为
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
如果您知道 Puppet 类 ID,如 5,您可以限制范围,如下所示:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
GET /api/smart_class_parameters。使用 curl,命令如下:
curl -X GET -s -k -u sat_username:sat_password \ https://satellite6.example.com/api/smart_class_parameters
$ curl -X GET -s -k -u sat_username:sat_password \
https://satellite6.example.com/api/smart_class_parameters
curl -X GET -s -k -u sat_username:sat_password https://satellite6.example.com/api/puppetclasses/5/smart_class_parameters
$ curl -X GET -s -k -u sat_username:sat_password https://satellite6.example.com/api/puppetclasses/5/smart_class_parameters
这两个调用都接受 search 参数。在搜索输入框中的 Web UI 中可以看到可搜索字段的完整列表。导航到 → ,再单击搜索查询框中以显示字段列表。
两个特别有用的搜索参数是
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
支持标准 scoped-search 语法。
puppetclass_name 和 键,供您搜索特定参数。例如,使用 -d, --data 选项传递 URL 编码数据:
curl -X GET -s -k -u sat_username:sat_password https://satellite6.example.com/api/smart_class_parameters -d 'search=puppetclass_name = access_insights_client and key = authmethod'
$ curl -X GET -s -k -u sat_username:sat_password https://satellite6.example.com/api/smart_class_parameters -d 'search=puppetclass_name = access_insights_client and key = authmethod'
找到参数的 ID 后,您可以继续列出包括当前覆盖值在内的完整详情。例如,对于 ID 63,API 路由为
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
现在,您可以使用 PUT 调用启用覆盖参数值:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
请注意,无法手动创建或删除参数。用户只能修改其属性。只有在从代理导入类时,才会创建和删除参数。
GET /api/smart_class_parameters/63。使用 curl,命令将是:
curl -X GET -s -k -u sat_username:sat_password \ https://satellite6.example.com/api/smart_class_parameters/63
$ curl -X GET -s -k -u sat_username:sat_password \
https://satellite6.example.com/api/smart_class_parameters/63
curl -H "Accept:application/json,version=2" \
-H "Content-Type:application/json" -X PUT \
-s -k -u sat_username:sat_password \
-d '{"smart_class_parameter":{"override":true}}' \
https://satellite6.example.com/api/smart_class_parameters/63
$ curl -H "Accept:application/json,version=2" \
-H "Content-Type:application/json" -X PUT \
-s -k -u sat_username:sat_password \
-d '{"smart_class_parameter":{"override":true}}' \
https://satellite6.example.com/api/smart_class_parameters/63
启用覆盖后,您可以添加自定义覆盖匹配器:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
有关 API 调用的所有参数的详情,请参考:https://satellite6.example.com/apidoc/v2/override_values.html。
curl -H "Accept:application/json,version=2" \
-H "Content-Type:application/json" -X PUT \
-s -k -u sat_username:sat_password \
-d '{"smart_class_parameter":{"override_value":{"match":"hostgroup=Test","value":"2.4.6"}}}' \
https://satellite6.example.com/api/smart_class_parameters/63
$ curl -H "Accept:application/json,version=2" \
-H "Content-Type:application/json" -X PUT \
-s -k -u sat_username:sat_password \
-d '{"smart_class_parameter":{"override_value":{"match":"hostgroup=Test","value":"2.4.6"}}}' \
https://satellite6.example.com/api/smart_class_parameters/63
要删除覆盖值,请使用如下命令:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
curl -X DELETE -s -u sat_username:sat_password \ https://satellite6.example.com/api/smart_class_parameters/63/override_values/3
$ curl -X DELETE -s -u sat_username:sat_password \
https://satellite6.example.com/api/smart_class_parameters/63/override_values/3
4.1.3.1. 使用外部文件修改智能类参数 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
使用外部文件简化了使用 JSON 数据的过程。使用具有语法高亮显示功能的编辑器可帮助您避免和查找错误。
过程 4.2. 使用外部文件修改智能类参数
在本例中,我们将使用 MOTD Puppet 清单。
- 按名称搜索 Puppet 类,本例中为 motd :
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 每个智能类参数都有一个 ID,对于同一 Satellite 实例是全局的。motd 类的content参数在此 Satellite 服务器中具有id=3。不要将此功能与 Puppet 类名称前面出现的 Puppet 类 ID 混淆。 - 使用参数 ID
3获取特定于 motd 参数的信息,并将输出重定向到文件,如output_file.json:curl -H "Accept:application/json,version=2" \ -H "Content-Type:application/json" -X GET \ -u sat_user:sat_passwd -k \ "https://satellite6.example.com/api/smart_class_parameters/3 \ | python -m json.tool > output_file.json
$ curl -H "Accept:application/json,version=2" \ -H "Content-Type:application/json" -X GET \ -u sat_user:sat_passwd -k \ "https://satellite6.example.com/api/smart_class_parameters/3 \ | python -m json.tool > output_file.jsonCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 将上一步中创建的文件复制到新文件以进行编辑,例如
changed_file.json。在编辑器中打开 文件,并修改所需的值。在本例中,我们希望将 motd 模块的 content 参数更改为 true,这需要将覆盖选项从false改为true:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 编辑该文件后,验证是否如下所示,然后保存更改:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 按如下所示使用 PUT 命令,将更改应用到 Satellite 服务器:
curl -H "Accept:application/json,version=2" \ -H "Content-Type:application/json" \ -X PUT -u $user:$passwd \ -d @changed_file.json \ -k "https://satellite6.example.com/api/smart_class_parameters/3
$ curl -H "Accept:application/json,version=2" \ -H "Content-Type:application/json" \ -X PUT -u $user:$passwd \ -d @changed_file.json \ -k "https://satellite6.example.com/api/smart_class_parameters/3Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.1.4. 将勘误应用到主机或主机集合 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
您可以将 curl 与 PUT 命令一起使用,以将勘误表应用到主机、主机组或主机集合。以下是 PUT 请求的基本语法:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
curl -H "Accept:application/json,version=2" \
-H "Content-Type:application/json" -X PUT \
-u sat_username:sat_password -k \
-d json-formatted-data https://satellite6.example.com
$ curl -H "Accept:application/json,version=2" \
-H "Content-Type:application/json" -X PUT \
-u sat_username:sat_password -k \
-d json-formatted-data https://satellite6.example.com
您可以浏览内置的 API 文档(https://satellite6.example.com/apidoc/v2.html),以查找用于应用勘误的 URL。您可以使用 Satellite Web UI 来帮助发现搜索查询的格式。导航到 → ,再选择主机集合。前往 → ,并注意搜索查询框内容。例如,对于名为 my-collection 的 Host Collection,搜索框包含
host_collection="my-collection"。这将在以下示例中为 Host Collections 使用。
例 4.4. 将勘误应用到主机
在这个示例中,使用批量操作的 API URL /katello/api/hosts/bulk/install_content 来显示简单搜索所需的格式。
curl -H "Accept:application/json,version=2" \
-H "Content-Type:application/json" -X PUT \
-u sat_username:sat_password -k \
-d "{\"organization_id\":1,\"included\":{\"search\":\"my-host\"},\"content_type\":\"errata\",\"content\":[\"RHBA-2016:1981\"]}" https://satellite6.example.com/api/v2/hosts/bulk/install_content
$ curl -H "Accept:application/json,version=2" \
-H "Content-Type:application/json" -X PUT \
-u sat_username:sat_password -k \
-d "{\"organization_id\":1,\"included\":{\"search\":\"my-host\"},\"content_type\":\"errata\",\"content\":[\"RHBA-2016:1981\"]}" https://satellite6.example.com/api/v2/hosts/bulk/install_content
例 4.5. 将勘误应用到主机集合
在本例中,请注意传递搜索字符串
host_collection="my-collection" 所需的转义级别,如 Satellite web UI 中所示。
curl -H "Accept:application/json,version=2" \
-H "Content-Type:application/json" -X PUT \
-u sat_username:sat_password -k \
-d "{\"organization_id\":1,\"included\":{\"search\":\"host_collection=\\\"my-collection\\\"\"},\"content_type\":\"errata\",\"content\":[\"RHBA-2016:1981\"]}" https://satellite6.example.com/api/v2/hosts/bulk/install_content
$ curl -H "Accept:application/json,version=2" \
-H "Content-Type:application/json" -X PUT \
-u sat_username:sat_password -k \
-d "{\"organization_id\":1,\"included\":{\"search\":\"host_collection=\\\"my-collection\\\"\"},\"content_type\":\"errata\",\"content\":[\"RHBA-2016:1981\"]}" https://satellite6.example.com/api/v2/hosts/bulk/install_content
4.2. 使用 Ruby 的 API 示例 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
以下示例演示了如何使用 Ruby 执行各种任务来与 Satellite API 通信。
重要
这些是示例脚本和命令。在使用之前,请确定您仔细查看这些脚本,并替换任何变量、用户名、密码和其他信息,以适应您自己的部署。
4.2.1. 使用 Ruby 创建对象 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
以下脚本连接到 Red Hat Satellite 6 API 并创建一个新机构,然后在新组织中创建三个环境。如果机构已存在,该脚本将使用该组织。如果组织中已存在任何环境,该脚本将引发错误并退出。
4.2.2. 使用 Apipie Bindings 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
apipie 绑定是 apipie 记录的 API 的 Ruby 绑定,它们从 Satellite 获取并缓存 API 定义,然后按需生成 API 调用。使用 apipie 绑定可让您简化 Ruby API 查询。apipie 通常会报告 "appy-pie",到 rhyme with "happy" without the h。
以下示例创建新组织,然后在新组织中创建三个环境。如果机构已存在,该脚本将使用该组织。如果组织中已存在任何环境,该脚本将引发错误并退出。
4.3. 使用 Python 的 API 示例 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
以下示例演示了如何使用 Python 执行各种任务来与 Satellite API 通信。
重要
这些是示例脚本和命令。在使用之前,请确定您仔细查看这些脚本,并替换任何变量、用户名、密码和其他信息,以适应您自己的部署。
以下脚本不使用 SSL 验证与 REST API 交互,此处仅作为演示提供。
4.3.1. 使用 Python 创建对象 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
以下脚本连接到 Red Hat Satellite 6 API 并创建一个新机构,然后在新组织中创建三个环境。如果机构已存在,该脚本将使用该组织。如果组织中已存在任何环境,该脚本将引发错误并退出。
4.3.2. 使用 Python 运行查询 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
您可以创建并运行 Python 脚本,以达到与 第 4.1 节 “使用 Curl 的 API 示例” 中描述的结果相同。以下示例脚本描述了此方法。首先,创建一个名为
sat6api.py 的可执行文件,然后添加以下内容:
然后,您可以从命令行运行 ./sat6api.py 来显示结果。
4.4. 使用扩展搜索 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
您可以使用 Web UI 确定可用于构建查询的其他搜索术语。Satellite 6 支持有范围搜索和 tab 自动完成功能,使此任务变得更加容易。
例如,若要根据其操作系统搜索主机,请导航到 → ,再单击 Search 文本框中的搜索文本框以显示搜索词的列表。对于操作系统的一个搜索术语是
os_description,您可以在 API 查询中使用,如下所示:
4.5. 使用带有 Pagination Control 的搜索 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
您可以使用
per_page 和 page 分页参数来限制 API 搜索查询返回的搜索结果。per_page 参数指定每个页面的数量,以及 page 参数指定根据 per_page 参数计算的页面,要返回。
当您没有指定任何分页参数时,要返回的默认项目数量被设置为 1000,但
per_page 值的默认值是 20,当您指定 page 参数时应用它。
例 4.6. 列出内容视图
本例显示列出每个页面的第三个页面为 10 个结果:
curl -X GET --user sat_username:sat_password \ "https://satellite6.example.com/katello/api/content_views?per_page=10&page=3"
$ curl -X GET --user sat_username:sat_password \
"https://satellite6.example.com/katello/api/content_views?per_page=10&page=3"
例 4.7. 列出激活码
本例显示 ID 为 1 的机构的 Activation Keys,每个页面返回了 30 个键的第二个页面:
curl -X GET --user sat_username:sat_password \ "https://satellite6.example.com/katello/api/activation_keys?organization_id=1&per_page=30&page=2"
$ curl -X GET --user sat_username:sat_password \
"https://satellite6.example.com/katello/api/activation_keys?organization_id=1&per_page=30&page=2"
要获得多个结果页面,您可以使用 for loop 结构。
例 4.8. 返回多个页面
这个示例将第 1 页的 Content Views 的 3 页返回,每个页为 5 个结果:
for i in `seq 1 3`; do curl -X GET --user sat_username:sat_password \ "https://satellite6.example.com/katello/api/content_views?per_page=5&page=$i"; done
$ for i in `seq 1 3`; do curl -X GET --user sat_username:sat_password \
"https://satellite6.example.com/katello/api/content_views?per_page=5&page=$i"; done
4.6. 使用生命周期环境 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
如 服务器管理指南 的生命周期环境部分中所述,应用程序生命周期被分为不同的生命周期环境,这代表应用程序生命周期的每个阶段。https://access.redhat.com/documentation/zh-cn/red_hat_satellite/6.2/html/server_administration_guide/sect-red_hat_satellite-server_administration_guide-configuring_organizations_locations_and_life_cycle_environments-life_cycle_environments生命周期环境链接到形成 环境路径。要使用 API 创建链接生命周期环境,请使用
prior_id 参数。
您可以参阅 生命周期环境的内置 API 参考,地址为 https://satellite6.example.com/apidoc/v2/lifecycle_environments.html。API 路由包括
/katello/api/environments 和 /katello/api/organizations/:organization_id/environments。
您可以列出 Satellite 上针对默认机构
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
1 的所有当前生命周期环境,如下所示:
curl -H "Accept:application/json,version=2" \ -H "Content-Type:application/json" -X GET \ -u sat_user:sat_password -k \ https://satellite6.example.com/katello/api/organizations/1/environments | python -m json.tool
$ curl -H "Accept:application/json,version=2" \
-H "Content-Type:application/json" -X GET \
-u sat_user:sat_password -k \
https://satellite6.example.com/katello/api/organizations/1/environments | python -m json.tool
新安装的 Satellite 会有一个类似如下的部分的输出:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
在以下流程中,默认的库环境 ID 为
1,用作创建生命周期环境的起点。
过程 4.3. 创建链接的生命周期环境
- 选择您要用作起点的现有生命周期环境。使用其 ID 列出环境,本例中为 ID 为
1的环境:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用
prior选项设置为1创建新的生命周期环境:- 创建包含以下内容的 JSON 文件,如
life-cycle.json,其内容如下:{"organization_id":1,"label":"api-dev","name":"API Development","prior":1} - 按照如下所示输入命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在命令输出中,您可以看到此生命周期环境的 ID 是2,在此前的生命周期环境为1。这表明,生命周期环境1和2均链接。创建此环境的后续版本 ID2时使用生命周期环境 ID 2。 - 使用
prior选项设置为2来创建另一个生命周期环境:- 编辑之前创建的
life-cycle.json,更新标签、name和 before 值:{organization_id":1,"label":"api-qa","name":"API QA","prior":2} - 按照如下所示输入命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在命令输出中,您可以看到此生命周期环境的 ID 是3,在此前的生命周期环境为2。这表明,生命周期环境2和3均链接。
更新生命周期环境
可以使用 PUT 命令更新生命周期环境。例如:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
删除生命周期环境
可以删除生命周期环境,只要没有后续环境。因此,使用以下格式的命令以相反的顺序删除它们:
Copy to Clipboard
Copied!
Toggle word wrap
Toggle overflow
curl -X DELETE -s -k -u sat_user:sat_password https://satellite6.example.com/katello/api/environments/:id
curl -X DELETE -s -k -u sat_user:sat_password https://satellite6.example.com/katello/api/environments/:id
附录 A. API 响应代码 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
Red Hat Satellite 6 API 为 API 调用提供 HTTP 响应状态代码。以下代码是 Satellite API 中所有资源的通用代码。
| 响应 | 解释 |
|---|---|
| 200 OK | 对于成功请求操作:显示、索引、更新或删除(GET、PUT、DELETE 请求)。 |
| 201 created | 对于成功创建操作(POST 请求)。 |
| 301 永久移动 | 当 Satellite 限制为使用 HTTPS 但尝试使用 HTTP 时,会进行重定向。 |
| 400 错误请求 | 缺少需要的参数,或者搜索查询具有无效的语法。 |
| 401 未授权 | 授权用户失败(例如,不正确的凭证)。 |
| 403 Forbidden | 用户没有足够的权限来执行操作或读取资源,或者通常不支持该操作。 |
| 404 not Found | 带有给定 ID 的记录不存在。当请求的记录不存在时,它可能会显示和删除操作,或者在其中一个关联的记录不存在时删除操作。 |
| 409 冲突 | 无法删除记录,因为现有的依赖项(例如,带有主机的主机组)。 |
| 415 不支持的 Media Type | HTTP 请求的内容类型是 JSON。 |
| 422 Unprocessable Entity | 由于一些验证错误,创建实体失败。仅适用于创建或更新操作。 |
| 500 内部服务器错误 | 意外的内部服务器错误。 |
| 503 服务不可用 | 服务器没有运行。 |
附录 B. API 权限列表 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
Red Hat Satellite 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_hosts |
| Katello::System |
| create_content_hosts |
| Katello::System |
| edit_content_hosts |
| Katello::System |
| destroy_content_hosts |
| Katello::System |
| 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_hosts |
| 主机 |
| 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_registries |
| DockerRegistry |
| view_registries |
| DockerRegistry |
| create_registries |
| DockerRegistry |
| destroy_registries |
| DockerRegistry |
| 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_statistics |
| |
| 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 |
| view_tasks |
| |
| view_trends |
| |
| create_trends |
| |
| edit_trends |
| |
| destroy_trends |
| |
| update_trends |
| |
| my_organizations |
| |
| view_usergroups |
| |
| create_usergroups |
| |
| edit_usergroups |
| |
| destroy_usergroups |
| |
| view_users |
| |
| create_users |
| |
| edit_users |
| |
| destroy_users |
|
法律通告 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
版权所有 © 2017 Red Hat, Inc.
本文档由红帽根据 Creative Commons Attribution-ShareAlike 3.0 Unported License 授权使用。如果您发布了本文档,或者其修改的版本,您必须向 Red Hat, Inc. 提供归属,并提供原始文档的链接。如果文档被修改了,所有红帽商标都必须删除。
作为本文档的许可者,红帽可能会放弃强制制执行 CC-BY-SA 第4d 条款,且不声明该条款在适用条款允许的最大限度内有效。
Red Hat、Red Hat Enterprise Linux、Shadowman 徽标、红帽徽标、JBoss、OpenShift、Fedora、Infinity 徽标和 RHCE 是 Red Hat, Inc. 在美国和其他国家注册的商标。
Linux® 是 Linus Torvalds 在美国和其它国家注册的商标。
Java® 是 Oracle 和/或其附属公司注册的商标。
XFS® 是 Silicon Graphics International Corp. 或其子公司在美国和/或其他国家的商标。
MySQL® 是 MySQL AB 在美国、美国和其他国家注册的商标。
Node.js® 是 Joyent 的官方商标。红帽与官方 Joyent Node.js 开源社区或商业项目没有正式的关系或认可。
OpenStack® Word Mark 和 OpenStack 徽标是 OpenStack Foundation 在美国及其他国家注册的商标/服务标记或商标/服务标记,在 OpenStack Foundation 许可的情况下使用。我们不附属于 OpenStack Foundation 或 OpenStack 社区。
所有其他商标均由其各自所有者所有。