管理主机

Red Hat Satellite 6.9

在 Red Hat Satellite 6 环境中管理主机的指南。

Red Hat Satellite Documentation Team

摘要

本指南论述了如何在 Red Hat Satellite 环境中配置和使用主机。在继续此工作流前,您必须成功安装 Red Hat Satellite 6 服务器和任何所需的 Capsule 服务器。

第 1 章 Red Hat Satellite 6 中的主机概述

主机是红帽卫星管理的任何 Linux 客户端。主机可以是物理或虚拟的。虚拟主机可以部署到由 Red Hat Satellite 支持的任何平台上,如 KVM、VMware vSphere、OpenStack、Amazon EC2、Rackspace Cloud Services 或 Google Compute Engine。

Red Hat Satellite 可大规模启用主机管理,包括监控、配置、远程执行、配置管理、软件管理和订阅管理。您可以从 Satellite Web UI 或命令行管理主机。

在 Satellite Web UI 中,您可以浏览由 Satellite Server 识别的所有主机,按类型分组:

  • All Hosts - 由卫星服务器识别的所有主机的列表。
  • 发现的主机 - 通过发现插件在 provisioning 网络上检测到的裸机主机列表。
  • 内容主机 - 管理与内容和订阅相关的任务的主机列表。
  • Host Collections - 用于批量操作的用户定义的主机集合列表,如勘误表安装。

要搜索主机,在 Search 字段中键入,并使用星号 principal 执行部分字符串搜索。例如,如果搜索名为 dev-node.example.com 的内容主机,点 Content Hosts 页面并在 Search 字段中输入 dev-node*。另外,*node* 也会查找内容主机 dev-node.example.com。

警告

Satellite 服务器被列为主机本身,即使它没有自助注册。不要从主机列表中删除卫星服务器。

第 2 章 管理主机

本章论述了创建、注册、管理和删除主机。

2.1. 在 Red Hat Satellite 中创建主机

使用这个流程在 Red Hat Satellite 中创建主机。

流程

  1. 在 Satellite Web UI 中,点 Hosts > Create Host
  2. Host 选项卡中输入所需详情。
  3. 单击 Ansible Roles 选项卡,然后从 Ansible Roles 列表中选择您要添加到主机的一个或多个角色。使用 箭头图标 管理添加或删除的角色。
  4. Puppet Classes 选项卡中,选择您要包含的 Puppet 类。
  5. Interfaces 选项卡中:

    1. 对于每个接口,点 Actions 列中的 Edit,并根据需要配置以下设置:

      • 使用 Type 列表并选择接口类型,键入 mvapich-literalFor a Bond 或 BMC 接口。
      • MAC 地址 rhacm-DAEMONEnter MAC 地址。
      • DNS 名称 rhacm-rhacmEnter 是 DNS 服务器已知的 DNS 名称。这用于 FQDN 的主机部分。
      • domain mvapich-DAEMONSelect 调配网络的域名。这会使用选择合适的子网自动更新 Subnet 列表。
      • IPv4 Subnet mvapich-rhacm select a IPv4 subnet for the host from the list.
      • IPv6 子网 mvapich-odbc 从列表中为主机选择 IPv6 子网。
      • 对于子网启用了 IPv4 地址 rhacm-rhacmIf IP 地址管理(IPAM),则会自动推荐 IP 地址。或者,您可以输入地址。如果启用了置备令牌,如果域没有管理反向 DNS,或者子网不管理 DHCP 保留,则可以省略该地址。
      • 对于子网启用了 IPv6 地址 rhacm-rhacmIf IP 地址管理(IPAM),则会自动推荐 IP 地址。或者,您可以输入地址。
      • Managed mvapich-rhacmSelect this 复选框,在置备过程中配置接口以使用由胶囊提供的 DHCP 和 DNS 服务。
      •  rhacm-rhacmSelect 这个复选框将这个接口的 DNS 名称用作 FQDN 的主机部分。
      • 置备 mvapich-rhacmSelect this 复选框,以置备此接口。这意味着,TFTP 引导将使用此接口,或者在基于镜像的调配时执行,该脚本将通过此界面执行调配。请注意,许多调配任务(如 anaconda 下载 RPM、在 %post 脚本中的 Puppet 设置)都将使用主接口。
      • 如果这个接口不是物理设备,则 虚拟 NIC mvapich-rhacmSelect this 复选框。此设置有两个选项:

        • 标签 rhacm-rhacmOptionally 设置了 VLAN 标签。如果未设置,标签将是子网的 VLAN ID。
        • 附加到此虚拟接口的接口的设备名称。
    2. 单击 OK 以保存接口配置。
    3. (可选)点击 Add Interface 来包括额外的网络接口。详情请查看 第 4 章 添加网络接口
    4. 单击 Submit 以应用更改并退出。
  6. Operating System 选项卡中,输入所需的详情。对于 Red Hat 操作系统,选择 Synced Content for Media Selection。如果要使用非 Red Hat 操作系统,选择 All Media,然后从 Media Selection 列表中选择安装介质。您可以从列表中选择一个分区表,或者在 Custom partition table 字段中输入自定义分区表。您不能同时指定。
  7. Parameters 选项卡上,单击 Add Parameter,以添加您要在运行时传递给作业模板的任何参数变量。这包括您要与主机关联的所有 Puppet 类、Ansible playbook 参数和主机参数。要将参数变量与 Ansible 作业模板一起使用,您必须添加一个 Host Parameter

    创建 Red Hat Enterprise Linux 8 主机时,您可以设置系统目的属性。system purpose 属性定义在主机创建时自动附加的订阅。在 Host Parameters 区域中,使用对应的值输入以下参数名称。如需值列表,请参阅执行标准 RHEL 安装指南中的配置系统目的https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/8/html/performing_a_standard_rhel_installation/graphical-installation_graphical-installation#configuring-system-purpose-standard_configuring-system-settings

    • syspurpose_role
    • syspurpose_sla
    • syspurpose_usage
    • syspurpose_addons
  8. Additional Information 选项卡中,输入主机的附加信息。
  9. 单击 Submit 以完成您的客户端请求。

对于 CLI 用户

要创建与主机组关联的主机,请输入以下命令:

# hammer host create \
--name "host_name" \
--hostgroup "hostgroup_name" \
--interface="primary=true, \
            provision=true, \
            mac=mac_address, \
            ip=ip_address" \
--organization "Your_Organization" \
--location "Your_Location" \
--ask-root-password yes

此命令提示您指定 root 密码。必须指定主机的 IP 和 MAC 地址。主网络接口的其他属性可以从主机组继承,或使用 --subnet--domain 参数设置。您可以使用 --interface 选项设置附加接口,该选项接受键值对列表。如需可用接口设置列表,请输入 hammer host create --help 命令。

2.2. 编辑主机的系统目的

您可以编辑 Red Hat Enterprise Linux 主机的系统目的属性。系统用途属性定义要自动附加到此主机的订阅。有关系统目的的更多信息,请参阅执行标准 RHEL 安装指南中的配置系统目的https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/8/html/performing_a_standard_rhel_installation/graphical-installation_graphical-installation#configuring-system-purpose-standard_configuring-system-settings

先决条件

  • 您要编辑的主机必须在 subscription-manager 中注册。

流程

  1. 在 Satellite Web UI 中,导航到 Hosts > Content Hosts,然后点击您要编辑的 Red Hat Enterprise Linux 8 主机的名称。
  2. System Purpose 区域中,点 EditRemove 图标用于您要编辑、添加或删除的系统目的属性。
  3. 点击 Save
  4. 单击 订阅 选项卡,然后选择 订阅
  5. Run Auto-Attach 将订阅自动附加到您的主机。
  6. 刷新页面以验证订阅列表是否包含正确的订阅。

对于 CLI 用户

  1. 登录主机并编辑所需的系统目的属性。例如,将用法类型设置为 Production,角色设置为 Red Hat Enterprise Linux Server,并添加附加组件。如需值列表,请参阅执行标准 RHEL 安装指南中的配置系统目的https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/8/html/performing_a_standard_rhel_installation/graphical-installation_graphical-installation#configuring-system-purpose-standard_configuring-system-settings

    # syspurpose set-usage Production
    # syspurpose set-role Red Hat Enterprise Linux Server
    # syspurpose add-addons 'your_addon'
  2. 验证此主机的系统目的属性:

    # syspurpose show
  3. 自动将订阅附加到此主机:

    # subscription-manager attach --auto
  4. 验证此主机的系统目的状态:

    # subscription-manager status

2.3. 编辑多个主机的系统目的

您可以编辑 Red Hat Enterprise Linux 主机的系统目的属性。系统用途属性定义要自动附加到主机的订阅。有关系统目的的更多信息,请参阅执行标准 RHEL 安装指南中的配置系统目的https://access.redhat.com/documentation/zh-cn/red_hat_enterprise_linux/8/html/performing_a_standard_rhel_installation/graphical-installation_graphical-installation#configuring-system-purpose-standard_configuring-system-settings

先决条件

  • 您要编辑的主机必须在 subscription-manager 中注册。

流程

  1. 在 Satellite Web UI 中,导航到 Hosts > Content Hosts 并选择您要编辑的 Red Hat Enterprise Linux 8 主机。
  2. 单击 Select Action 列表,再选择 Manage System Purpose
  3. 选择您要分配给所选主机的系统目的属性。您可以选择以下值之一:

    • 设置所有所选主机的特定属性。
    • 没有更改 来保持在所选主机上设置属性。
    • none (Clear) 以清除所选主机上的属性。
  4. 单击 分配
  5. 导航到 Hosts > Content Hosts 并选择相同的 Red Hat Enterprise Linux 8 主机根据系统目的自动附加订阅。
  6. 单击 Select Action 列表,再选择 Manage Subscriptions
  7. 单击 Auto-Attach,以根据其系统角色自动将订阅附加到所有选定的主机。

2.4. 更改主机的模块流

如果您有 Red Hat Enterprise Linux 8 主机,您可以修改您安装的软件仓库的模块流。

创建主机后,您可以在 Satellite Web UI 中启用、禁用、安装、更新和删除模块流。

流程

  1. 在 Satellite Web UI 中,导航到 Hosts > Content Hosts,再点包含您要更改的模块的主机名称。
  2. 单击 Module Streams 选项卡。
  3. Available Module Streams 列表,找到您要更改的模块。您可以使用 Filter 字段优化列表条目。您还可以使用 Filter Status 列表搜索具有特定状态的模块。
  4. Actions 列表中,选择您要对模块进行的更改。
  5. 作业调用 窗口中,确保作业信息准确。更改您需要的任何详细信息,然后单击 Submit

2.5. 创建主机组

如果您创建大量主机,则许多主机都可以具有通用的设置和属性。为每个新主机添加这些设置和属性是耗时的。如果使用主机组,您可以将通用属性应用到您创建的主机。

主机组充当常见主机设置的模板,包含您提供给主机的许多相同详情。当您使用主机组创建主机时,主机会从主机组继承定义的设置。然后,您可以提供额外的详细信息来个性化主机。

主机组层次结构

您可以创建主机组的层次结构。目的是提供一个基本级别主机组,它代表您组织中的所有主机并提供常规设置,然后嵌套组来提供特定的设置。例如,您可以有一个基本级别主机组来定义操作系统,以及继承基本级别主机组的两个嵌套主机组:

  • hostgroup: Base (Red Hat Enterprise Linux 7.6)

    • hostgroup:Web server (应用 httpd Puppet 类)

      • 主机: webserver1.example.com (Web 服务器)
      • 主机: webserver2.example.com (Web 服务器)
    • hostgroup: 存储 (适用于 nfs Puppet 类)

      • 主机: storage1.example.com (存储服务器)
      • 主机: storage2.example.com (存储服务器)
    • 主机: custom.example.com (自定义主机)

在本例中,由于 Base 主机组的继承,所有主机都使用 Red Hat Enterprise Linux 7.6 作为其操作系统。两个 Web 服务器主机继承 Webserver 主机组中的设置,其中包括 httpd Puppet 类以及 Base 主机组中的设置。这两个存储服务器从 Storage 主机组继承设置,其中包括 nfs Puppet 类以及 Base 主机组中的设置。自定义主机仅继承 Base 主机组中的设置。

流程

  1. 在 Satellite Web UI 中,导航到 Configure > Host Groups,再点 Create Host Group
  2. 如果您有一个要从中继承属性的现有主机组,您可以从 Parent 列表中选择一个主机组。如果没有,请将此字段留空。
  3. 输入新 主机组的名称
  4. 输入您希望将来的主机继承的任何其他信息。
  5. 单击 Ansible Roles 选项卡,然后从 Ansible Roles 列表中选择您要添加到主机的一个或多个角色。使用 箭头图标 管理添加或删除的角色。
  6. 单击附加选项卡,并将您要属性的任何详细信息添加到主机组中。

    注意

    Puppet 在将主机注册到与 Production 环境中创建的 Puppet 环境关联的主机组时,无法检索 Puppet CA 证书。

    要创建与主机组关联的适当 Puppet 环境,请手动创建目录并更改所有者:

    # mkdir /etc/puppetlabs/code/environments/example_environment
    # chown apache /etc/puppetlabs/code/environments/example_environment
  7. 单击 Submit 以保存主机组。

对于 CLI 用户

使用 hammer hostgroup create 命令创建主机组。例如:

# hammer hostgroup create --name "Base" \
--lifecycle-environment "Production" --content-view "Base" \
--puppet-environment "production" --content-source-id 1 \
--puppet-ca-proxy-id 1 --puppet-proxy-id 1 --domain "example.com" \
--subnet `ACME's Internal Network` --architecture "x86_64" \
--operatingsystem "RedHat 7.2" --medium-id 9 \
--partition-table "Kickstart default" --root-pass "p@55w0rd!" \
--locations "New York" --organizations "ACME"

2.6. 为每个 LifeCycle 环境创建主机组

使用这个流程为 Library 生命周期环境创建主机组,并为其他生命周期环境添加嵌套的主机组。

流程

要为每个生命周期环境创建主机组,请运行以下 Bash 脚本:

MAJOR="7"
ARCH="x86_64"
ORG="Your Organization"
LOCATIONS="Your Location"
PTABLE_NAME="Kickstart default"
DOMAIN="example.com"

hammer --output csv --no-headers lifecycle-environment list --organization "${ORG}" | cut -d ',' -f 2 | while read LC_ENV; do
  [[ ${LC_ENV} == "Library" ]] && continue

  hammer hostgroup create --name "rhel-${MAJOR}server-${ARCH}-${LC_ENV}" \
    --architecture "${ARCH}" \
    --partition-table "${PTABLE_NAME}" \
    --domain "${DOMAIN}" \
    --organizations "${ORG}" \
    --query-organization "${ORG}" \
    --locations "${LOCATIONS}" \
    --lifecycle-environment "${LC_ENV}"
done

2.7. 更改主机的组

使用这个流程更改主机组。

流程

  1. 在 Satellite Web UI 中,导航到 Hosts > All hosts
  2. 选中您要更改的主机的复选框。
  3. Select Action 列表中,选择 Change Group。此时会打开一个新选项窗口。
  4. Host Group 列表中,选择主机所需的组。
  5. Submit

2.8. 更改主机的环境

使用这个流程更改主机的环境。

流程

  1. 在 Satellite Web UI 中,导航到 Hosts > All hosts
  2. 选中您要更改的主机的复选框。
  3. Select Action 列表中,选择 Change Environment。此时会打开一个新选项窗口。
  4. Environment 列表中,为您的主机选择新环境。
  5. Submit

2.9. 更改主机的受管状态

默认情况下,由 Satellite 置备的主机是 Managed。当主机设置为 Managed 时,您可以从 Satellite 服务器中配置其他主机参数。这些附加参数在 Operating System 标签页中列出。如果您更改了 Operating System 选项卡上的任何设置,则在将主机设置为构建并重启后才会生效。

如果您需要使用 Satellite 不支持的操作系统获取系统的配置管理报告,请将主机设置为 Unmanaged。

使用这个流程在 Managed 和 Unmanaged 状态间切换主机。

流程

  1. 在 Satellite Web UI 中,导航到 Hosts > All hosts
  2. 选择主机。
  3. Edit
  4. Manage hostUnmanage host 以更改主机的状态。
  5. Submit

2.10. 将主机分配给特定机构

使用这个流程将主机分配给特定的机构。有关组织的常规信息以及如何配置它们,请参阅 内容管理指南中的管理 组织

流程

  1. 在 Satellite Web UI 中,导航到 Hosts > All hosts
  2. 选中您要更改的主机的复选框。
  3. Select Action 列表中,选择 Assign Organization。此时会打开一个新选项窗口。
  4. Select Organization 列表中,选择要分配主机的组织。选中 Fix Organization on Mismatch 的复选框。

    注意

    如果资源(如域或子网)与主机关联的资源(如域或子网)没有与您要分配主机的机构关联,则会发生不匹配。选项 Fix Organization on Mismatch 将向机构添加这样的资源,因此是推荐的选择。选项 Fail on Mismatch 将始终产生错误消息。例如,将主机从一个机构重新分配给另一个机构将失败,即使设置中没有实际不匹配。

  5. Submit

2.11. 将主机分配给特定位置

使用这个流程将主机分配给特定位置。有关位置以及如何配置它们的通用信息,请参阅 内容管理指南中的 创建位置

流程

  1. 在 Satellite Web UI 中,导航到 Hosts > All hosts
  2. 选中您要更改的主机的复选框。
  3. Select Action 列表中,选择 Assign Location。此时会打开一个新选项窗口。
  4. 导航到 Select Location 列表,再选择您要主机的位置。选中 Fix Location on Mismatch 的复选框。

    注意

    如果资源(如域或子网)与主机关联的资源(如域或子网)没有与您要分配主机的位置关联,则发生不匹配。选项 修复位置 on Mismatch 将这样的资源添加到该位置,因此是推荐的选择。选项 Fail on Mismatch 将始终产生错误消息。例如,将主机从一个位置重新分配给另一个位置将失败,即使设置中没有实际不匹配。

  5. Submit

2.12. 从 Red Hat Satellite 中删除主机

使用这个流程从 Red Hat Satellite 中删除主机。

流程

  1. 在 Satellite Web UI 中,导航到 Hosts > All hostsHosts > Content Hosts。请注意,从所有主机或内容主机中删除主机 的页面 没有区别。在这两种情况下,Satellite 都会完全删除主机。
  2. 选择您要删除的主机。
  3. Select Action 列表中,选择 Delete Hosts
  4. 单击 Submit 以从 Red Hat Satellite 永久删除主机。
警告

默认情况下,host delete 设置中的 Destroy associated 虚拟机 被设为 no。如果删除了与虚拟机关联的主机记录,则虚拟机将保留在计算资源中。

要删除计算资源上的虚拟机,请导航到 Administer > Settings 并选择 Provisioning 选项卡。如果在 host delete 上将 Destroy associated 虚拟机 设置为 yes,如果删除了与虚拟机关联的主机记录,则删除虚拟机。为了避免在这种情况下删除虚拟机,请在不将其从计算资源或更改设置的情况下将虚拟机从 Satellite 中解除关联。

在不从 Hypervisor 中删除的情况下从 Satellite 中解除虚拟机关联

  1. 在 Satellite Web UI 中,导航到 Hosts > All Hosts,再选中要解除关联主机左侧的复选框。
  2. Select Action 列表中,选择 Disassociate Hosts 按钮。
  3. (可选)选中复选框,以保持主机用于将来的操作。
  4. Submit

第 3 章 注册主机

将主机注册到 Satellite 服务器或胶囊式服务器有三种主要方法:

  1. 从 Satellite 生成 curl 命令,并从无限数量的主机运行命令,以使用全局注册模板注册它们。此方法适用于之前注册的全新安装主机和主机,例如到 Satellite 5 或其他 Satellite 6。

    通过使用此方法,您还可以在注册到 Satellite 期间将 Satellite SSH 密钥部署到主机,以启用用于远程执行作业的主机。有关远程执行作业的更多信息,请参阅配置和设置远程作业

    通过使用此方法,您还可以在注册到 Satellite 期间使用 Red Hat Insights 配置主机。有关将 Insights 与 Satellite 主机一起使用的更多信息,请参阅使用 Red Hat Insights 监控主机

  2. 下载并安装使用者 RPM server.example.com/pub/katello-ca-consumer-latest.noarch.rpm,然后运行 Subscription Manager。此方法适用于新安装的主机。
  3. 下载并运行 bootstrap 脚本(server.example.com/pub/bootstrap.py)。此方法适用于之前注册的全新安装主机和主机,例如到 Satellite 5 或其他 Satellite 6。

您也可以将 Atomic 主机注册到卫星服务器或胶囊式服务器。

使用以下流程之一注册主机:

使用以下步骤安装和配置主机工具:

支持的主机操作系统

主机必须使用以下 Red Hat Enterprise Linux 版本之一:

  • 5.7 或更高版本
  • 6.1 或更高版本*
  • 7.0 或更高版本
  • 8.0 或更高版本
注意

Red Hat Enterprise Linux 版本 6.1、6.6 和 6.3 需要手动更新 subscription-manager 和相关的软件包。如需更多信息,请参阅 https://access.redhat.com/solutions/1256763

支持的架构

支持 Red Hat Enterprise Linux 的所有构架:

  • i386
  • x86_64
  • s390x
  • ppc_64

3.1. 使用全局注册模板将主机注册到 Red Hat Satellite

使用以下步骤将主机注册到 Red Hat Satellite 6。

使用这个注册方法,您可以通过在 Satellite 上生成 curl 命令并在主机上运行此命令,将主机注册到 Satellite。此方法使用全局注册模板,供您完全控制主机注册过程。

先决条件

  • 生成 curl 命令的 Satellite 用户必须具有 create_hosts 权限。
  • 您必须在要注册的主机上具有 root 权限。
  • 您必须已创建了激活码。
  • 可选: 如果要将主机注册到 Red Hat Insights,您必须同步 rhel-7-server-rpms 存储库,并使其在使用的激活密钥中可用。这是在主机上安装 insights-client 软件包所必需的。

流程

  1. 在 Satellite Web UI 中,导航到 Hosts > Provisioning Templates,找到 Linux 注册默认模板 并点击它。
  2. 单击 关联 选项卡。
  3. 确保您要注册的操作系统位于 Selected items 列中。
  4. Submit
  5. 进入 Hosts > Operating Systems 并点击您要注册的操作系统。
  6. Templates 选项卡。
  7. Registration template 列表中,确保选择了 Linux 注册 default
  8. Submit
  9. 进入 Hosts > All Hosts > Register Host
  10. 可选: 如果要通过 Capsule 注册主机,请确保在这个胶囊上启用了 注册 功能。

    导航到 Infrastructure > Capsules,点要使用的 Capsule,并在 Active features 列表中找到 Registration 功能。

    可选:如果您的胶囊上没有启用 注册 功能,请在 Capsule 上输入以下命令以启用它:

    # satellite-installer --foreman-proxy-registration \
    --foreman-proxy-templates \
    --foreman-proxy-template-url 'http://capsule.example.com'
  11. 可选: 在 Host Group 列表中,选择要将主机与之关联的主机组。
  12. Operating System 列表中,选择您要注册的主机的操作系统。
  13. Capsule 列表中,选择要通过其注册主机的 Capsule。如果您不想使用外部胶囊,则必须选择 internal Capsule。
  14. Insights 列表中,选择是否要将主机注册到 Insights。
  15. Remote Execution 列表中,选择是否要将 Satellite SSH 密钥部署到主机。
  16. 可选:Satellite 使用 JSON Web 令牌(JWT)进行身份验证。此令牌的持续时间定义了生成的 curl 命令的工作方式。如果要更改令牌的持续时间,请在 Token 生命周期(小时) 字段输入所需的持续时间。您可以将持续时间设置为任意小时。

    请注意,Satellite 使用生成 curl 命令的用户的权限来授权主机。如果用户丢失或获得其他权限,则 JWT 的权限也会改变。因此,不要删除、块或更改用户在令牌期间的权限。

  17. 可选:在 Remote Execution Interface 字段中,输入主机必须用于 SSH 连接的网络接口。如果将此字段留空,Satellite 将使用默认网络接口。
  18. Activation Key (s) 字段中输入一个或多个激活密钥,以分配到主机。
  19. Generate 命令
  20. 复制生成的 curl 命令,以将其输入在主机上。
  21. 使用以下方法之一配置主机:

    • curl 命令中添加 --insecure 选项。这会使第一次调用不安全,但首先调用时,主机会从 Satellite 下载 CA 文件。主机将使用此 CA 文件与将来的所有调用连接 Satellite,使其安全。

      如果一个攻击者位于 Satellite 和主机之间的网络,可以从第一个不安全的调用中获取 CA 文件,攻击者可以从注册的主机和 JWT 获取 API 调用的内容。因此,如果您已选择在注册期间部署 SSH 密钥,攻击者就可以使用 SSH 密钥访问主机。以下是带 --insecure 选项的 curl 命令示例:

      curl -X GET --insecure https://satellite.example.com/register...
    • 如果您不想使用 --insecure 选项调用 curl 命令,您可以在每个主机上手动复制并安装 CA 文件。

      为此,请进入 Administer > Settings > Authentication 并查找 SSL CA file 设置的值来找到 Satellite 存储 CA 文件的位置。

      将 CA 文件复制到主机上的 /etc/pki/ca-trust/source/anchors/ 目录中,并输入以下命令:

      # update-ca-trust enable
      # update-ca-trust
  22. 在您要注册的主机上,以 root 用户身份输入 curl 命令。

3.1.1. 自定义全局注册和主机注册模板

如果要自定义注册过程,请使用本节中的信息。

请注意,Satellite 中的所有默认模板都将被锁定。如果要自定义注册过程,您需要克隆默认模板并编辑克隆。然后,在 Administer > Settings > Provisioning 中更改 Default Global registration template 设置以指向您的自定义全局注册 模板。更改操作系统设置中的 Registration template 设置,以指向您的自定义 Linux 注册默认模板

模板

注册过程使用以下注册模板:

  • Global Registration 模板包含将主机注册到 Satellite 的步骤。此模板在主机访问 /register 端点时显示。
  • Linux 注册默认模板 包含在主机注册后配置主机的步骤。

全局参数

您可以通过导航到 Configure > Global Parameters 来配置以下全局参数:

  • host_registration_remote_execution 参数在 remote_execution_ssh_keys 代码段中使用,默认值为 true
  • insights 片段中使用 host_registration_insights 参数,默认值为 true

代码片段

remote_execution_ssh_keys 代码片段用于 Linux 注册默认模板。只有 host_registration_remote_execution 参数为 true 时,它才会将 SSH 密钥部署到主机。

Linux 注册默认模板中使用 insights 片段。当全局参数 host_registration_insights 设为 true 时,它会下载并安装 Red Hat Insights 客户端。

变量

下表描述了 Global Registration 模板中使用的变量。

表 3.1. 全局注册模板变量

变量命令参数描述

@user

none

当前经过身份验证的用户对象。

@organization

organization_id

如果没有设置 organization_id,则设置用户的默认机构,或设置用户机构中的第一个机构。

@location

location_id

如果没有设置 location_id,则设置用户的默认位置,或者设置用户位置列表中的第一个位置。

@hostgroup

hostgroup_id

主机的主机组。

@operatingsystem

operatingsystem_id

主机操作系统.

@setup_insights

setup_insights

覆盖注册主机的 host_registration_insights 全局参数的值,并安装 insights 客户端。

@setup_remote_execution

setup_remote_execution

覆盖注册主机的 host_registration_remote_execution 全局参数的值,并部署用于远程执行的 SSH 密钥。

@remote_execution_interface

remote_execution_interface

为远程执行设置默认主机接口。

@activation_key

activation_key

主机激活密钥.

@registration_url

none

/register 端点的 URL。

3.2. 手动将主机注册到 Red Hat Satellite

使用以下步骤手动将主机注册到 Red Hat Satellite 6。

先决条件

  • Satellite 服务器、任何胶囊服务器和所有主机都必须与同一 NTP 服务器同步,并且启用了时间同步工具并运行。
  • 守护进程 rhsmcertd 必须在主机上运行。
  • 激活密钥必须可供主机使用。如需更多信息,请参阅 内容管理指南中的管理 激活码
  • 订阅管理器必须是 1.10 或更高版本。软件包包括在标准 Red Hat Enterprise Linux 软件仓库中。

流程

Red Hat Enterprise Linux 主机默认注册到 Red Hat Content Delivery Network。

更新每个主机配置,以便它们从正确的 Satellite Server 或 Capsule 服务器接收更新:

  1. 注意卫星服务器或胶囊式服务器的完全限定域名(FQDN),如 server.example.com
  2. root 用户身份登录主机,再从要注册主机的卫星服务器或 Capsule Server 下载 katello-ca-consumer-latest.noarch.rpm 软件包。consumer RPM 将主机配置为从 Red Hat Satellite 中指定的内容源下载内容。

    # curl --insecure --output katello-ca-consumer-latest.noarch.rpm https://satellite.example.com/pub/katello-ca-consumer-latest.noarch.rpm
  3. 安装 katello-ca-consumer-latest.noarch.rpm 软件包:

    # yum localinstall katello-ca-consumer-latest.noarch.rpm
    注意

    RPM 软件包没有签名。如果需要,您可以添加 --nosignature 选项以安装软件包。katello-ca-consumer-hostname-1.0-1.noarch.rpm 软件包是包含服务器主机名的额外 katello-ca-consumer RPM。katello-ca-consumer-latest.noarch.rpm 软件包始终反映最新版本。它们都满足相同的目的。

  4. 清除与 Red Hat Subscription Manager (RHSM)相关的任何旧的主机数据:

    # subscription-manager clean
  5. 使用 RHSM 注册主机:

    # subscription-manager register --org=your_org_name \
    --activationkey=your_activation_key

    例 3.1. 注册后命令输出:

    # subscription-manager register --org=MyOrg --activationkey=TestKey-1
    The system has been registered with id: 62edc0f8-855b-4184-b1b8-72a9dc793b96
注意

您可以使用 --environment 选项覆盖激活密钥定义的内容视图和生命周期环境。例如,要在 "Development" 生命周期内将主机注册到 Content View "MyView" :

 # subscription-manager register --org=your_org_name \
 --environment=Development/MyView \
 --activationkey=your_activation_key
注意

对于 Red Hat Enterprise Linux 6.3 主机,版本默认为 Red Hat Enterprise Linux 6 服务器,需要指向 6.3 存储库:

  1. 在 Satellite Web UI 中,导航到 Hosts > Content Hosts
  2. 选中需要更改的主机旁边的复选框。
  3. Select Action 列表中,选择 Set Release Version
  4. Release Version 列表中,选择 6.3
  5. Done

3.3. 将 Atomic 主机注册到 Red Hat Satellite

使用以下步骤将 Atomic 主机注册到 Red Hat Satellite 6。

流程

  1. root 用户身份登录 Atomic 主机。
  2. 从 Satellite 服务器检索 katello-rhsm-consumer

    # wget http://satellite.example.com/pub/katello-rhsm-consumer
  3. 更改 katello-rhsm-consumer 的模式使其可执行:

    # chmod +x katello-rhsm-consumer
  4. 运行 katello-rhsm-consumer

    # ./katello-rhsm-consumer

    使用 Red Hat Subscription Manager 注册:

    # subscription-manager register
注意

Atomic 主机上不支持 Katello 代理。

3.4. 使用启动脚本将主机注册到 Red Hat Satellite

使用 bootstrap 脚本自动执行内容注册和 Puppet 配置。您可以使用 bootstrap 脚本注册新主机,或者从 Satellite 5、RHN、SAM 或 RHSM 将现有主机迁移到 Red Hat Satellite 6。

katello-client-bootstrap 软件包默认安装在卫星服务器的基本操作系统中。bootstrap.py 脚本安装在 /var/www/html/pub/ 目录中,使其可用于 satellite.example.com/pub/bootstrap.py 的主机。该脚本包含 /usr/share/doc/katello-client-bootstrap-版本/README.md 文件中的文档。

要使用 bootstrap 脚本,您必须在主机上安装它。因为脚本只需要一次,且只适用于 root 用户,所以您可以将其放在 /root/usr/local/sbin 中,并在使用后将其删除。这个过程使用 /root

先决条件

Puppet 注意事项

如果主机组与 Production 环境中创建的 Puppet 环境关联,则 Puppet 在从该主机组注册主机时无法检索 Puppet CA 证书。

要创建与主机组关联的适当 Puppet 环境,请按照以下步骤操作:

  1. 手动创建目录并更改所有者:

    # mkdir /etc/puppetlabs/code/environments/example_environment
    # chown apache /etc/puppetlabs/code/environments/example_environment
  2. 导航到 Configure > Environments,然后点 Import environment from。按钮名称包括内部或外部胶囊的 FQDN。
  3. 选择创建的目录,再单击 Update

流程

  1. root 用户身份登录主机。
  2. 下载脚本:

    # curl -O http://satellite.example.com/pub/bootstrap.py
  3. 使脚本可执行:

    # chmod +x bootstrap.py
  4. 通过查看帮助文本确认脚本可以执行:

    • 在 Red Hat Enterprise Linux 8 中:

      # /usr/libexec/platform-python bootstrap.py -h
    • 在其他 Red Hat Enterprise Linux 版本中:

      # ./bootstrap.py -h
  5. 输入 bootstrap 命令以及适合您的环境的值。

    对于 --server 选项,指定 Satellite Server 或 Capsule Server 的 FQDN。对于 --location--organization--hostgroup 选项,使用 quoted 名称,而非标签,作为选项的参数。有关高级用例,请参阅 第 3.4.2 节 “高级启动脚本配置”

    • 在 Red Hat Enterprise Linux 8 中输入以下命令:

      # /usr/libexec/platform-python bootstrap.py \
      --login=admin \
      --server satellite.example.com \
      --location="Example Location" \
      --organization="Example Organization" \
      --hostgroup="Example Host Group" \
      --activationkey=activation_key
    • 在 Red Hat Enterprise Linux 5、6 或 7 中输入以下命令:

      # ./bootstrap.py --login=admin \
      --server satellite.example.com \
      --location="Example Location" \
      --organization="Example Organization" \
      --hostgroup="Example Host Group" \
      --activationkey=activation_key
  6. 输入您通过 --login 选项指定的 Satellite 用户的密码。

    该脚本向 stdout 发送进度通知。

  7. 在脚本提示时,批准主机的 Puppet 证书。在 Satellite Web UI 中,导航到 Infrastructure > Capsules,找到您使用 --server 选项指定的 Satellite 或 Capsule 服务器。
  8. Actions 列中的列表,选择 证书
  9. Actions 列中,单击 Sign 以批准主机的 Puppet 证书。
  10. 返回到主机,以查看 bootstrap 过程完成的其余部分。
  11. 在 Satellite Web UI 中,导航到 Hosts > All hosts,并确保主机连接到正确的主机组。
  12. 可选:在主机注册完成后,删除脚本:

    # rm bootstrap.py

3.4.1. 为启动脚本设置权限

使用这个流程配置 Satellite 用户,该用户具有运行 bootstrap 脚本所需的权限。

流程

  1. 在 Satellite Web UI 中,导航到 Administer > Users
  2. 点所需的 Username 来选择现有用户。此时会打开一个新窗格,其中标签页可以修改所选用户的信息。或者,创建一个专门用于运行此脚本的新用户。
  3. 单击 Roles 选项卡。
  4. Roles 列表中选择 Edit hosts and Viewer

    重要

    通过 Edit hosts 角色,用户可以编辑和删除主机,并且能够添加主机。如果您的安全策略不接受此,请创建一个具有以下权限的新角色,并将其分配给用户:

    • view_organizations
    • view_locations
    • view_domains
    • view_hostgroups
    • view_hosts
    • view_architectures
    • view_ptables
    • view_operatingsystems
    • create_hosts
  5. Submit

对于 CLI 用户

  1. 创建具有 bootstrap 脚本所需最小权限的角色。这个示例创建一个名为 Bootstrap 的角色:

    # ROLE='Bootstrap'
    hammer role create --name "$ROLE"
    hammer filter create --role "$ROLE" --permissions view_organizations
    hammer filter create --role "$ROLE" --permissions view_locations
    hammer filter create --role "$ROLE" --permissions view_domains
    hammer filter create --role "$ROLE" --permissions view_hostgroups
    hammer filter create --role "$ROLE" --permissions view_hosts
    hammer filter create --role "$ROLE" --permissions view_architectures
    hammer filter create --role "$ROLE" --permissions view_ptables
    hammer filter create --role "$ROLE" --permissions view_operatingsystems
    hammer filter create --role "$ROLE" --permissions create_hosts
  2. 为现有用户分配新角色:

    # hammer user add-role --id user_id --role Bootstrap

    或者,您也可以创建新用户,并为他们分配这个新角色。有关使用 Hammer 创建用户的更多信息,请参阅管理 Red Hat Satellite 指南中的管理用户和角色

3.4.2. 高级启动脚本配置

本节有更多示例来使用 bootstrap 脚本注册或迁移主机。

警告

这些示例指定 admin Satellite 用户。如果安全策略无法接受,请创建一个具有 bootstrap 脚本所需最小权限的新角色。更多信息请参阅 第 3.4.1 节 “为启动脚本设置权限”

将主机从一个 Satellite 6 迁移到另一个 Satellite 6

使用带有 --force 的脚本从旧的 Satellite 中删除 katello-ca-consumer-* 软件包,并在新 Satellite 上安装 katello-ca-consumer-* 软件包。

  • 在 Red Hat Enterprise Linux 8 中输入以下命令:

    # /usr/libexec/platform-python bootstrap.py \
    --login=admin \
    --server satellite.example.com \
    --location="Example Location" \
    --organization="Example Organization" \
    --hostgroup="Example Host Group" \
    --activationkey=activation_key \
    --force
  • 在 Red Hat Enterprise Linux 5、6 或 7 中输入以下命令:

    # bootstrap.py --login=admin \
    --server satellite.example.com \
    --location="Example Location" \
    --organization="Example Organization" \
    --hostgroup="Example Host Group" \
    --activationkey=activation_key \
    --force

将主机从 Red Hat Network (RHN)或 Satellite 5 迁移到 Satellite 6

bootstrap 脚本会检测 /etc/syconfig/rhn/systemid 的存在以及与 RHN 的有效连接,来指示系统已注册到旧平台。然后,脚本会调用 rhn-classic-migrate-to-rhsm 将系统从 RHN 迁移。默认情况下,由于审计原因,脚本不会删除系统的传统配置集。若要移除传统配置文件,可使用 --legacy-purge,并使用 --legacy-login 提供有权删除配置文件的用户帐户。提示时输入用户帐户密码。

  • 在 Red Hat Enterprise Linux 8 中输入以下命令:

    # /usr/libexec/platform-python bootstrap.py \
    --login=admin \
    --server satellite.example.com \
    --location="Example Location" \
    --organization="Example Organization" \
    --hostgroup="Example Host Group" \
    --activationkey=activation_key \
    --legacy-purge \
    --legacy-login rhn-user
  • 在 Red Hat Enterprise Linux 5、6 或 7 中输入以下命令:

    # bootstrap.py --login=admin \
    --server satellite.example.com \
    --location="Example Location" \
    --organization="Example Organization" \
    --hostgroup="Example Host Group" \
    --activationkey=activation_key \
    --legacy-purge \
    --legacy-login rhn-user

将主机注册到 Satellite 6,省略 Puppet 设置

默认情况下,bootstrap 脚本为内容管理和配置管理配置主机。如果您有一个现有的配置管理系统,且不想在主机上安装 Puppet,请使用 --skip-puppet

  • 在 Red Hat Enterprise Linux 8 中输入以下命令:

    # /usr/libexec/platform-python bootstrap.py \
    --login=admin \
    --server satellite.example.com \
    --location="Example Location" \
    --organization="Example Organization" \
    --hostgroup="Example Host Group" \
    --activationkey=activation_key \
    --skip-puppet
  • 在 Red Hat Enterprise Linux 5、6 或 7 中输入以下命令:

    # bootstrap.py --login=admin \
    --server satellite.example.com \
    --location="Example Location" \
    --organization="Example Organization" \
    --hostgroup="Example Host Group" \
    --activationkey=activation_key \
    --skip-puppet

将主机注册到 Satellite 6 只进行内容管理

要将系统注册为内容主机,并省略置备和配置管理功能,请使用 --skip-foreman

  • 在 Red Hat Enterprise Linux 8 中输入以下命令:

    # /usr/libexec/platform-python bootstrap.py \
    --server satellite.example.com \
    --organization="Example Organization" \
    --activationkey=activation_key \
    --skip-foreman
  • 在 Red Hat Enterprise Linux 5、6 或 7 中输入以下命令:

    # bootstrap.py --server satellite.example.com \
    --organization="Example Organization" \
    --activationkey=activation_key \
    --skip-foreman

更改 bootstrap 脚本用来下载消费者 RPM 的方法

默认情况下,bootstrap 脚本使用 HTTP 下载使用者 RPM (server.example.com/pub/katello-ca-consumer-latest.noarch.rpm)。在某些环境中,您可能希望只允许主机和 Satellite 之间的 HTTPS。使用 --download-method 将下载方法从 HTTP 改为 HTTPS。

  • 在 Red Hat Enterprise Linux 8 中输入以下命令:

    # /usr/libexec/platform-python bootstrap.py \
    --login=admin \
    --server satellite.example.com \
    --location="Example Location" \
    --organization="Example Organization" \
    --hostgroup="Example Host Group" \
    --activationkey=activation_key \
    --download-method https
  • 在 Red Hat Enterprise Linux 5、6 或 7 中输入以下命令:

    # bootstrap.py --login=admin \
    --server satellite.example.com \
    --location="Example Location" \
    --organization="Example Organization" \
    --hostgroup="Example Host Group" \
    --activationkey=activation_key \
    --download-method https

为 Satellite 提供主机的 IP 地址

在一个接口上有多个接口或多个 IP 地址的主机上,您可能需要覆盖 IP 地址的自动检测,并向 Satellite 提供特定的 IP 地址。使用 --ip

  • 在 Red Hat Enterprise Linux 8 中输入以下命令:

    # /usr/libexec/platform-python bootstrap.py \
    --login=admin \
    --server satellite.example.com \
    --location="Example Location" \
    --organization="Example Organization" \
    --hostgroup="Example Host Group" \
    --activationkey=activation_key \
    --ip 192.x.x.x
  • 在 Red Hat Enterprise Linux 5、6 或 7 中输入以下命令:

    # bootstrap.py --login=admin \
    --server satellite.example.com \
    --location="Example Location" \
    --organization="Example Organization" \
    --hostgroup="Example Host Group" \
    --activationkey=activation_key \
    --ip 192.x.x.x

在主机上启用远程执行

使用 --rex--rex-user 启用远程执行,并为指定用户添加所需的 SSH 密钥。

  • 在 Red Hat Enterprise Linux 8 中输入以下命令:

    # /usr/libexec/platform-python bootstrap.py \
    --login=admin \
    --server satellite.example.com \
    --location="Example Location" \
    --organization="Example Organization" \
    --hostgroup="Example Host Group" \
    --activationkey=activation_key \
    --rex \
    --rex-user root
  • 在 Red Hat Enterprise Linux 5、6 或 7 中输入以下命令:

    # bootstrap.py --login=admin \
    --server satellite.example.com \
    --location="Example Location" \
    --organization="Example Organization" \
    --hostgroup="Example Host Group" \
    --activationkey=activation_key \
    --rex \
    --rex-user root

在注册过程中为主机创建域

若要创建主机记录,运行该脚本之前,卫星中需要存在主机的 DNS 域。如果域不存在,请使用 --add-domain 添加该域。

  • 在 Red Hat Enterprise Linux 8 中输入以下命令:

    # /usr/libexec/platform-python bootstrap.py \
    --login=admin \
    --server satellite.example.com \
    --location="Example Location" \
    --organization="Example Organization" \
    --hostgroup="Example Host Group" \
    --activationkey=activation_key \
    --add-domain
  • 在 Red Hat Enterprise Linux 5、6 或 7 中输入以下命令:

    # bootstrap.py --login=admin \
    --server satellite.example.com \
    --location="Example Location" \
    --organization="Example Organization" \
    --hostgroup="Example Host Group" \
    --activationkey=activation_key \
    --add-domain

为主机提供备选 FQDN

如果主机的主机名不是 FQDN,或者不是 RFC 兼容(包含下划线)的字符,则脚本将在主机名验证阶段失败。如果无法更新主机以使用 Satellite 接受的 FQDN,您可以使用 bootstrap 脚本指定替代 FQDN。

  1. 使用 Hammer 将 create_new_host_when_facts_are_uploadedcreate_new_host_when_report_is_uploaded 设置为 false:

    # hammer settings set \
    --name  create_new_host_when_facts_are_uploaded \
    --value false
    # hammer settings set \
    --name  create_new_host_when_report_is_uploaded \
    --value false
  2. 使用 --fqdn 指定将报告到 Satellite 的 FQDN:

    • 在 Red Hat Enterprise Linux 8 中输入以下命令:

      # /usr/libexec/platform-python bootstrap.py --login=admin \
      --server satellite.example.com \
      --location="Example Location" \
      --organization="Example Organization" \
      --hostgroup="Example Host Group" \
      --activationkey=activation_key \
      --fqdn node100.example.com
    • 在 Red Hat Enterprise Linux 5、6 或 7 中输入以下命令:

      # bootstrap.py --login=admin \
      --server satellite.example.com \
      --location="Example Location" \
      --organization="Example Organization" \
      --hostgroup="Example Host Group" \
      --activationkey=activation_key \
      --fqdn node100.example.com

3.5. 安装 Katello 代理

您可以安装 Katello 代理来远程更新 Satellite 客户端。

注意

Katello 代理已弃用,并将在以后的 Satellite 版本中删除。迁移进程以使用远程执行功能远程更新客户端。有关更多信息,请参阅 《管理主机指南》 中的 无 Goferd 和 Katello 代理的主机管理

katello-agent 软件包依赖于提供 goferd 服务的 gofer 软件包。必须启用此服务,以便卫星服务器或胶囊式服务器能够提供有关适用于内容主机的勘误表的信息。

先决条件

在安装 Katello 代理前,请确保满足以下条件:

流程

要安装 Katello 代理,请完成以下步骤:

  1. 安装 katello-agent 软件包:

    # yum install katello-agent
  2. 启动 goferd 服务:

    # systemctl start goferd

3.6. 安装 Tracer

使用这个流程在 Red Hat Satellite 6.9 上安装 Tracer,并访问 Traces。tracer 显示已过时且需要重启的服务和应用程序列表。Trace 是 Satellite Web UI 中由 Tracer 生成的输出。

先决条件

  • 主机必须注册到 Red Hat Satellite。
  • 必须在卫星服务器上启用和同步红帽卫星工具 6.9 存储库,并在主机上启用。

流程

  1. 在内容主机上安装 katello-host-tools-tracer RPM 软件包:

    # yum install katello-host-tools-tracer
  2. 使用以下命令:

    # katello-tracer-upload
  3. 在 Satellite Web UI 中,导航到 Hosts > All hosts,然后点所需的主机名。
  4. Properties 选项卡中,检查 Properties 表并找到 Traces 项。如果您无法在 Properties 表中找到 Traces 项,则不会安装 Tracer。
  5. 导航到 Hosts > Content Hosts,然后点所需的主机名。
  6. Traces 选项卡查看 Traces。

3.7. 安装和配置 Puppet 代理

使用这个流程在主机上安装和配置 Puppet 代理。有关 Puppet 的更多信息,请参见 Puppet 指南

先决条件

  • 主机必须注册到 Red Hat Satellite。
  • 主机必须分配有 Puppet 环境。
  • 必须在卫星服务器上启用和同步红帽卫星工具 6.9 存储库,并在主机上启用。

流程

  1. root 用户身份登录主机。
  2. 安装 Puppet 代理软件包:

    # yum install puppet-agent
  3. 将 Puppet 代理配置为在引导时启动:

    • 在 Red Hat Enterprise Linux 6 中:

      # chkconfig puppet on
    • 在 Red Hat Enterprise Linux 7 上:

      # systemctl enable puppet
  4. 将下列服务器和环境设置附加到 /etc/puppetlabs/puppet/puppet.conf 文件。将 environment 参数设置为主机所属的 Puppet 环境的名称:

    environment = My_Example_Org_Library
    server = satellite.example.com
    ca_server = satellite.example.com
  5. 在主机上运行 Puppet 代理:

    # puppet agent -t
  6. 在 Satellite Web UI 中,导航到 Infrastructure > Capsules
  7. 从所需胶囊服务器的 Actions 列中,选择 Certificates
  8. 单击所需主机右侧的 Sign,为 Puppet 客户端签署 SSL 证书。
  9. 再次输入 puppet agent 命令:

    # puppet agent -t

第 4 章 添加网络接口

Red Hat Satellite 支持为单个主机指定多个网络接口。您可以在创建新主机时配置这些接口,如 第 2.1 节 “在 Red Hat Satellite 中创建主机” 或编辑现有主机 中所述。

您可以附加到主机的几种网络接口类型。在添加新接口时,请选择以下之一:

注意

其他接口默认启用 Managed 标志,这意味着在置备过程中由与所选子网关联的 DNS 和 DHCP 胶囊式服务器自动配置新接口。这需要一个带有正确配置的 DNS 和 DHCP 胶囊式服务器的子网。如果您使用 Kickstart 方法进行主机置备,则会在 /etc/sysconfig/network-scripts/ifcfg-interface_id 的安装后阶段为受管接口自动创建配置文件。

注意

虚拟和绑定接口目前需要物理设备的 MAC 地址。因此,这些接口的配置仅适用于裸机主机。

4.1. 添加物理接口

使用此流程向主机添加额外的物理接口。

流程

  1. 在 Satellite Web UI 中,导航到 Hosts > All hosts
  2. 点您要编辑的主机旁的 Edit
  3. 接口 选项卡上,单击添加接口
  4. 保持在 Type 列表中选择的 Interface 选项。
  5. 指定 MAC 地址。此设置是必需的。
  6. 指定 设备标识符,eth0。标识符用于在创建绑定接口、VLAN 和别名时指定此物理接口。
  7. 指定与主机的 IP 地址关联的 DNS 名称。Satellite 将此名称保存在与所选域(DNS A"字段)关联的胶囊服务器中,以及与所选子网关联的胶囊服务器("DNS PTR"字段)。因此,单个主机可以有多个 DNS 条目。
  8. Domain 列表中选择一个域。要创建和管理域,请导航到 Infrastructure > Domains
  9. Subnet 列表中选择子网。要创建和管理子网,请导航到 Infrastructure > Subnets
  10. 指定 IP 地址。带有分配的 DHCP 胶囊服务器的受管接口需要此设置来创建 DHCP 租期。启用 DHCP 的受管接口会自动提供推荐的 IP 地址。
  11. 选择接口是否为 Managed。如果接口受管理,则在调配期间从关联的胶囊服务器中提取配置,并且创建 DNS 和 DHCP 条目。如果使用 kickstart 调配,则会自动为接口创建一个配置文件。
  12. 选择是否是主机的主接口。来自主接口的 DNS 名称用作 FQDN 的主机部分。
  13. 选择是否是主机的 Provision 接口。使用调配接口进行 TFTP 引导。对于基于镜像的调配,脚本用于通过置备界面执行。
  14. 选择是否使用接口进行 远程执行
  15. Virtual NIC 复选框保持清除。
  16. 单击 OK 以保存接口配置。
  17. Submit 将更改应用到主机。

4.2. 添加虚拟接口

使用这个流程为主机配置虚拟接口。这可以是 VLAN 或别名接口。

别名接口是附加到现有接口的额外 IP 地址。别名接口自动从它所附加的接口继承 MAC 地址,因此您可以在不指定 MAC 地址的情况下创建别名。接口必须在将引导模式设置为 静态 的子网中指定。

流程

  1. 在 Satellite Web UI 中,导航到 Hosts > All hosts
  2. 点您要编辑的主机旁的 Edit
  3. 接口 选项卡上,单击添加接口
  4. 保持在 Type 列表中选择的 Interface 选项。
  5. 指定常规接口设置。适用的配置选项与 第 4.1 节 “添加物理接口” 中描述的物理接口相同。

    为受管虚拟接口指定 MAC 地址,以便正确生成用于调配的配置文件。但是,未管理的虚拟接口不需要 MAC 地址

    如果创建 VLAN,在 Device Identifier 字段中以 eth1.10 的形式指定 ID。如果创建别名,请使用 ID,格式为 eth1:10

  6. 选择 Virtual NIC 复选框。特定于虚拟接口的附加配置选项会附加到表单中:

    • 标签 :(可选)将 VLAN 标签设置为从物理网络中继网络段到虚拟接口。如果没有指定标签,受管接口会继承关联子网的 VLAN 标签。来自此字段的用户指定的条目不会应用到别名接口。
    • 附加到 :指定虚拟接口所属的物理接口的标识符,如 eth1。此设置是必需的。
  7. 单击 OK 以保存接口配置。
  8. Submit 将更改应用到主机。

4.3. 添加绑定接口

使用这个流程为主机配置绑定接口。

流程

  1. 在 Satellite Web UI 中,导航到 Hosts > All hosts
  2. 点您要编辑的主机旁的 Edit
  3. 接口 选项卡上,单击添加接口
  4. Type 列表中选择 Bond。特定于类型的配置选项会附加到表单中。
  5. 指定常规接口设置。适用的配置选项与 第 4.1 节 “添加物理接口” 中描述的物理接口相同。

    绑定接口在 Device Identifier 字段中以 bond0 的形式使用 ID。

    单个 MAC 地址 已经足够。

  6. 指定特定于绑定接口的配置选项:

    • 模式 :选择定义容错和负载平衡策略的绑定模式。有关每个绑定模式的简短描述,请参阅 表 4.1 “Red Hat Satellite 中可用的绑定模式”
    • 附加的设备 :指定附加设备的、以逗号分隔的标识符列表。这些可以是物理接口或 VLAN。
    • 绑定选项 :指定一个以空格分隔的配置选项列表,如 miimon=100。有关您可以为绑定接口指定的配置选项的详细信息,请参阅 Red Hat Enterprise Linux 7 网络指南
  7. 单击 OK 以保存接口配置。
  8. Submit 将更改应用到主机。

对于 CLI 用户

要使用绑定接口创建主机,请输入以下命令:

# hammer host create --name bonded_interface \
--hostgroup-id 1 \
--ip=192.168.100.123 \
--mac=52:54:00:14:92:2a \
--subnet-id=1 \
--managed true \
   --interface="identifier=eth1, \
               mac=52:54:00:62:43:06, \
               managed=true, \
               type=Nic::Managed, \
               domain_id=1, \
               subnet_id=1" \
   --interface="identifier=eth2, \
               mac=52:54:00:d3:87:8f, \
               managed=true, \
               type=Nic::Managed, \
               domain_id=1, \
               subnet_id=1" \
   --interface="identifier=bond0, \
               ip=172.25.18.123, \
               type=Nic::Bond, \
               mode=active-backup, \
               attached_devices=[eth1,eth2], \
               managed=true, \
               domain_id=1, \
               subnet_id=1" \
--organization "Your_Organization" \
--location "Your_Location" \
--ask-root-password yes

表 4.1. Red Hat Satellite 中可用的绑定模式

绑定模式描述

balance-rr

在每个绑定接口中按顺序接收和发送传输。

active-backup

传输通过第一个可用的绑定接口接收和发送。只有在活跃的绑定接口失败时,才会使用另一个绑定接口。

balance-xor

传输基于所选哈希策略。在这个模式中,用于特定对等点的流量始终通过同一接口发送。

broadcast

所有传输都在所有绑定接口上发送。

802.a3

创建共享相同设置的聚合组。在活动组中的所有接口上传输和接收。

balance-tlb

传出流量会根据每个绑定接口上的当前负载进行分发。

balance-alb

接收负载平衡通过地址解析协议(ARP)协商来实现。

4.4. 添加基板管理控制器(BMC)接口

使用这个流程为支持此功能的主机配置基板管理控制器(BMC)接口。

先决条件

  • 已安装 ipmitool 软件包。
  • 您知道主机上 BMC 接口的 MAC 地址、IP 地址和其他详情,以及该接口的适当凭证。

    注意

    只有在管理 BMC 接口时,您只需要 BMC 接口的 MAC 地址,以便它可以创建 DHCP 保留。

流程

  1. 如果还没有启用,在 Capsule 服务器上启用 BMC:

    1. 使用以下选项运行 satellite-installer 脚本,在胶囊服务器上配置 BMC 电源管理:

      # satellite-installer --foreman-proxy-bmc=true \
      --foreman-proxy-bmc-default-provider=ipmitool
    2. 在 Satellite Web UI 中,导航到 Infrastructure > Capsules
    3. Actions 列中的列表,单击 RefreshFeatures 列中的列表现在应包含 BMC。
  2. 在 Satellite Web UI 中,导航到 Hosts > All hosts
  3. 点您要编辑的主机旁的 Edit
  4. 接口 选项卡上,单击添加接口
  5. Type 列表中选择 BMC。特定于类型的配置选项会附加到表单中。
  6. 指定常规接口设置。适用的配置选项与 第 4.1 节 “添加物理接口” 中描述的物理接口相同。
  7. 指定特定于 BMC 接口的配置选项:

    • UsernamePassword :指定 BMC 所需的任何身份验证凭证。
    • Provider :指定 BMC 供应商。
  8. 单击 OK 以保存接口配置。
  9. Submit 将更改应用到主机。

第 5 章 将主机从 RHEL 7 升级到 RHEL 8

您可以使用作业模板将 Red Hat Enterprise Linux 7 主机升级到 Red Hat Enterprise Linux 8。

先决条件

流程

  1. 在 Satellite 上,启用 foreman_plugin_leapp puppet 模块:

    # satellite-installer --enable-foreman-plugin-leapp
  2. 在 Satellite Web UI 中,导航到 Hosts > All Hosts
  3. 选择您要升级到 Red Hat Enterprise Linux 8 的主机。
  4. 在 Hosts 窗口的右上角,从 Select Action 列表中选择 Preupgrade check with Leapp
  5. Submit 以开始预升级检查。
  6. 检查完成后,点 Leapp preupgrade report 选项卡查看 LEAPP 是否在 RHEL 7 主机上发现任何问题。具有 Inhibitor 标志的问题被视为关键,可能破坏升级过程。有些问题可能会有文档链接,它们描述了如何修复它们。
  7. 可选:如果您有与它们关联的命令相关的问题,您可以使用远程作业修复这些命令。为此,请选择这些问题,单击 Fix Selected 按钮,然后提交作业。
  8. 解决这个问题后,点 Rerun 按钮,然后点 Submit 以再次运行预升级检查,以验证 RHEL 7 主机没有任何问题并准备好升级。
  9. 当您的系统准备好升级时,点 Run Upgrade 按钮,然后点提交以开始升级。

第 6 章 使用 Red Hat Web 控制台进行主机管理和监控

Red Hat Web 控制台是一个交互式 Web 界面,可用于执行操作和监控 Red Hat Enterprise Linux 主机。您可以启用远程执行功能,将 Satellite 与 Red Hat Web 控制台集成。当您在使用 Satellite 管理的主机上安装 Red Hat Web 控制台时,您可以在 Satellite Web UI 中查看该主机的 Red Hat Web 控制台仪表板。您还可以使用与 Red Hat Web 控制台集成的功能,如 Red Hat Image Builder。

6.1. 将 Satellite 与 Red Hat Web 控制台集成

默认情况下,Red Hat Web 控制台集成在 Satellite 中被禁用。如果要从 Satellite 中访问主机的红帽 Web 控制台功能,您必须首先在 Satellite 服务器上启用 Red Hat Web 控制台集成。

流程

  • 在 Satellite 服务器中,使用 --enable-foreman-plugin-remote-execution-cockpit 选项运行 satellite-installer

    # satellite-installer --enable-foreman-plugin-remote-execution-cockpit

6.2. 使用 Red Hat Web 控制台管理和监控主机

您可以通过 Satellite Web UI 访问 Red Hat Web 控制台 Web UI,并使用该功能来管理和监控 Satellite 中的主机。

先决条件

流程

  1. 在 Satellite Web UI 中,导航到 Hosts > All Hosts,然后选择您要使用 Red Hat Web 控制台管理和监控的主机。
  2. 在主机窗口的右上角,单击 Web Console

现在,您可以通过 Red Hat Web 控制台访问主机监控和管理的完整功能,如 Red Hat Image Builder。

有关 Red Hat web 控制台入门的更多信息,请参阅使用 RHEL 8 web 控制台指南使用 RHEL 7 web 控制台的管理系统 指南。

有关通过 Red Hat web 控制台使用 Red Hat Image Builder 的更多信息,请参阅在 RHEL 8 web 控制台中访问镜像构建器 GUI 或 RHEL 7 web 控制台中的 访问镜像构建器 GUI。

第 7 章 使用 Red Hat Insights 监控主机

在本章中,您可以找到有关使用 Red Hat Insights 创建主机监控报告和监控主机的信息,并创建 Insights 计划。

7.1. 在 Satellite 中将 Red Hat Insights 与主机搭配使用

您可以使用 Red Hat Insights 诊断系统和与安全漏洞相关的系统停机时间、性能下降和稳定性故障。您可以使用控制面板快速识别稳定性、安全性和性能的关键风险。您可以按类别排序,查看影响和解决方案的详细信息,然后确定受影响的系统。

要使用 Red Hat Insights 监控您使用 Satellite 管理的主机,您必须首先在主机上安装 Red Hat Insights,并将主机注册到 Red Hat Insights。

对于新的 Satellite 主机,您可以使用全局注册模板在注册过程中安装和配置 Satellite 主机。如需更多信息,请参阅管理 主机指南中的使用全局注册模板将主机注册到 Red Hat Satellite

要使用 Puppet 安装和注册您的主机,或手动注册您的主机,请参阅 Red Hat Insights 入门

使用 Ansible 角色部署 Red Hat Insights

您可以使用 RedHatInsights.insights-client Ansible 角色自动使用 Red Hat Insights 自动安装和注册主机。有关在 Satellite 中添加此角色的更多信息,请参阅配置 Satellite 中的 Ansible 入门 ,以使用 Ansible

  1. RedHatInsights.insights-client 角色添加到主机。

    有关新主机,请参阅 第 2.1 节 “在 Red Hat Satellite 中创建主机”

    对于现有主机,请参阅 配置 Satellite 中的使用 Ansible 角色在 Satellite 主机上自动化重复任务,以使用 Ansible

  2. 要在主机上运行 RedHatInsights.insights-client 角色,请导航到 Hosts > All Hosts,再单击要使用的主机的名称。
  3. 单击 Run Ansible roles 按钮。

角色完成后,您可以查看并使用您在 Satellite Web UI 的 Insights > Overview 页面中添加的主机。

其它信息

  • 要将任何系统更新应用到 Red Hat Insights 插件,请在更新后输入 httpd 重启
  • 要查看 Red Hat Insights 和所有插件的日志,请转至 /var/log/foreman/production.log
  • 如果您在连接到 Red Hat Insights 时出现问题,请确保您的证书是最新的。刷新订阅清单以更新证书。
  • 您可以通过在主机上配置 insights-client.timer 来更改运行 insights-client 的默认调度。如需更多信息,请参阅 Red Hat Insights 的客户端配置指南中的更改 insights-client 调度

7.2. 为主机创建 Insights 计划

使用 Satellite 6,您可以创建一个 Red Hat Insights 修复计划,并在 Satellite 主机上运行计划。

流程

要创建计划,请完成以下步骤:

  1. 在 Satellite Web UI 中,导航到 Insights > Inventory,然后选择您要包含在 Insights 计划中的主机。
  2. Actions 列表中,选择 Create a new Plan/Playbook
  3. 在 Plan/Playbook Builder 窗口中,选择 Create new plan 并输入计划的名称。
  4. 选择是否希望规则应用到特定的系统、组群或者所有系统。
  5. 选择您要添加到计划的一个或多个规则。使用 Filter 字段搜索特定关键字。
  6. 点击 Save
  7. 在 Planner 窗口中,选择 Run Playbook

在 Jobs 窗口中,您可以在 playbook 运行时查看计划的进度。

您可以通过导航到 Insights > Planner 来查看 Insights 计划。

第 8 章 使用报告模板来监控主机

您可以使用报告模板来查询 Satellite 数据,以获取有关主机状态、注册的主机、适用勘误表、应用的勘误表、订阅详情和用户活动的信息。您可以使用 Satellite 附带的报告模板,或编写您自己的自定义报告模板以满足您的要求。报告引擎使用嵌入式 Ruby (ERB)语法。有关编写模板和 ERB 语法的详情,请参考 附录 A, 模板编写参考

您可以创建一个模板,或克隆模板并编辑克隆。有关模板语法的帮助信息,请单击模板并单击 帮助 选项卡。

8.1. 生成主机监控报告

要查看报告模板,在 Satellite Web UI 中进入 Monitor > Report Templates

要计划报告,您可以配置 cron 作业或使用 Satellite Web UI。

流程

  1. 在 Satellite Web UI 中,导航到 Monitor > Report Templates
  2. 在您要使用的报告模板右侧,点 Generate
  3. 可选: 要在 Generate at 字段右侧调度报告,请点击图标来选择您要生成报告的日期和时间。
  4. 可选:要将报告发送到电子邮件地址,请通过电子邮件复选框选择发送报告,并在 传输至电子邮件地址 字段中输入所需的电子邮件地址。
  5. 可选:应用搜索查询过滤器。要查看所有可用结果,请不要使用任何值填充 filter 字段。
  6. Submit。下载包含报告的 CSV 文件。如果您已 通过电子邮件复选框选择 Send 报告,则主机监控报告将发送到您的电子邮件地址。

对于 CLI 用户

要生成报告,请完成以下步骤:

  1. 列出所有可用的报告模板:

    # hammer report-template list
  2. 生成一个报告:

    # hammer report-template generate --id template ID

    此命令会等待报告在完成前完全生成。如果要将报告作为后台任务生成,您可以使用 hammer report-template schedule 命令。

8.2. 创建报告模板

在 Satellite 中,您可以创建一个报告模板并自定义模板以符合您的要求。您可以导入现有的报告模板,并使用片断和模板宏进一步自定义它们。

报告模板使用嵌入式 Ruby (ERB)语法。要查看有关在 Satellite Web UI 中使用 ERB 语法和宏的信息,请导航到 Monitor > Report Templates,然后点 Create Template,然后点 Help 选项卡。

在 Satellite 中创建报告模板时,默认启用安全模式。有关安全模式的详情,请参考 第 8.8 节 “报告模板安全模式”

有关编写模板的详情请参考 附录 A, 模板编写参考

要通过填充模板的步骤示例来查看步骤,请参阅 第 8.7 节 “创建报告模板以监控权利”

有关您可以在报告模板中使用的宏的更多信息,请参阅 第 A.5 节 “templates Macros”

流程

  1. 在 Satellite Web UI 中,导航到 Monitor > Report Templates,然后点 Create Template
  2. Name 字段中输入您的报告模板的唯一名称。
  3. 如果您希望模板可用于所有位置和组织,请选择 默认
  4. 直接在模板编辑器中创建模板,或者通过单击 Import 从文本文件导入模板。有关导入模板的更多信息,请参阅 第 8.5 节 “导入报告模板”
  5. 可选:在 Audit Comment 字段中,您可以添加有关此模板的任何有用信息。
  6. Input 选项卡,在 Name 字段中输入您可以在模板中引用的输入名称,其格式如下: 输入('name')。请注意,您必须先保存模板,然后才能在模板正文中引用此输入值。
  7. 选择输入值是否是必需的。如果输入值是必需的,请选择 Required 复选框。
  8. Value Type 列表中,选择用户必须输入的输入值类型。
  9. 可选:如果要将 facts 用于模板输入,请选择 Advanced 复选框。
  10. 可选: 在 Options 字段中,定义用户可以从中选择的选项。如果此字段未定义,用户会收到一个自由文本字段,他们可以输入想要的值。
  11. 可选:在 Default 字段中输入一个值,如主机名,您要设置为默认模板输入。
  12. 可选:在 Description 字段中,您可以输入您要在生成报告时显示为内联帮助的信息。
  13. 可选:点 Type 选项卡,然后选择此模板是否是一个要包含在其他模板中的代码片段。
  14. Location 选项卡,并添加您要使用模板的位置。
  15. 单击 Organizations 选项卡,再添加您要使用该模板的组织。
  16. 单击 Submit 以保存您的更改。

8.3. 导出报告模板

您可以导出您在 Satellite 中创建的报告模板。

流程

  1. 在 Satellite Web UI 中,导航到 Monitor > Report Templates
  2. 找到您要导出的模板,然后从 Actions 列中的列表中,选择 Export
  3. 对您要下载的每个报告模板重复此步骤。

包含模板下载的 .erb 文件。

对于 CLI 用户

  1. 要查看可用于导出的报告模板,请输入以下命令:

    # hammer report-template list

    记下要在此命令的输出中导出的模板 ID。

  2. 要导出报告模板,请输入以下命令:

    # hammer report-template dump --id template_ID > example_export.erb

8.4. 使用 Satellite API 导出报告模板

您可以使用 Satellite report_templates API 从 Satellite 导出报告模板。有关使用 Satellite API 的更多信息,请参阅 API 指南

流程

  1. 使用以下请求检索可用报告模板列表:

    请求示例:

    $ curl --insecure --user admin:redhat \
    --request GET \
    --config https://satellite.example.com/api/report_templates \
    | json_reformat

    在本例中,json_reformat 工具用于格式化 JSON 输出。

    响应示例:

    {
        "total": 6,
        "subtotal": 6,
        "page": 1,
        "per_page": 20,
        "search": null,
        "sort": {
            "by": null,
            "order": null
        },
        "results": [
            {
                "created_at": "2019-11-20 17:49:52 UTC",
                "updated_at": "2019-11-20 17:49:52 UTC",
                "name": "Applicable errata",
                "id": 112
            },
            {
                "created_at": "2019-11-20 17:49:52 UTC",
                "updated_at": "2019-11-20 17:49:52 UTC",
                "name": "Applied Errata",
                "id": 113
            },
            {
                "created_at": "2019-11-30 16:15:24 UTC",
                "updated_at": "2019-11-30 16:15:24 UTC",
                "name": "Hosts - complete list",
                "id": 158
            },
            {
                "created_at": "2019-11-20 17:49:52 UTC",
                "updated_at": "2019-11-20 17:49:52 UTC",
                "name": "Host statuses",
                "id": 114
            },
            {
                "created_at": "2019-11-20 17:49:52 UTC",
                "updated_at": "2019-11-20 17:49:52 UTC",
                "name": "Registered hosts",
                "id": 115
            },
            {
                "created_at": "2019-11-20 17:49:52 UTC",
                "updated_at": "2019-11-20 17:49:52 UTC",
                "name": "Subscriptions",
                "id": 116
            }
        ]
    }

  2. 记录下您要导出的模板的 id,并使用以下请求导出模板:

    请求示例:

    $ curl --insecure --output /tmp/_Example_Export_Template.erb_ \
    --user admin:password --request GET --config \
    https://satellite.example.com/api/report_templates/158/export

    请注意,158 是要导出的模板的示例 ID。

    在本例中,导出的模板被重定向到 host_complete_list.erb

8.5. 导入报告模板

您可以将报告模板导入到您要创建的新模板的正文中。请注意,使用 Web UI,您只能单独导入模板。对于批量操作,请使用 Satellite API。更多信息请参阅 第 8.6 节 “使用 Satellite API 导入报告模板”

前提条件

流程

  1. 在 Satellite Web UI 中,导航到 Monitor > Report Templates,然后在 Report Templates 窗口的右上角点 Create Template
  2. Editor 选项卡的右上角,点文件夹图标,然后选择您要导入的 .erb 文件。
  3. 编辑模板以符合您的要求,然后单击 Submit

有关自定义新模板的详情,请参考 附录 A, 模板编写参考

8.6. 使用 Satellite API 导入报告模板

您可以使用 Satellite API 将报告模板导入到 Satellite。使用 Satellite API 导入报告模板会自动解析报告模板元数据并分配组织和位置。有关使用 Satellite API 的更多信息,请参阅 API 指南

前提条件

流程

  1. 使用以下示例格式化您要导入到 .json 文件中的模板:

    # cat Example_Template.json
    {
        "name": "Example Template Name",
        "template": "
        Enter ERB Code Here
    "
    }

    使用 ERB 模板的 JSON 文件示例:

    {
        "name": "Hosts - complete list",
        "template": "
    <%#
    name: Hosts - complete list
    snippet: false
    template_inputs:
    - name: host
      required: false
      input_type: user
      advanced: false
      value_type: plain
      resource_type: Katello::ActivationKey
    model: ReportTemplate
    -%>
    <% load_hosts(search: input('host')).each_record do |host| -%>
    <%
          report_row(
              'Server FQND': host.name
          )
    -%>
    <%  end -%>
    <%= report_render %>
    "
    }

  2. 使用以下请求导入模板:

    $ curl --insecure --user admin:redhat \
    --data @Example_Template.json --header "Content-Type:application/json" \
    --request POST --config https://satellite.example.com/api/report_templates/import
  3. 使用以下请求来检索报告模板列表,并验证您可以在 Satellite 中查看模板:

    $ curl --insecure --user admin:redhat \
     --request GET --config https://satellite.example.com/api/report_templates | json_reformat

8.7. 创建报告模板以监控权利

您可以使用报告模板返回具有特定订阅的主机列表,并显示这些主机的内核数。

有关编写模板的更多信息,请参阅 附录 A, 模板编写参考

流程

  1. 在 Satellite Web UI 中,导航到 Monitor > Report Templates,然后点 Create Template
  2. 可选:在 Editor 字段中,使用 <%# > tags 添加注释,其中包含稍后引用可能有用的信息。例如:

    <%#
    name: Entitlements
    snippet: false
    model: ReportTemplate
    require:
    - plugin: katello
      version: 3.14.0
    -%>
  3. 使用 load_hosts () 宏添加一行,并使用以下方法和变量填充宏:

    <%- load_hosts(includes: [:lifecycle_environment, :operatingsystem, :architecture, :content_view, :organization, :reported_data, :subscription_facet, :pools => [:subscription]]).each_record do |host| -%>

    要查看您可以使用的变量列表,请点 Help 选项卡和 Safe 模式 方法和变量 表中,找到 Host::Managed 行。

  4. 使用 每个 方法添加带有 host.pools 变量的行,例如:

    <%- host.pools.each do |pool| -%>
  5. 使用 report_row () 方法添加一行,以创建报告并添加您要目标的变量作为报告的一部分:

    <%-     report_row(
              'Name': host.name,
              'Organization': host.organization,
              'Lifecycle Environment': host.lifecycle_environment,
              'Content View': host.content_view,
              'Host Collections': host.host_collections,
              'Virtual': host.virtual,
              'Guest of Host': host.hypervisor_host,
              'OS': host.operatingsystem,
              'Arch': host.architecture,
              'Sockets': host.sockets,
              'RAM': host.ram,
              'Cores': host.cores,
              'SLA': host_sla(host),
              'Products': host_products(host),
              'Subscription Name': sub_name(pool),
              'Subscription Type': pool.type,
              'Subscription Quantity': pool.quantity,
              'Subscription SKU': sub_sku(pool),
              'Subscription Contract': pool.contract_number,
              'Subscription Account': pool.account_number,
              'Subscription Start': pool.start_date,
              'Subscription End': pool.end_date,
              'Subscription Guest': registered_through(host)
              ) -%>
  6. 在模板中添加 end 语句:

    <%-   end -%>
    <%- end -%>
  7. 要生成报告,您必须添加 <%= report_render -%> 宏:

    <%= report_render -%>
  8. 单击 Submit 以保存模板。

8.8. 报告模板安全模式

在 Satellite 中创建报告模板时,默认启用安全模式。安全模式限制在报告模板中使用的宏和变量。安全模式可防止呈现问题并在报告模板中实施最佳实践。Satellite Web UI 中提供了支持的宏和变量列表。

要查看可用的宏和变量,在 Satellite Web UI 中进入 Monitor > Report Templates 并点 Create Template。在 Create Template 窗口中,单击 Help 选项卡并展开 Safe 模式方法

虽然启用了安全模式,但如果您尝试使用在 Safe 模式方法 中没有列出的宏或变量,则模板编辑器会显示错误消息。

要在 Satellite 中查看安全模式的状态,在 Satellite Web UI 中导航到 Administer > Settings 并点 Provisioning 选项卡。找到 Safemode 呈现 行以检查值。

第 9 章 配置主机集合

主机集合是一组内容主机。此功能允许您一次对多个主机执行相同的操作。这些操作可以包括安装、删除和更新软件包和勘误表,更改分配的生命周期环境,以及内容视图更改。您可以创建主机集合以满足您的要求,以及您公司的要求。例如,根据功能、部门或业务单元对主机集合中的主机进行分组。

9.1. 创建主机集合

以下流程演示了如何创建主机集合。

要创建主机集合,请执行以下操作:

  1. Hosts > Host Collections
  2. 单击 New Host Collection
  3. 添加主机集合的名称。
  4. 清除 Unlimited Content Hosts,并在 Limit 字段中输入所需的最大主机数量。
  5. 添加主机集合的描述。
  6. 点击 Save

对于 CLI 用户

运行以下命令来创建主机集合:

# hammer host-collection create \
--organization "Your_Organization" \
--name hc_name

9.2. 克隆主机集合

以下步骤演示了如何克隆主机集合。

要克隆主机集合,请执行以下操作:

  1. Hosts > Host Collections
  2. 在左侧面板中,单击您要克隆的主机集合。
  3. 单击 Copy Collection
  4. 为克隆的集合指定一个名称。
  5. Create

9.3. 删除主机集合

以下步骤演示了如何删除主机集合。

删除主机集合:

  1. Hosts > Host Collections
  2. 选择要删除的主机集合。
  3. 单击 Remove。此时会出现警报框:

    Are you sure you want to remove host collection Host Collection Name?
  4. 单击 Remove

9.4. 将主机添加到主机集合

以下步骤演示了如何将主机添加到主机集合。

先决条件

主机必须注册到 Red Hat Satellite,才能将其添加到主机集合。有关注册主机的详情请参考 第 3 章 注册主机

请注意,如果您将主机添加到主机集合,则 Satellite 审计系统不会记录更改。

将主机添加到主机集合:

  1. Hosts > Host Collections
  2. 单击应添加主机的主机集合。
  3. 在" 主机 "选项卡上,选择 添加 子选项卡。
  4. 从表中选择要添加的主机,然后单击 Add Selected

对于 CLI 用户

要将主机添加到主机集合,请输入以下命令:

# hammer host-collection add-host \
--id hc_ID \
--host-ids host_ID1,host_ID2...

9.5. 从主机集合中删除主机

以下步骤演示了如何从主机集合中删除主机。

请注意,如果您从主机集合中删除主机,则不会修改数据库中的主机集合记录,以便 Satellite 审计系统不会记录更改。

从主机集合中删除主机:

  1. Hosts > Host Collections
  2. 选择所需的主机集合。
  3. 在" 主机 "选项卡上,选择" 列出/删除 "子选项卡。
  4. 从主机集合中选择您要删除的主机,然后单击 Remove Selected

9.6. 将内容添加到主机集合

这些步骤演示了如何将内容添加到 Red Hat Satellite 中的主机集合。

9.6.1. 在主机集合中添加软件包

以下流程演示了如何将软件包添加到主机集合。

先决条件

  • 要添加的内容应该在其中一个现有软件仓库中可用,或者在此流程前添加。
  • 内容应提升为分配到主机的环境。

要将软件包添加到主机集合:

  1. Hosts > Host Collections
  2. 单击应添加软件包的主机集合。
  3. 集合操作 选项卡上,单击 Package Installation、Removal 和 Update
  4. 要更新所有软件包,请单击 Update All Packages 按钮以使用默认方法。或者,选择按钮右侧的下拉图标来选择要使用的方法。选择 via remote execution - 自定义第一个 菜单条目将使您进入 作业调用 页面,您可以在其中自定义该操作。
  5. 根据需要选择 PackagePackage Group 单选按钮。
  6. 在提供的字段中,指定软件包或软件包组名称。然后点:

    • install - 使用默认方法安装新软件包。或者,选择按钮右侧的下拉图标并选择要使用的方法。选择 via remote execution - 自定义第一个 菜单条目将使您进入 作业调用 页面,您可以在其中自定义该操作。
    • 更新 - 以使用默认方法更新主机集合中的现有软件包。或者,选择按钮右侧的下拉图标并选择要使用的方法。选择 via remote execution - 自定义第一个 菜单条目将使您进入 作业调用 页面,您可以在其中自定义该操作。

9.6.2. 将勘误添加到主机集合

以下步骤演示了如何将勘误表添加到主机集合。

先决条件

  • 要添加的勘误应该在其中一个现有软件仓库中提供,或者在此流程前添加。
  • 勘误表应提升到要分配主机的环境。

要在主机集合中添加勘误:

  1. Hosts > Host Collections
  2. 选择应添加勘误表的主机集合。
  3. Collection Actions 选项卡上,点 Errata Installation
  4. 选择您要添加到主机集合中的勘误表,然后单击 Install Selected 按钮以使用默认方法。或者,选择按钮右侧的下拉图标来选择要使用的方法。选择 via remote execution - 自定义第一个 菜单条目将使您进入 作业调用 页面,您可以在其中自定义该操作。

9.7. 从主机集合中删除内容

以下流程演示了如何从主机集合中删除软件包。

从主机集合中删除内容:

  1. Hosts > Host Collections
  2. 单击应当删除软件包的主机集合。
  3. 集合操作 选项卡上,单击 Package Installation、Removal 和 Update
  4. 根据需要选择 PackagePackage Group 单选按钮。
  5. 在提供的字段中,指定软件包或软件包组名称。
  6. 单击 Remove 按钮,以使用默认方法删除软件包或软件包组。或者,选择按钮右侧的下拉图标并选择要使用的方法。选择 via remote execution - 自定义第一个 菜单条目将使您进入 作业调用 页面,您可以在其中自定义该操作。

9.8. 更改主机集合的生命周期环境或内容视图

以下步骤演示了如何更改所分配的生命周期环境或主机集合的内容视图。

要更改主机集合的生命周期环境或内容视图:

  1. Hosts > Host Collection
  2. 选择应更改生命周期环境或内容视图的主机集合。
  3. Collection Actions 选项卡上,单击 Change assigned Life Cycle Environment 或 Content View
  4. 选择要分配到主机集合的生命周期环境。
  5. 从列表中选择所需的内容视图。
  6. 单击 分配

    注意

    更改在大约 4 小时内生效。要使更改生效,请在主机上输入以下命令:

    # subscription-manager refresh

    您可以使用远程执行同时在多个主机上运行此命令。

第 10 章 配置和设置远程作业

使用本节作为将 Satellite 配置为在远程主机上执行作业的指南。

要应用到远程主机的任何命令都必须定义为作业模板。定义了作业模板后,您可以多次执行它。

10.1. 关于在主机上运行作业

您可以使用 shell 脚本或 Ansible 任务和 playbook 在主机上从胶囊远程运行作业。这称为远程执行。

对于您创建的自定义 Ansible 角色或您下载的角色,您必须安装包含胶囊基础操作系统上角色的软件包。在使用 Ansible 角色之前,您必须将角色从安装它们的 Capsule 中导入到卫星中。

通信通过胶囊服务器进行,这意味着卫星服务器不需要直接访问目标主机,并可扩展为管理许多主机。远程执行使用必须在目标主机上启用和运行的 SSH 服务。确保远程执行胶囊可以访问目标主机上的端口 22。

Satellite 使用 ERB 语法作业模板。如需更多信息,请参阅管理 主机 指南中的模板编写参考

默认情况下,包括 shell 脚本和 Ansible 的多个作业模板。更多信息请参阅 第 10.14 节 “设置作业模板”

默认情况下,卫星服务器配置为使用 Katello Agent 而不是远程执行。要更改此设置,请导航到 Administer > Settings,点 Content,然后更改 Use remote execution by default 设置。

注意

任何胶囊服务器基础操作系统是卫星服务器的内部胶囊的客户端,因此本节适用于连接到卫星服务器的任何类型的主机,包括胶囊。

您可以一次在多个主机上运行作业,您可以在命令中使用变量来更精细地控制您运行的作业。您可以使用主机事实和参数来填充变量值。

另外,您可以在运行命令时为模板指定自定义值。

更多信息请参阅 第 10.15 节 “执行远程作业”

10.2. 远程执行工作流

在主机上运行远程作业时,对于每个主机,卫星将执行以下操作来查找要使用的远程执行胶囊。

卫星仅搜索启用了远程执行功能的胶囊。

  1. Satellite 找到选择了 Remote execution 复选框的主机接口。
  2. Satellite 查找这些接口的子网。
  3. 卫星查找分配给这些子网的远程执行胶囊。
  4. 从这组胶囊中,卫星选择具有最少运行作业数量的胶囊。通过执行此操作,卫星将确保远程执行胶囊之间作业负载平衡。
  5. 如果卫星在此阶段找不到远程执行胶囊,并且启用了 Fallback 到 Any Capsule 设置,则卫星会添加另一组胶囊,以从中选择远程执行胶囊。Satellite 从分配给主机的以下类型的胶囊中选择最轻量的载入的胶囊:

    • DHCP、DNS 和 TFTP 胶囊分配给主机的子网
    • 分配给主机的域的 DNS 胶囊
    • 分配给主机的域的 realm Capsule
    • Puppet Master Capsule
    • Puppet CA Capsule
    • OpenSCAP Capsule
  6. 如果卫星在此阶段找不到远程执行胶囊,并且如果启用了 Enable Global Capsule 设置,则卫星会从主机组织和位置集合中选择最轻量的远程执行胶囊,以执行远程作业。

10.3. 为远程执行委派权限

您可以控制哪些用户可以在基础架构中运行哪些作业,包括它们可以针对哪些主机。远程执行功能提供两个内置角色:

  • 远程执行管理器 :此角色允许访问所有远程执行特性和功能。
  • 远程执行用户 :此角色仅允许运行作业;它不提供修改作业模板的权限。

您可以克隆 Remote Execution User 角色,并自定义其过滤器以增加粒度。如果您使用 view_job_templates 权限调整过滤器,则用户只能根据匹配的作业模板查看和触发作业。您可以使用 view_hostsview_smart_proxies 权限来限制角色可以看到哪些主机或胶囊。

execute_template_invocation 权限是一个特殊权限,在执行作业开始前立即检查。此权限定义您可以在特定主机上运行的作业模板。这在指定权限时允许更多粒度。有关使用角色和权限的更多信息,请参阅 管理 Red Hat Satellite 中的创建和管理角色

以下示例显示了 execute_template_invocation 权限的过滤器:

name = Reboot and host.name = staging.example.com
name = Reboot and host.name ~ *.staging.example.com
name = "Restart service" and host_group.name = webservers

本例中的第一行允许用户将 Reboot 模板应用到一个选定的主机。第二行定义了名称以 .staging.example.com 结尾的主机池。第三行将模板与主机组绑定。

注意

分配给用户的权限可能会随时间改变。如果用户已计划一些作业来在以后运行,并且权限已更改,这可能会导致执行失败,因为权限会在作业执行前立即检查。

10.4. 创建作业模板:

  1. 进入 Hosts > Job templates
  2. 单击 New Job Template
  3. Template 选项卡,在 Name 字段中输入您的作业模板的唯一名称。
  4. 选择 Default 以使模板可用于所有组织和位置。
  5. 直接在模板编辑器中创建模板,或者通过单击 Import 从文本文件上传。
  6. 可选:在 Audit Comment 字段中,添加有关更改的信息。
  7. 点击 Job 选项卡,在 Job category 字段中输入您自己的类别,或者从 第 B.2 节 “默认任务模板类别” 中列出的默认类别中进行选择。
  8. 可选:在 Description Format 字段中输入描述模板。例如,Install package %{package_name}.您还可以在模板中使用 %{template_name}%{job_category}
  9. Provider Type 列表,为 shell 脚本选择 SSH,为 Ansible 任务或 playbook 选择 Ansible。
  10. 可选:在 Timeout to kill 字段中,输入超时值,以在未完成时终止作业。
  11. 可选:点 Add Input 来定义输入参数。在执行作业时请求参数,且不必在模板中定义。有关示例,请参阅 帮助 选项卡。
  12. 可选:点 Foreign input set 来在此作业中包含其他模板。
  13. 可选:在 Effective user 区域中,在命令无法使用默认的 remote_execution_effective_user 设置时配置用户。
  14. 可选:如果此模板是要包含在其他模板中的代码片段,点 Type 选项卡并选择 Snippet
  15. Location 选项卡,并添加您要使用模板的位置。
  16. 单击 Organizations 选项卡,再添加您要使用该模板的组织。
  17. 单击 Submit 以保存您的更改。

您可以通过在模板语法中包含其他模板来扩展和自定义模板。如需更多信息,请参阅管理主机指南中的 附加程序

对于 CLI 用户

要使用 template-definition 文件创建作业模板,请输入以下命令:

# hammer job-template create \
--file "path_to_template_file" \
--name "template_name" \
--provider-type SSH \
--job-category "category_name"

10.5. 将 Fallback 配置为 Satellite 中的任何 Capsule Remote Execution Setting

您可以启用 Fallback 到 Any Capsule 设置,以配置卫星,从分配给主机的胶囊列表中搜索远程执行胶囊。如果您需要在没有配置子网的主机上运行远程作业,或者主机子网被分配给没有启用远程执行功能的胶囊,这将非常有用。

如果启用了 Fallback 到 Any Capsule 设置,卫星会添加另一组胶囊,以从中选择远程执行胶囊。Satellite 还从分配给主机的所有胶囊集选择最轻量的载入的胶囊,如下所示:

  • DHCP、DNS 和 TFTP 胶囊分配给主机的子网
  • 分配给主机的域的 DNS 胶囊
  • 分配给主机的域的 realm Capsule
  • Puppet Master Capsule
  • Puppet CA Capsule
  • OpenSCAP Capsule

流程

  1. 在 Satellite Web UI 中,导航到 Administer > Settings
  2. 单击 RemoteExecution
  3. 将 Fallback 配置为 Any Capsule 设置。

对于 CLI 用户

在 Satellite 上输入 hammer settings set 命令,将 Fallback 配置为任何 Capsule 设置。例如,要将值设为 true,请输入以下命令:

# hammer settings set --name=remote_execution_fallback_proxy --value=true

10.6. 在 Satellite 中配置全局胶囊远程执行设置

默认情况下,无论为主机的子网是否分配了胶囊,Satellite 会在主机组织和位置中搜索远程执行胶囊。如果要将搜索限制为分配给主机子网的胶囊,可以禁用 Enable Global Capsule 设置。

如果启用了 Enable Global Capsule 设置,卫星会添加另一组胶囊,以从中选择远程执行胶囊。卫星还从主机组织和位置中的所有胶囊集合中选择最轻量的远程执行胶囊,以执行远程作业。

流程

  1. 在 Satellite Web UI 中,导航到 Administer > Settings
  2. 单击 RemoteExection
  3. 配置 Enable Global Capsule 设置。

对于 CLI 用户

在 Satellite 上输入 hammer settings set 命令,以配置 Enable Global Capsule 设置。例如,要将值设为 true,请输入以下命令:

# hammer settings set --name=remote_execution_global_proxy --value=true

10.7. 将 Satellite 配置为使用备用目录在主机上执行远程作业

默认情况下,Satellite 使用客户端系统上的 /var/tmp 目录来执行远程执行作业。如果客户端系统为 /var/ 卷或文件系统设置了 noexec,您必须将 Satellite 配置为使用替代目录,因为远程执行作业会失败,因为脚本无法运行。

流程

要使用其他目录,请完成此流程。

  1. 创建新目录,如 new_place

    # mkdir /remote_working_dir
  2. 从默认 var 目录中复制 SELinux 上下文:

    # chcon --reference=/var /remote_working_dir
  3. 编辑 /etc/foreman-proxy/settings.d/remote_execution_ssh.yml 文件中的 remote_working_dir 设置以指向所需的目录,例如:

    :remote_working_dir: /remote_working_dir

10.8. 为远程执行发布 SSH 密钥

要使用 SSH 密钥对远程执行连接进行身份验证,您必须将公共 SSH 密钥从 Capsule 分发到您要管理的附加主机。确保 SSH 服务已启用并在主机上运行。配置任何网络或基于主机的防火墙,以启用对端口 22 的访问。

使用以下方法之一将公共 SSH 密钥从 Capsule 分发到目标主机:

默认情况下,Satellite 分发用于远程执行功能的 SSH 密钥到从 Satellite 调配的主机。

如果主机在 Amazon Web Services 上运行,启用密码身份验证。如需更多信息,请参阅 https://aws.amazon.com/premiumsupport/knowledge-center/new-user-accounts-linux-instance

10.9. 为远程执行发布 SSH 密钥

要手动分发 SSH 密钥,请完成以下步骤:

流程

  1. 在 Capsule 上输入以下命令。对您要管理的每个目标主机重复此操作:

    # ssh-copy-id -i ~foreman-proxy/.ssh/id_rsa_foreman_proxy.pub root@target.example.com
  2. 要确认密钥已成功复制到目标主机,请在 Capsule 上输入以下命令:

    # ssh -i ~foreman-proxy/.ssh/id_rsa_foreman_proxy root@target.example.com

10.10. 使用 Satellite API 为远程执行提供 SSH 密钥

要使用 Satellite API 从胶囊下载公钥,请在每个目标主机上完成此步骤。

流程

  1. 在目标主机上,创建 /.ssh 目录来存储 SSH 密钥:

    # mkdir ~/.ssh
  2. 从 Capsule 下载 SSH 密钥:

    # curl https://capsule.example.com:9090/ssh/pubkey >> ~/.ssh/authorized_keys
  3. ~/.ssh 目录配置权限:

    # chmod 700 ~/.ssh
  4. authorized_keys 文件配置权限:

    # chmod 600 ~/.ssh/authorized_keys

10.11. 在置备过程中将 Kickstart 模板配置为 Distribute SSH 密钥

您可以将 remote_execution_ssh_keys 代码片段添加到自定义 kickstart 模板,以在置备期间将 SSH 密钥部署到主机。Satellite 默认附带的 Kickstart 模板包括这个片断。因此,Satellite 在调配期间将用于远程执行的 SSH 密钥复制到系统。

流程

  • 要在新置备的主机中包含公钥,请在您使用的 Kickstart 模板中添加以下片断:

    <%= snippet 'remote_execution_ssh_keys' %>

10.12. 为 Kerberos Ticket Granting Ticket 配置 keytab

使用这个流程将 Satellite 配置为使用 keytab 获取 Kerberos 票据授予票据。如果没有设置 keytab,则必须手动检索票据。

流程

要确保 Satellite 上的 foreman-proxy 用户可以获取 Kerberos 票据授予票据,请完成以下步骤:

  1. 查找 foreman-proxy 用户的 ID:

    # id -u foreman-proxy
  2. 修改 umask 值,以便新文件具有权限 600

    # umask 077
  3. 为 keytab 创建目录:

    # mkdir -p "/var/kerberos/krb5/user/USER_ID"
  4. 创建 keytab,或将现有 keytab 复制到目录中:

    # cp your_client.keytab /var/kerberos/krb5/user/USER_ID/client.keytab
  5. 将目录所有者改为 foreman-proxy 用户:

    # chown -R foreman-proxy:foreman-proxy "/var/kerberos/krb5/user/USER_ID"
  6. 确保 keytab 文件为只读:

    # chmod -wx "/var/kerberos/krb5/user/USER_ID/client.keytab"
  7. 恢复 SELinux 上下文:

    # restorecon -RvF /var/kerberos/krb5

10.13. 为远程执行配置 Kerberos 身份验证

您可以使用 Kerberos 身份验证在 Satellite 主机上建立用于远程执行的 SSH 连接。

先决条件

在 Red Hat Satellite 上对远程执行使用 Kerberos 身份验证前,您必须为身份管理设置 Kerberos 服务器,并确保完成以下先决条件:

  • 在 Kerberos 服务器上注册卫星服务器
  • 在 Kerberos 服务器上注册 Satellite 目标主机
  • 配置并初始化用于远程执行的 Kerberos 用户帐户
  • 确保 Satellite 上的 foreman-proxy 用户具有有效的 Kerberos 票据授予票据

流程

要将 Satellite 设置为对主机上远程执行使用 Kerberos 身份验证,请完成以下步骤:

  1. 要为远程执行安装并启用 Kerberos 身份验证,请输入以下命令:

    # satellite-installer --scenario satellite \
     --foreman-proxy-plugin-remote-execution-ssh-ssh-kerberos-auth true
  2. 要编辑用于远程执行的默认用户,请在 Satellite Web UI 中导航到 Administer > Settings 并点击 RemoteExecution 选项卡。在 SSH User 行中,编辑第二列并为 Kerberos 帐户添加用户名。
  3. 导航到 remote_execution_effective_user,再编辑第二列,为 Kerberos 帐户添加用户名。

要确认 Kerberos 身份验证已准备就绪,请在主机上运行远程作业。

10.14. 设置作业模板

Satellite 提供了可用于执行作业的默认作业模板。要查看作业模板列表,请导航到 Hosts > Job templates。如果要在不进行更改的情况下使用模板,请继续 第 10.15 节 “执行远程作业”

您可以使用默认模板作为自己开发的基础。默认作业模板被锁定进行编辑。克隆模板并编辑克隆。

  1. 要克隆模板,请在 Actions 列中选择 Clone
  2. 输入克隆的唯一名称,然后单击 Submit 以保存更改。

作业模板使用嵌入式 Ruby (ERB)语法。有关编写模板的更多信息,请参阅 管理主机 指南中的模板编写参考

Ansible 注意事项

要创建 Ansible 作业模板,请使用以下流程,而不使用 ERB 语法,请使用 YAML 语法。使用 --- 开始模板。您可以将 Ansible playbook YAML 文件嵌入到作业模板正文中。您还可以添加 ERB 语法来自定义 YAML Ansible 模板。您也可以在卫星中导入 Ansible playbook。如需更多信息, 请参阅管理主机 指南中的 同步存储库模板。

参数变量

在运行时,作业模板可以接受您为主机定义的参数变量。请注意,只有主机编辑页面中的 Parameters 选项卡上显示的参数可以用作作业模板的输入参数。如果您不希望 Ansible 作业模板在运行时接受参数变量,在 Satellite Web UI 中,导航到 Administer > Settings 并点 Ansible 标签页。在 Top 级别 Ansible 变量 行中,将 Value 参数更改为 No

10.15. 执行远程作业

您可以对一个或多个主机执行基于作业模板的作业。

流程

  1. 导航到 Hosts > All Hosts,并选择您要在其上执行远程作业的目标主机。您可以使用搜索字段来过滤主机列表。
  2. Select Action 列表中,选择 Schedule Remote Job
  3. Job invocation 页面中,定义主作业设置:
  4. 选择 Job category 和要使用的 Job 模板
  5. 可选:在 Bookmark 列表中选择一个存储的搜索字符串,以指定目标主机。
  6. 可选:通过输入搜索查询 来限制目标主机。Resolves to 行显示受您的查询影响的主机数量。在更改查询后,使用 refresh 按钮重新计算数量。preview 图标列出目标主机。
  7. 剩余的设置取决于所选的作业模板。有关在模板中添加自定义参数的信息,请参阅 第 10.4 节 “创建作业模板:”
  8. 可选: 要为作业配置高级设置,请点击 Display advanced fields。一些高级设置取决于作业模板,一般如下:

    • 有效的 用户定义执行作业的用户,默认为 SSH 用户。
    • 并发级别 定义一次执行的最大作业数,这可以防止在大量主机上执行作业时导致系统资源过载。
    • 超时终止 可定义应终止作业的时间间隔(以秒为单位)。一个任务在定义间隔内无法启动,例如,如果上一个任务用时过长才能完成,则会取消。
    • 查询 类型定义在评估搜索查询的时间。这有助于保持查询对调度任务的查询最新。
    • 执行排序 决定了在主机上执行作业的顺序:字母或随机化。

      通过 并发级别 和超时 来终止 设置,您可以定制作业执行以适应基础架构硬件和需求。

  9. 若要立即运行作业,请确保 Schedule 设置为 Execute now。您还可以定义一次性将来的作业,或设置周期性作业。对于周期性任务,您可以定义开始和结束日期、数量和运行的频率。您还可以使用 cron 语法来定义重复。有关 cron 的更多信息,请参阅 Red Hat Enterprise Linux 7 系统管理员指南中的 自动系统任务 部分。
  10. Submit。这将显示 Job Overview 页面,作业完成后,也会显示作业的状态。

对于 CLI 用户

在 Satellite 中输入以下命令:

# hammer settings set --name=remote_execution_global_proxy --value=false

要使用自定义参数执行远程作业,请完成以下步骤:

  1. 查找要使用的作业模板的 ID:

    # hammer job-template list
  2. 显示模板详情以查看模板所需的参数:

    # hammer job-template info --id template_ID
  3. 使用自定义参数执行远程作业:

    # hammer job-invocation create \
    --job-template "template_name" \
    --inputs key1="value",key2="value",... \
    --search-query "query"

    使用定义主机的过滤器表达式替换 query,例如 "name ~ rex01 "。有关使用 hammer 执行远程命令的更多信息,请输入 hammer job-template --helphammer job-invocation --help

10.16. 监控作业

您可以在作业运行时监控作业的进度。这可帮助执行任何可能需要的故障排除。

Ansible 作业在 100 个主机的批处理上运行,因此您无法取消在特定主机上运行的作业。只有在 Ansible playbook 在批处理中的所有主机上运行后,作业才会完成。

流程

  1. 导航到 Job 页面。如果您使用 Execute now 设置触发了作业,则会自动显示此页面。要监控调度的作业,请导航到 Monitor > Jobs 并选择您要检查的作业运行。
  2. 在 Job 页面上,单击 Hosts 选项卡。这将显示在其上运行该作业的主机列表。
  3. Host 列中,单击您要检查的主机的名称。这将显示 Commands 页面的详细信息,您可以在其中实时监控作业执行。
  4. 随时单击 Back to Job,以返回到 Job Details 页面。

对于 CLI 用户

要在作业运行时监控作业的进度,请完成以下步骤:

  1. 查找作业的 ID:

    # hammer job-invocation list
  2. 监控作业输出:

    # hammer job-invocation output \
    --id job_ID \
    --host host_name
  3. 可选:要取消作业,请输入以下命令:

    # hammer job-invocation cancel \
    --id job_ID

第 11 章 没有 Goferd 的主机管理

Katello 代理使用 goferd 服务来管理内容主机上的软件包会消耗大量资源。要减少内容主机上的内存和 CPU 负载,您可以通过远程执行管理软件包。如果没有 goferd,您可以使用 katello-host-toolssubscription-manager 管理主机。请注意,Katello 代理已弃用,并将在以后的 Satellite 版本中删除;因此,使用远程执行将是管理主机上软件包的唯一方法。

11.1. 使用 Subscription-Manager 进行主机管理

先决条件

  • 对于 Red Hat Enterprise Linux 7 主机,请确保 subscription-manager 软件包是 1.24.13-3.el7_7 或更高版本的版本。

流程

  1. 在内容主机上的 /etc/rhsm/rhsm.conf 文件中设置 package_profile_on_trans=1。这将在每次 yum 事务后,将提示 subscription-manager 上传主机的软件包配置文件。
  2. 在内容主机上停止 goferd 服务:

    # systemctl stop goferd.service
  3. 在内容主机上禁用 goferd 服务:

    # systemctl disable goferd.service
  4. 删除内容主机上的 Katello 代理:

    警告

    如果您的主机安装在 Red Hat Virtualization 版本 4.4 或较低版本上,请不要删除 katello-agent 软件包,因为删除的依赖关系会破坏主机。

    # yum remove katello-agent
  5. 将 SSH 密钥分发到内容主机。更多信息请参阅 第 10.8 节 “为远程执行发布 SSH 密钥”
  6. 在 Satellite Web UI 中,导航到 Administer > Settings
  7. 选择 内容选项卡
  8. 默认情况下 Use remote execution 设置为 Yes。Satellite 服务器现在通过远程执行使用主机管理,而不是 goferd。

Hammer 限制

如果您使用 hammer 命令推送勘误表,则适用以下内容。hammer 命令依赖于 goferd 来管理内容主机的勘误表。作为临时解决方案,使用 Satellite 远程执行功能来应用勘误表。例如,输入以下命令在 host123.example.org 上执行 yum -y update

+

# hammer job-invocation create \
--job-template "Run Command - SSH Default" \
--inputs command="yum -y update" \
--search-query "name ~ host123"
Job invocation 24 created
[.........................................] [100%]
1 task(s), 1 success, 0 fail
注意

如果您使用 katello-host-tools-tracer fuctionality,则需要 katello-host-tools 作为依赖项。

11.2. 使用 Katello-Host-Tools 的主机管理

先决条件

流程

  1. 在内容主机上安装 katello-host-tools 软件包:

    # yum install katello-host-tools
  2. 在内容主机上停止 goferd 服务:

    # systemctl stop goferd.service
  3. 在内容主机上禁用 goferd 服务:

    # systemctl disable goferd.service
  4. 删除内容主机上的 Katello 代理:

    警告

    如果您的主机安装在 Red Hat Virtualization 版本 4.4 或较低版本上,请不要删除 katello-agent 软件包,因为删除的依赖关系会破坏主机。

    # yum remove katello-agent
  5. 将 SSH 密钥分发到内容主机。更多信息请参阅 第 10.8 节 “为远程执行发布 SSH 密钥”
  6. 在 {ProjectWebUI} 中,导航到 Administer > Settings
  7. 选择 内容选项卡
  8. 默认情况下 Use remote execution 设置为 Yes

Satellite 服务器现在通过远程执行使用主机管理,而不是 goferd。

Hammer 限制

如果您使用 hammer 命令推送勘误表,则适用以下内容。hammer 命令依赖于 goferd 来管理内容主机的勘误表。作为临时解决方案,使用 Satellite 远程执行功能来应用勘误表。

例如,输入以下命令在 host123.example.org 上执行 yum -y update

# hammer job-invocation create \
--job-template "Run Command - SSH Default" \
--inputs command="yum -y update" \
--search-query "name ~ host123"
Job invocation 24 created
[.........................................] [100%]
1 task(s), 1 success, 0 fail

第 12 章 同步模板存储库

在 Satellite 中,您可以在卫星服务器和版本控制系统或本地目录之间同步作业模板、作业模板、报告模板和分区表模板。在本章中,Git 存储库用于演示目的。

本节详细介绍了以下工作流:

  • 安装和配置 TemplateSync 插件
  • 执行导出和导入任务

12.1. 启用 TemplateSync 插件

  1. 要在 Satellite 服务器中启用插件,请输入以下命令:

    # satellite-installer --enable-foreman-plugin-templates
  2. 要验证插件是否已正确安装,请确保 Administer > Settings 包含 TemplateSync 菜单。

12.2. 配置 TemplateSync 插件

在 Satellite Web UI 中,导航到 Administer > Settings > TemplateSync 来配置插件。下表说明了属性行为。请注意,一些属性仅用于导入或导出任务。

表 12.1. 同步模板插件配置

参数API 参数名称导入的含义导出的含义

associate

associate

接受的值: alwaysnewnever

将模板与基于元数据的操作系统、组织和位置相关联。

N/A

分支

branch

指定 Git 存储库中要从中读取的默认分支。

指定 Git 存储库中要写入的默认分支。

dirname

dirname

指定要从存储库中读取的子目录。

指定要写入的存储库下的 子目录。

Filter

filter

仅导入带有与此正则表达式匹配的名称的模板。

仅导出带有与此正则表达式匹配的名称的模板。

强制导入

force

导入的模板会覆盖具有相同名称的锁定模板。

N/A

锁定模板

锁定

除非启用了 Force import,否则在导入具有相同名称的新模板时,不要覆盖现有模板。

N/A

元数据导出模式

metadata_export_mode

接受的值: 刷新保留删除

N/A

定义导出时如何处理元数据:

  • refresh - 从模板内容中删除现有元数据,并根据当前的分配和属性生成新的元数据。
  • keep - 保留现有元数据。
  • 删除 - 没有元数据的导出模板。如果要手动添加元数据,可使用。

negate

negate

接受的值: true,false

导入模板忽略 filter 属性。

导出模板忽略 filter 属性。

prefix

prefix

如果模板名称没有以前缀开头,请将指定的字符串添加到模板的开头。

N/A

仓库

repo

定义要从中同步的存储库的路径。

定义要导出到的存储库的路径。

详细程度

详细

接受的值: true,false

启用为此操作向日志中写入详细消息。

N/A

12.3. 导入和导出模板

您可以使用卫星 Web UI、Hammer CLI 或 Satellite API 导入和导出模板。卫星 API 调用使用基于角色的访问控制系统,该工具可让任务以任何用户身份执行。您可以将模板与版本控制系统(如 Git)或本地目录同步。

12.3.1. 导入模板

您可以从您选择的存储库导入模板。您可以使用不同的协议指向您的存储库,如 /tmp/dirgit://example.comhttps://example.comssh://example.com

先决条件

  • 每个模板必须包含模板所属的位置和组织。这适用于所有模板类型。在导入模板前,请确保将以下部分添加到模板中:

    <%#
    kind: provision
    name: My Kickstart File
    oses:
    - RedHat 7
    - RedHat 6
    locations:
    - First Location
    - Second Location
    organizations:
    - Default Organization
    - Extra Organization
    %>

流程

  1. 在 Satellite Web UI 中,导航到 Hosts > Sync Templates
  2. Import
  3. 每个字段填充在 Administer > Settings > TemplateSync 中配置的值。根据需要更改您要导入的模板的值。有关每个字段的详情请参考 第 12.2 节 “配置 TemplateSync 插件”
  4. Submit

Satellite Web UI 显示导入的状态。状态不是持久性;如果您离开状态页面,则无法返回它。

对于 CLI 用户

  • 要从存储库导入模板,请输入以下命令:

    $ hammer import-templates \
        --prefix '[Custom Index] ' \
        --filter '.*Template Name$' \
        --repo https://github.com/examplerepo/exampledirectory \
        --branch my_branch \
        --organization 'Default Organization'

    为了更好地索引和管理模板,请使用 --prefix 为您的模板设置类别。要从大型存储库中选择某些模板,请使用 --filter 来定义您要导入的模板的标题。例如,-- filter '.*Ansible Default$' 导入各种 Ansible 默认模板。

12.3.2. 导出模板

您可以将模板导出到版本控制系统,如 Git 存储库。

流程

  1. 在 Satellite Web UI 中,导航到 Hosts > Sync Templates
  2. 单击 Export
  3. 每个字段填充在 Administer > Settings > TemplateSync 中配置的值。根据需要更改您要导出的模板的值。有关每个字段的详情请参考 第 12.2 节 “配置 TemplateSync 插件”
  4. Submit

Satellite Web UI 显示导出的状态。状态不是持久性;如果您离开状态页面,则无法返回它。

对于 CLI 用户

  1. 克隆 Git 存储库的本地副本:

    $ git clone https://github.com/theforeman/community-templates /custom/templates
  2. 将本地目录的所有者改为 foreman 用户,并使用以下命令更改 SELinux 上下文:

    # chown -R foreman:foreman /custom/templates
    # chcon -R -t httpd_sys_rw_content_t /custom/templates
  3. 要将模板导出到本地存储库,请输入以下命令:

    hammer export-templates --organization 'Default Organization' --repo /custom/templates

12.3.3. 使用 Satellite API 同步模板

先决条件

  • 每个模板必须包含模板所属的位置和组织。这适用于所有模板类型。在导入模板前,请确保将以下部分添加到模板中:

    <%#
    kind: provision
    name: My Kickstart File
    oses:
    - RedHat 7
    - RedHat 6
    locations:
    - First Location
    - Second Location
    organizations:
    - Default Organization
    - Extra Organization
    %>

流程

  1. 配置使用 SSH 授权的版本控制系统,如 gitosis、gitolite 或 git 守护进程。
  2. 在 TemplateSync 选项卡中配置 TemplateSync 插件设置。

    1. 更改 Branch 设置,以匹配 Git 服务器上的目标分支。
    2. 更改 Repo 设置以匹配 Git 存储库。例如,对于位于 git@git.example.com/templates.git 中的存储库,请将设置设置为 ssh://git@git.example.com/templates.git
  3. foreman 用户身份接受 Git SSH 主机密钥:

    # sudo -u foreman ssh git.example.com

    您可以看到 Permission denied,请重试 输出中的消息(这是预期),因为 SSH 连接还没有成功。

  4. 如果您还没有 SSH 密钥对,请创建它。不要指定密码短语。

    # sudo -u foreman ssh-keygen
  5. 使用 Satellite 中的公钥配置您的版本控制服务器,该密钥位于 /usr/share/foreman/.ssh/id_rsa.pub 中。
  6. 将模板从 Satellite 服务器导出到 TemplateSync 菜单中指定的版本控制存储库:

    $ curl -H "Accept:application/json" \
    -H "Content-Type:application/json" \
    -u login:password \
    -k https://_satellite.example.com/api/v2/templates/export \
    -X POST
    
    {"message":"Success"}
  7. 在其内容更改后将模板导入到 Satellite 服务器:

    $ curl -H "Accept:application/json" \
    -H "Content-Type:application/json" \
    -u login:password \
    -k https://_satellite.example.com/api/v2/templates/import \
    -X POST
    
    {“message”:”Success”}

    请注意,Satellite 提供的模板已被锁定,您无法默认导入它们。要覆盖此行为,请将 TemplateSync 菜单中的 Force import 设置改为 yes,或者在 import 命令中添加 force 参数 -d '{ "force": "true" }'

12.3.4. 使用 Satellite API 将模板与本地目录同步

如果您在本地目录中配置了版本控制系统,则与本地目录同步模板非常有用。这样,您可以编辑模板并跟踪目录中编辑历史记录。您也可以在编辑模板后同步对卫星服务器的更改。

先决条件

  • 每个模板必须包含模板所属的位置和组织。这适用于所有模板类型。在导入模板前,请确保将以下部分添加到模板中:

    <%#
    kind: provision
    name: My Kickstart File
    oses:
    - RedHat 7
    - RedHat 6
    locations:
    - First Location
    - Second Location
    organizations:
    - Default Organization
    - Extra Organization
    %>

流程

  1. 创建模板的目录,并应用适当的权限和 SELinux 上下文:

    # mkdir -p /usr/share/templates_dir/
    # chown foreman /usr/share/templates_dir/
    # chcon -t httpd_sys_rw_content_t /usr/share/templates_dir/ -R
  2. 更改 TemplateSync 选项卡中的 Repo 设置,使其与导出目录 /usr/share/templates_dir/ 匹配。
  3. 将模板从 Satellite 服务器导出到本地目录:

    $ curl -H "Accept:application/json" \
    -H "Content-Type:application/json" \
    -u login:password \
    -k https://_satellite.example.com/api/v2/templates/export \
    -X POST \
    
    {"message":"Success"}
  4. 在其内容更改后将模板导入到 Satellite 服务器:

    $ curl -H "Accept:application/json" \
    -H "Content-Type:application/json" \
    -u login:password \
    -k https://_satellite.example.com/api/v2/templates/import \
    -X POST
    
    {“message”:”Success”}

    请注意,Satellite 提供的模板已被锁定,您无法默认导入它们。要覆盖此行为,请将 TemplateSync 菜单中的 Force import 设置改为 yes,或者在 import 命令中添加 force 参数 -d '{ "force": "true" }'

注意

您可以使用 -d 参数在请求中指定它们来覆盖默认的 API 设置。以下示例将模板导出到 git.example.com/templates 存储库:

$ curl -H "Accept:application/json" \
-H "Content-Type:application/json" \
-u login:password \
-k https://satellite.example.com/api/v2/templates/export \
-X POST \
-d "{\"repo\":\"git.example.com/templates\"}"

12.4. 高级 Git 配置

您可以使用命令行或编辑 .gitconfig 文件为 TemplateSync 插件执行额外的 Git 配置。

接受自签名 Git 证书

如果您在 Git 服务器上使用自签名证书身份验证,请使用 git config http.sslCAPath 命令验证证书。

例如,以下命令验证存储在 /cert/cert.pem 中的自签名证书:

# sudo -u foreman git config --global http.sslCAPath cert/cert.pem

有关高级选项的完整列表,请查看 git-config 手册页。

12.5. 卸载插件

在删除 foreman_templates 插件后避免错误:

  1. 使用 Satellite 安装程序禁用插件:

    # satellite-installer --no-enable-foreman-plugin-templates
  2. 清理插件的自定义数据。该命令不会影响您创建的任何模板。

    # foreman-rake templates:cleanup
  3. 卸载插件:

    # satellite-maintain packages remove foreman-plugin-templates

附录 A. 模板编写参考

嵌入式 Ruby (ERB)是一个基于模板生成文本文件的工具,它将纯文本与 Ruby 代码组合。Red Hat Satellite 在以下情形中使用 ERB 语法:

自定义模板
如需更多信息,请参阅 置备 指南中的创建置备 模板
远程执行任务模板
更多信息请参阅 第 10 章 配置和设置远程作业
报告模板
更多信息请参阅 第 8 章 使用报告模板来监控主机
分区表的模板
如需更多信息,请参阅 置备指南中的 创建分区表
智能变量
有关更多信息,请参阅 Puppet 指南中的 配置智能变量
智能类参数
有关更多信息,请参阅 Puppet 指南中的 配置智能类参数

本节概述了可用于 ERB 模板以及一些用法示例的 Satellite 特定宏和变量。请注意,Red Hat Satellite 提供的默认模板(Hosts > Provisioning templates,Hosts > Job templates,Monitor > Report Templates )还提供很好的 ERB 语法示例源。

在置备主机或运行远程作业时,会执行 ERB 中的代码,变量将被替换为特定于主机的值。这个过程被称为 渲染。默认情况下,卫星服务器启用了 securemode 渲染选项,这可以防止对模板执行任何有害的代码。

A.1. 在 Satellite Web UI 中访问模板编写参考

您可以在 Satellite Web UI 中访问模板编写参考文档。

  1. 登录卫星 Web UI。
  2. 导航到 Administer > About
  3. 单击 Support 部分中的 Templates DSL 链接。

A.2. 编写 ERB 模板

以下标签是 ERB 模板中最重要且常用的标签:

<% %>

所有 Ruby 代码都包含在 ERB 模板中的 & lt;% % > 中。代码在渲染模板时执行。它可以包含 Ruby 控制流结构,以及特定于 Satellite 的宏和变量。例如:

<% if @host.operatingsystem.family == "Redhat" && @host.operatingsystem.major.to_i > 6 -%>
systemctl <%= input("action") %> <%= input("service") %>
<% else -%>
service <%= input("service") %> <%= input("action") %>
<% end -%>

请注意,此模板会静默地执行带有服务的操作,并在输出中不返回任何操作。

<%= %>

这提供的功能与 &lt ;% %& gt; 相同,但在执行模板时,代码输出将插入到模板中。这对变量替换很有用,例如:

输入示例:

echo <%= @host.name %>

渲染示例:

host.example.com

输入示例:

<% server_name = @host.fqdn %>
<%= server_name %>

渲染示例:

host.example.com

请注意,如果您输入了一个不正确的变量,则不会返回任何输出。但是,如果您试图在不正确的变量中调用方法,则会返回以下出错信息:

输入示例:

<%= @example_incorrect_variable.fqdn -%>

渲染示例:

undefined method `fqdn' for nil:NilClass

<% -%>, <%= -%>

默认情况下,如果 Ruby 块在行的末尾关闭,则会在其后插入换行符:

输入示例:

<%= "line1" %>
<%= "line2" %>

渲染示例:

line1
line2

要更改默认行为,请使用 -% > 修改括起的标记:

输入示例:

<%= "line1" -%>
<%= "line2" %>

渲染示例:

line1line2

这用于减少在渲染模板中允许 Ruby 语法允许的行数。ERB 标签中的空格会被忽略。

在报告模板中如何使用此示例来删除 FQDN 和 IP 地址之间的不必要的换行符:

输入示例:

<%= @host.fqdn -%>
<%= @host.ip -%>

渲染示例:

host.example.com10.10.181.216

<%# %>

括起在模板渲染期间被忽略的注释:

输入示例:

<%# A comment %>

这不会生成输出。

ERB 模板缩进

由于 ERB 标签的不同长度,因此缩进 ERB 语法可能看起来很明显。ERB 语法忽略空格。处理缩进的一种方法是声明每个新行开头的 ERB 标签,然后使用 ERB 标签中的空格来概述语法中的关系,例如:

<%- load_hosts.each do |host| -%>
<%-   if host.build? %>
<%=     host.name %> build is in progress
<%-   end %>
<%- end %>

A.3. 对 ERB 模板进行故障排除

Satellite Web UI 提供了两种方法来验证特定主机的模板渲染:

  • 直接在模板编辑器中 - 编辑模板 (在 Hosts > Partition table、Hosts > Provisioning templates, 或 Hosts > Job templates下)时,在 Template 选项卡中点 Preview 并从列表中选择主机。然后,模板会使用所选主机的参数在文本字段中显示。预览失败有助于识别模板中的问题。
  • 在主机详情页面 - 选择 Hosts > All hosts 的主机,然后点击 Templates 选项卡列出与主机关联的模板。从所选模板旁边的列表中选择 Review,以查看其呈现的版本。

A.4. 通用 Satellite 特定 Macros

本节列出了 ERB 模板的特定于 Satellite 的宏。

您可以在所有种类的模板中使用下表中列出的宏。

表 A.1. 通用 Macros

名称描述

indent(n)

使用未缩进的代码片段模板时,通过 n 缩进代码块很有用。

foreman_url(kind)

将完整 URL 返回到给定类型的主机渲染模板。例如,"provision"类型的模板通常位于 http://HOST/unattended/provision

snippet(name)

呈现指定的代码片段模板。对于嵌套自定义模板很有用。

snippets(file)

呈现在 Foreman 数据库中找到的指定代码片段,如果数据库中没有找到,则尝试从 无人值守/snippets/ 目录加载它。

snippet_if_exists(name)

呈现指定的代码片段,如果没有找到指定名称的代码片段,则跳过。

A.5. templates Macros

如果要编写自定义模板,您可以使用以下一些宏。

根据模板类型,以下某些宏有不同的要求。

如需有关报告模板可用宏的更多信息,在 Satellite Web UI 中进入 Monitor > Report Templates,然后点 Create Template。在 Create Template 窗口中,单击 Help 选项卡。

如需有关作业模板可用宏的更多信息,在 Satellite Web UI 中进入 Hosts > Job Templates,然后点击 New Job Template。在 New Job Template 窗口中,单击 Help 选项卡。

输入

使用 输入 宏,您可以自定义模板可以使用的输入数据。您可以定义用户可用的输入名称、类型和选项。对于报告模板,您只能使用用户输入。当您定义新输入并保存模板时,您可以在模板正文的 ERB 语法中引用输入。

<%= input('cpus') %>

这会加载用户输入 cpus 的值。

load_hosts

使用 load_hosts 宏,您可以生成完整的主机列表。

<%- load_hosts().each_record do |host| -%>
<%=     host.name %>

使用 every_ record 宏的 load_ hosts 宏来加载 1000 批处理中的记录,以减少内存消耗。

如果要过滤报告的主机列表,您可以添加选项 搜索: input ('Example_Host')

<% load_hosts(search: input('Example_Host')).each_record do |host| -%>
<%=  host.name %>
<% end -%>

在本例中,您首先会创建一个输入,然后用来优化 load_hosts 宏检索的搜索条件。

report_row

使用 report_row 宏,您可以创建一个格式化的报告来简化分析。report_row 宏需要 report_render 宏来生成输出。

输入示例:

<%- load_hosts(search: input('Example_Host')).each_record do |host| -%>
<%-   report_row(
        'Server FQDN': host.name
      ) -%>
<%- end -%>
<%= report_render -%>

渲染示例:

Server FQDN
host1.example.com
host2.example.com
host3.example.com
host4.example.com
host5.example.com
host6.example.com

您可以通过添加另一个标头来向报告添加额外的列。以下示例在报告中添加 IP 地址:

输入示例:

<%- load_hosts(search: input('host')).each_record do |host| -%>
<%-   report_row(
      'Server FQDN': host.name,
           'IP': host.ip
      ) -%>
<%- end -%>
<%= report_render -%>

渲染示例:

Server FQDN,IP
host1.example.com,10.8.30.228
host2.example.com,10.8.30.227
host3.example.com,10.8.30.226
host4.example.com,10.8.30.225
host5.example.com,10.8.30.224
host6.example.com,10.8.30.223

report_render

此宏仅适用于报告模板。

使用 report_render 宏,您可以为报告创建输出。在模板渲染过程中,您可以选择您要报告的格式。支持 YAML、JSON、HTML 和 CSV 格式。

<%= report_render -%>
render_template()

此宏仅适用于作业模板。

使用此宏,您可以呈现特定的模板。您还可以启用并定义您要传递给模板的参数。

A.6. 特定于主机的变量

以下变量启用在模板中使用主机数据。请注意,作业模板仅接受 @host 变量。

表 A.2. 主机特定变量和 Macros

名称描述

@host.architecture

主机的架构。

@host.bond_interfaces

返回所有绑定接口的数组。请参阅 第 A.9 节 “parsing Arrays”

@host.capabilities

系统调配方法,可以是构建(如 kickstart)或镜像。

@host.certname

主机的 SSL 证书名称。

@host.diskLayout

主机的磁盘布局。可以从操作系统继承。

@host.domain

主机的域。

@host.environment

主机的 Puppet 环境。

@host.facts

从 Facter 返回 Ruby 事实哈希。例如,若要访问输出中的 'ipaddress' 事实,请指定 @host.facts['ipaddress']。

@host.grub_pass

返回主机的 GRUB 密码。

@host.hostgroup

主机的主机组。

host_enc['parameters']

返回包含主机参数信息的 Ruby 哈希。例如,使用 host_enc['parameters']['lifecycle_environment'] 获取主机的生命周期环境。

@host.image_build?

如果使用镜像置备主机,则返回 true

@host.interfaces

包含包括主接口在内的所有可用主机接口的数组。请参阅 第 A.9 节 “parsing Arrays”

@host.interfaces_with_identifier('IDs')

返回带有给定标识符的接口数组。您可以将多个标识符数组作为输入传递,如 @host.interfaces_with_identifier (['eth0', 'eth1'])。请参阅 第 A.9 节 “parsing Arrays”

@host.ip

主机的 IP 地址。

@host.location

主机的位置。

@host.mac

主机的 MAC 地址。

@host.managed_interfaces

返回一组受管接口(不包括 BMC 和绑定接口)。请参阅 第 A.9 节 “parsing Arrays”

@host.medium

分配的操作系统安装介质。

@host.name

主机的全名。

@host.operatingsystem.family

操作系统系列。

@host.operatingsystem.major

分配的操作系统的主要版本号。

@host.operatingsystem.minor

分配的操作系统的次要版本号。

@host.operatingsystem.name

分配的操作系统名称。

@host.operatingsystem.boot_files_uri(medium_provider)

内核和 initrd 的完整路径,返回一个数组。

@host.os.medium_uri(@host)

用于置备的 URI (安装介质中配置的路径)。

host_param('parameter_name')

返回指定主机参数的值。

host_param_false?('parameter_name')

如果指定的 host 参数评估为 false,则返回 false。

host_param_true?('parameter_name')

如果指定的 host 参数评估为 true,则返回 true。

@host.primary_interface

返回主机的主接口。

@host.provider

计算资源提供程序。

@host.provision_interface

返回主机的调配接口。返回 interface 对象。

@host.ptable

分区表名称。

@host.puppet_ca_server

主机必须使用的 Puppet CA 服务器。

@host.puppetmaster

主机必须使用的 Puppet master。

@host.pxe_build?

如果使用网络或 PXE 置备主机,则返回 true

@host.shortname

主机的短名称。

@host.sp_ip

BMC 接口的 IP 地址。

@host.sp_mac

BMC 接口的 MAC 地址。

@host.sp_name

BMC 接口的名称。

@host.sp_subnet

BMC 网络的子网。

@host.subnet.dhcp

如果为这个主机配置了 DHCP 代理,则返回 true

@host.subnet.dns_primary

主机的主 DNS 服务器。

@host.subnet.dns_secondary

主机的辅助 DNS 服务器。

@host.subnet.gateway

主机网关。

@host.subnet.mask

主机的子网掩码。

@host.url_for_boot(:initrd)

与此主机关联的 initrd 镜像的完整路径。不建议,因为它不进行插入变量。

@host.url_for_boot(:kernel)

与此主机关联的内核的完整路径。不建议,因为它不进行插入变量,首选 boot_files_uri。

@provisioning_type

根据调配类型,等于 'host' 或 'hostgroup'。

@static

如果网络配置是静态的,则返回 true

@template_name

被呈现的模板的名称。

grub_pass

返回以 md5pass 参数括起的 GRUB 密码,即 --md5pass=#{@host.grub_pass}

ks_console

返回使用端口编译的字符串,以及可添加到内核行的主机的 baud 速率。例如 console=ttyS1,9600

root_pass

返回为系统配置的根密码。

大多数常见 Ruby 方法都可以应用到特定于主机的变量。例如,要提取主机 IP 地址的最后一部分,您可以使用:

<% @host.ip.split('.').last %>

A.7. 特定于 Kickstart 的变量

以下变量设计为在 kickstart 调配模板中使用。

表 A.3. Kickstart 特定变量

名称描述

@arch

主机架构名称,与 @host.architecture.name 相同。

@dynamic

如果使用的分区表是一个 %pre 脚本(如表的第一行),则返回 true

@epel

一个命令,它将自动安装 epel-release rpm 的正确版本。在 %post 脚本中使用。

@mediapath

提供 URL 命令的完整 kickstart 行。

@osver

操作系统主要版本号,与 @host. Operatingsystem.major 相同。

A.8. 条件语句

在模板中,您可以根据存在的值来执行不同的操作。要达到此目的,您可以使用 ERB 语法中的条件语句。

在以下示例中,ERB 语法搜索特定主机名,并根据它找到的值返回输出:

输入示例:

<% load_hosts().each_record do |host| -%>
<% if @host.name == "host1.example.com" -%>
<%      result="positive" -%>
<%  else -%>
<%      result="negative" -%>
<%  end -%>
<%= result -%>

渲染示例:

host1.example.com
positive

A.9. parsing Arrays

在编写或修改模板时,您可能会遇到返回数组的变量。例如,与网络接口相关的主机变量,如 @host.interfaces@host.bond_interfaces,返回在数组中分组的接口数据。要提取特定接口的参数值,请使用 Ruby 方法解析数组。

查找正确的方法以解析数组

以下流程是一个示例,您可以使用它查找相关方法来解析模板中的数组。本例中使用了报告模板,但步骤适用于其他模板。

  1. 若要检索内容主机的 NIC,在本例中,使用 @host.interfaces 变量返回可用于解析数组的方法。

    输入示例:

    <%= @host.interfaces -%>

    渲染示例:

    <Nic::Base::ActiveRecord_Associations_CollectionProxy:0x00007f734036fbe0>

  2. 在 Create Template 窗口中,点 Help 选项卡并搜索 ActiveRecord_Associations_CollectionProxyNic::Base 类。
  3. 对于 ActiveRecord_Associations_CollectionProxy,您可以在 Allowed methods 或 members 列中查看以下方法来解析数组:

    [] each find_in_batches first map size to_a
  4. 对于 Nic::Base,在 Allowed method 或 members 列中,您可以查看以下方法来解析数组:

    alias? attached_devices attached_devices_identifiers attached_to bond_options children_mac_addresses domain fqdn identifier inheriting_mac ip ip6 link mac managed? mode mtu nic_delay physical? primary provision shortname subnet subnet6 tag virtual? vlanid
  5. 要迭代 interface 数组,请将相关方法添加到 ERB 语法:

    输入示例:

    <% load_hosts().each_record do |host| -%>
    <%    host.interfaces.each do |iface| -%>
      iface.alias?: <%= iface.alias? %>
      iface.attached_to: <%= iface.attached_to %>
      iface.bond_options: <%= iface.bond_options %>
      iface.children_mac_addresses: <%= iface.children_mac_addresses %>
      iface.domain: <%= iface.domain %>
      iface.fqdn: <%= iface.fqdn %>
      iface.identifier: <%= iface.identifier %>
      iface.inheriting_mac: <%= iface.inheriting_mac %>
      iface.ip: <%= iface.ip %>
      iface.ip6: <%= iface.ip6 %>
      iface.link: <%= iface.link %>
      iface.mac: <%= iface.mac %>
      iface.managed?: <%= iface.managed? %>
      iface.mode: <%= iface.mode %>
      iface.mtu: <%= iface.mtu %>
      iface.physical?: <%= iface.physical? %>
      iface.primary: <%= iface.primary %>
      iface.provision: <%= iface.provision %>
      iface.shortname: <%= iface.shortname %>
      iface.subnet: <%= iface.subnet %>
      iface.subnet6: <%= iface.subnet6 %>
      iface.tag: <%= iface.tag %>
      iface.virtual?: <%= iface.virtual? %>
      iface.vlanid: <%= iface.vlanid %>
    <%- end -%>

    渲染示例:

    host1.example.com
      iface.alias?: false
      iface.attached_to:
      iface.bond_options:
      iface.children_mac_addresses: []
      iface.domain:
      iface.fqdn: host1.example.com
      iface.identifier: ens192
      iface.inheriting_mac: 00:50:56:8d:4c:cf
      iface.ip: 10.10.181.13
      iface.ip6:
      iface.link: true
      iface.mac: 00:50:56:8d:4c:cf
      iface.managed?: true
      iface.mode: balance-rr
      iface.mtu:
      iface.physical?: true
      iface.primary: true
      iface.provision: true
      iface.shortname: host1.example.com
      iface.subnet:
      iface.subnet6:
      iface.tag:
      iface.virtual?: false
      iface.vlanid:

A.10. 模板片断示例

检查主机是否启用了 Puppet 和 Puppetlabs

以下示例检查主机是否启用了 Puppet 和 Puppetlabs 存储库:

<%
pm_set = @host.puppetmaster.empty? ? false : true
puppet_enabled = pm_set || host_param_true?('force-puppet')
puppetlabs_enabled = host_param_true?('enable-puppetlabs-repo')
%>

捕获主机操作系统的 Major 和 Minor 版本

以下示例演示了如何捕获主机操作系统的次要和主要版本,它们可用于软件包相关的决策:

<%
os_major = @host.operatingsystem.major.to_i
os_minor = @host.operatingsystem.minor.to_i
%>

<% if ((os_minor < 2) && (os_major < 14)) -%>
...
<% end -%>

将片段导入到模板

以下示例将 subscription_manager_registration 片断导入到模板,并将其缩进四个空格:

<%= indent 4 do
snippet 'subscription_manager_registration'
end %>

有条件地导入 Kickstart 片段

如果主机子网启用了 DHCP 引导模式,以下示例导入 kickstart_networking_setup 片断:

<% subnet = @host.subnet %>
<% if subnet.respond_to?(:dhcp_boot_mode?) -%>
<%= snippet 'kickstart_networking_setup' %>
<% end -%>

从主机自定义事实解析值

您可以使用 host.facts 变量从主机的事实和自定义事实解析值。

在本例中,luks_stat 是一个自定义事实,您可以以与 dmi::system::serial_number 相同的方式解析,这是主机事实:

'Serial': host.facts['dmi::system::serial_number'],
'Encrypted': host.facts['luks_stat'],

在本例中,您可以自定义 Applicable Errata report 模板,以解析有关每个主机的内核版本的自定义信息:

<%-     report_row(
          'Host': host.name,
          'Operating System': host.operatingsystem,
          'Kernel': host.facts['uname::release'],
          'Environment': host.lifecycle_environment,
          'Erratum': erratum.errata_id,
          'Type': erratum.errata_type,
          'Published': erratum.issued,
          'Applicable since': erratum.created_at,
          'Severity': erratum.severity,
          'Packages': erratum.package_names,
          'CVEs': erratum.cves,
          'Reboot suggested': erratum.reboot_suggested,
        ) -%>

附录 B. 作业模板示例和扩展

使用本节作为参考,以帮助修改、自定义和扩展您的作业模板以满足您的要求。

B.1. 自定义作业模板

在创建作业模板时,您可以在模板编辑器字段中包含现有模板。这样,您可以组合模板,或者从一般模板创建更具体的模板。

以下模板组合了在 Red Hat Enterprise Linux 系统上安装和启动 httpd 服务的默认模板:

<%= render_template 'Package Action - SSH Default', :action => 'install', :package => 'httpd' %>
<%= render_template 'Service Action - SSH Default', :action => 'start', :service_name => 'httpd' %>

以上模板指定呈现模板的参数值。也可以使用 input () 方法,允许用户在作业执行时为呈现的模板定义输入。例如,您可以使用以下语法:

<%= render_template 'Package Action - SSH Default', :action => 'install', :package => input("package") %>

使用上述模板,您必须从呈现的模板导入参数定义。为此,请导航到 Jobs 选项卡,单击 Add Foreign Input Set,然后从 Target template 列表中选择呈现的模板。您可以导入所有参数,或者指定以逗号分隔的列表。

B.2. 默认任务模板类别

作业模板类别描述

软件包

用于执行软件包相关操作的模板。默认情况下包括安装、更新和删除操作。

puppet

在目标主机上运行 Puppet 的模板。

power

用于执行电源相关操作的模板。默认情况下包括重启和关闭操作。

命令

在远程主机上执行自定义命令的模板。

服务

用于执行服务相关操作的模板。默认情况下,包括 start、stop、restart 和 status 操作。

Katello

用于执行内容相关操作的模板。这些模板主要从卫星 Web UI 的不同部分使用(例如,内容主机批量操作 UI),但可以单独用于执行勘误表安装等操作。

B.3. restorecon 模板示例

本例演示了如何创建名为 Run Command - restorecon 的模板,该模板用于恢复目标主机上所选目录中所有文件的默认 SELinux 上下文。

  1. 进入 Hosts > Job templates。单击 New Job Template
  2. Name 字段中输入 Run Command - restorecon。选择 Default 使模板可供所有组织使用。将以下文本添加到模板编辑器中:

    restorecon -RvF <%= input("directory") %>

    在作业调用过程中,<% = input ("directory")% > 字符串被替换为用户定义的目录。

  3. Job 选项卡上,将 Job category 设置为 Commands
  4. 单击 Add Input 以允许自定义作业。在 Name 字段中输入 目录。输入名称必须与模板编辑器中指定的值匹配。
  5. 单击 Required,以便在没有用户指定参数的情况下无法执行该命令。
  6. Input type 列表中选择 User input。在作业调用过程中输入要显示的描述,如 restorecon 的 Target 目录
  7. Submit

有关如何根据此模板执行作业的信息,请参阅 第 B.5 节 “在多个主机上执行 restorecon 模板”

B.4. 渲染 restorecon 模板

本例演示了如何创建源自 第 B.3 节 “restorecon 模板示例” 中创建的 Run 命令 - restorecon 模板的模板。此模板不需要作业执行的用户输入,它将在目标主机的 /home/ 目录下的所有文件中恢复 SELinux 上下文。

创建新模板,如 第 10.14 节 “设置作业模板” 所述,并在模板编辑器中指定以下字符串:

<%= render_template("Run Command - restorecon", :directory => "/home") %>

B.5. 在多个主机上执行 restorecon 模板

本例演示了如何根据在多个主机上 第 B.3 节 “restorecon 模板示例” 中创建的模板运行作业。作业在 /home/ 目录下的所有文件中恢复 SELinux 上下文。

  1. 导航到 Hosts > All hosts 并选择目标主机。从 Select Action 列表中,选择 Schedule Remote Job
  2. Job invocation 页面中,选择 Commands 作业类别和 Run Command - restorecon 作业模板。
  3. 目录 字段中键入 /home
  4. Schedule 设置为 Execute now
  5. Submit。您会进入 Job invocation 页面,您可以在其中监控作业执行的状态。

B.6. 在模板中包括 Power 操作

本例演示了如何设置作业模板来执行电源操作,如 reboot。此步骤可防止卫星将重新引导时的断开连接异常解释为错误,因此远程执行作业可以正常工作。

创建新模板,如 第 10.14 节 “设置作业模板” 所述,并在模板编辑器中指定以下字符串:

<%= render_template("Power Action - SSH Default", :action => "restart") %>

法律通告

Copyright © 2023 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.