Red Hat Quay API 指南


Red Hat Quay 3

Red Hat Quay API 指南

Red Hat OpenShift Documentation Team

摘要

使用 Red Hat Quay API

前言

Red Hat Quay 应用程序编程接口(API)提供了一个全面的 RESTful 接口,用于管理和自动化 Red Hat Quay 中的任务。此 API 围绕 OAuth 2.0 协议 而设计,支持安全、精细访问 Red Hat Quay 资源,并允许管理员和用户执行诸如创建存储库、管理镜像、设置权限等操作。

Red Hat Quay 遵循 Semantic Versioning (SemVer)原则,确保跨版本的可预测的 API 稳定性,例如:

  • 主发行版本 :引入新功能。可能包括破坏对 API 兼容性的更改。例如,Red Hat Quay 2.0 的 API 与 Red Hat Quay 3.0 不同。
  • 次发行版本 :以向后兼容的方式添加新功能。例如,3. y 版本为 版本 3. 发行版本添加了功能。
  • 补丁版本 :提供 bug 修复和改进,同时保持与次要发行本(如 3.y.z )的向后兼容性。

以下指南更详细地描述了 Red Hat Quay API,并提供了有关以下主题的详情:

  • OAuth 2 访问令牌以及如何比较传统的 API 令牌和 Red Hat Quay 机器人令牌
  • 生成 OAuth 2 访问令牌
  • 令牌管理的最佳实践
  • OAuth 2 访问令牌功能
  • 使用 Red Hat Quay API
  • Red Hat Quay API 配置示例

本指南附带第二个指南 Red Hat Quay API 参考,它提供有关所有 api/v1 端点的信息,以及如何使用示例命令访问这些端点。

第 1 章 Red Hat Quay OAuth 2.0 令牌简介

Red Hat Quay OAuth 2 令牌系统提供了一种安全、基于标准的方法来访问 Red Hat Quay 的 API 和其他相关资源。基于 OAuth 2 令牌的方法提供了一种安全方法,用于处理复杂环境的身份验证和授权。与更传统的 API 令牌相比,Red Hat Quay 的 OAuth 2 令牌系统包括以下改进:

  • 基于标准的安全性,遵循 OAuth 2.0 协议
  • 通过删除存在 OAuth 2 令牌的应用程序来撤销访问。
  • 细粒度访问控制,允许 Red Hat Quay 管理员为令牌分配特定权限。
  • 委派访问,允许第三方应用程序和服务代表用户执行。
  • 永不过时,这有助于确保 Red Hat Quay 保持与其他服务、平台和集成兼容。

Red Hat Quay 主要支持两种类型的令牌:OAuth 2 访问令牌和机器人帐户令牌。在保证时,也提供了第三个 令牌 类型(即 OCI 引用令牌)来列出存储库下清单的 OCI 引用器。

以下章节详细介绍了每种令牌类型以及如何生成每种令牌类型。

第 2 章 OAuth 2 访问令牌

OAuth 2 访问令牌(包括 Red Hat Quay 的 "API 令牌")启用对 Red Hat Quay API 的用户身份验证访问,适用于需要用户身份验证的应用程序。这些令牌通过 OAuth 2 授权过程获得,其中 Red Hat Quay 管理员代表自己或其他用户生成令牌来访问 Red Hat Quay API 端点。OAuth 2 令牌根据为令牌定义的范围来授权对 API 端点的操作。

注意

虽然 OAuth 2 令牌根据令牌定义的范围来授权对 API 端点的操作,但访问资源本身取决于 Red Hat Quay 基于角色的访问控制(RBAC)机制。可以在资源上创建操作,例如存储库,前者为您提供了针对该命名空间的正确角色(AdminCreator)。即使 API 令牌被授予了 repo:admin 范围,也是如此。

OAuth 2 访问令牌只能通过 Red Hat Quay UI 创建;无法使用 CLI 创建 OAuth 2 访问令牌。在创建 OAuth 2 令牌时,可以为令牌拥有者选择以下选项:

  • 管理组织.选择后,允许用户管理机构,包括创建机器人、创建团队、调整团队成员资格和更改计费设置。
  • 管理存储库.选择后,提供对授予用户有权访问的所有存储库的管理员访问权限。
  • 创建存储库。选择后,允许用户在授予用户创建存储库的任何命名空间中创建存储库。
  • 查看所有可见的存储库。选择后,用户可以查看和拉取授予用户可见的所有存储库。
  • 对任何可访问的存储库进行读/写。选择后,允许用户查看、推送和拉取到授予用户具有写入访问权限的所有存储库。
  • 超级用户访问.选择后,为用户提供了管理安装的能力,包括管理用户、管理超级用户面板中的机构和其他功能。
  • 选择了用户时,允许用户管理您的帐户,包括创建机器人并将其权限授予您的存储库。
  • 读取用户信息.选择后,为用户提供读取用户信息(如用户名和电子邮件地址)的能力。

令牌经销商应注意,他们在代表用户生成令牌时授予其授权,并且在授予了管理机构、Super User Access管理用户 等权限前,用户应具有绝对信任。此外,访问令牌仅在创建时显示;它们无法通过 CLI 列出,也无法在 Red Hat Quay UI 中找到。如果访问令牌丢失或忘记,则必须创建新令牌;无法恢复令牌。

OAuth 2 访问令牌在 API 调用的 Authorization 标头中作为 Bearer 令牌传递,因此,用于向定义的 API 端点提供身份验证和授权,如镜像标签、存储库、机构等。

该 API 位于 Red Hat Quay 主机的 /api/v1 端点中。例如: https://<quay-server.example.com>/api/v1。它允许用户通过其浏览器连接到端点,通过启用 Swagger UI 来通过浏览器连接到 GETPOSTDELETEPUT Red Hat Quay 设置。API 可以被发出 API 调用的应用访问,并使用 OAuth 令牌,它将数据作为 JSON 发送和接收数据。

使用 Red Hat Quay 时,目前无法在 OAuth 2 访问令牌上轮转或设置过期时间,令牌生命周期为 10 年。当令牌被泄露时,可以通过删除创建令牌的应用程序来删除令牌。但是,这会删除在该特定应用程序内所做的所有令牌。

注意

在实践中,Red Hat Quay 管理员可以在每次要为用户创建新 OAuth 令牌时,在组织的 Applications 页面中创建新的 OAuth 应用程序。这将确保单个应用不负责所有 OAuth 令牌。因此,如果用户的令牌被破坏,管理员将删除被入侵令牌的应用。这有助于避免对令牌可能属于同一应用的其他用户造成中断。

以下小节介绍了如何生成和重新分配 OAuth 2 访问令牌。

2.1. 创建 OAuth 2 访问令牌

使用 Red Hat Quay 时,您必须创建一个 OAuth 2 访问令牌,然后才能访问机构的 API 端点。OAuth 2 访问令牌只能通过 Red Hat Quay UI 生成;CLI 无法用于生成 OAuth 2 访问令牌。

使用以下步骤创建 OAuth2 访问令牌。

先决条件

  • 您已以管理员身份登录到 Red Hat Quay。
  • 您已创建了 OAuth 2 应用。

流程

  1. 在主页上,选择一个机构。
  2. 在导航窗格中,选择 Applications
  3. 单击应用程序的名称,如 Test application
  4. 在导航窗格中,选择 Generate Token
  5. 选中以下选项的复选框:

    1. 管理组织.选择后,允许用户管理机构,包括创建机器人、创建团队、调整团队成员资格和更改计费设置。
    2. 管理存储库.选择后,提供对授予用户有权访问的所有存储库的管理员访问权限。
    3. 创建存储库。选择后,允许用户在授予用户创建存储库的任何命名空间中创建存储库。
    4. 查看所有可见的存储库。选择后,用户可以查看和拉取授予用户可见的所有存储库。
    5. 对任何可访问的存储库进行读/写。选择后,允许用户查看、推送和拉取到授予用户具有写入访问权限的所有存储库。
    6. 超级用户访问.选择后,为用户提供了管理安装的能力,包括管理用户、管理超级用户面板中的机构和其他功能。
    7. 选择了用户时,允许用户管理您的帐户,包括创建机器人并将其权限授予您的存储库。
    8. 读取用户信息.选择后,为用户提供读取用户信息(如用户名和电子邮件地址)的能力。
  6. 单击 Generate Access Token。您将被重定向到新页面。
  7. 查看您允许的权限,然后点 授权应用程序。点 Authorize Application 确认您的决定。
  8. 您将被重定向到 Access Token 页面。复制并保存访问令牌。

    重要

    这是复制并保存访问令牌的唯一机会。在离开此页面后,无法恢复它。

2.2. 重新分配 OAuth 访问令牌

机构管理员可分配 OAuth API 令牌,供其他用户具有特定权限创建。这允许在没有机构管理权限创建 OAuth API 令牌的用户使用令牌时准确反映审计日志。

注意

以下流程仅适用于当前的 Red Hat Quay UI。目前没有在 Red Hat Quay v2 UI 中实施。

先决条件

  • 您以具有机构管理特权的用户身份登录,供您分配 OAuth API 令牌。

    注意

    OAuth API 令牌用于身份验证,而不是授权。例如,您要分配 OAuth 令牌的用户必须具有 Admin 团队角色才能使用管理 API 端点。如需更多信息,请参阅管理对存储库的访问

流程

  1. 可选。如果还没有更新,更新 Red Hat Quay config.yaml 文件,使其包含 FEATURE_ASSIGN_OAUTH_TOKEN: true 字段:

    # ...
    FEATURE_ASSIGN_OAUTH_TOKEN: true
    # ...
    Copy to Clipboard Toggle word wrap
  2. 可选。重启 Red Hat Quay registry。
  3. 以机构管理员身份登录到您的 Red Hat Quay registry。
  4. 单击为您为其创建 OAuth 令牌的组织名称。
  5. 在导航窗格中,单击 Applications
  6. 点正确的应用程序名称。
  7. 在导航窗格中,单击 Generate Token
  8. 单击 Assign another user,并输入将要接管 OAuth 令牌的用户名称。
  9. 选中您希望新用户具有的所需权限框。例如,如果您只希望新用户能够创建存储库,请单击 Create Repositories

    重要

    权限控制由机构中的团队角色定义,无论这里选择的选项如何。例如,您要分配 OAuth 令牌的用户必须具有 Admin 团队角色才能使用管理 API 端点。

    仅选中 Super User Access 框并不实际授予用户这个权限。超级用户必须通过 config.yaml 文件配置,并且 此处必须选中该框。

  10. 单击 Assign token。此时会出现一个弹出框,确认带有以下信息的授权,并显示批准的权限:

    This will prompt user <username> to generate a token with the following permissions:
    repo:create
    Copy to Clipboard Toggle word wrap
  11. 在弹出窗口中,单击 Assign token。您会被重定向到显示以下信息的新页面:

    Token assigned successfully
    Copy to Clipboard Toggle word wrap

验证

  1. 在重新分配 OAuth 令牌后,分配的用户必须接受令牌来接收 bearer 令牌,该令牌需要使用 API 端点。请求分配的用户登录到 Red Hat Quay registry。
  2. 登录后,他们必须在 Users 和 Organizations 下单击其用户名。
  3. 在导航窗格中,他们必须单击 External Logins & Applications
  4. Authorized Applications 下,它们必须单击 授权应用程序 来确认应用程序。它们会被定向到一个新页面,其中必须单击 授权应用程序 进行确认。
  5. 它们会被重定向到显示其 bearer 令牌的新页面。它们必须保存此 bearer 令牌,因为它无法再次查看。

2.3. 删除 OAuth 2 访问令牌

由于 OAuth 2 访问令牌是通过 OAuth 应用创建的,所以无法轮转或更新它们。如果令牌被破坏,或者您需要删除令牌,您必须通过 Red Hat Quay UI 删除其关联的应用程序。

重要

删除应用程序会删除该特定应用程序中的所有令牌。请谨慎使用。

先决条件

  • 您已创建了 OAuth 2 访问令牌。

流程

  1. 在 Red Hat Quay UI 上,单击托管应用的组织的名称。然后,在导航窗格中,单击 Applications
  2. 单击应用名称,如 Test application
  3. 在导航窗格中,单击 Delete Application。您将被重定向到新页面。点 Delete application 并确认您的决定。

第 3 章 机器人帐户令牌

机器人帐户 令牌是 密码类型 凭证,用于通过普通的 Docker v2 端点访问 Red Hat Quay registry;它们被定义为 UI 上的 令牌,因为密码本身是加密的。

机器人帐户令牌是设计用于自动化和持续集成工作流的持久令牌。默认情况下,Red Hat Quay 的机器人帐户令牌不会过期,不需要用户交互,这使得机器人帐户成为非互动用例的理想选择。

机器人帐户令牌在创建机器人时自动生成,且特定于非用户;也就是说,它们连接到创建它们的用户和机构命名空间。例如,一个机器名为 project_tools+<robot_name> 的机器人project_tools 命名空间关联。

机器人帐户令牌提供访问权限,而无需用户个人凭据。配置机器人帐户的方式(例如,READWRITEADMIN 权限之一)最终定义机器人帐户可以执行的操作。

由于机器人帐户令牌具有持久性且不默认过期,因此它们非常适合自动工作流,要求在不进行手动续订的情况下对 Red Hat Quay 进行一致访问。尽管如此,但可以通过 UI 轻松生成机器人帐户令牌。也可以通过 CLI 使用正确的 API 端点来重新生成它们。为增强 Red Hat Quay 部署的安全性,管理员应定期刷新机器人帐户令牌。另外,有了 带有机器人帐户功能的无密钥身份验证,可以为外部 OIDC 令牌交换机器人令牌,并利用它们,以便它们仅有一小时,从而增强 registry 的安全性。

当命名空间被删除时,或者删除机器人帐户时,会在收集器调度运行时收集它们。

以下部分介绍了如何使用 API 为机构机器人和用户机器人生成机器人令牌。

3.1. 使用 Red Hat Quay UI 重新生成机器人令牌

使用以下步骤使用 Red Hat Quay UI 重新生成机器人令牌。

先决条件

  • 已登陆到 Red Hat Quay。

流程

  1. 点机构的名称。
  2. 在导航窗格中,单击 Robot accounts
  3. 单击机器人帐户的名称,例如 testorg3+test
  4. 在弹出窗口中点 Regenerate token

3.2. 使用 Red Hat Quay API 重新生成机器人令牌

使用以下步骤使用 Red Hat Quay API 重新生成机器人帐户令牌。

先决条件

流程

  • 输入以下命令,使用 POST /api/v1/organization/{orgname}/robots/{robot_shortname}/regenerate 端点为机构重新生成机器人令牌:

    $ curl -X POST \
      -H "Authorization: Bearer <bearer_token>" \
      "<quay-server.example.com>/api/v1/organization/<orgname>/robots/<robot_shortname>/regenerate"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"name": "test-org+test", "created": "Fri, 10 May 2024 17:46:02 -0000", "last_accessed": null, "description": "", "token": "<example_secret>"}
    Copy to Clipboard Toggle word wrap

  • 输入以下命令,使用 POST /api/v1/user/robots/{robot_shortname}/regenerate 端点为当前用户重新生成机器人令牌:

    $ curl -X POST \
      -H "Authorization: Bearer <bearer_token>" \
      "<quay-server.example.com>/api/v1/user/robots/<robot_shortname>/regenerate"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"name": "quayadmin+test", "created": "Fri, 10 May 2024 14:12:11 -0000", "last_accessed": null, "description": "", "token": "<example_secret>"}
    Copy to Clipboard Toggle word wrap

第 4 章 OCI 引用器 OAuth 访问令牌

在某些情况下,根据 Red Hat Quay 部署配置为使用的功能,您可能需要利用 OCI 引用器 OAuth 访问令牌。OCI 引用 OAuth 访问令牌用于列出存储库下清单的 OCI 引用器,并使用 curl 命令向 Red Hat Quay v2/auth 端点发出 GET 请求。

这些令牌通过基本的 HTTP 身份验证获取,其中用户提供了以 Base64 编码的用户名和密码,以便直接使用 v2/auth API 端点进行身份验证。因此,它们基于用户的凭证,它们不会遵循与 OAuth 2 相同的详细的授权流,但仍然允许用户授权 API 请求。

OCI 引用器 OAuth 访问令牌 不提供基于范围的权限,也不会过期。它们只用于列出仓库下清单的 OCI 引用器。

其他资源

4.1. 创建 OCI 引用器 OAuth 访问令牌

此 OCI 引用 OAuth 访问令牌用于列出存储库下清单的 OCI 引用器。

流程

  1. 更新 config.yaml 文件,使其包含 FEATURE_REFERRERS_API: true 字段。例如:

    # ...
    FEATURE_REFERRERS_API: true
    # ...
    Copy to Clipboard Toggle word wrap
  2. 输入以下命令对凭证进行 Base64 编码:

    $ echo -n '<username>:<password>' | base64
    Copy to Clipboard Toggle word wrap

    输出示例

    abcdeWFkbWluOjE5ODlraWROZXQxIQ==
    Copy to Clipboard Toggle word wrap

  3. 输入以下命令使用 base64 编码字符串,并将 URL 端点改为 Red Hat Quay 服务器:

    $ curl --location '<quay-server.example.com>/v2/auth?service=<quay-server.example.com>&scope=repository:quay/listocireferrs:pull,push' --header 'Authorization: Basic <base64_username:password_encode_token>' -k | jq
    Copy to Clipboard Toggle word wrap

    输出示例

    {
      "token": "<example_secret>
    }
    Copy to Clipboard Toggle word wrap

第 5 章 启用并使用 Red Hat Quay API

通过使用 Red Hat Quay API,您可以简化容器 registry 管理,自动执行任务,并将 Red Hat Quay 的功能整合到现有工作流中。这可以提高效率,提供更高的灵活性(通过存储库管理、用户管理、用户权限、镜像管理等),提高您的组织的稳定性、存储库或整体部署等。

以下章节解释了如何启用和使用 Red Hat Quay API。

5.1. 使用 Red Hat Quay API

创建应用程序并使用所需设置生成 OAuth 2 访问令牌后,您可以通过使用 CLI 的 API 将访问令牌传递给 GETPUTPOSTDELETE 设置。通常,Red Hat Quay API 命令类似以下示例:

$ curl -X GET -H "Authorization: Bearer <your_access_token>" \ 
1

    https://<quay-server.example.com>/api/v1/<example>/<endpoint>/ 
2
Copy to Clipboard Toggle word wrap
1
通过 Red Hat Quay UI 生成的 OAuth 2 访问令牌。
2
Red Hat Quay 部署和所需的 API 端点的 URL。

所有 Red Hat Quay API 均记录在 应用程序编程接口(API) 章节中。了解它们的记录方式对于成功调用至关重要。例如,为 createAppToken API 端点使用以下条目:

*createAppToken* 
1

Create a new app specific token for user. 
2


*POST /api/v1/user/apptoken* 
3


**Authorizations: **oauth2_implicit (**user:admin**) 
4


 Request body schema (application/json)

*Path parameters* 
5


Name: **title**
Description: Friendly name to help identify the token.
Schema: string

*Responses* 
6


|HTTP Code|Description             |Schema
|201      |Successful creation     |
|400      |Bad Request             |&lt;&lt;_apierror,ApiError&gt;&gt;
|401      |Session required        |&lt;&lt;_apierror,ApiError&gt;&gt;
|403      |Unauthorized access     |&lt;&lt;_apierror,ApiError&gt;&gt;
|404      |Not found               |&lt;&lt;_apierror,ApiError&gt;&gt;
|===
Copy to Clipboard Toggle word wrap
1
API 端点的名称。
2
API 端点的简短描述。
3
用于调用的 API 端点。
4
使用 API 端点所需的授权。
5
用于 API 端点的可用路径。在本例中,title 是与 POST /api/v1/user/apptoken 端点一起使用的唯一路径。
6
此端点的 API 响应。

要使用 API 端点,您可以传递访问令牌,然后根据您的需要包含适当的字段。以下流程演示了如何使用 POST /api/v1/user/apptoken 端点。

先决条件

  • 您可以访问 Red Hat Quay API,它要求已创建了 OAuth 2 访问令牌。

流程

  • 输入 POST /api/v1/user/apptoken API 调用来创建用户应用程序:

    $ curl -X POST \
      -H "Authorization: Bearer <access_token>" 
    1
    
      -H "Content-Type: application/json" \
      -d '{
        "title": "MyAppToken" 
    2
    
      }' \
      "http://quay-server.example.com/api/v1/user/apptoken" 
    3
    Copy to Clipboard Toggle word wrap
    1
    Oauth 访问令牌。
    2
    应用程序令牌的名称。
    3
    Red Hat Quay 部署的 URL 附加到 /api/v1/user/apptoken 端点。

    输出示例

    {"token": {"uuid": "6b5aa827-cee5-4fbe-a434-4b7b8a245ca7", "title": "MyAppToken", "last_accessed": null, "created": "Wed, 08 Jan 2025 19:32:48 -0000", "expiration": null, "token_code": "string"}}
    Copy to Clipboard Toggle word wrap

验证

  • 在 Red Hat Quay UI 中,在导航窗格 → Account Settings 中点您的用户名。应用的名称显示在 Docker CLI 和其他应用程序 Tokens 标题下。例如:

默认情况下,Red Hat Quay 接受来自命令行的 CURL 请求。但是,如果要从浏览器扩展(如 Postman)或一个浏览器接口(如 Swagger )启用 API 访问,您必须在 config.yaml 文件中禁用 BROWSER_API_CALLS_XHR_ONLY

流程

  1. 在 Red Hat Quay config.yaml 文件中,将 BROWSER_API_CALLS_XHR_ONLY 设置为 False。例如:

    # ...
    BROWSER_API_CALLS_XHR_ONLY: false
    # ...
    Copy to Clipboard Toggle word wrap
  2. 重启 Red Hat Quay 部署。

5.3. 访问 Red Hat Quay Swagger UI

Red Hat Quay 管理员和用户可使用 Swagger UI - 一个编译可执行文件的交互式 Web 界面与 API 交互。Swagger UI 可以作为容器启动,该容器指向 Red Hat Quay 实例的 API 发现端点(/api/v1/discovery)。部署容器后,您可以访问 Swagger UI,该 UI 从指定的 URL 加载 Red Hat Quay 的 OpenAPI 规格。Red Hat Quay 管理员和用户可探索可用的端点及其结构。

使用以下步骤访问 Red Hat Quay Swagger UI。

先决条件

  • 您已在 config.yaml 文件中设置了 BROWSER_API_CALLS_XHR_ONLY: false

流程

  1. 输入以下命令来部署 Swagger UI 容器,将 URL 指向 Red Hat Quay 的 API 发现端点。例如:

    $ podman run -p 8080:8080 -e SWAGGER_JSON_URL=<quay-server.example.com> docker.swagger.io/swaggerapi/swagger-ui
    Copy to Clipboard Toggle word wrap

    输出示例

    ---
    /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
    20-envsubst-on-templates.sh: Running envsubst on /etc/nginx/templates/default.conf.template to /etc/nginx/conf.d/default.conf
    /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
    /docker-entrypoint.sh: Launching /docker-entrypoint.d/40-swagger-ui.sh
    /docker-entrypoint.sh: Configuration complete; ready for start up
    ---
    Copy to Clipboard Toggle word wrap

  2. 导航到 localhost URL。在这个示例中,它是 http://localhost:8080/
  3. 使用 Swagger UI 测试各种 API 端点。例如,要为用户创建新令牌,您可以点击 POST /api/v1/user/apptoken endpoint → Try it outExecute 生成示例 curl 命令。

    注意

    目前,无法生成服务器响应。这是因为 Swagger UI 没有设置为接受 bearer 令牌。因此,每个命令会返回以下错误: {"error": "CSRF token is invalid or missing."}。作为临时解决方案,您可以将此命令复制到终端中,并手动添加 bearer 令牌,如 -H 'Authorization: Bearer <bearer_token>'

5.4. 使用 API 自动化 Red Hat Quay 进程

使用 API 时,有权访问 API 的 Red Hat Quay 管理员和用户可以自动执行重复性任务,如存储库管理或镜像修剪。

以下示例演示了如何使用 Python 脚本和 cron 作业来自动删除 OAuth 2 应用,但管理员的令牌 除外。如果要确保在一定时间段内循环与 OAuth 2 访问令牌关联的应用程序,这可能很有用。

先决条件

  • 您可以访问 Red Hat Quay API,它要求已创建了 OAuth 2 访问令牌。
  • 已使用以下内容安装了 Python 请求 库。
  • 您已在机器上启用了 cron 作业。
  • 您已创建了几个机构应用程序,包括不会被删除的应用程序。

流程

  1. 创建执行 API 命令的 Python 脚本。以下示例使用 DELETE /api/v1/organization/{orgname}/applications/{client_id} API 端点删除机构应用程序。

    example.py 文件

    import requests 
    1
    
    
    # Hard-coded values
    API_BASE_URL = "http://<quay-server.example.com>/api/v1" 
    2
    
    ACCESS_TOKEN = "<access_token>" 
    3
    
    ORG_NAME = "<organization_name>" 
    4
    
    
    def get_all_organization_applications():
        url = f"{API_BASE_URL}/organization/{ORG_NAME}/applications"
        headers = {
            "Authorization": f"Bearer {ACCESS_TOKEN}"
        }
    
        response = requests.get(url, headers=headers)
    
        if response.status_code == 200:
            try:
                applications = response.json()
                # Print the raw response for debugging
                print("Raw response:", applications)
    
                # Adjust parsing logic based on the response structure
                if isinstance(applications, dict) and 'applications' in applications:
                    applications = applications['applications']
    
                if isinstance(applications, list):
                    print("Organization applications retrieved successfully:")
                    for app in applications:
                        # Updated key from 'title' to 'name'
                        print(f"Name: {app['name']}, Client ID: {app['client_id']}")
                    return applications
                else:
                    print("Unexpected response format.")
                    return []
            except requests.exceptions.JSONDecodeError:
                print("Error decoding JSON response:", response.text)
                return []
        else:
            print(f"Failed to retrieve applications. Status code: {response.status_code}, Response: {response.text}")
            return []
    
    def delete_organization_application(client_id):
        url = f"{API_BASE_URL}/organization/{ORG_NAME}/applications/{client_id}"
        headers = {
            "Authorization": f"Bearer {ACCESS_TOKEN}"
        }
    
        response = requests.delete(url, headers=headers)
    
        if response.status_code == 204:
            print(f"Application {client_id} deleted successfully.")
        else:
            print(f"Failed to delete application {client_id}. Status code: {response.status_code}, Response: {response.text}")
    
    def main():
        applications = get_all_organization_applications()
        for app in applications:
            if app['name'] != "<admin_token_app>": <5>  # Skip the "admin-token-app"
                delete_organization_application(app['client_id'])
            else:
                print(f"Skipping deletion of application: {app['name']}")
    
    # Execute the main function
    main()
    Copy to Clipboard Toggle word wrap

    1
    在 Python 代码中包括 导入 库。
    2
    附加了 /api/v1 的 registry 的 URL。
    3
    您的 OAuth 2 访问令牌。
    4
    保存应用程序的组织。
    要保留的应用程序令牌的名称。
  2. 将脚本保存为 prune_applications.py
  3. 创建自动运行脚本的 cron 作业:

    1. 运行以下命令打开 crontab 编辑器:

      $ crontab -e
      Copy to Clipboard Toggle word wrap
    2. 在编辑器中,添加用于运行脚本的 cron 作业。以下示例按每月运行一次脚本:

      0 0 1 * * sudo python /path/to/prune_images.py >> /var/log/prune_images.log 2>&1
      Copy to Clipboard Toggle word wrap

第 6 章 Red Hat Quay API 示例

本章的其余部分提供了 Red Hat Quay API 示例。

6.1. 使用 API 管理用户应用程序

Red Hat Quay 用户可以创建、列出关于和删除用户应用程序的信息,该应用程序 可用作 Docker、Podman 或其他服务供应商密码的替代选择。用户应用令牌像您的用户名和密码一样工作,但已加密,不向正在访问 Red Hat Quay 的第三方提供任何信息。

注意

通过 CLI 创建后,用户应用程序令牌会在 Red Hat Quay UI 的 User Settings 下列出。请注意,这与在用户设置下创建的应用程序令牌不同,并应完全被视为不同的应用程序。

使用以下步骤创建用户应用程序令牌。

先决条件

  • 您已创建了 OAuth 2 访问令牌。

流程

  • 输入 POST /api/v1/user/apptoken API 调用来创建用户应用程序:

    $ curl -X POST \
      -H "Authorization: Bearer <access_token>" \
      -H "Content-Type: application/json" \
      -d '{
        "title": "MyAppToken"
      }' \
      "http://quay-server.example.com/api/v1/user/apptoken"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"token": {"uuid": "6b5aa827-cee5-4fbe-a434-4b7b8a245ca7", "title": "MyAppToken", "last_accessed": null, "created": "Wed, 08 Jan 2025 19:32:48 -0000", "expiration": null, "token_code": "string"}}
    Copy to Clipboard Toggle word wrap

  • 您可以使用 GET /api/v1/user/apptoken 命令获取有关应用程序的信息,包括应用程序何时过期。例如:

    $ curl -X GET \
      -H "Authorization: Bearer <access_token>" \
      "http://quay-server.example.com/api/v1/user/apptoken"
    Copy to Clipboard Toggle word wrap
    {"tokens": [{"uuid": "6b5aa827-cee5-4fbe-a434-4b7b8a245ca7", "title": "MyAppToken", "last_accessed": null, "created": "Wed, 08 Jan 2025 19:32:48 -0000", "expiration": null}], "only_expiring": null}
    Copy to Clipboard Toggle word wrap
  • 您可以通过输入 GET /api/v1/user/apptoken/{token_uuid} 命令获取有关特定用户应用程序的信息:

    $ curl -X GET \
      -H "Authorization: Bearer <access_token>" \
      "http://quay-server.example.com/api/v1/user/apptoken/<token_uuid>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"token": {"uuid": "6b5aa827-cee5-4fbe-a434-4b7b8a245ca7", "title": "MyAppToken", "last_accessed": null, "created": "Wed, 08 Jan 2025 19:32:48 -0000", "expiration": null, "token_code": "string"}}
    Copy to Clipboard Toggle word wrap

  • 您可以使用 DELETE /api/v1/user/apptoken/{token_uuid} 端点删除或撤销用户应用程序令牌:

    $ curl -X DELETE \
      -H "Authorization: Bearer <access_token>" \
      "http://quay-server.example.com/api/v1/user/apptoken/<token_uuid>"
    Copy to Clipboard Toggle word wrap

    此命令不会在 CLI 中返回输出。您可以通过输入上述其中一个命令来返回令牌列表。

6.2. 发现 Red Hat Quay API 端点

Red Hat Quay API 端点可以使用 API 发现。

使用以下步骤发现可用的 API 端点。

先决条件

  • 您已创建了 OAuth 2 访问令牌。

流程

  • 输入以下 GET /api/v1/discovery 命令,以 swagger API 格式列出所有可用的 API 端点:

    $ curl -X GET "https://<quay-server.example.com>/api/v1/discovery?query=true" \
        -H "Authorization: Bearer <access_token>"
    Copy to Clipboard Toggle word wrap

    输出示例

    ---
    : "Manage the tags of a repository."}, {"name": "team", "description": "Create, list and manage an organization's teams."}, {"name": "trigger", "description": "Create, list and manage build triggers."}, {"name": "user", "description": "Manage the current user."}, {"name": "userfiles", "description": ""}]}
    ---
    Copy to Clipboard Toggle word wrap

6.3. 获取 Red Hat Quay API 错误详情

使用 API 可发现 Red Hat Quay API 错误详情。

使用以下步骤发现错误详情。

先决条件

  • 您已创建了 OAuth 2 访问令牌。

流程

  • 您可以通过输入 GET /api/v1/error/{error_type} 端点来获取 API 的错误详情。请注意,您必须包含以下错误代码之一:

    Expand
    HTTP 代码描述

    200

    成功调用

    400

    错误请求

    401

    需要会话

    403

    未授权访问

    404

    未找到

    $ curl -X GET "https://<quay-server.example.com>/api/v1/error/<error_type>" \
        -H "Authorization: Bearer <access_token>"
    Copy to Clipboard Toggle word wrap

    输出示例

    curl: (7) Failed to connect to quay-server.example.com port 443 after 0 ms: Couldn't connect to server
    Copy to Clipboard Toggle word wrap

6.4. 全局消息

可以使用 Red Hat Quay API 创建、获取或删除全局消息。使用以下步骤创建、获取或删除全局消息。

先决条件

  • 您已创建了 OAuth 2 访问令牌。

流程

  1. 使用 POST /api/v1/message 端点创建消息:

    $ curl -X POST "https://<quay-server.example.com>/api/v1/messages" \
        -H "Authorization: Bearer <access_token>" \
        -H "Content-Type: application/json" \
        -d '{
            "message": {
                "content": "Hi",
                "media_type": "text/plain",
                "severity": "info"
            }
        }'
    Copy to Clipboard Toggle word wrap

    此命令不返回输出。

  2. 使用 GET /api/v1/messages 命令返回全局消息列表:

    $ curl -X GET "https://<quay-server.example.com>/api/v1/messages" \
        -H "Authorization: Bearer <access_token>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"messages": [{"uuid": "ecababd4-3451-4458-b5db-801684137444", "content": "Hi", "severity": "info", "media_type": "text/plain"}]}
    Copy to Clipboard Toggle word wrap

  3. 使用 DELETE /api/v1/message/{uuid} 端点删除全局消息:

    $ curl -X DELETE "https://<quay-server.example.com>/api/v1/message/<uuid>" \
        -H "Authorization: Bearer <access_token>"
    Copy to Clipboard Toggle word wrap

    此命令不返回输出。

6.5. 使用 API 查看使用日志

可以使用 API 查看机构或存储库的日志。它们也可以聚合(分组),或者列出包含更详细的信息。也可以由用户、特定日期范围或页面查看日志。

6.5.1. 查看聚合的日志

聚合的日志可由机构、存储库、特定用户或当前用户查看。您还可以传递可选命令,如 execute erstarttime/endtimenext_page 来过滤结果。

先决条件

流程

  1. 使用 GET /api/v1/user/aggregatelogs API 端点为当前用户返回聚合(或分组)日志:

    $ curl -X GET \
      -H "Authorization: Bearer <bearer_token>" \
      -H "Accept: application/json" \
      "https://<quay-server.example.com>/api/v1/user/aggregatelogs"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"aggregated": [{"kind": "create_tag", "count": 1, "datetime": "Tue, 18 Jun 2024 00:00:00 -0000"}, {"kind": "manifest_label_add", "count": 1, "datetime": "Tue, 18 Jun 2024 00:00:00 -0000"}, {"kind": "push_repo", "count": 2, "datetime": "Tue, 18 Jun 2024 00:00:00 -0000"}, {"kind": "revert_tag", "count": 1, "datetime": "Tue, 18 Jun 2024 00:00:00 -0000"}]}
    Copy to Clipboard Toggle word wrap

    您还可以传递执行者和 starttime/endtime 查询,以便在特定时间段内获取特定用户的聚合日志。例如:

    $ curl -X GET \
      -H "Authorization: Bearer <bearer_token>" \
      -H "Accept: application/json" \
      "<quay-server.example.com>/api/v1/user/aggregatelogs?performer=<username>&starttime=<MM/DD/YYYY>&endtime=<MM/DD/YYYY>"
    Copy to Clipboard Toggle word wrap
  2. 机构也可以使用 GET /api/v1/organization/{orgname}/aggregatelogs 来查看聚合的日志。例如:

    $ curl -X GET \
      -H "Authorization: Bearer <bearer_token>" \
      -H "Accept: application/json" \
      "<quay-server.example.com>/api/v1/organization/{orgname}/aggregatelogs"
    Copy to Clipboard Toggle word wrap
  3. 存储库也可以使用 GET /api/v1/repository/{repository}/aggregatelogs 命令查看聚合的日志。以下示例包括 starttime/endtime 字段:

    $ curl -X GET \
      -H "Authorization: Bearer <bearer_token>" \
      -H "Accept: application/json" \
      "<quay-server.example.com>/api/v1/repository/<repository_name>/<namespace>/aggregatelogs?starttime=2024-01-01&endtime=2024-06-18""
    Copy to Clipboard Toggle word wrap

6.5.2. 查看详细日志

详细日志可由机构、存储库、特定用户或当前用户查看。您还可以传递可选字段,如 executeer、starttime/endtimenext_page 来过滤结果。

流程

  1. 使用 GET /api/v1/user/logs API 端点返回用户的日志条目列表。例如:

    $ curl -X GET   -H "Authorization: Bearer <bearer_token>"   -H "Accept: application/json"   "<quay-server.example.com>/api/v1/user/logs"
    Copy to Clipboard Toggle word wrap

    您还可以传递执行者和 startime/endtime 查询,以便在特定时间段内获取特定用户的日志。例如:

    $ curl -X GET   -H "Authorization: Bearer <bearer_token>"   -H "Accept: application/json"   "http://quay-server.example.com/api/v1/user/logs?performer=quayuser&starttime=01/01/2024&endtime=06/18/2024"
    Copy to Clipboard Toggle word wrap

    输出示例

    ---
    {"start_time": "Mon, 01 Jan 2024 00:00:00 -0000", "end_time": "Wed, 19 Jun 2024 00:00:00 -0000", "logs": [{"kind": "revert_tag", "metadata": {"username": "quayuser", "repo": "busybox", "tag": "test-two", "manifest_digest": "sha256:57583a1b9c0a7509d3417387b4f43acf80d08cdcf5266ac87987be3f8f919d5d"}, "ip": "192.168.1.131", "datetime": "Tue, 18 Jun 2024 18:59:13 -0000", "performer": {"kind": "user", "name": "quayuser", "is_robot": false, "avatar": {"name": "quayuser", "hash": "b28d563a6dc76b4431fc7b0524bbff6b810387dac86d9303874871839859c7cc", "color": "#17becf", "kind": "user"}}}, {"kind": "push_repo", "metadata": {"repo": "busybox", "namespace": "quayuser", "user-agent": "containers/5.30.1 (github.com/containers/image)", "tag": "test-two", "username": "quayuser", }
    ---
    Copy to Clipboard Toggle word wrap

  2. 使用 GET /api/v1/organization/{orgname}/logs 端点返回指定机构的日志:

    $ curl -X GET \
      -H "Authorization: Bearer <bearer_token>" \
      -H "Accept: application/json" \
      "http://<quay-server.example.com>/api/v1/organization/{orgname}/logs"
    Copy to Clipboard Toggle word wrap
  3. 使用 GET /api/v1/repository/{repository}/logs 端点返回指定存储库的日志:

    $ curl -X GET \
      -H "Authorization: Bearer <bearer_token>" \
      -H "Accept: application/json" \
      "http://<quay-server.example.com>/api/v1/repository/{repository}/logs"
    Copy to Clipboard Toggle word wrap

6.6. 使用 API 导出日志

详细日志可以导出到回调 URL 或电子邮件地址。

先决条件

流程

  1. 使用 POST /api/v1/user/exportlogs 端点为当前用户导出日志:

    $ curl -X POST \
      -H "Authorization: Bearer <bearer_token>" \
      -H "Content-Type: application/json" \
      -H "Accept: application/json" \
      -d '{
            "starttime": "<MM/DD/YYYY>",
            "endtime": "<MM/DD/YYYY>",
            "callback_email": "your.email@example.com"
          }' \
      "http://<quay-server.example.com>/api/v1/user/exportlogs"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"export_id": "6a0b9ea9-444c-4a19-9db8-113201c38cd4"}
    Copy to Clipboard Toggle word wrap

  2. 使用 POST /api/v1/organization/{orgname}/exportlogs 端点导出机构的日志:

    $ curl -X POST \
      -H "Authorization: Bearer <bearer_token>" \
      -H "Content-Type: application/json" \
      -H "Accept: application/json" \
      -d '{
            "starttime": "<MM/DD/YYYY>",
            "endtime": "<MM/DD/YYYY>",
            "callback_email": "org.logs@example.com"
          }' \
      "http://<quay-server.example.com>/api/v1/organization/{orgname}/exportlogs"
    Copy to Clipboard Toggle word wrap
  3. 使用 POST /api/v1/repository/{repository}/exportlogs 端点导出存储库的日志:

    $ curl -X POST \
      -H "Authorization: Bearer <bearer_token>" \
      -H "Content-Type: application/json" \
      -H "Accept: application/json" \
      -d '{
            "starttime": "2024-01-01",
            "endtime": "2024-06-18",
            "callback_url": "http://your-callback-url.example.com"
          }' \
      "http://<quay-server.example.com>/api/v1/repository/{repository}/exportlogs"
    Copy to Clipboard Toggle word wrap

6.7. 使用 API 添加和删除标签

Red Hat Quay 管理员可以按照以下流程通过 API 为标签添加和管理标签。

先决条件

流程

  1. 使用 GET /api/v1/repository/{repository}/manifest/{manifestref} 命令检索存储库中特定清单的详细信息:

    $ curl -X GET \
      -H "Authorization: Bearer <bearer_token>" \
      -H "Accept: application/json" \
      https://<quay-server.example.com>/api/v1/repository/<repository>/manifest/<manifestref>
    Copy to Clipboard Toggle word wrap
  2. 使用 GET /api/v1/repository/{repository}/manifest/{manifestref}/labels 命令检索特定清单的标签列表:

    $ curl -X GET \
      -H "Authorization: Bearer <bearer_token>" \
      -H "Accept: application/json" \
      https://<quay-server.example.com>/api/v1/repository/<repository>/manifest/<manifestref>/labels
    Copy to Clipboard Toggle word wrap

    输出示例

    {"labels": [{"id": "e9f717d2-c1dd-4626-802d-733a029d17ad", "key": "org.opencontainers.image.url", "value": "https://github.com/docker-library/busybox", "source_type": "manifest", "media_type": "text/plain"}, {"id": "2d34ec64-4051-43ad-ae06-d5f81003576a", "key": "org.opencontainers.image.version", "value": "1.36.1-glibc", "source_type": "manifest", "media_type": "text/plain"}]}
    Copy to Clipboard Toggle word wrap

  3. 使用 GET /api/v1/repository/{repository}/manifest/{manifestref}/labels/{labelid} 命令获取有关特定清单的信息:

    $ curl -X GET \
      -H "Authorization: Bearer <bearer_token>" \
      -H "Accept: application/json" \
      https://<quay-server.example.com>/api/v1/repository/<repository>/manifest/<manifestref>/labels/<label_id>
    Copy to Clipboard Toggle word wrap

    输出示例

    {"id": "e9f717d2-c1dd-4626-802d-733a029d17ad", "key": "org.opencontainers.image.url", "value": "https://github.com/docker-library/busybox", "source_type": "manifest", "media_type": "text/plain"}
    Copy to Clipboard Toggle word wrap

  4. 您可以使用 POST /api/v1/repository/{repository}/manifest/{manifestref}/labels 命令在给定存储库中向清单添加额外标签。例如:

    $ curl -X POST \
      -H "Authorization: Bearer <bearer_token>" \
      -H "Content-Type: application/json" \
      --data '{
        "key": "<key>",
        "value": "<value>",
        "media_type": "<media_type>"
      }' \
      https://<quay-server.example.com>/api/v1/repository/<repository>/manifest/<manifestref>/labels
    Copy to Clipboard Toggle word wrap

    输出示例

    {"label": {"id": "346593fd-18c8-49db-854f-4cb1fb76ff9c", "key": "example-key", "value": "example-value", "source_type": "api", "media_type": "text/plain"}}
    Copy to Clipboard Toggle word wrap

  5. 您可以使用 DELETE /api/v1/repository/{repository}/manifest/{manifestref}/labels/{labelid} 命令删除标签:

    $ curl -X DELETE \
      -H "Authorization: Bearer <bearer_token>" \
      https://<quay-server.example.com>/api/v1/repository/<repository>/manifest/<manifestref>/labels/<labelid>
    Copy to Clipboard Toggle word wrap

    此命令不会在 CLI 中返回输出。您可以使用以上其中一个命令来确保它已被成功删除。

6.8. 使用 API 镜像存储库

Red Hat Quay 管理员可以使用 API 镜像外部存储库。

先决条件

  • 您已在 config.yaml 文件中设置了 FEATURE_REPO_MIRROR: true

流程

  • 使用 POST /api/v1/repository/{repository}/mirror 端点创建新存储库镜像配置:

    $ curl -X POST "https://<quay-server.example.com>/api/v1/repository/<namespace>/<repo>/mirror" \
        -H "Authorization: Bearer <access_token>" \
        -H "Content-Type: application/json" \
        -d '{
            "is_enabled": <is_enabled>,
            "external_reference": "<external_reference>",
            "external_registry_username": "<external_registry_username>",
            "external_registry_password": "<external_registry_password>",
            "sync_start_date": "<sync_start_date>",
            "sync_interval": <sync_interval>,
            "robot_username": "<robot_username>",
            "skopeo_timeout_interval": 600,
            "root_rule": {
                "rule": "<rule>",
                "rule_type": "<rule_type>"
            }
        }'
    Copy to Clipboard Toggle word wrap
  • 您可以使用 GET /api/v1/repository/{repository}/mirror 端点返回有关镜像配置的信息:

    $ curl -X GET "https://<quay-server.example.com>/api/v1/repository/<namespace>/<repo>/mirror" \
         -H "Authorization: Bearer <access_token>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"is_enabled": true, "mirror_type": "PULL", "external_reference": "https://quay.io/repository/argoproj/argocd", "external_registry_username": null, "external_registry_config": {}, "sync_interval": 86400, "sync_start_date": "2025-01-15T12:00:00Z", "sync_expiration_date": null, "sync_retries_remaining": 3, "sync_status": "NEVER_RUN", "root_rule": {"rule_kind": "tag_glob_csv", "rule_value": ["*.latest*"]}, "robot_username": "quayadmin+mirror_robot"}
    Copy to Clipboard Toggle word wrap

  • 您可以使用 POST /api/v1/repository/{repository}/mirror/sync-now 端点来同步存储库。例如:

    $ curl -X POST "https://<quay-server.example.com>/api/v1/repository/<namespace>/<repo>/mirror/sync-now" \
         -H "Authorization: Bearer <access_token>"
    Copy to Clipboard Toggle word wrap

    此命令不会在 CLI 中返回输出。

  • 另外,您可以使用 POST /api/v1/repository/{repository}/mirror/sync-cancel endpoint.For 示例取消同步:

    $ curl -X POST "https://<quay-server.example.com>/api/v1/repository/<namespace>/<repo>/mirror/sync-cancel" \
    Copy to Clipboard Toggle word wrap

    此命令不会在 CLI 中返回输出。

  • 在创建镜像配置后,您可以使用 PUT /api/v1/repository/{repository}/mirror 命令进行更改。例如,您可以选择禁用自动同步:

    $ curl -X PUT "https://<quay-server.example.com>/api/v1/repository/<namespace>/<repo>/mirror" \
        -H "Authorization: Bearer <access_token>" \
        -H "Content-Type: application/json" \
        -d '{
            "is_enabled": <false>, 
    1
    
            "external_reference": "<external_reference>",
            "external_registry_username": "<external_registry_username>",
            "external_registry_password": "<external_registry_password>",
            "sync_start_date": "<sync_start_date>",
            "sync_interval": <sync_interval>,
            "robot_username": "<robot_username>",
            "skopeo_timeout_interval": 600,
            "root_rule": {
                "rule": "<rule>",
                "rule_type": "<rule_type>"
            }
        }'
    Copy to Clipboard Toggle word wrap
    1
    禁用自动同步。

6.9. 使用 Red Hat Quay API 建立配额

您可以为机构或用户建立配额,并定制配额策略以满足您的 registry 的需求。

以下小节演示了如何为机构、用户以及修改这些设置建立配额。

6.9.1. 使用 Red Hat Quay API 管理机构配额

首次创建机构时,它没有建立的配额。您可以使用 API 检查、创建、更改或删除机构的配额限制。

先决条件

  • 您已生成了 OAuth 访问令牌。

流程

  1. 要为机构设置配额,您可以使用 POST /api/v1/organization/{orgname}/quota 端点:

    $ curl -X POST "https://<quay-server.example.com>/api/v1/organization/<orgname>/quota" \
         -H "Authorization: Bearer <access_token>" \
         -H "Content-Type: application/json" \
         -d '{
             "limit_bytes": 10737418240,
             "limits": "10 Gi"
         }'
    Copy to Clipboard Toggle word wrap

    输出示例

    "Created"
    Copy to Clipboard Toggle word wrap

  2. 使用 GET /api/v1/organization/{orgname}/quota 命令返回有关策略的信息,包括其他机构配额端点所需的 ID 号。例如:

    $ curl -k -X GET -H "Authorization: Bearer <token>" -H 'Content-Type: application/json'  https://example-registry-quay-quay-enterprise.apps.docs.gcp.quaydev.org/api/v1/organization/testorg/quota  | jq
    Copy to Clipboard Toggle word wrap

    输出示例

    [{"id": 1, "limit_bytes": 10737418240, "limit": "10.0 GiB", "default_config": false, "limits": [], "default_config_exists": false}]
    Copy to Clipboard Toggle word wrap

    获取 ID 号后,您可以使用 GET /api/v1/organization/{orgname}/quota/{quota_id} 命令列出配额策略。例如:

    $ curl -X GET "https://<quay-server.example.com>/api/v1/organization/<orgname>/quota/<quota_id>" \
         -H "Authorization: Bearer <access_token>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"id": 1, "limit_bytes": 10737418240, "limit": "10.0 GiB", "default_config": false, "limits": [], "default_config_exists": false}
    Copy to Clipboard Toggle word wrap

  3. 您可以使用 PUT /api/v1/organization/{orgname}/quota/{quota_id} 命令修改现有的配额限制。请注意,这需要策略 ID。例如:

    $ curl -X PUT "https://<quay-server.example.com>/api/v1/organization/<orgname>/quota/<quota_id>" \
         -H "Authorization: Bearer <access_token>" \
         -H "Content-Type: application/json" \
         -d '{
             "limit_bytes": <limit_in_bytes>
         }'
    Copy to Clipboard Toggle word wrap

    输出示例

    {"id": 1, "limit_bytes": 21474836480, "limit": "20.0 GiB", "default_config": false, "limits": [], "default_config_exists": false}
    Copy to Clipboard Toggle word wrap

  4. 可以通过 DELETE /api/v1/organization/{orgname}/quota/{quota_id} 命令删除机构的配额。例如:

    $ curl -X DELETE "https://<quay-server.example.com>/api/v1/organization/<orgname>/quota/<quota_id>" \
         -H "Authorization: Bearer <access_token>"
    Copy to Clipboard Toggle word wrap

    此命令不返回输出。

6.9.2. 使用 Red Hat Quay API 为机构设置配额限制

您可以为机构设置特定的配额限制,以便在超过、返回警告时,或者推送的镜像会被完全拒绝。

流程

  1. 使用 POST /api/v1/organization/{orgname}/quota/{quota_id}/limit 命令创建配额策略,以便在超过分配的配额时拒绝镜像。例如:

    $ curl -X POST "https://<quay-server.example.com>/api/v1/organization/<orgname>/quota/<quota_id>/limit" \
         -H "Authorization: Bearer <access_token>" \
         -H "Content-Type: application/json" \
         -d '{
               "limit_bytes": 21474836480,
               "type": "Reject", 
    1
    
               "threshold_percent": 90 
    2
    
             }'
    Copy to Clipboard Toggle word wrap
    1
    拒绝或警告 之一
    2
    配额阈值,以百分比表示。

    输出示例

    "Created"
    Copy to Clipboard Toggle word wrap

  2. 使用 GET /api/v1/organization/{orgname}/quota/{quota_id}/limit 获取配额限制的 ID。例如:

    $ curl -X GET "https://<quay-server.example.com>/api/v1/organization/<orgname>/quota/<quota_id>/limit" \
         -H "Authorization: Bearer <access_token>"
    Copy to Clipboard Toggle word wrap

    输出示例

    [{"id": 2, "type": "Reject", "limit_percent": 90}]
    Copy to Clipboard Toggle word wrap

  1. 使用 PUT /api/v1/organization/{orgname}/quota/{quota_id}/limit/{limit_id} 端点更新策略。例如:

    $ curl -X PUT "https://<quay-server.example.com>/api/v1/organization/<orgname>/quota/<quota_id>/limit/<limit_id>" \
         -H "Authorization: Bearer <access_token>" \
         -H "Content-Type: application/json" \
         -d '{
               "type": "<type>",
               "threshold_percent": <threshold_percent>
             }'
    Copy to Clipboard Toggle word wrap

    输出示例

    {"id": 3, "limit_bytes": 10737418240, "limit": "10.0 GiB", "default_config": false, "limits": [{"id": 2, "type": "Warning", "limit_percent": 80}], "default_config_exists": false}
    Copy to Clipboard Toggle word wrap

  2. 您可以使用 DELETE /api/v1/organization/{orgname}/quota/{quota_id}/limit/{limit_id} 端点删除配额限制:

    $ curl -X DELETE "https://<quay-server.example.com>/api/v1/organization/<orgname>/quota/<quota_id>/limit/<limit_id>" \
         -H "Authorization: Bearer <access_token>"
    Copy to Clipboard Toggle word wrap

    此命令不返回输出。

6.9.3. 使用 Red Hat Quay API 为用户获取配额限制

您可以为用户指定配额和限制,以便在超过时返回警告,或者推送的镜像被完全拒绝。必须在 Red Hat Quay UI 上设置用户的配额限制。以下 API 可用于查看登录的用户的配额限值。

流程

  1. 使用 GET /api/v1/user/quota 命令返回有关配额限制的信息:

    $ curl -X GET "https://<quay-server.example.com>/api/v1/user/quota" \
      -H "Authorization: Bearer <access_token>"
    Copy to Clipboard Toggle word wrap

    输出示例

    [{"id": 4, "limit_bytes": 2199023255552, "limit": "2.0 TiB", "default_config": false, "limits": [], "default_config_exists": false}]
    Copy to Clipboard Toggle word wrap

  2. 收到配额 ID 后,您可以使用 GET /api/v1/user/quota/{quota_id} 端点传递该端点,以返回有关限制的信息:

    $ curl -X GET "https://<quay-server.example.com>/api/v1/user/quota/{quota_id}" \
      -H "Authorization: Bearer <access_token>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"id": 4, "limit_bytes": 2199023255552, "limit": "2.0 TiB", "default_config": false, "limits": [], "default_config_exists": false}
    Copy to Clipboard Toggle word wrap

  3. 可以使用 GET /api/v1/user/quota/{quota_id}/limit 端点来查看这些限制。例如:

    $ curl -X GET "https://<quay-server.example.com>/api/v1/user/quota/{quota_id}/limit" \
      -H "Authorization: Bearer <access_token>"
    Copy to Clipboard Toggle word wrap

    输出示例

    [{"id": 3, "type": "Reject", "limit_percent": 100}]
    Copy to Clipboard Toggle word wrap

  4. 可以使用 GET /api/v1/user/quota/{quota_id}/limit/{limit_id} 端点来返回有关整个策略的附加信息:

    $ curl -X GET "https://<quay-server.example.com>/api/v1/user/quota/{quota_id}/limit/{limit_id}" \
      -H "Authorization: Bearer <access_token>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"id": 4, "limit_bytes": 2199023255552, "limit": "2.0 TiB", "default_config": false, "limits": [{"id": 3, "type": "Reject", "limit_percent": 100}], "default_config_exists": false}
    Copy to Clipboard Toggle word wrap

6.10. 使用 Red Hat Quay API 建立配额

组织可以通过 API 端点创建和管理。使用 Red Hat Quay API,您可以创建机构、查看机构信息、为机构创建代理缓存,编辑具有机构访问权限的用户、更改机构详情、删除机构等。

6.10.1. 使用 Red Hat Quay API 创建机构

使用以下步骤使用 Red Hat Quay API 创建新机构。

先决条件

流程

  1. 输入以下命令使用 POST /api/v1/organization/ 端点创建新机构:

    $ curl -X POST   -H "Authorization: Bearer <bearer_token>" -H "Content-Type: application/json"   -d '{
        "name": "<new_organization_name>"
      }'   "https://<quay-server.example.com>/api/v1/organization/"
    Copy to Clipboard Toggle word wrap

    输出示例

    "Created"
    Copy to Clipboard Toggle word wrap
  2. 创建后,可以更改机构详情,如添加电子邮件地址,带有 PUT /api/v1/organization/{orgname} 命令。例如:

    $ curl -X PUT "https://<quay-server.example.com>/api/v1/organization/<orgname>" \
      -H "Authorization: Bearer <access_token>" \
      -H "Content-Type: application/json" \
      -d '{
            "email": "<org_email>",
            "invoice_email": <true/false>,
            "invoice_email_address": "<billing_email>"
          }'
    Copy to Clipboard Toggle word wrap

    输出示例

    {"name": "test", "email": "new-contact@test-org.com", "avatar": {"name": "test", "hash": "a15d479002b20f211568fd4419e76686d2b88a4980a5b4c4bc10420776c5f6fe", "color": "#aec7e8", "kind": "user"}, "is_admin": true, "is_member": true, "teams": {"owners": {"name": "owners", "description": "", "role": "admin", "avatar": {"name": "owners", "hash": "6f0e3a8c0eb46e8834b43b03374ece43a030621d92a7437beb48f871e90f8d90", "color": "#c7c7c7", "kind": "team"}, "can_view": true, "repo_count": 0, "member_count": 1, "is_synced": false}}, "ordered_teams": ["owners"], "invoice_email": true, "invoice_email_address": "billing@test-org.com", "tag_expiration_s": 1209600, "is_free_account": true, "quotas": [{"id": 2, "limit_bytes": 10737418240, "limits": [{"id": 1, "type": "Reject", "limit_percent": 90}]}], "quota_report": {"quota_bytes": 0, "configured_quota": 10737418240, "running_backfill": "complete", "backfill_status": "complete"}}
    Copy to Clipboard Toggle word wrap

6.10.2. 使用 Red Hat Quay API 删除机构

使用以下步骤使用 Red Hat Quay API 删除机构。

先决条件

流程

  1. 输入以下命令使用 DELETE /api/v1/organization/{orgname} 端点删除机构:

    $ curl -X DELETE \
      -H "Authorization: Bearer <bearer_token>" \
      "https://<quay-server.example.com>/api/v1/organization/<organization_name>"
    Copy to Clipboard Toggle word wrap
  2. 从 CLI 删除机构时,CLI 不会返回信息。要确认删除操作,您可以检查 Red Hat Quay UI,或者您可以输入 GET /api/v1/organization/{orgname} 命令来查看是否返回已删除机构的详情:

    $ curl -X GET \
      -H "Authorization: Bearer <bearer_token>" \
      "<quay-server.example.com>/api/v1/organization/<organization_name>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"detail": "Not Found", "error_message": "Not Found", "error_type": "not_found", "title": "not_found", "type": "http://<quay-server.example.com>/api/v1/error/not_found", "status": 404}
    Copy to Clipboard Toggle word wrap

6.10.3. 使用 API 检索机构成员信息

有关机构成员的信息可以通过 Red Hat Quay API 检索。

流程

  1. 使用 GET /api/v1/organization/{orgname}/members 返回机构成员列表:

    $ curl -X GET "https://<quay-server.example.com>/api/v1/organization/<orgname>/members" \
      -H "Authorization: Bearer <access_token>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"members": [{"name": "quayadmin", "kind": "user", "avatar": {"name": "quayadmin", "hash": "6d640d802fe23b93779b987c187a4b7a4d8fbcbd4febe7009bdff58d84498fba", "color": "#f7b6d2", "kind": "user"}, "teams": [{"name": "owners", "avatar": {"name": "owners", "hash": "6f0e3a8c0eb46e8834b43b03374ece43a030621d92a7437beb48f871e90f8d90", "color": "#c7c7c7", "kind": "team"}}], "repositories": ["testrepo"]}, {"name": "testuser", "kind": "user", "avatar": {"name": "testuser", "hash": "f660ab912ec121d1b1e928a0bb4bc61b15f5ad44d5efdc4e1c92a25e99b8e44a", "color": "#6b6ecf", "kind": "user"}, "teams": [{"name": "owners", "avatar": {"name": "owners", "hash": "6f0e3a8c0eb46e8834b43b03374ece43a030621d92a7437beb48f871e90f8d90", "color": "#c7c7c7", "kind": "team"}}], "repositories": []}]}
    Copy to Clipboard Toggle word wrap

  2. 您可以使用 GET /api/v1/organization/{orgname}/collaborators 返回机构 collaborators 列表:

    $ curl -X GET "https://<quay-server.example.com>/api/v1/organization/{orgname}/collaborators" \
      -H "Authorization: Bearer <access_token>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"collaborators": [user-test]}
    Copy to Clipboard Toggle word wrap

  3. 使用 GET /api/v1/organization/{orgname}/members/{membername} 端点来获取有关用户更具体的信息:

    $ curl -X GET "https://<quay-server.example.com>/api/v1/organization/<orgname>/members/<membername>" \
      -H "Authorization: Bearer <access_token>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"name": "quayadmin", "kind": "user", "avatar": {"name": "quayadmin", "hash": "6d640d802fe23b93779b987c187a4b7a4d8fbcbd4febe7009bdff58d84498fba", "color": "#f7b6d2", "kind": "user"}, "teams": [{"name": "owners", "avatar": {"name": "owners", "hash": "6f0e3a8c0eb46e8834b43b03374ece43a030621d92a7437beb48f871e90f8d90", "color": "#c7c7c7", "kind": "team"}}], "repositories": ["testrepo"]}
    Copy to Clipboard Toggle word wrap

  4. 使用 DELETE /api/v1/organization/{orgname}/members/{membername} 端点删除团队成员。

    $ curl -X DELETE "https://<quay-server.example.com>/api/v1/organization/<orgname>/members/<membername>" \
      -H "Authorization: Bearer <access_token>"
    Copy to Clipboard Toggle word wrap

    此命令不返回输出。

6.10.4. 使用 Red Hat Quay API 创建机构应用程序

可以使用 Red Hat Quay UI 创建机构应用程序。

注意

可以使用 UI 创建机构应用,但必须在 UI 上创建 OAuth 2 访问令牌。

流程

  1. 使用 POST /api/v1/organization/{orgname}/applications 端点为您的机构创建新应用。例如:

    $ curl -X POST "https://<quay-server.example.com>/api/v1/organization/<orgname>/applications" \
      -H "Authorization: Bearer <access_token>" \
      -H "Content-Type: application/json" \
      -d '{
            "name": "<app_name>",
            "redirect_uri": "<redirect_uri>",
            "application_uri": "<application_uri>",
            "description": "<app_description>",
            "avatar_email": "<avatar_email>"
          }'
    Copy to Clipboard Toggle word wrap

    输出示例

    {"name": "new-application", "description": "", "application_uri": "", "client_id": "E6GJSHOZMFBVNHTHNB53", "client_secret": "SANSWCWSGLVAUQ60L4Q4CEO3C1QAYGEXZK2VKJNI", "redirect_uri": "", "avatar_email": null}
    Copy to Clipboard Toggle word wrap

  2. 使用 GET /api/v1/organization/{orgname}/applications 端点返回所有机构应用程序的列表。例如:

    $ curl -X GET "https://<quay-server.example.com>/api/v1/organization/<orgname>/applications" \
      -H "Authorization: Bearer <access_token>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"applications": [{"name": "test", "description": "", "application_uri": "", "client_id": "MCJ61D8KQBFS2DXM56S2", "client_secret": "J5G7CCX5QCA8Q5XZLWGI7USJPSM4M5MQHJED46CF", "redirect_uri": "", "avatar_email": null}, {"name": "new-token", "description": "", "application_uri": "", "client_id": "IG58PX2REEY9O08IZFZE", "client_secret": "2LWTWO89KH26P2CO4TWFM7PGCX4V4SUZES2CIZMR", "redirect_uri": "", "avatar_email": null}, {"name": "second-token", "description": "", "application_uri": "", "client_id": "6XBK7QY7ACSCN5XBM3GS", "client_secret": "AVKBOUXTFO3MXBBK5UJD5QCQRN2FWL3O0XPZZT78", "redirect_uri": "", "avatar_email": null}, {"name": "new-application", "description": "", "application_uri": "", "client_id": "E6GJSHOZMFBVNHTHNB53", "client_secret": "SANSWCWSGLVAUQ60L4Q4CEO3C1QAYGEXZK2VKJNI", "redirect_uri": "", "avatar_email": null}]}
    Copy to Clipboard Toggle word wrap

    也可以使用 GET /api/v1/organization/{orgname}/applications/{client_id} 端点为特定客户端返回应用程序。例如:

    $ curl -X GET "https://<quay-server.example.com>/api/v1/organization/<orgname>/applications/<client_id>" \
      -H "Authorization: Bearer <access_token>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"name": "test", "description": "", "application_uri": "", "client_id": "MCJ61D8KQBFS2DXM56S2", "client_secret": "J5G7CCX5QCA8Q5XZLWGI7USJPSM4M5MQHJED46CF", "redirect_uri": "", "avatar_email": null}
    Copy to Clipboard Toggle word wrap

  3. 创建后,可以使用 PUT /api/v1/organization/{orgname}/applications/{client_id} 端点更新机构应用程序,例如,添加重定向 URI 或新描述:

    $ curl -X PUT "https://quay-server.example.com/api/v1/organization/test/applications/12345" \
      -H "Authorization: Bearer <access_token>" \
      -H "Content-Type: application/json" \
      -d '{
            "name": "Updated Application Name",
            "redirect_uri": "https://example.com/oauth/callback",
            "application_uri": "https://example.com",
            "description": "Updated description for the application",
            "avatar_email": "avatar@example.com"
          }'
    Copy to Clipboard Toggle word wrap
  4. 创建后,可以使用 GET /api/v1/app/{client_id} 端点返回应用程序信息:

    $ curl -X GET "https://<quay-server.example.com>/api/v1/app/<client_id>" \
      -H "Authorization: Bearer <access_token>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"name": "new-application3", "description": "", "uri": "", "avatar": {"name": "new-application3", "hash": "a15d479002b20f211568fd4419e76686d2b88a4980a5b4c4bc10420776c5f6fe", "color": "#aec7e8", "kind": "app"}, "organization": {"name": "test", "email": "new-contact@test-org.com", "avatar": {"name": "test", "hash": "a15d479002b20f211568fd4419e76686d2b88a4980a5b4c4bc10420776c5f6fe", "color": "#aec7e8", "kind": "user"}, "is_admin": true, "is_member": true, "teams": {}, "ordered_teams": [], "invoice_email": true, "invoice_email_address": "billing@test-org.com", "tag_expiration_s": 1209600, "is_free_account": true, "quotas": [{"id": 2, "limit_bytes": 10737418240, "limits": [{"id": 1, "type": "Reject", "limit_percent": 90}]}], "quota_report": {"quota_bytes": 0, "configured_quota": 10737418240, "running_backfill": "complete", "backfill_status": "complete"}}}
    Copy to Clipboard Toggle word wrap

  5. 可以使用 DELETE /api/v1/organization/{orgname}/applications/{client_id} 端点删除机构应用程序。例如:

    $ curl -X DELETE "https://<quay-server.example.com>/api/v1/organization/{orgname}/applications/{client_id}" \
      -H "Authorization: Bearer <access_token>"
    Copy to Clipboard Toggle word wrap

    此命令不返回输出。

6.10.5. 使用 Red Hat Quay API 为机构配置代理缓存

可以使用 Red Hat Quay API 配置机构的代理缓存。

流程

  1. 使用 POST /api/v1/organization/{orgname}/proxycache 端点为组织创建代理缓存配置。

    $ curl -X POST "https://<quay-server.example.com>/api/v1/organization/<orgname>/proxycache" \
      -H "Authorization: Bearer <access_token>" \
      -H "Content-Type: application/json" \
      -d '{
            "upstream_registry": "<upstream_registry>"
          }'
    Copy to Clipboard Toggle word wrap
  2. 使用 POST /api/v1/organization/{orgname}/validateproxycache 端点来验证代理配置:

    $ curl -X POST "https://<quay-server.example.com>/api/v1/organization/{orgname}/validateproxycache" \
      -H "Authorization: Bearer <access_token>" \
      -H "Content-Type: application/json" \
      -d '{
            "upstream_registry": "<upstream_registry>"
          }'
    Copy to Clipboard Toggle word wrap
  3. 使用 GET /api/v1/organization/{orgname}/proxycache 端点获取有关 proxcy 缓存的信息。例如:

    $ curl -X GET "https://<quay-server.example.com>/api/v1/organization/{orgname}/proxycache" \
      -H "Authorization: Bearer <access_token>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"upstream_registry": "quay.io", "expiration_s": 86400, "insecure": false}
    Copy to Clipboard Toggle word wrap

  4. 使用 DELETE /api/v1/organization/{orgname}/proxycache 端点

    $ curl -X DELETE "https://<quay-server.example.com>/api/v1/organization/{orgname}/proxycache" \
      -H "Authorization: Bearer <access_token>"
    Copy to Clipboard Toggle word wrap

    输出示例

    "Deleted"
    Copy to Clipboard Toggle word wrap

6.11. 使用 Red Hat Quay API 管理存储库权限

可以使用 Red Hat Quay API 管理存储库权限。例如,您可以创建、查看和删除用户和团队权限。

以下流程演示了如何使用 Red Hat Quay API 管理存储库权限。

6.11.1. 使用 Red Hat Quay API 管理用户权限

使用以下步骤使用 Red Hat Quay API 管理用户权限。

流程

  1. 使用 GET /api/v1/repository/{repository}/permissions/user/{username} 端点为用户获取存储库权限。例如:

    $ curl -X GET \
      -H "Authorization: Bearer <access_token>" \
      "https://quay-server.example.com/api/v1/repository/<repository_path>/permissions/user/<username>"
    Copy to Clipboard Toggle word wrap

    输出示例

    $ {"role": "read", "name": "testuser", "is_robot": false, "avatar": {"name": "testuser", "hash": "f660ab912ec121d1b1e928a0bb4bc61b15f5ad44d5efdc4e1c92a25e99b8e44a", "color": "#6b6ecf", "kind": "user"}, "is_org_member": false}
    Copy to Clipboard Toggle word wrap

  2. 所有用户权限都可以使用 GET /api/v1/repository/{repository}/permissions/user/ 端点返回:

    $ curl -X GET \
      -H "Authorization: Bearer <access_token>" \
      "https://quay-server.example.com/api/v1/repository/<namespace>/<repository>/permissions/user/"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"permissions": {"quayadmin": {"role": "admin", "name": "quayadmin", "is_robot": false, "avatar": {"name": "quayadmin", "hash": "6d640d802fe23b93779b987c187a4b7a4d8fbcbd4febe7009bdff58d84498fba", "color": "#f7b6d2", "kind": "user"}, "is_org_member": true}, "test+example": {"role": "admin", "name": "test+example", "is_robot": true, "avatar": {"name": "test+example", "hash": "3b03050c26e900500437beee4f7f2a5855ca7e7c5eab4623a023ee613565a60e", "color": "#a1d99b", "kind": "robot"}, "is_org_member": true}}}
    Copy to Clipboard Toggle word wrap

  3. 另外,您可以使用 GET /api/v1/repository/{repository}/permissions/user/{username}/transitive 端点来仅返回用户的存储库权限:

    $ curl -X GET \
      -H "Authorization: Bearer <access_token>" \
      "https://quay-server.example.com/api/v1/repository/<repository_path>/permissions/user/<username>/transitive"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"permissions": [{"role": "admin"}]}
    Copy to Clipboard Toggle word wrap

  4. 您可以更改用户的权限,如使用 PUT /api/v1/repository/{repository}/permissions/user/{username} 端点使用户成为 admin。例如:

    $ curl -X PUT \
      -H "Authorization: Bearer <access_token>" \
      -H "Content-Type: application/json" \
      -d '{"role": "<role>"}' \
      "https://quay-server.example.com/api/v1/repository/<repository_path>/permissions/user/<username>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"role": "admin", "name": "testuser", "is_robot": false, "avatar": {"name": "testuser", "hash": "f660ab912ec121d1b1e928a0bb4bc61b15f5ad44d5efdc4e1c92a25e99b8e44a", "color": "#6b6ecf", "kind": "user"}, "is_org_member": false}
    Copy to Clipboard Toggle word wrap

  5. 可以使用 DELETE /api/v1/repository/{repository}/permissions/user/{username} 端点删除用户权限。例如:

    $ curl -X DELETE \
      -H "Authorization: Bearer <access_token>" \
      "https://quay-server.example.com/api/v1/repository/<namespace>/<repository>/permissions/user/<username>"
    Copy to Clipboard Toggle word wrap

    此命令不返回输出。

6.11.2. 使用 Red Hat Quay API 管理团队权限

使用以下步骤使用 Red Hat Quay API 管理团队权限。

  1. 可以使用 GET /api/v1/repository/{repository}/permissions/team/{teamname} 端点返回指定团队的权限:

    $ curl -X GET \
      -H "Authorization: Bearer <access_token>" \
      "https://quay-server.example.com/api/v1/repository/<namespace>/<repository>/permissions/team/<teamname>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"role": "write"}
    Copy to Clipboard Toggle word wrap

  2. 所有团队的权限都可以使用 GET /api/v1/repository/{repository}/permissions/team/ 端点返回。例如:

    $ curl -X GET \
      -H "Authorization: Bearer <access_token>" \
      "https://quay-server.example.com/api/v1/repository/<namespace>/<repository>/permissions/team/"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"permissions": {"ironmanteam": {"role": "read", "name": "ironmanteam", "avatar": {"name": "ironmanteam", "hash": "8045b2361613622183e87f33a7bfc54e100a41bca41094abb64320df29ef458d", "color": "#969696", "kind": "team"}}, "sillyteam": {"role": "read", "name": "sillyteam", "avatar": {"name": "sillyteam", "hash": "f275d39bdee2766d2404e2c6dbff28fe290969242e9fcf1ffb2cde36b83448ff", "color": "#17becf", "kind": "team"}}}}
    Copy to Clipboard Toggle word wrap

  3. 可以使用 PUT /api/v1/repository/{repository}/permissions/team/{teamname} 命令更改指定团队的权限。例如:

    $ curl -X PUT \
      -H "Authorization: Bearer <access_token>" \
      -H "Content-Type: application/json" \
      -d '{"role": "<role>"}' \
      "https://quay-server.example.com/api/v1/repository/<namespace>/<repository>/permissions/team/<teamname>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"role": "admin", "name": "superteam", "avatar": {"name": "superteam", "hash": "48cb6d114200039fed5c601480653ae7371d5a8849521d4c3bf2418ea013fc0f", "color": "#9467bd", "kind": "team"}}
    Copy to Clipboard Toggle word wrap

  4. 可以使用 DELETE /api/v1/repository/{repository}/permissions/team/{teamname} 命令删除团队权限。例如:

    $ curl -X DELETE \
      -H "Authorization: Bearer <access_token>" \
      "https://quay-server.example.com/api/v1/repository/<namespace>/<repository>/permissions/team/<teamname>"
    Copy to Clipboard Toggle word wrap

    此命令不会在 CLI 中返回输出。

6.12. 使用 Red Hat Quay API 管理自动修剪策略

可以使用 Red Hat Quay API 为机构、存储库和用户创建、检索、更改和删除自动修剪策略。

流程

  1. 输入以下命令使用 POST /api/v1/repository 端点创建存储库:

    $ curl -X POST \
      -H "Authorization: Bearer <bearer_token>" \
      -H "Content-Type: application/json" \
      -d '{
        "repository": "<new_repository_name>",
        "visibility": "<private>",
        "description": "<This is a description of the new repository>."
      }' \
      "https://quay-server.example.com/api/v1/repository"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"namespace": "quayadmin", "name": "<new_repository_name>", "kind": "image"}
    Copy to Clipboard Toggle word wrap

  2. 您可以使用 GET /api/v1/repository 端点列出存储库。例如:

    $ curl -X GET \
      -H "Authorization: Bearer <ACCESS_TOKEN>" \
      "https://quay-server.example.com/api/v1/repository?public=true&starred=false&namespace=<NAMESPACE>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"repositories": [{"namespace": "quayadmin", "name": "busybox", "description": null, "is_public": false, "kind": "image", "state": "MIRROR", "is_starred": false, "quota_report": {"quota_bytes": 2280675, "configured_quota": 2199023255552}}]}
    Copy to Clipboard Toggle word wrap

  3. 通过 POST /api/v1/repository/{repository}/changevisibility 端点,可以将可见性从公共改为私有:

    $ curl -X POST \
      -H "Authorization: Bearer <ACCESS_TOKEN>" \
      -H "Content-Type: application/json" \
      -d '{
            "visibility": "private"
          }' \
      "https://quay-server.example.com/api/v1/repository/<NAMESPACE>/<REPO_NAME>/changevisibility"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"success": true}
    Copy to Clipboard Toggle word wrap

  4. 您可以检查 Red Hat Quay UI,或者您可以输入以下 GET /api/v1/repository/{repository} 命令来返回有关存储库的详情:

    $ curl -X GET -H "Authorization: Bearer <bearer_token>" "<quay-server.example.com>/api/v1/repository/<namespace>/<repository_name>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"detail": "Not Found", "error_message": "Not Found", "error_type": "not_found", "title": "not_found", "type": "http://quay-server.example.com/api/v1/error/not_found", "status": 404}
    Copy to Clipboard Toggle word wrap
  5. 存储库描述可以使用 PUT /api/v1/repository/{repository} 端点更新:

    $ curl -X PUT \
      -H "Authorization: Bearer <bearer_token>" \
      -H "Content-Type: application/json" \
      -d '{
            "description": "This is an updated description for the repository."
          }' \
      "https://quay-server.example.com/api/v1/repository/<NAMESPACE>/<REPOSITORY>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"success": true}
    Copy to Clipboard Toggle word wrap

  6. 输入以下命令使用 DELETE /api/v1/repository/{repository} 端点删除存储库:

    $ curl -X DELETE   -H "Authorization: Bearer <bearer_token>" "<quay-server.example.com>/api/v1/repository/<namespace>/<repository_name>"
    Copy to Clipboard Toggle word wrap

    此命令不会在 CLI 中返回输出。

您可以使用 Red Hat Quay API 端点来管理命名空间自动运行策略。

先决条件

  • 您已创建了 OAuth 访问令牌。
  • 已登陆到 Red Hat Quay。

流程

  1. 输入以下 POST /api/v1/organization/{orgname}/autoprunepolicy/ 命令,创建一个新策略来限制机构中允许的标签数:

    $ curl -X POST -H "Authorization: Bearer <access_token>" -H "Content-Type: application/json" -d '{"method": "number_of_tags", "value": 10}' http://<quay-server.example.com>/api/v1/organization/<organization_name>/autoprunepolicy/
    Copy to Clipboard Toggle word wrap

    另外,您可以在创建日期后将标签设置为在指定时间过期:

    $ curl -X POST -H "Authorization: Bearer <access_token>" -H "Content-Type: application/json" -d '{
    "method": "creation_date", "value": "7d"}' http://<quay-server.example.com>/api/v1/organization/<organization_name>/autoprunepolicy/
    Copy to Clipboard Toggle word wrap

    输出示例

    {"uuid": "73d64f05-d587-42d9-af6d-e726a4a80d6e"}
    Copy to Clipboard Toggle word wrap

  2. 可选。您可以将额外策略添加到机构中,并传递 tagPatterntagPatternMatches 字段,以仅修剪与给定 regex 模式匹配的标签。例如:

    $ curl -X POST \
      -H "Authorization: Bearer <bearer_token>" \
      -H "Content-Type: application/json" \
      -d '{
        "method": "creation_date",
        "value": "7d",
        "tagPattern": "^v*",
        "tagPatternMatches": <true> 
    1
    
      }' \
      "https://<quay-server.example.com>/api/v1/organization/<organization_name>/autoprunepolicy/"
    Copy to Clipboard Toggle word wrap
    1
    tagPatternMatches 设置为 True 会导致修剪与给定正则表达式模式匹配的标签。在本例中,与 ^v* 匹配的标签会被修剪。

    输出示例

    {"uuid": "ebf7448b-93c3-4f14-bf2f-25aa6857c7b0"}
    Copy to Clipboard Toggle word wrap

  3. 您可以使用 PUT /api/v1/organization/{orgname}/autoprunepolicy/{policy_uuid} 命令更新机构的自动修剪策略。例如:

    $ curl -X PUT   -H "Authorization: Bearer <bearer_token>"   -H "Content-Type: application/json"   -d '{
        "method": "creation_date",
        "value": "4d",
        "tagPattern": "^v*",
        "tagPatternMatches": true
      }'   "<quay-server.example.com>/api/v1/organization/<organization_name>/autoprunepolicy/<uuid>"
    Copy to Clipboard Toggle word wrap

    此命令不返回输出。继续下一步。

  4. 输入以下命令检查自动修剪策略:

    $ curl -X GET -H "Authorization: Bearer <access_token>" http://<quay-server.example.com>/api/v1/organization/<organization_name>/autoprunepolicy/
    Copy to Clipboard Toggle word wrap

    输出示例

    {"policies": [{"uuid": "ebf7448b-93c3-4f14-bf2f-25aa6857c7b0", "method": "creation_date", "value": "4d", "tagPattern": "^v*", "tagPatternMatches": true}, {"uuid": "da4d0ad7-3c2d-4be8-af63-9c51f9a501bc", "method": "number_of_tags", "value": 10, "tagPattern": null, "tagPatternMatches": true}, {"uuid": "17b9fd96-1537-4462-a830-7f53b43f94c2", "method": "creation_date", "value": "7d", "tagPattern": "^v*", "tagPatternMatches": true}]}
    Copy to Clipboard Toggle word wrap

  5. 您可以输入以下命令来删除您的机构的自动修剪策略。请注意,删除策略需要 UUID。

    $ curl -X DELETE -H "Authorization: Bearer <access_token>" http://<quay-server.example.com>/api/v1/organization/<organization_name>/autoprunepolicy/73d64f05-d587-42d9-af6d-e726a4a80d6e
    Copy to Clipboard Toggle word wrap

您可以使用 Red Hat Quay API 端点来管理您的帐户自动运行策略。

注意

以下命令中使用 /user/ 代表当前登录到 Red Hat Quay 的用户。

先决条件

  • 您已创建了 OAuth 访问令牌。
  • 已登陆到 Red Hat Quay。

流程

  1. 输入以下 POST 命令创建一个新策略,该策略限制了当前用户的标签数:

    $ curl -X POST -H "Authorization: Bearer <access_token>" -H "Content-Type: application/json" -d '{"method": "number_of_tags", "value": 10}' http://<quay-server.example.com>/api/v1/user/autoprunepolicy/
    Copy to Clipboard Toggle word wrap

    输出示例

    {"uuid": "8c03f995-ca6f-4928-b98d-d75ed8c14859"}
    Copy to Clipboard Toggle word wrap

  2. 输入以下命令检查自动修剪策略:

    $ curl -X GET -H "Authorization: Bearer <access_token>" http://<quay-server.example.com>/api/v1/user/autoprunepolicy/
    Copy to Clipboard Toggle word wrap

    或者,您可以包含 UUID:

    $ curl -X GET -H "Authorization: Bearer <access_token>" http://<quay-server.example.com>/api/v1/user/autoprunepolicy/8c03f995-ca6f-4928-b98d-d75ed8c14859
    Copy to Clipboard Toggle word wrap

    输出示例

    {"policies": [{"uuid": "8c03f995-ca6f-4928-b98d-d75ed8c14859", "method": "number_of_tags", "value": 10}]}
    Copy to Clipboard Toggle word wrap

  3. 您可以输入以下命令来删除自动修剪策略。请注意,删除策略需要 UUID。

    $ curl -X DELETE -H "Authorization: Bearer <access_token>" http://<quay-server.example.com>/api/v1/user/autoprunepolicy/8c03f995-ca6f-4928-b98d-d75ed8c14859
    Copy to Clipboard Toggle word wrap

    输出示例

    {"uuid": "8c03f995-ca6f-4928-b98d-d75ed8c14859"}
    Copy to Clipboard Toggle word wrap

您可以使用 Red Hat Quay API 端点来管理存储库自动运行策略。

先决条件

  • 您已创建了 OAuth 访问令牌。
  • 已登陆到 Red Hat Quay。

流程

  1. 输入以下 POST /api/v1/repository/{repository}/autoprunepolicy/ 命令,创建一个新策略来限制机构中允许的标签数:

    $ curl -X POST -H "Authorization: Bearer <access_token>" -H "Content-Type: application/json" -d '{"method": "number_of_tags","value": 2}' http://<quay-server.example.com>/api/v1/repository/<organization_name>/<repository_name>/autoprunepolicy/
    Copy to Clipboard Toggle word wrap

    另外,您可以在创建日期后将标签设置为在指定时间过期:

    $ curl -X POST -H "Authorization: Bearer <access_token>" -H "Content-Type: application/json" -d '{"method": "creation_date", "value": "7d"}' http://<quay-server.example.com>/api/v1/repository/<organization_name>/<repository_name>/autoprunepolicy/
    Copy to Clipboard Toggle word wrap

    输出示例

    {"uuid": "ce2bdcc0-ced2-4a1a-ac36-78a9c1bed8c7"}
    Copy to Clipboard Toggle word wrap

  2. 可选。您可以添加额外的策略,并在 tagPatterntagPatternMatches 字段中传递,以仅修剪与给定 regex 模式匹配的标签。例如:

    $ curl -X POST \
      -H "Authorization: Bearer <access_token>" \
      -H "Content-Type: application/json" \
      -d '{
        "method": "<creation_date>",
        "value": "<7d>",
        "tagPattern": "<^test.>*",
        "tagPatternMatches": <false> 
    1
    
      }' \
      "https://<quay-server.example.com>/api/v1/repository/<organization_name>/<repository_name>/autoprunepolicy/"
    Copy to Clipboard Toggle word wrap
    1
    tagPatternMatches 设置为 False 会导致所有与给定正则表达式模式匹配的标签都会被修剪。在本例中,除 ^test 以外的所有 标签都会被修剪。

    输出示例

    {"uuid": "b53d8d3f-2e73-40e7-96ff-736d372cd5ef"}
    Copy to Clipboard Toggle word wrap

  3. 您可以使用 PUT /api/v1/repository/{repository}/autoprunepolicy/{policy_uuid} 命令为存储库更新您的策略,并传递 UUID。例如:

    $ curl -X PUT \
      -H "Authorization: Bearer <bearer_token>" \
      -H "Content-Type: application/json" \
      -d '{
        "method": "number_of_tags",
        "value": "5",
        "tagPattern": "^test.*",
        "tagPatternMatches": true
      }' \
      "https://quay-server.example.com/api/v1/repository/<namespace>/<repo_name>/autoprunepolicy/<uuid>"
    Copy to Clipboard Toggle word wrap

    此命令不返回输出。继续下一步,以检查您的自动修剪策略。

  4. 输入以下命令检查自动修剪策略:

    $ curl -X GET -H "Authorization: Bearer <access_token>" http://<quay-server.example.com>/api/v1/repository/<organization_name>/<repository_name>/autoprunepolicy/
    Copy to Clipboard Toggle word wrap

    或者,您可以包含 UUID:

    $ curl -X GET -H "Authorization: Bearer <access_token>" http://<quay-server.example.com>/api/v1/repository/<organization_name>/<repository_name>/autoprunepolicy/ce2bdcc0-ced2-4a1a-ac36-78a9c1bed8c7
    Copy to Clipboard Toggle word wrap

    输出示例

    {"policies": [{"uuid": "ce2bdcc0-ced2-4a1a-ac36-78a9c1bed8c7", "method": "number_of_tags", "value": 10}]}
    Copy to Clipboard Toggle word wrap

  5. 您可以输入以下命令来删除自动修剪策略。请注意,删除策略需要 UUID。

    $ curl -X DELETE -H "Authorization: Bearer <access_token>" http://<quay-server.example.com>/api/v1/repository/<organization_name>/<repository_name>/autoprunepolicy/ce2bdcc0-ced2-4a1a-ac36-78a9c1bed8c7
    Copy to Clipboard Toggle word wrap

    输出示例

    {"uuid": "ce2bdcc0-ced2-4a1a-ac36-78a9c1bed8c7"}
    Copy to Clipboard Toggle word wrap

您可以使用 Red Hat Quay API 端点为不属于您的用户帐户管理存储库上的自动运行策略,只要存储库上具有 admin 权限。

先决条件

  • 您已创建了 OAuth 访问令牌。
  • 已登陆到 Red Hat Quay。
  • 在您要为其创建策略的存储库上具有 admin 权限。

流程

  1. 输入以下 POST /api/v1/repository/<user_account>/<user_repository>/autoprunepolicy/ 命令,创建一个新策略来限制用户的标签数:

    $ curl -X POST -H "Authorization: Bearer <access_token>" -H "Content-Type: application/json" -d '{"method": "number_of_tags","value": 2}' https://<quay-server.example.com>/api/v1/repository/<user_account>/<user_repository>/autoprunepolicy/
    Copy to Clipboard Toggle word wrap

    输出示例

    {"uuid": "7726f79c-cbc7-490e-98dd-becdc6fefce7"}
    Copy to Clipboard Toggle word wrap

  2. 可选。您可以为当前用户添加额外的策略,并传递 tagPatterntagPatternMatches 字段,以仅修剪与给定 regex 模式匹配的标签。例如:

    $ curl -X POST \
      -H "Authorization: Bearer <bearer_token>" \
      -H "Content-Type: application/json" \
      -d '{
        "method": "creation_date",
        "value": "7d",
        "tagPattern": "^v*",
        "tagPatternMatches": true
      }' \
      "http://<quay-server.example.com>/api/v1/repository/<user_account>/<user_repository>/autoprunepolicy/"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"uuid": "b3797bcd-de72-4b71-9b1e-726dabc971be"}
    Copy to Clipboard Toggle word wrap

  3. 您可以使用 PUT /api/v1/repository/<user_account>/<user_repository>/autoprunepolicy/<policy_uuid&gt; 命令为当前用户更新您的策略。例如:

    $ curl -X PUT   -H "Authorization: Bearer <bearer_token>"   -H "Content-Type: application/json"   -d '{
        "method": "creation_date",
        "value": "4d",
        "tagPattern": "^test.",
        "tagPatternMatches": true
      }'   "https://<quay-server.example.com>/api/v1/repository/<user_account>/<user_repository>/autoprunepolicy/<policy_uuid>"
    Copy to Clipboard Toggle word wrap

    更新策略不会在 CLI 中返回输出。

  4. 输入以下命令检查自动修剪策略:

    $ curl -X GET -H "Authorization: Bearer <access_token>" http://<quay-server.example.com>/api/v1/repository/<user_account>/<user_repository>/autoprunepolicy/
    Copy to Clipboard Toggle word wrap

    或者,您可以包含 UUID:

    $ curl -X GET -H "Authorization: Bearer <access_token>" http://<quay-server.example.com>/api/v1/repository/<user_account>/<user_repository>/autoprunepolicy/7726f79c-cbc7-490e-98dd-becdc6fefce7
    Copy to Clipboard Toggle word wrap

    输出示例

    {"uuid": "81ee77ec-496a-4a0a-9241-eca49437d15b", "method": "creation_date", "value": "7d", "tagPattern": "^v*", "tagPatternMatches": true}
    Copy to Clipboard Toggle word wrap

  5. 您可以输入以下命令来删除自动修剪策略。请注意,删除策略需要 UUID。

    $ curl -X DELETE -H "Authorization: Bearer <access_token>" http://<quay-server.example.com>/api/v1/repository/<user_account>/<user_repository>/autoprunepolicy/<policy_uuid>
    Copy to Clipboard Toggle word wrap

    输出示例

    {"uuid": "7726f79c-cbc7-490e-98dd-becdc6fefce7"}
    Copy to Clipboard Toggle word wrap

6.13. 使用 Red Hat Quay API 创建和配置软件仓库

可以使用 Red Hat Quay API 创建、检索、修改和删除存储库。

6.13.1. 使用 Red Hat Quay API 创建和配置软件仓库

可以使用 Red Hat Quay API 创建、检索、修改和删除存储库。

流程

  1. 输入以下命令使用 POST /api/v1/repository 端点创建存储库:

    $ curl -X POST \
      -H "Authorization: Bearer <bearer_token>" \
      -H "Content-Type: application/json" \
      -d '{
        "repository": "<new_repository_name>",
        "visibility": "<private>",
        "description": "<This is a description of the new repository>."
      }' \
      "https://quay-server.example.com/api/v1/repository"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"namespace": "quayadmin", "name": "<new_repository_name>", "kind": "image"}
    Copy to Clipboard Toggle word wrap

  2. 您可以使用 GET /api/v1/repository 端点列出存储库。例如:

    $ curl -X GET \
      -H "Authorization: Bearer <ACCESS_TOKEN>" \
      "https://quay-server.example.com/api/v1/repository?public=true&starred=false&namespace=<NAMESPACE>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"repositories": [{"namespace": "quayadmin", "name": "busybox", "description": null, "is_public": false, "kind": "image", "state": "MIRROR", "is_starred": false, "quota_report": {"quota_bytes": 2280675, "configured_quota": 2199023255552}}]}
    Copy to Clipboard Toggle word wrap

  3. 通过 POST /api/v1/repository/{repository}/changevisibility 端点,可以将可见性从公共改为私有:

    $ curl -X POST \
      -H "Authorization: Bearer <ACCESS_TOKEN>" \
      -H "Content-Type: application/json" \
      -d '{
            "visibility": "private"
          }' \
      "https://quay-server.example.com/api/v1/repository/<NAMESPACE>/<REPO_NAME>/changevisibility"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"success": true}
    Copy to Clipboard Toggle word wrap

  4. 您可以检查 Red Hat Quay UI,或者您可以输入以下 GET /api/v1/repository/{repository} 命令来返回有关存储库的详情:

    $ curl -X GET -H "Authorization: Bearer <bearer_token>" "<quay-server.example.com>/api/v1/repository/<namespace>/<repository_name>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"detail": "Not Found", "error_message": "Not Found", "error_type": "not_found", "title": "not_found", "type": "http://quay-server.example.com/api/v1/error/not_found", "status": 404}
    Copy to Clipboard Toggle word wrap
  5. 存储库描述可以使用 PUT /api/v1/repository/{repository} 端点更新:

    $ curl -X PUT \
      -H "Authorization: Bearer <bearer_token>" \
      -H "Content-Type: application/json" \
      -d '{
            "description": "This is an updated description for the repository."
          }' \
      "https://quay-server.example.com/api/v1/repository/<NAMESPACE>/<REPOSITORY>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"success": true}
    Copy to Clipboard Toggle word wrap

  6. 输入以下命令使用 DELETE /api/v1/repository/{repository} 端点删除存储库:

    $ curl -X DELETE   -H "Authorization: Bearer <bearer_token>" "<quay-server.example.com>/api/v1/repository/<namespace>/<repository_name>"
    Copy to Clipboard Toggle word wrap

    此命令不会在 CLI 中返回输出。

6.13.2. 使用 API 创建通知

使用以下步骤添加通知。

先决条件

  • 您已创建了软件仓库。
  • 有存储库的管理特权。
  • 您已创建了 OAuth 访问令牌

流程

  1. 输入以下 POST /api/v1/repository/{repository}/notification 命令在存储库上创建通知:

    $ curl -X POST \
      -H "Authorization: Bearer <bearer_token>" \
      -H "Content-Type: application/json" \
      --data '{
        "event": "<event>",
        "method": "<method>",
        "config": {
          "<config_key>": "<config_value>"
        },
        "eventConfig": {
          "<eventConfig_key>": "<eventConfig_value>"
        }
      }' \
      https://<quay-server.example.com>/api/v1/repository/<namespace>/<repository_name>/notification/
    Copy to Clipboard Toggle word wrap

    此命令不会在 CLI 中返回输出。相反,您可以输入以下 GET /api/v1/repository/{repository}/notification/{uuid} 命令来获取有关存储库通知的信息:

    {"uuid": "240662ea-597b-499d-98bb-2b57e73408d6", "title": null, "event": "repo_push", "method": "quay_notification", "config": {"target": {"name": "quayadmin", "kind": "user", "is_robot": false, "avatar": {"name": "quayadmin", "hash": "b28d563a6dc76b4431fc7b0524bbff6b810387dac86d9303874871839859c7cc", "color": "#17becf", "kind": "user"}}}, "event_config": {}, "number_of_failures": 0}
    Copy to Clipboard Toggle word wrap
  2. 您可以通过输入以下 POST /api/v1/repository/{repository}/notification/{uuid}/test 命令来测试存储库通知:

    $ curl -X POST \
      -H "Authorization: Bearer <bearer_token>" \
      https://<quay-server.example.com>/api/v1/repository/<repository>/notification/<uuid>/test
    Copy to Clipboard Toggle word wrap

    输出示例

    {}
    Copy to Clipboard Toggle word wrap

  3. 您可以通过输入以下 POST /api/v1/repository/{repository}/notification/{uuid} 命令重置存储库通知失败:

    $ curl -X POST \
      -H "Authorization: Bearer <bearer_token>" \
      https://<quay-server.example.com>/api/v1/repository/<repository>/notification/<uuid>
    Copy to Clipboard Toggle word wrap
  4. 输入以下 DELETE /api/v1/repository/{repository}/notification/{uuid} 命令来删除存储库通知:

    $ curl -X DELETE \
      -H "Authorization: Bearer <bearer_token>" \
      https://<quay-server.example.com>/api/v1/repository/<namespace>/<repository_name>/notification/<uuid>
    Copy to Clipboard Toggle word wrap

    此命令不会在 CLI 中返回输出。相反,您可以输入以下 GET /api/v1/repository/{repository}/notification/ 命令来检索所有通知的列表:

    $ curl -X GET  -H "Authorization: Bearer <bearer_token>"   -H "Accept: application/json"  https://<quay-server.example.com>/api/v1/repository/<namespace>/<repository_name>/notification
    Copy to Clipboard Toggle word wrap

    输出示例

    {"notifications": []}
    Copy to Clipboard Toggle word wrap

可以使用 Red Hat Quay API 为机构和用户创建、检索、更改和删除机器人帐户。

6.14.1. 使用 Red Hat Quay API 创建机器人帐户

使用以下步骤使用 Red Hat Quay API 创建机器人帐户。

先决条件

流程

  • 输入以下命令,使用 PUT /api/v1/organization/{orgname}/robots/{robot_shortname} 端点为机构创建新的机器人帐户:

    $ curl -X PUT   -H "Authorization: Bearer <bearer_token>" "https://<quay-server.example.com>/api/v1/organization/<organization_name>/robots/<robot_name>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"name": "orgname+robot-name", "created": "Fri, 10 May 2024 15:11:00 -0000", "last_accessed": null, "description": "", "token": "<example_secret>", "unstructured_metadata": null}
    Copy to Clipboard Toggle word wrap
  • 输入以下命令为当前用户创建一个新的机器人帐户,其 PUT /api/v1/user/robots/{robot_shortname} 端点:

    $ curl -X PUT   -H "Authorization: Bearer <bearer_token>" "https://<quay-server.example.com>/api/v1/user/robots/<robot_name>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"name": "quayadmin+robot-name", "created": "Fri, 10 May 2024 15:24:57 -0000", "last_accessed": null, "description": "", "token": "<example_secret>", "unstructured_metadata": null}
    Copy to Clipboard Toggle word wrap

6.14.2. 使用 Red Hat Quay API 获取机器人帐户信息

可以使用 Red Hat Quay API 为组织和用户获取机器人帐户信息,如权限。

先决条件

流程

  • 使用 GET /api/v1/organization/{orgname}/robots/{robot_shortname} API 端点返回机构机器人的信息:

    curl -X GET \
      -H "Authorization: Bearer <bearer_token>" \
      "https://quay-server.example.com/api/v1/organization/<ORGNAME>/robots/<ROBOT_SHORTNAME>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"name": "test+example", "created": "Mon, 25 Nov 2024 16:25:16 -0000", "last_accessed": null, "description": "", "token": "string", "unstructured_metadata": {}}
    Copy to Clipboard Toggle word wrap

  • 使用 GET /api/v1/organization/{orgname}/robots/{robot_shortname}/permissions 端点返回特定机构机器人的权限列表:

    $ curl -X GET \
      -H "Authorization: Bearer <bearer_token>" \
      "https://quay-server.example.com/api/v1/organization/<ORGNAME>/robots/<ROBOT_SHORTNAME>/permissions"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"permissions": [{"repository": {"name": "testrepo", "is_public": true}, "role": "admin"}]}
    Copy to Clipboard Toggle word wrap

  • 使用 GET /api/v1/user/robots/{robot_shortname} API 端点返回具有指定名称的机器人:

    $ curl -X GET \
      -H "Authorization: Bearer <bearer_token>" \
      "https://quay-server.example.com/api/v1/user/robots/<ROBOT_SHORTNAME>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"name": "quayadmin+mirror_robot", "created": "Wed, 15 Jan 2025 17:22:09 -0000", "last_accessed": null, "description": "", "token": "<token_example>", "unstructured_metadata": {}}
    Copy to Clipboard Toggle word wrap

  • 使用 GET /api/v1/user/robots/{robot_shortname}/permissions API 端点返回用户机器人的权限列表:

    $ curl -X GET \
      -H "Authorization: Bearer <bearer_token>" \
      "https://quay-server.example.com/api/v1/user/robots/<ROBOT_SHORTNAME>/permissions"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"permissions": [{"repository": {"name": "busybox", "is_public": false}, "role": "write"}]}
    Copy to Clipboard Toggle word wrap

6.14.3. 使用 Red Hat Quay API 删除机器人帐户

使用以下步骤使用 Red Hat Quay API 删除机器人帐户。

先决条件

流程

  1. 输入以下命令,使用 DELETE /api/v1/organization/{orgname}/robots/{robot_shortname} 端点删除机构的机器人帐户:

    curl -X DELETE \
      -H "Authorization: Bearer <bearer_token>" \
      "<quay-server.example.com>/api/v1/organization/<organization_name>/robots/<robot_shortname>"
    Copy to Clipboard Toggle word wrap
  2. 在使用 API 删除机器人帐户时,CLI 不会返回信息。要确认删除操作,您可以检查 Red Hat Quay UI,或者您可以输入以下 GET /api/v1/organization/{orgname}/robots 命令,以查看是否为机器人帐户返回详情:

    $ curl -X GET   -H "Authorization: Bearer <bearer_token>"   "https://<quay-server.example.com>/api/v1/organization/<organization_name>/robots"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"robots": []}
    Copy to Clipboard Toggle word wrap
  3. 输入以下命令,使用 DELETE /api/v1/user/robots/{robot_shortname} 端点删除当前用户的机器人帐户:

    $ curl -X DELETE \
      -H "Authorization: Bearer <bearer_token>" \
      "<quay-server.example.com>/api/v1/user/robots/<robot_shortname>"
    Copy to Clipboard Toggle word wrap
  4. 在使用 API 删除当前用户的机器人帐户时,CLI 不会返回信息。要确认删除操作,您可以检查 Red Hat Quay UI,或者您可以输入以下 GET /api/v1/user/robots/{robot_shortname} 命令,以查看是否为机器人帐户返回详情:

    $ curl -X GET \
      -H "Authorization: Bearer <bearer_token>" \
      "<quay-server.example.com>/api/v1/user/robots/<robot_shortname>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"message":"Could not find robot with specified username"}
    Copy to Clipboard Toggle word wrap

6.15. 根据 registry 上下文搜索

您可以使用 搜索 API 端点对所有 registry 上下文执行搜索。

流程

  • 使用 GET /api/v1/find/repositories 端点获取与指定查询匹配的应用程序和存储库列表:

    $ curl -X GET "https://quay-server.example.com/api/v1/find/repositories?query=<repo_name>&page=1&includeUsage=true" \
      -H "Authorization: Bearer <bearer_token>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"results": [], "has_additional": false, "page": 2, "page_size": 10, "start_index": 10}
    Copy to Clipboard Toggle word wrap

  • 使用 GET /api/v1/find/all 端点获取与指定查询匹配的实体和资源列表:

    $ curl -X GET "https://quay-server.example.com/api/v1/find/all?query=<mysearchterm>" \
      -H "Authorization: Bearer <bearer_token>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"results": [{"kind": "repository", "title": "repo", "namespace": {"title": "user", "kind": "user", "avatar": {"name": "quayadmin", "hash": "6d640d802fe23b93779b987c187a4b7a4d8fbcbd4febe7009bdff58d84498fba", "color": "#f7b6d2", "kind": "user"}, "name": "quayadmin", "score": 1, "href": "/user/quayadmin"}, "name": "busybox", "description": null, "is_public": false, "score": 4.0, "href": "/repository/quayadmin/busybox"}]}
    Copy to Clipboard Toggle word wrap

  • 使用 GET /api/v1/entities/{prefix} 端点获取与指定前缀匹配的实体列表。

    $ curl -X GET "https://quay-server.example.com/api/v1/entities/<prefix>?includeOrgs=<true_or_false>&includeTeams=<true_or_false>&namespace=<namespace>" \
      -H "Authorization: Bearer <bearer_token>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"results": [{"name": "quayadmin", "kind": "user", "is_robot": false, "avatar": {"name": "quayadmin", "hash": "6d640d802fe23b93779b987c187a4b7a4d8fbcbd4febe7009bdff58d84498fba", "color": "#f7b6d2", "kind": "user"}}]}
    Copy to Clipboard Toggle word wrap

6.16. 使用 API 查看 Clair 安全扫描

您可以使用 API 查看 Clair 安全扫描。

流程

  • 使用 GET /api/v1/repository/{repository}/manifest/{manifestref}/security 端点来检索有关存储库中特定清单的安全信息。例如:

    $ curl -X GET \
      -H "Authorization: Bearer <bearer_token>" \
      -H "Accept: application/json" \
      "https://quay-server.example.com/api/v1/repository/<namespace>/<repository>/manifest/<manifest_digest>/security?vulnerabilities=<true_or_false>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"status": "queued", "data": null}
    Copy to Clipboard Toggle word wrap

6.17. 使用 Red Hat Quay API 以超级用户管理部署

通过 Red Hat Quay UI,超级用户能够创建、列出、更改和删除 registry 的各个方面,如用户、服务密钥、用户配额等。

6.17.1. 使用 Red Hat Quay API 创建用户帐户

使用 API 为您的 Red Hat Quay 存储库创建新用户。

先决条件

  • 以超级用户身份登录 Red Hat Quay 部署。
  • 您已创建了 OAuth 访问令牌

流程

  1. 输入以下命令使用 POST /api/v1/superuser/users/ 端点来创建新用户:

    $ curl -X POST -H "Authorization: Bearer <bearer_token>" -H "Content-Type: application/json" -d '{
      "username": "newuser",
      "email": "newuser@example.com"
    }' "https://<quay-server.example.com>/api/v1/superuser/users/"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"username": "newuser", "email": "newuser@example.com", "password": "123456789", "encrypted_password": "<example_encrypted_password>/JKY9pnDcsw="}
    Copy to Clipboard Toggle word wrap
  2. 导航到您的 Red Hat Quay registry 端点,如 quay-server.example.com,并使用从 API 调用生成的用户名和密码登录。在这种情况下,用户名是 newuser,密码则为 123456789。或者,您可以使用 CLI 登录 registry。例如:

    $ podman login <quay-server.example.com>
    Copy to Clipboard Toggle word wrap

    输出示例

    username: newuser
    password: 123456789
    Copy to Clipboard Toggle word wrap

  3. 可选。您可以使用 GET /api/v1/superuser/users/ 端点获取所有用户(包括超级用户)的列表:

    $ curl -X GET -H "Authorization: Bearer <bearer_token>" "https://<quay-server.example.com>/api/v1/superuser/users/"
    Copy to Clipboard Toggle word wrap
    注意

    如果 config.yaml 文件中设置了 AUTHENTICATION_TYPE: DatabaseGET /api/v1/superuser/users/ 端点才会返回用户和超级用户。它不适用于 LDAP 身份验证类型。

    输出示例

    {"users": [{"kind": "user", "name": "quayadmin", "username": "quayadmin", "email": "quay@quay.com", "verified": true, "avatar": {"name": "quayadmin", "hash": "b28d563a6dc76b4431fc7b0524bbff6b810387dac86d9303874871839859c7cc", "color": "#17becf", "kind": "user"}, "super_user": true, "enabled": true}, {"kind": "user", "name": "newuser", "username": "newuser", "email": "newuser@example.com", "verified": true, "avatar": {"name": "newuser", "hash": "f338a2c83bfdde84abe2d3348994d70c34185a234cfbf32f9e323e3578e7e771", "color": "#9edae5", "kind": "user"}, "super_user": false, "enabled": true}]}
    Copy to Clipboard Toggle word wrap

6.17.2. 使用 Red Hat Quay API 删除用户

使用以下步骤使用 API 从 Red Hat Quay 中删除用户。

重要

删除用户后,此用户位于其专用帐户中的任何存储库都不可用。

先决条件

  • 以超级用户身份登录 Red Hat Quay 部署。
  • 您已创建了 OAuth 访问令牌

流程

  1. 输入以下 DELETE /api/v1/superuser/users/{username} 命令,以从命令行删除用户:

    $ curl -X DELETE -H "Authorization: Bearer <insert token here>" https://<quay-server.example.com>/api/v1/superuser/users/<username>
    Copy to Clipboard Toggle word wrap
  2. 从 CLI 删除用户时,CLI 不会返回信息。要确认删除操作,您可以通过进入到 Superuser Admin PanelUsers 或输入以下 GET /api/v1/superuser/users/ 命令来检查 Red Hat Quay UI。然后您可以检查是否存在它们。

    注意

    如果 config.yaml 文件中设置了 AUTHENTICATION_TYPE: DatabaseGET /api/v1/superuser/users/ 端点才会返回用户和超级用户。它不适用于 LDAP 身份验证类型。

    $ curl -X GET -H "Authorization: Bearer <bearer_token>" "https://<quay-server.example.com>/api/v1/superuser/users/"
    Copy to Clipboard Toggle word wrap

6.17.3. 使用 Red Hat Quay API 以超级用户管理机构

超级用户可以使用 Red Hat Quay API 列出、更改和删除机构。

流程

  • 使用 GET /api/v1/superuser/organizations 端点列出所有机构:

    $ curl -L -X GET \
      -H "Authorization: Bearer <bearer_token>" \
      "https://<quay_server>/api/v1/superuser/organizations?name=<organization_name>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"organizations": [{"name": "fed_test", "email": "fe11fc59-bd09-459a-a21c-b57692d151c9", "avatar": {"name": "fed_test", "hash": "e2ce1fb42ec2e0602362beb64b5ebd1e6ad291b710a0355f9296c16157bef3cb", "color": "#ff7f0e", "kind": "org"}, "quotas": [{"id": 3, "limit_bytes": 10737418240, "limits": []}], "quota_report": {"quota_bytes": 0, "configured_quota": 10737418240, "running_backfill": "complete", "backfill_status": "complete"}}, {"name": "test", "email": "new-contact@test-org.com", "avatar": {"name": "test", "hash": "a15d479002b20f211568fd4419e76686d2b88a4980a5b4c4bc10420776c5f6fe", "color": "#aec7e8", "kind": "org"}, "quotas": [{"id": 2, "limit_bytes": 10737418240, "limits": [{"id": 1, "type": "Reject", "limit_percent": 90}]}], "quota_report": {"quota_bytes": 0, "configured_quota": 10737418240, "running_backfill": "complete", "backfill_status": "complete"}}]}
    Copy to Clipboard Toggle word wrap

  • 使用 PUT /api/v1/superuser/organizations/{name} 端点更改或更新机构的信息:

    $ curl -X PUT \
      -H "Authorization: Bearer <bearer_token>" \
      -H "Content-Type: application/json" \
      -d '{
            "email": "<contact_email>",
            "invoice_email": <boolean_value>,
            "invoice_email_address": "<invoice_email_address>",
            "tag_expiration_s": <expiration_seconds>
          }' \
      "https://<quay_server>/api/v1/superuser/organizations/<organization_name>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"name": "test", "email": "new-contact@test-org.com", "avatar": {"name": "test", "hash": "a15d479002b20f211568fd4419e76686d2b88a4980a5b4c4bc10420776c5f6fe", "color": "#aec7e8", "kind": "org"}, "quotas": [{"id": 2, "limit_bytes": 10737418240, "limits": [{"id": 1, "type": "Reject", "limit_percent": 90}]}], "quota_report": {"quota_bytes": 0, "configured_quota": 10737418240, "running_backfill": "complete", "backfill_status": "complete"}}
    Copy to Clipboard Toggle word wrap

  • 使用 DELETE /api/v1/superuser/organizations/{name} 端点来删除和机构:

    $ curl -X DELETE \
      -H "Authorization: Bearer <bearer_token>" \
      "https://<quay_server>/api/v1/superuser/organizations/<organization_name>"
    Copy to Clipboard Toggle word wrap

    此命令不会在 CLI 中返回输出。

6.17.4. 使用 Red Hat Quay API 以超级用户列出日志

Red Hat Quay 超级用户可以列出当前系统的使用日志。

流程

  • 使用 GET /api/v1/superuser/logs 端点列出当前系统的使用情况日志:

    $ curl -X GET \
      -H "Authorization: Bearer <bearer_token>" \
      "https://<quay_server>/api/v1/superuser/logs?starttime=<start_time>&endtime=<end_time>&page=<page_number>&next_page=<next_page_token>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"start_time": "Mon, 17 Feb 2025 19:29:14 -0000", "end_time": "Wed, 19 Feb 2025 19:29:14 -0000", "logs": [{"kind": "login_success", "metadata": {"type": "quayauth", "useragent": "Mozilla/5.0 (X11; Linux x86_64; rv:134.0) Gecko/20100101 Firefox/134.0"}, "ip": "192.168.1.131", "datetime": "Tue, 18 Feb 2025 19:28:15 -0000", "namespace": {"kind": "user", "name": "quayadmin", "avatar": {"name": "quayadmin", "hash": "6d640d802fe23b93779b987c187a4b7a4d8fbcbd4febe7009bdff58d84498fba", "color": "#f7b6d2", "kind": "user"}}}], "next_page": "gAAAAABntN-KbPJDI0PpcHmWjRCmQTLiCprE_KXiOSidbGZ7Ireu8pVTgGUIstijNhmiLzlAv_S3HOsCrKWnuBmoQYZ3F53Uxg=="}
    Copy to Clipboard Toggle word wrap

  • 使用 GET /api/v1/superuser/registrysize/ 端点获取有关 registry 大小的信息:

    $ curl -X GET \
      -H "Authorization: Bearer <bearer_token>" \
      "https://<quay_server>/api/v1/superuser/registrysize/"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"size_bytes": 0, "last_ran": null, "running": false, "queued": false}
    Copy to Clipboard Toggle word wrap

  • 使用 POST /api/v1/superuser/registrysize/ 端点来定义 registry 大小信息:

    $ curl -X POST "https://quay-server.example.com/api/v1/superuser/registrysize/" \
      -H "Authorization: Bearer <ACCESS_TOKEN>" \
      -H "Content-Type: application/json" \
      -d '{
        "namespace": "<namespace>",
        "last_ran": 1700000000,
        "queued": true,
        "running": false
      }'
    Copy to Clipboard Toggle word wrap

    此命令不会在 CLI 中返回输出。

6.17.5. 使用 Red Hat Quay API 管理机构配额

配额可以使用具有超级用户 admin 权限的 Red Hat Quay API 进行管理。这些端点允许超级用户管理 registry 中所有机构的配额策略。

流程

  1. 使用 POST /api/v1/superuser/organization/{namespace}/quota API 端点为机构创建配额策略:

    $ curl -X POST "https://quay-server.example.com/api/v1/superuser/organization/<namespace>/quota" \
      -H "Authorization: Bearer <ACCESS_TOKEN>" \
      -H "Content-Type: application/json" \
      -d '{
        "limit_bytes": 10737418240
      }'
    Copy to Clipboard Toggle word wrap

    输出示例

    "Created"
    Copy to Clipboard Toggle word wrap

  2. 使用 GET /api/v1/superuser/organization/{namespace}/quota API 端点获取有关策略的信息,包括配额 ID:

    $ curl -X GET "https://quay-server.example.com/api/v1/superuser/organization/<namespace>/quota" \
      -H "Authorization: Bearer <ACCESS_TOKEN>"
    Copy to Clipboard Toggle word wrap

    输出示例

    [{"id": 2, "limit_bytes": 10737418240, "limit": "10.0 GiB", "default_config": false, "limits": [{"id": 1, "type": "Reject", "limit_percent": 90}], "default_config_exists": false}]
    Copy to Clipboard Toggle word wrap

  3. 使用 PUT /api/v1/superuser/organization/{namespace}/quota/{quota_id} API 端点更改配额策略:

    $ curl -X PUT "https://quay-server.example.com/api/v1/superuser/organization/<namespace>/quota/<quota_id>" \
      -H "Authorization: Bearer <ACCESS_TOKEN>" \
      -H "Content-Type: application/json" \
      -d '{
        "limit_bytes": <NEW_QUOTA_LIMIT>
      }'
    Copy to Clipboard Toggle word wrap

    输出示例

    {"id": 2, "limit_bytes": 10737418240, "limit": "10.0 GiB", "default_config": false, "limits": [{"id": 1, "type": "Reject", "limit_percent": 90}], "default_config_exists": false}
    Copy to Clipboard Toggle word wrap

  4. 使用 DELETE /api/v1/superuser/organization/{namespace}/quota/{quota_id} API 端点来

    $ curl -X DELETE "https://quay-server.example.com/api/v1/superuser/organization/<namespace>/quota/<quota_id>" \
      -H "Authorization: Bearer <ACCESS_TOKEN>"
    Copy to Clipboard Toggle word wrap

    此命令不会在 CLI 中返回输出。

6.17.6. 使用 Red Hat Quay API 管理用户配额

作为超级用户,您可以管理指定机构的用户配额。

流程

  1. 使用 POST /api/v1/superuser/users/{namespace}/quota 端点为机构中特定用户创建配额策略:

    $ curl -X POST "https://quay-server.example.com/api/v1/superuser/users/<username>/quota" \
      -H "Authorization: Bearer <ACCESS_TOKEN>" \
      -H "Content-Type: application/json" \
      -d '{
            "limit_bytes": <QUOTA_LIMIT>
          }'
    Copy to Clipboard Toggle word wrap

    输出示例

    "Created"
    Copy to Clipboard Toggle word wrap

  2. 使用 GET /api/v1/superuser/users/{namespace}/quota 端点返回用户分配的配额列表:

    $ curl -X GET "https://quay-server.example.com/api/v1/superuser/users/<username>/quota" \
      -H "Authorization: Bearer <ACCESS_TOKEN>"
    Copy to Clipboard Toggle word wrap

    输出示例

    [{"id": 6, "limit_bytes": 10737418240, "limit": "10.0 GiB", "default_config": false, "limits": [], "default_config_exists": false}]
    Copy to Clipboard Toggle word wrap

  3. 使用 PUT /api/v1/superuser/users/{namespace}/quota/{quota_id} 端点来调整用户的策略:

    $ curl -X PUT "https://quay-server.example.com/api/v1/superuser/users/<username>/quota/<quota_id>" \
      -H "Authorization: Bearer <ACCESS_TOKEN>" \
      -H "Content-Type: application/json" \
      -d '{
        "limit_bytes": <NEW_QUOTA_LIMIT>
      }'
    Copy to Clipboard Toggle word wrap

    输出示例

    {"id": 6, "limit_bytes": 10737418240, "limit": "10.0 GiB", "default_config": false, "limits": [], "default_config_exists": false}
    Copy to Clipboard Toggle word wrap

  4. 使用 DELETE /api/v1/superuser/users/{namespace}/quota/{quota_id} 端点删除用户的策略:

    $ curl -X DELETE "https://quay-server.example.com/api/v1/superuser/users/<username>/quota/<quota_id>" \
      -H "Authorization: Bearer <ACCESS_TOKEN>"
    Copy to Clipboard Toggle word wrap

    此命令不会在 CLI 中返回输出。

6.17.7. 使用 Red Hat Quay API 检索构建信息

作为超级用户,您可以使用 Red Hat Quay API 检索有关构建的信息。

流程

  1. 使用 GET /api/v1/superuser/{build_uuid}/build 端点返回有关构建的信息:

    $ curl -X GET "https://quay-server.example.com/api/v1/superuser/<build_uuid>/build" \
      -H "Authorization: Bearer <ACCESS_TOKEN>"
    Copy to Clipboard Toggle word wrap
  2. 使用 GET /api/v1/superuser/{build_uuid}/status API 端点返回由 build uuids 指定的构建的状态:

    $ curl -X GET "https://quay-server.example.com/api/v1/superuser/<build_uuid>/status" \
      -H "Authorization: Bearer <ACCESS_TOKEN>"
    Copy to Clipboard Toggle word wrap
  3. 使用 GET /api/v1/superuser/{build_uuid}/logs API 端点返回由 build uuid 指定的构建的构建日志:

    $ curl -X GET "https://quay-server.example.com/api/v1/superuser/<build_uuid>/logs" \
      -H "Authorization: Bearer <ACCESS_TOKEN>"
    Copy to Clipboard Toggle word wrap

超级用户可以使用 Red Hat Quay API 创建、列出、更改和删除服务密钥。

流程

  • 使用 POST /api/v1/superuser/keys 端点来创建服务密钥:

    $ curl -X POST \
      -H "Authorization: Bearer <bearer_token>" \
      -H "Content-Type: application/json" \
      -d '{
            "service": "<service_name>",
            "expiration": <unix_timestamp>
          }' \
      "<quay_server>/api/v1/superuser/keys"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"message":""}
    Copy to Clipboard Toggle word wrap

  • 使用 POST /api/v1/superuser/approvedkeys/{kid} 端点批准服务密钥:

    $ curl -X POST \
      -H "Authorization: Bearer <bearer_token>" \
      -H "Content-Type: application/json" \
      -d '{
            "notes": "<approval_notes>"
          }' \
      "https://<quay_server>/api/v1/superuser/approvedkeys/<kid>"
    Copy to Clipboard Toggle word wrap

    此命令不会在 CLI 中返回输出。

  • 使用 GET /api/v1/superuser/keys 端点列出服务密钥:

    $ curl -X GET \
      -H "Authorization: Bearer <bearer_token>" \
      "https://<quay_server>/api/v1/superuser/keys"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"keys":[{"approval":{"approval_type":"ServiceKeyApprovalType.AUTOMATIC","approved_date":"Mon, 20 Jan 2025 14:46:01 GMT","approver":null,"notes":""},"created_date":"Mon, 20 Jan 2025 14:46:01 GMT","expiration_date":"Wed, 05 Feb 2025 22:03:37 GMT","jwk":{"e":"AQAB","kid":"<example>","kty":"RSA","n":"<example>"},"kid":"7fr8soqXGgea8JqjwgItjjJT9GKlt-bMyMCDmvzy6WQ","metadata":{"created_by":"CLI tool"},"name":"http://quay-server.example.com:80","rotation_duration":null,"service":"quay"}]}
    Copy to Clipboard Toggle word wrap

  • 使用 GET /api/v1/superuser/keys/{kid} 端点,通过 kid 检索有关服务帐户的信息:

    $ curl -X GET \
      -H "Authorization: Bearer <bearer_token>" \
      "https://<quay_server>/api/v1/superuser/keys/<kid>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"approval":{"approval_type":"ServiceKeyApprovalType.AUTOMATIC","approved_date":"Mon, 20 Jan 2025 14:46:01 GMT","approver":null,"notes":""},"created_date":"Mon, 20 Jan 2025 14:46:01 GMT","expiration_date":"Wed, 05 Feb 2025 22:03:37 GMT","jwk":{"e":"AQAB","kid":"7fr8soqXGgea8JqjwgItjjJT9GKlt-bMyMCDmvzy6WQ","kty":"RSA","n":"5iMX7RQ_4F_zdb1qonMsuWUDauCOqEyRpD8L_EhgnwDxrgMHuOlJ4_7sEOrOa3Jkx3QhwIW6LJCP69PR5X0wvz6vmC1DoWEaWv41bAq23Knzj7gUU9-N_fkZPZN9NQwZ-D-Zqg9L1c_cJF93Dy93py8_JswWFDj1FxMaThJmrX68wBwjhF-JLYqgCAGFyezzJ3oTpO-esV9v6R7skfkaqtx_cjLZk_0cKB4VKTtxiy2A8D_5nANTOSSbZLXNh2Vatgh3yrOmnTTNLIs0YO3vFIuylEkczHlln-40UMAzRB3HNspUySyzImO_2yGdrA762LATQrOzJN8E1YKCADx5CQ"},"kid":"7fr8soqXGgea8JqjwgItjjJT9GKlt-bMyMCDmvzy6WQ","metadata":{"created_by":"CLI tool"},"name":"http://quay-server.example.com:80","rotation_duration":null,"service":"quay"}
    Copy to Clipboard Toggle word wrap

  • 使用 PUT /api/v1/superuser/keys/{kid} 端点来更新服务密钥,如元数据:

    $ curl -X PUT \
      -H "Authorization: Bearer <bearer_token>" \
      -H "Content-Type: application/json" \
      -d '{
            "name": "<service_key_name>",
            "metadata": {"<key>": "<value>"},
            "expiration": <unix_timestamp>
          }' \
      "https://<quay_server>/api/v1/superuser/keys/<kid>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"approval":{"approval_type":"ServiceKeyApprovalType.AUTOMATIC","approved_date":"Mon, 20 Jan 2025 14:46:01 GMT","approver":null,"notes":""},"created_date":"Mon, 20 Jan 2025 14:46:01 GMT","expiration_date":"Mon, 03 Mar 2025 10:40:00 GMT","jwk":{"e":"AQAB","kid":"7fr8soqXGgea8JqjwgItjjJT9GKlt-bMyMCDmvzy6WQ","kty":"RSA","n":"5iMX7RQ_4F_zdb1qonMsuWUDauCOqEyRpD8L_EhgnwDxrgMHuOlJ4_7sEOrOa3Jkx3QhwIW6LJCP69PR5X0wvz6vmC1DoWEaWv41bAq23Knzj7gUU9-N_fkZPZN9NQwZ-D-Zqg9L1c_cJF93Dy93py8_JswWFDj1FxMaThJmrX68wBwjhF-JLYqgCAGFyezzJ3oTpO-esV9v6R7skfkaqtx_cjLZk_0cKB4VKTtxiy2A8D_5nANTOSSbZLXNh2Vatgh3yrOmnTTNLIs0YO3vFIuylEkczHlln-40UMAzRB3HNspUySyzImO_2yGdrA762LATQrOzJN8E1YKCADx5CQ"},"kid":"7fr8soqXGgea8JqjwgItjjJT9GKlt-bMyMCDmvzy6WQ","metadata":{"created_by":"CLI tool","environment":"production"},"name":"quay-service-key-updated","rotation_duration":null,"service":"quay"}
    Copy to Clipboard Toggle word wrap

  • 使用 DELETE /api/v1/superuser/keys/{kid} 端点删除服务密钥:

    $ curl -X DELETE \
      -H "Authorization: Bearer <bearer_token>" \
      "https://<quay_server>/api/v1/superuser/keys/<kid>"
    Copy to Clipboard Toggle word wrap

    此命令不会在 CLI 中返回输出。

6.18. 使用 Red Hat Quay API 管理标签

可以使用 Red Hat Quay API 更改、恢复、删除或列出标签。

流程

  1. 使用 PUT /api/v1/repository/{repository}/tag/{tag} 端点更改标签指向或创建新标签:

    $ curl -X PUT "https://quay-server.example.com/api/v1/repository/<namespace>/<repo_name>/tag/<tag_name>" \
      -H "Authorization: Bearer <ACCESS_TOKEN>" \
      -H "Content-Type: application/json" \
      -d '{"manifest_digest": "<MANIFEST_DIGEST>"}'
    Copy to Clipboard Toggle word wrap

    输出示例

    "Updated"
    Copy to Clipboard Toggle word wrap

  2. 使用 POST /api/v1/repository/{repository}/tag/{tag}/restore 端点将存储库标签恢复到存储库中以前的镜像:

    $ curl -X POST "https://quay-server.example.com/api/v1/repository/<namespace>/<repo_name>/tag/<tag_name>/restore" \
      -H "Authorization: Bearer <your_access_token>" \
      -H "Content-Type: application/json" \
      -d '{"manifest_digest": "sha256:<your_manifest_digest>"}'
    Copy to Clipboard Toggle word wrap

    输出示例

    {}
    Copy to Clipboard Toggle word wrap

  3. 使用 GET /api/v1/repository/{repository}/tag/ 端点获取存储库标签列表:

    $ curl -X GET "https://quay-server.example.com/api/v1/repository/<namespace>/<repo_name>/tag/" \
      -H "Authorization: Bearer <your_access_token>" \
      -H "Content-Type: application/json"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"tags": [{"name": "test", "reversion": true, "start_ts": 1740496373, "manifest_digest": "sha256:d08334991a3dba62307016833083d6433f489ab0f7d36d0a4771a20b4569b2f6", "is_manifest_list": false, "size": 2280303, "last_modified": "Tue, 25 Feb 2025 15:12:53 -0000"}, {"name": "test", "reversion": false, "start_ts": 1740495442, "end_ts": 1740496373, "manifest_digest": "sha256:d08334991a3dba62307016833083d6433f489ab0f7d36d0a4771a20b4569b2f6", "is_manifest_list": false, "size": 2280303, "last_modified": "Tue, 25 Feb 2025 14:57:22 -0000", "expiration": "Tue, 25 Feb 2025 15:12:53 -0000"}, {"name": "test", "reversion": false, "start_ts": 1740495408, "end_ts": 1740495442, "manifest_digest": "sha256:d08334991a3dba62307016833083d6433f489ab0f7d36d0a4771a20b4569b2f6", "is_manifest_list": false, "size": 2280303, "last_modified": "Tue, 25 Feb 2025 14:56:48 -0000", "expiration": "Tue, 25 Feb 2025 14:57:22 -0000"}], "page": 1, "has_additional": false}
    Copy to Clipboard Toggle word wrap

  4. 使用 DELETE /api/v1/repository/{repository}/tag/{tag} 端点从存储库中删除标签:

    $ curl -X DELETE "https://quay-server.example.com/api/v1/repository/<namespace>/<repo_name>/tag/<tag_name>" \
      -H "Authorization: Bearer <your_access_token>"
    Copy to Clipboard Toggle word wrap

    此命令不会在 CLI 中返回输出。

6.19. 使用 API 管理团队

可以使用 Red Hat Quay API 管理团队。

6.19.1. 使用 API 管理团队成员和存储库权限

使用以下步骤将成员添加到团队(直接邀请或通过电子邮件),或者从团队中删除成员。

先决条件

流程

  • 输入 PUT /api/v1/organization/{orgname}/team/{teamname}/members/{membername} 命令,将成员添加到现有团队中:

    $ curl -X PUT \
      -H "Authorization: Bearer <your_access_token>" \
      "<quay-server.example.com>/api/v1/organization/<organization_name>/team/<team_name>/members/<member_name>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"name": "testuser", "kind": "user", "is_robot": false, "avatar": {"name": "testuser", "hash": "d51d17303dc3271ac3266fb332d7df919bab882bbfc7199d2017a4daac8979f0", "color": "#5254a3", "kind": "user"}, "invited": false}
    Copy to Clipboard Toggle word wrap

  • 输入 DELETE /api/v1/organization/{orgname}/team/{teamname}/members/{membername} 命令删除团队的成员:

    $ curl -X DELETE \
      -H "Authorization: Bearer <your_access_token>" \
      "<quay-server.example.com>/api/v1/organization/<organization_name>/team/<team_name>/members/<member_name>"
    Copy to Clipboard Toggle word wrap

    此命令不会在 CLI 中输出。为确保成员已被删除,您可以输入 GET /api/v1/organization/{orgname}/team/{teamname}/members 命令,并确保输出中不会返回成员。

    $ curl -X GET \
      -H "Authorization: Bearer <your_access_token>" \
      "<quay-server.example.com>/api/v1/organization/<organization_name>/team/<team_name>/members"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"name": "owners", "members": [{"name": "quayadmin", "kind": "user", "is_robot": false, "avatar": {"name": "quayadmin", "hash": "b28d563a6dc76b4431fc7b0524bbff6b810387dac86d9303874871839859c7cc", "color": "#17becf", "kind": "user"}, "invited": false}, {"name": "test-org+test", "kind": "user", "is_robot": true, "avatar": {"name": "test-org+test", "hash": "aa85264436fe9839e7160bf349100a9b71403a5e9ec684d5b5e9571f6c821370", "color": "#8c564b", "kind": "robot"}, "invited": false}], "can_edit": true}
    Copy to Clipboard Toggle word wrap

  • 您可以输入 PUT /api/v1/organization/{orgname}/team/{teamname}/invite/{email} 命令以通过电子邮件地址向现有团队邀请用户:

    $ curl -X PUT \
      -H "Authorization: Bearer <your_access_token>" \
      "<quay-server.example.com>/api/v1/organization/<organization_name>/team/<team_name>/invite/<email>"
    Copy to Clipboard Toggle word wrap
  • 您可以输入 DELETE /api/v1/organization/{orgname}/team/{teamname}/invite/{email} 命令来删除电子邮件地址邀请来加入团队。例如:

    $ curl -X DELETE \
      -H "Authorization: Bearer <your_access_token>" \
      "<quay-server.example.com>/api/v1/organization/<organization_name>/team/<team_name>/invite/<email>"
    Copy to Clipboard Toggle word wrap

6.19.2. 使用 API 设置机构中团队的角色

使用以下步骤使用 API 查看和设置团队。

先决条件

流程

  1. 输入以下 GET /api/v1/organization/{orgname}/team/{teamname}/permissions 命令,为机构的团队返回存储库权限列表。请注意,您的团队必须已添加到存储库中才能返回信息。

    $ curl -X GET \
      -H "Authorization: Bearer <your_access_token>" \
      "<quay-server.example.com>/api/v1/organization/<organization_name>/team/<team_name>/permissions"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"permissions": [{"repository": {"name": "api-repo", "is_public": true}, "role": "admin"}]}
    Copy to Clipboard Toggle word wrap

  2. 您可以使用 PUT /api/v1/organization/{orgname}/team/{teamname} 命令,在组织内创建或更新团队,使其具有 adminmembercreator 角色。例如:

    $ curl -X PUT \
      -H "Authorization: Bearer <your_access_token>" \
      -H "Content-Type: application/json" \
      -d '{
        "role": "<role>"
      }' \
      "<quay-server.example.com>/api/v1/organization/<organization_name>/team/<team_name>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"name": "testteam", "description": "", "can_view": true, "role": "creator", "avatar": {"name": "testteam", "hash": "827f8c5762148d7e85402495b126e0a18b9b168170416ed04b49aae551099dc8", "color": "#ff7f0e", "kind": "team"}, "new_team": false}
    Copy to Clipboard Toggle word wrap

6.19.3. 使用 API 删除机构中的团队

使用以下步骤使用 API 删除机构中的团队。

先决条件

流程

  • 您可以通过输入 DELETE /api/v1/organization/{orgname}/team/{teamname} 命令删除机构中的团队:

    $ curl -X DELETE \
      -H "Authorization: Bearer <your_access_token>" \
      "<quay-server.example.com>/api/v1/organization/<organization_name>/team/<team_name>"
    Copy to Clipboard Toggle word wrap

    此命令不会在 CLI 中返回输出。

6.20. 使用 Red Hat Quay API 管理构建

可使用 Red Hat Quay API 管理构建。

流程

  1. 使用 GET /api/v1/repository/{repository}/trigger/ 端点列出指定存储库的触发器:

    $ curl -X GET "https://quay-server.example.com/api/v1/repository/example_namespace/example_repo/trigger/" \
      -H "Authorization: Bearer <your_access_token>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"triggers": [{"id": "32ca5eae-a29f-46c7-8f44-3221ca417c92", "service": "custom-git", "is_active": false, "build_source": null, "repository_url": null, "config": {}, "can_invoke": true, "enabled": true, "disabled_reason": null}]}
    Copy to Clipboard Toggle word wrap

  2. 使用 POST /api/v1/repository/{repository}/trigger/{trigger_uuid}/activate 端点来激活指定的构建触发器。

    $ curl -X POST "https://quay-server.example.com/api/v1/repository/example_namespace/example_repo/trigger/example-trigger-uuid/activate" \
      -H "Authorization: Bearer <your_access_token>" \
      -H "Content-Type: application/json" \
      -d '{
        "config": {
          "branch": "main"
        },
        "pull_robot": "example+robot"
      }'
    Copy to Clipboard Toggle word wrap
  3. 使用 POST /api/v1/repository/{repository}/trigger/{trigger_uuid}/start 端点从指定的触发器手动启动构建:

    $ curl -X POST "https://quay-server.example.com/api/v1/repository/example_namespace/example_repo/trigger/example-trigger-uuid/start" \
      -H "Authorization: Bearer <your_access_token>" \
      -H "Content-Type: application/json" \
      -d '{
        "branch_name": "main",
        "commit_sha": "abcdef1234567890",
        "refs": "refs/heads/main"
      }'
    Copy to Clipboard Toggle word wrap
  4. 使用 GET /api/v1/repository/{repository}/trigger/{trigger_uuid}/builds 端点来列出由指定触发器启动的构建:

    $ curl -X GET "https://quay-server.example.com/api/v1/repository/example_namespace/example_repo/trigger/example-trigger-uuid/builds?limit=10" \
      -H "Authorization: Bearer <your_access_token>"
    Copy to Clipboard Toggle word wrap
  5. 使用 GET /api/v1/repository/{repository}/trigger/{trigger_uuid} 端点获取指定构建触发器的信息:

    $ curl -X GET "https://quay-server.example.com/api/v1/repository/example_namespace/example_repo/trigger/example-trigger-uuid" \
      -H "Authorization: Bearer <your_access_token>"
    Copy to Clipboard Toggle word wrap
  6. 使用 PUT /api/v1/repository/{repository}/trigger/{trigger_uuid} 端点更新指定的构建触发器:

    $ curl -X PUT "https://quay-server.example.com/api/v1/repository/example_namespace/example_repo/trigger/example-trigger-uuid" \
      -H "Authorization: Bearer <your_access_token>" \
      -H "Content-Type: application/json" \
      -d '{"enabled": true}'
    Copy to Clipboard Toggle word wrap
  7. 使用 DELETE /api/v1/repository/{repository}/trigger/{trigger_uuid} 端点删除指定的构建触发器:

    $ curl -X DELETE "https://quay-server.example.com/api/v1/repository/example_namespace/example_repo/trigger/example-trigger-uuid" \
      -H "Authorization: Bearer <your_access_token>"
    Copy to Clipboard Toggle word wrap

6.21. 使用 Red Hat Quay API 管理当前用户选项

Red Hat Quay API 提供了一些用户选项,如星级存储库或获取您的帐户信息。

流程

  1. 使用 GET /api/v1/user/ 端点获取经过身份验证的用户的用户信息。

    $ curl -X GET "https://quay-server.example.com/api/v1/user/" \
      -H "Authorization: Bearer <your_access_token>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"anonymous": false, "username": "quayadmin", "avatar": {"name": "quayadmin", "hash": "6d640d802fe23b93779b987c187a4b7a4d8fbcbd4febe7009bdff58d84498fba", "color": "#f7b6d2", "kind": "user"}, "can_create_repo": true, "is_me": true, "verified": true, "email": "test@gmil.com", "logins": [], "invoice_email": false, "invoice_email_address": null, "preferred_namespace": false, "tag_expiration_s": 1209600, "prompts": [], "company": null, "family_name": null, "given_name": null, "location": null, "is_free_account": true, "has_password_set": true, "quotas": [{"id": 4, "limit_bytes": 2199023255552, "limits": [{"id": 3, "type": "Reject", "limit_percent": 100}]}], "quota_report": {"quota_bytes": 2280675, "configured_quota": 2199023255552, "running_backfill": "complete", "backfill_status": "complete"}, "organizations": [{"name": "test", "avatar": {"name": "test", "hash": "a15d479002b20f211568fd4419e76686d2b88a4980a5b4c4bc10420776c5f6fe", "color": "#aec7e8", "kind": "org"}, "can_create_repo": true, "public": false, "is_org_admin": true, "preferred_namespace": false}, {"name": "sample", "avatar": {"name": "sample", "hash": "ba560c68f1d26e8c6b911ac9b5d10d513e7e43e576cc2baece1b8a46f36a29a5", "color": "#b5cf6b", "kind": "org"}, "can_create_repo": true, "public": false, "is_org_admin": true, "preferred_namespace": false}], "super_user": true}
    Copy to Clipboard Toggle word wrap

  2. 使用 GET /api/v1/users/{username} 端点获取指定用户的用户信息。

    $ curl -X GET "https://quay-server.example.com/api/v1/users/example_user" \
      -H "Authorization: Bearer <your_access_token>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"anonymous": false, "username": "testuser", "avatar": {"name": "testuser", "hash": "f660ab912ec121d1b1e928a0bb4bc61b15f5ad44d5efdc4e1c92a25e99b8e44a", "color": "#6b6ecf", "kind": "user"}, "super_user": false}
    Copy to Clipboard Toggle word wrap

  3. 使用 POST /api/v1/user/starred 端点来星级存储库:

    $ curl -X POST "https://quay-server.example.com/api/v1/user/starred" \
      -H "Authorization: Bearer <your_access_token>" \
      -H "Content-Type: application/json" \
      -d '{
            "namespace": "<namespace>",
            "repository": "<repository_name>"
          }'
    Copy to Clipboard Toggle word wrap

    输出示例

    {"namespace": "test", "repository": "testrepo"}
    Copy to Clipboard Toggle word wrap

  4. 使用 GET /api/v1/user/starred 端点列出所有 starred 存储库:

    $ curl -X GET "https://quay-server.example.com/api/v1/user/starred?next_page=<next_page_token>" \
      -H "Authorization: Bearer <your_access_token>"
    Copy to Clipboard Toggle word wrap

    输出示例

    {"repositories": [{"namespace": "test", "name": "testrepo", "description": "This repository is now under maintenance.", "is_public": true}]}
    Copy to Clipboard Toggle word wrap

  5. 使用 DELETE /api/v1/user/starred/{repository} 端点从存储库中删除星级:

    $ curl -X DELETE "https://quay-server.example.com/api/v1/user/starred/namespace/repository-name" \
      -H "Authorization: Bearer <your_access_token>"
    Copy to Clipboard Toggle word wrap

    此命令不会在 CLI 中返回输出。

法律通告

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat