第 15 章 管理软件包

您可以使用 Satellite 在主机上安装、升级和删除软件包。

15.1. 在主机上安装软件包

使用这个流程,使用 Satellite Web UI 查看并安装软件包。用于安装的软件包列表取决于分配给主机的内容视图和生命周期环境。

流程

  1. 在 Satellite Web UI 中,进入到 Hosts > All Hosts 并选择您要安装的软件包的主机。
  2. Content 选项卡中,选择 Packages 选项卡。
  3. 在升级按钮旁边的垂直 ellipsis 图标上,点 Install Packages
  4. Install packages 窗口中,选择要在主机上安装的软件包或软件包。
  5. Install

默认情况下,软件包使用远程执行安装。有关运行远程执行作业的更多信息,请参阅管理主机中的配置和设置远程作业

按照以下说明,以 JSON 格式创建 API 请求的正文。

API 流程

  1. 创建 "job_invocation" 对象,并将其余正文放在此对象内。
  2. 使用字符串类型的 "package" 字段创建 "inputs" 对象,指定您要安装的软件包。如果您要指定多个软件包,请使用空格分开它们。
  3. 为字符串类型创建一个 "feature" 字段,其值为 "katello_package_install "。
  4. 为字符串类型创建一个 "search_query" 字段,并输入与您要安装软件包的主机匹配的搜索查询。
  5. 可选:如果要以特定用户身份安装软件包,请使用字符串类型的以下字段创建一个 ssh 对象:

    • 使用 ssh 用户名称的 "effective_user"
    • 如果需要此密码,使用 ssh 用户的密码 "effective_user_password"
  6. 可选: 如果要稍后安装软件包,请创建 "scheduling" 对象。该对象可以包含 ISO 8601 格式的字符串类型中的一个或两个字段,包括日期、时间和时区:

    • "start_at"- 设置安装软件包的时间
    • "start_before" - 设置安装软件包的最新时间。如果此时无法安装软件包,则会取消这个操作。

    如果省略了时间,则默认为 00:00:00。如果省略了时区,则默认为 UTC。

  7. 可选: 如果要限制同时运行作业的主机数量,请使用整数类型的 "concurrency_level" 字段创建 "concurrency_control" 对象。将主机数量分配为字段值。
  8. 可选: 如果要稍后安装软件包,并且您希望在运行作业时评估主机搜索查询,请使用 "dynamic_query" 值创建字符串类型的 "targeting_type" 字段。如果您预期搜索查询的结果在运行作业时不同,因为主机状态改变,则这非常有用。如果省略此字段,则默认为 "static_query "。
  9. 使用创建的正文发送 POST 请求到 Satellite 服务器的 /api/job_invocations 端点,并使用 python 等工具来查看格式化的响应。

    API 请求示例:

    curl https://satellite.example.com/api/job_invocations \
    -H "content-type: application/json" \
    -X POST \
    -d @Path_To_My_API_Request_Body \
    -u My_Username:My_Password | python3 -m json.tool

验证

  • 在 Satellite Web UI 中,进入到 Monitor > Jobs 并查看调度或完成远程执行作业的报告,以便在所选主机上安装软件包。

API 请求正文示例

{
  "job_invocation" : {
    "concurrency_control" : {
      "concurrency_level" : 100
    },
    "feature" : "katello_package_install",
    "inputs" : {
      "package" : "nano vim"
    },
    "scheduling" : {
      "start_at" : "2023-09-21T19:00:00+00:00",
      "start_before" : "2023-09-23T00:00:00+00:00"
    },
    "search_query" : "*",
    "ssh" : {
      "effective_user" : "My_Username",
      "effective_user_password" : "My_Password"
    },
    "targeting_type" : "dynamic_query"
  }
}