在 Red Hat Satellite 中使用 Ansible 集成管理配置
在 Satellite 中使用 Ansible 集成来配置主机系统
摘要
向红帽文档提供反馈 复制链接链接已复制到粘贴板!
我们感谢您对我们文档的反馈。让我们了解如何改进它。
使用 Red Hat JIRA 中的 Create Issue 表单提供您的反馈。JIRA 问题在 Red Hat Satellite Jira 项目中创建,您可以在其中跟踪其进度。
前提条件
- 确保您已注册了 红帽帐户。
流程
- 单击以下链接: 创建问题。如果 Jira 显示登录错误,则登录并在您重定向到表单后继续。
- 完成 Summary 和 Description 字段。在 Description 字段中,包含文档 URL、章节号以及问题的详细描述。不要修改表单中的任何其他字段。
- 点 Create。
第 1 章 在 Satellite 中使用 Ansible 复制链接链接已复制到粘贴板!
使用本指南将 Satellite 配置为使用 Ansible 进行远程执行。
1.1. 支持的 Ansible 版本 复制链接链接已复制到粘贴板!
卫星使用 Ansible 作为卫星服务器的基本操作系统提供,或任何用于远程执行的胶囊。因此,支持的 Ansible 版本取决于您的基础操作系统配置。
1.2. 配置 Satellite 以运行 Ansible 角色 复制链接链接已复制到粘贴板!
在卫星中,您可以导入 Ansible 角色,以帮助自动化日常任务。默认情况下,Ansible 在管理门户中启用。
Ansible 路径
Satellite 从以下路径导入并运行 Ansible 角色:
-
/etc/ansible/roles -
/usr/share/ansible/roles -
/etc/ansible/collections -
/usr/share/ansible/collections
来自安装的软件包的角色和集合放置在 /usr/share/ansible 下。如果要添加自定义角色或集合,请将它们放在 /etc/ansible 下。
请注意,红帽只支持从红帽获取的 Ansible 角色和集合。
路径由 Satellite 配置。更多信息请参阅 第 1.8 节 “自定义 Ansible 配置”。
流程
- 将角色添加到卫星服务器上的 Ansible 路径中 的目录,以及您要使用角色的所有胶囊式服务器。如果要使用自定义或第三方 Ansible 角色,请确保配置外部版本控制系统,以在卫星服务器和胶囊服务器之间同步角色。
在您要在主机上运行 Ansible 角色的所有胶囊服务器上,启用 Ansible 插件:
satellite-installer --scenario capsule \ --enable-foreman-proxy-plugin-ansible
# satellite-installer --scenario capsule \ --enable-foreman-proxy-plugin-ansibleCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 分发 SSH 密钥,以启用胶囊,以使用 SSH 连接到主机。如需更多信息,请参阅管理主机中的为远程执行分配 SSH 密钥。卫星运行 Ansible 角色的方式与运行远程执行作业的方式相同。
- 将 Ansible 角色导入到卫星。
- 继续 第 2 章 使用 Ansible 角色在客户端上自动化重复任务。
1.3. 启用 Ansible 与 Satellite 集成 复制链接链接已复制到粘贴板!
执行以下步骤在 Satellite 服务器上启用 Ansible 插件。
流程
在 Satellite 服务器上启用 Ansible 插件:
satellite-installer \ --enable-foreman-plugin-ansible \ --enable-foreman-proxy-plugin-ansible
# satellite-installer \ --enable-foreman-plugin-ansible \ --enable-foreman-proxy-plugin-ansibleCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.4. 导入 Ansible 角色和变量 复制链接链接已复制到粘贴板!
您可以从卫星服务器或启用了 Ansible 的 Capsule 上的 Ansible 路径 导入 Ansible 角色和变量。
请注意,一些角色需要比其他角色导入的时间更长。
前提条件
- 确保您导入的角色和变量位于您要使用角色的所有胶囊的 Ansible 路径中。
流程
- 在 Satellite Web UI 中,导航到 Configure > Roles。
- 单击 Import,以选择要从中导入的 Capsule。
- 选择您要导入的角色。
- 点 Submit。
1.5. 在 Satellite 中覆盖 Ansible 变量 复制链接链接已复制到粘贴板!
如果在卫星中运行 Ansible 角色,您可以使用 Satellite 覆盖这些角色的 Ansible 变量。
以下流程引用主机和主机组。如需更多信息,请参阅管理主机。
优先级在覆盖变量中
如果您使用 Ansible 角色以不是 Effective User 的用户身份运行任务,则有严格的优先级顺序用于覆盖 Ansible 变量。要确保您覆盖的变量遵循正确的优先级顺序,请查看 变量优先级:我应该在哪里放置变量?
前提条件
- Satellite 中必须具有 Ansible 变量。如需更多信息,请参阅 第 1.4 节 “导入 Ansible 角色和变量”。
- 要使用覆盖的 Ansible 变量,用户必须有一个角色,供他们查看与主机匹配的属性。
流程
- 在 Satellite Web UI 中,导航到 Configure > Variables。
- 选择您要通过 Satellite 覆盖和管理的 Ansible 变量。
- 在 Default Behavior 区域中,选中 Override 复选框。
- 在 Parameter Type 字段中,选择验证的值类型,如 字符串或 布尔值。type 数组 和 hash 在变量匹配时具有进一步处理的选项。如需更多信息,请参阅 以下优先级 属性顺序 区域。
- 在 Default Value 字段中,如果变量没有匹配项,请输入您要使用的默认值。
- 可选:如果您不想在 Satellite Web UI 中以纯文本形式显示变量的值,请选择 Hidden Value 复选框,以将变量的值显示为星号。这可用于密码或机密令牌等敏感值。
可选:扩展 Optional Input Validator 区域,并指定用于验证变量的具体值的条件:
- 如果要强制用户填写此变量,请选择 Required。
在 Validator Type 字段中,选择如何验证值:
-
list- 值将根据允许的值的枚举进行验证。 -
regex- 值将根据正则表达式模式进行验证。
-
可选: 优先级属性顺序 区域中,指定优先级顺序,按主机属性与主机匹配。top 的顺序具有较高的优先级。第一个匹配项胜出。
您可以使用逗号作为 AND 操作将多个属性组合成单个匹配键。例如,
hostgroup 的 matcher 键,环境预期匹配者,如hostgroup = "web servers"ANDenvironment = production。如果使用参数类型 数组 或 哈希,您可以进一步设置:
- merge Overrides - Merges 数组/hashes 的成员,而不是替换整个阵列或哈希值。如果哈希包含相同的键,则该值会被主机的值覆盖。
- merge Default - 将默认值添加到数组或散列中。
- 避免 Duplicates - 确保数组或哈希中的值是唯一的。
- 可选:扩展 指定的 Matchers 区域,并为选择变量覆盖的主机指定条件。
- 要保存覆盖设置,请单击 Submit。
若要使用 Ansible 变量,请将 变量作为参数添加到您的主机或主机组,或者将变量添加为全局参数。
将变量添加到主机
- 在 Satellite Web UI 中,导航到 Hosts > All Hosts 并选择您要使用的主机。
- 单击 Ansible 选项卡并在 Variables 区域中,单击铅笔图标以编辑 变量的值。
- 点 tick 图标接受 changed 变量的值或跨图标来取消更改。
将变量添加到主机组
- 在 Satellite Web UI 中,导航到 Configure > Host Groups,然后选择您要使用的主机组。
- 单击 Parameters 选项卡,然后在 Host Group Parameters 区域中,单击 Add Parameter。
- 在 Name 字段中,添加 Ansible 变量名称。
- 从 Type 列表,选择验证的变量类型。
- 在 Value 字段中输入 变量的值。
将变量添加为全局参数
- 在 Satellite Web UI 中,导航到 Configure > Global Parameters,然后点 Create Parameter。
- 在 Name 字段中,添加 Ansible 变量名称。
- 从 Type 列表,选择验证的变量类型。
- 在 Value 字段中输入 变量的值。
- 可选:如果您不想以纯文本显示 Ansible 变量,请选择 Hidden Values 复选框,以在 Satellite Web UI 中将变量的内容显示为星号。
1.6. 添加 Red Hat Enterprise Linux 系统角色 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 系统角色是远程管理 Red Hat Enterprise Linux 服务器的配置接口。您可以使用 Red Hat Enterprise Linux 系统角色在 Satellite 中添加 Ansible 角色。在卫星中使用 Ansible 角色可以更快、更轻松地进行配置。
对某些 Red Hat Enterprise Linux 系统角色的支持级别可能只是一个技术预览。有关 Red Hat Enterprise Linux 系统角色的支持级别和常规信息的最新信息,请参阅 Red Hat Enterprise Linux 系统角色。
在订阅 Extras 频道前,请参阅 Red Hat Enterprise Linux Extras 产品生命周期 文章。
流程
确保启用了以下软件仓库:
在 Red Hat Enterprise Linux 8 中,确保启用了 Appstream 存储库:
subscription-manager repos --enable=rhel-8-for-x86_64-appstream-rpms
# subscription-manager repos --enable=rhel-8-for-x86_64-appstream-rpmsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您必须启用为您的架构指定的 Appstream 存储库。如需更多信息,请参阅 RHEL 8 软件仓库。
在 Red Hat Enterprise Linux 7 中,确保启用了 Extras 软件仓库:
subscription-manager repos --enable=rhel-7-server-extras-rpms
# subscription-manager repos --enable=rhel-7-server-extras-rpmsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
安装
rhel-system-roles软件包:satellite-maintain packages install rhel-system-roles
# satellite-maintain packages install rhel-system-rolesCopy to Clipboard Copied! Toggle word wrap Toggle overflow rhel-system-roles软件包下载到/usr/share/ansible/roles/。您可以在导入前查看并记录您想要文件的任何修改。- 在 Satellite Web UI 中,导航到 Configure > Roles,再点击包含您要导入的角色的 Capsule。
- 从 Ansible 角色列表中,选中您要导入的角色的复选框,然后单击 Update。
现在,您可以将 Ansible 角色分配给主机或主机组。如需更多信息,请参阅 第 2.1 节 “将 Ansible 角色分配给现有主机”。
您还可以通过将它们添加到 Ansible 作业模板,将这些角色中包含的模块添加到 Ansible playbook 中。您必须在作业模板中包含 hosts:all 行。如需更多信息,请参阅 Red Hat Enterprise Linux (RHEL)系统角色。
1.7. 同步 Ansible 集合 复制链接链接已复制到粘贴板!
在 Satellite 中,您可以从 Private Automation Hub、console.redhat.com 和其他 Satellite 实例同步 Ansible Collections。在同步后,Ansible Collections 将会出现在 Satellite web UI 菜单的 Content 下作为一个新的仓库类型。
流程
- 在 Satellite Web UI 中,导航到 Content > Products。
- 选择所需的产品名称。
- 在 Products 窗口中,选择要为其创建存储库的产品的名称。
- 单击 Repositories 选项卡,然后单击 New Repository。
在 Name 字段中输入存储库的名称。
Label 字段会根据名称自动填充。
- 从 Type 列表中,选择 ansible collection。
在 Upstream URL 字段中,输入上游集合存储库的 URL。
URL 可以是任何 Ansible Galaxy 端点。例如:
https://console.redhat.com/api/automation-hub/。可选:在 Requirements.yml 字段中,您可以指定您要从端点同步的集合列表,以及它们的版本。
如果没有指定集合列表,则端点中的所有内容都会被同步。
--- collections: - name: my_namespace.my_collection version: 1.2.3
--- collections: - name: my_namespace.my_collection version: 1.2.3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如需更多信息,请参阅 Galaxy 用户指南中的 从同一 requirements.yml 文件安装角色和集合。
进行身份验证。
要从 Private Automation Hub 同步 Satellite,请在 Auth Token 字段中输入您的令牌。
如需更多信息,请参阅 连接到 Hub 中的 连接私有 Automation Hub。
要从
console.redhat.com同步 Satellite,请在 Auth Token 字段中输入您的令牌,并在 Auth URL 字段中输入您的 SSO URL。如需更多信息,请参阅开始使用自动化中心。
- 要从 Satellite 同步 Satellite,请将两个身份验证字段留空。
- 点 Save。
- 导航到 Ansible Collections 存储库。
- 从 Select Action 菜单,选择 Sync Now。
1.8. 自定义 Ansible 配置 复制链接链接已复制到粘贴板!
卫星管理 Ansible 与 Satellite 集成所需的基本 Ansible 配置。但是,您可以照常自定义其他 Ansible 配置选项。
Satellite 将基本的 Ansible 配置作为环境变量存储在 /etc/foreman-proxy/ansible.env 中。此文件由 satellite-installer 管理。
Ansible 从配置文件和 Capsule 提供的环境读取配置。如果需要自定义 Ansible 配置,您可以在系统范围的 /etc/ansible/ansible.cfg 文件中或 foreman-proxy /.ansible.cfg 文件中的 /usr/share/foreman-proxy/.ansible.cfg 文件中这样做。请注意,如果您使用 /usr/share/foreman-proxy/.ansible.cfg,则 Satellite 生成的 Ansible 会忽略 /etc/ansible/ansible.cfg 中的配置。
请注意,环境变量优先于 ansible.cfg 中的值,这样可确保保留 Satellite 所需的基本配置。
下表列出了由 Satellite 管理的基本 Ansible 配置选项。
| 环境变量 | 配置密钥 | Description |
|---|---|---|
| ANSIBLE_CALLBACKS_ENABLED | callbacks_enabled |
启用回调到 Satellite;等同于 |
| ANSIBLE_CALLBACK_WHITELIST | callback_whitelist |
启用回调到 Satellite;等同于 |
| ANSIBLE_COLLECTIONS_PATHS | collections_paths | Ansible 集合的路径列表 |
| ANSIBLE_HOST_KEY_CHECKING | host_key_checking | 禁用在 SSH 连接期间检查主机密钥 |
| ANSIBLE_LOCAL_TEMP | local_tmp | Capsule 上的临时目录 |
| ANSIBLE_ROLES_PATH | roles_path | Ansible 角色的路径列表 |
| ANSIBLE_SSH_ARGS | ssh_args | 传递给 SSH 连接的参数 |
其他资源
1.9. 将 Ansible Vault 与 Satellite 搭配使用 复制链接链接已复制到粘贴板!
您可以使用 Ansible Vault 工具加密敏感 Ansible 数据文件,并将 Ansible 配置为使用存储在文件中的密码来访问加密文件。
流程
-
如果您自定义
/etc/ansible/ansible.cfg,请将配置从/etc/ansible/ansible.cfg复制到/usr/share/foreman-proxy/.ansible.cfg。 使用
ansible-vault命令加密敏感文件:ansible-vault encrypt /etc/ansible/roles/Role_Name/vars/main.yml
# ansible-vault encrypt /etc/ansible/roles/Role_Name/vars/main.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,
ansible-vault将文件权限改为600。更改加密文件的组和权限,以确保
foreman-proxy用户可以读取它:chgrp foreman-proxy /etc/ansible/roles/Role_Name/vars/main.yml chmod 0640 /etc/ansible/roles/Role_Name/vars/main.yml
# chgrp foreman-proxy /etc/ansible/roles/Role_Name/vars/main.yml # chmod 0640 /etc/ansible/roles/Role_Name/vars/main.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
创建
/usr/share/foreman-proxy/.ansible_vault_password文件,并在其中输入 Vault 密码。 更改
.ansible_vault_password文件的用户和权限,以确保只有foreman-proxy用户可以读取它:chown foreman-proxy:foreman-proxy /usr/share/foreman-proxy/.ansible_vault_password chmod 0400 /usr/share/foreman-proxy/.ansible_vault_password
# chown foreman-proxy:foreman-proxy /usr/share/foreman-proxy/.ansible_vault_password # chmod 0400 /usr/share/foreman-proxy/.ansible_vault_passwordCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 Vault 密码文件的路径添加到
/usr/share/foreman-proxy/.ansible.cfg中的[defaults]部分:[defaults] vault_password_file = /usr/share/foreman-proxy/.ansible_vault_password
[defaults] vault_password_file = /usr/share/foreman-proxy/.ansible_vault_passwordCopy to Clipboard Copied! Toggle word wrap Toggle overflow Vault 密码文件的路径必须是绝对的。
第 2 章 使用 Ansible 角色在客户端上自动化重复任务 复制链接链接已复制到粘贴板!
2.1. 将 Ansible 角色分配给现有主机 复制链接链接已复制到粘贴板!
您可以使用 Ansible 角色来远程管理 Satellite 客户端。
前提条件
- 确保您已配置并导入的 Ansible 角色。
流程
- 在 Satellite Web UI 中,导航到 Hosts > All Hosts。
- 选择主机,然后单击 编辑。
- 在 Ansible Roles 选项卡上,从 Available Ansible Roles 列表中选择您要添加的角色。
- 单击 + 图标,将角色添加到主机。您可以添加多个角色。
- 点 Submit。
将 Ansible 角色分配到主机后,您可以使用 Ansible 进行远程执行。更多信息请参阅 第 4.13 节 “为远程执行发布 SSH 密钥”。
覆盖参数变量
在 Parameters 选项卡上,单击 Add Parameter,以添加您要在运行时传递给作业模板的任何参数变量。这包括您要与主机关联的所有 Ansible playbook 参数和主机参数。要将参数变量与 Ansible 作业模板一起使用,您必须添加一个 Host Parameter。
2.2. 从主机中删除 Ansible 角色 复制链接链接已复制到粘贴板!
使用以下流程从主机中删除 Ansible 角色。
流程
- 在 Satellite Web UI 中,导航到 Hosts > All Hosts。
- 选择主机,然后单击 编辑。
- 选择 Ansible Roles 选项卡。
- 在 Assigned Ansible Roles 区域中,单击 - 图标,将角色从主机移除。重复删除更多角色。
- 点 Submit。
2.3. 更改 Ansible 角色的顺序 复制链接链接已复制到粘贴板!
使用以下步骤更改应用到主机的 Ansible 角色的顺序。
流程
- 在 Satellite Web UI 中,导航到 Hosts > All Hosts。
- 选择主机。
- 选择 Ansible Roles 选项卡。
- 在 分配的 Ansible 角色 区域中,您可以通过将角色拖放到首选位置来更改角色的顺序。
- 单击 Submit 以保存 Ansible 角色的顺序。
2.4. 在主机上运行 Ansible 角色 复制链接链接已复制到粘贴板!
您可以通过 Satellite Web UI 在主机上运行 Ansible 角色。
前提条件
- 您必须将部署配置为运行 Ansible 角色。如需更多信息,请参阅 第 1.2 节 “配置 Satellite 以运行 Ansible 角色”。
- 您必须将 Ansible 角色分配到主机。
流程
- 在 Satellite Web UI 中,导航到 Hosts > All Hosts。
- 选中包含要运行的 Ansible 角色的主机的复选框。
- 从 Select Action 列表中,选择 Run all Ansible roles。
您可以在 Run Ansible roles 页面中查看 Ansible 作业的状态。要重新运行作业,请单击 Rerun 按钮。
2.5. 将 Ansible 角色分配到主机组 复制链接链接已复制到粘贴板!
您可以使用 Ansible 角色来远程管理 Satellite 客户端。
前提条件
- 您必须将部署配置为运行 Ansible 角色。如需更多信息,请参阅 第 1.2 节 “配置 Satellite 以运行 Ansible 角色”。
流程
- 在 Satellite Web UI 中,导航到 Configure > Host Groups。
- 单击您要为其分配 Ansible 角色的主机组名称。
- 在 Ansible Roles 选项卡上,从 Available Ansible Roles 列表中选择您要添加的角色。
- 单击 + 图标,将角色添加到主机组中。您可以添加多个角色。
- 点 Submit。
2.6. 在主机组上运行 Ansible 角色 复制链接链接已复制到粘贴板!
您可以通过 Satellite Web UI 在主机组上运行 Ansible 角色。
前提条件
- 您必须将部署配置为运行 Ansible 角色。如需更多信息,请参阅 第 1.2 节 “配置 Satellite 以运行 Ansible 角色”。
- 您必须将 Ansible 角色分配到主机组。
- 您的主机组中必须至少有一个主机。
流程
- 在 Satellite Web UI 中,导航到 Configure > Host Groups。
- 从主机组的 Actions 列中的列表,选择 Run all Ansible roles。
您可以在 Run Ansible roles 页面中查看 Ansible 作业的状态。要重新运行作业,请单击 Rerun 按钮。
2.7. 在检查模式下运行 Ansible 角色 复制链接链接已复制到粘贴板!
您可以通过 Satellite Web UI 以检查模式运行 Ansible 角色。
前提条件
- 您必须将部署配置为运行 Ansible 角色。如需更多信息,请参阅 第 1.2 节 “配置 Satellite 以运行 Ansible 角色”。
- 您必须将 Ansible 角色分配到主机组。
- 您的主机组中必须至少有一个主机。
流程
- 在 Satellite Web UI 中,导航到 Hosts > ; All Hosts。
- 为您要为其启用检查模式的主机点 Edit。
-
在 Parameters 选项卡中,确保主机具有名为
ansible_roles_check_mode的参数,其 type布尔值设为true。 - 点 Submit。
第 3 章 从 Satellite 运行 Ansible playbook 复制链接链接已复制到粘贴板!
您可以通过在 Satellite 中执行远程作业,在主机或主机组上运行 Ansible playbook。
Ansible playbook 作业模板中的主机参数限制
当您在多个主机上执行 Ansible playbook 时,Satellite 呈现批处理中所有主机的 playbook,但仅使用第一个主机渲染的 playbook 在批处理中的所有主机上执行。因此,您无法使用模板控制流结构中的 host 参数修改每个主机的 playbook 行为。主机参数转换为 Ansible 变量,因此您可以使用它们来控制原生 Ansible 结构中的行为。如需更多信息,请参阅 BZ#2282275。
前提条件
- Satellite 中的 Ansible 插件已启用。
- 配置了远程作业执行。如需更多信息,请参阅 第 4 章 配置和设置远程作业。
- 您有一个可以使用的 Ansible playbook。
流程
- 在 Satellite Web UI 中,进入到 Monitor > Jobs。
- 单击 Run Job。
-
在 Job category 中,选择
Ansible Playbook。 -
在 Job template 中,选择
Ansible - Run playbook。 - 点击 Next。
- 选择您要在其上运行 playbook 的主机。
- 在 playbook 字段中,粘贴 Ansible playbook 的内容。
- 按照向导完成设置远程作业。如需更多信息,请参阅 第 4.21 节 “执行远程作业”。
- 单击 Submit,以在您的主机上运行 Ansible playbook。
其他资源
或者,您可以从 Capsule 服务器导入 Ansible playbook。如需更多信息,请参阅以下资源:
第 4 章 配置和设置远程作业 复制链接链接已复制到粘贴板!
使用本节作为将 Satellite 配置为在远程主机上执行作业的指南。
要应用到远程主机的任何命令都必须定义为作业模板。定义了作业模板后,您可以多次执行它。
4.1. 关于在主机上运行作业 复制链接链接已复制到粘贴板!
您可以使用 shell 脚本或 Ansible 任务和 playbook 在主机上从胶囊远程运行作业。这称为远程执行。
对于您创建的自定义 Ansible 角色或您下载的角色,您必须安装包含胶囊基础操作系统上角色的软件包。在使用 Ansible 角色之前,您必须将角色从安装它们的 Capsule 中导入到卫星中。
通信通过胶囊服务器进行,这意味着卫星服务器不需要直接访问目标主机,并可扩展为管理许多主机。更多信息请参阅 第 4.4 节 “远程执行的传输模式”。
Satellite 使用 ERB 语法作业模板。如需更多信息, 请参阅管理主机中的模板编写参考 。
默认情况下,包括 shell 脚本和 Ansible 的多个作业模板。如需更多信息,请参阅管理主机中的 设置作业模板。
任何胶囊服务器基础操作系统是卫星服务器的内部胶囊的客户端,因此本节适用于连接到卫星服务器的任何类型的主机,包括胶囊。
您可以一次在多个主机上运行作业,您可以在命令中使用变量来更精细地控制您运行的作业。您可以使用主机事实和参数来填充变量值。
另外,您可以在运行命令时为模板指定自定义值。
如需更多信息 ,请参阅管理主机中的 执行远程作业。
4.2. 远程执行工作流 复制链接链接已复制到粘贴板!
在主机上运行远程作业时,对于每个主机,卫星将执行以下操作来查找要使用的远程执行胶囊。
卫星仅搜索启用了 Ansible 功能的 Capsule。
- 卫星找到选择了 远程执行 复选框的主机接口。
- Satellite 查找这些接口的子网。
- 卫星查找分配给这些子网的远程执行胶囊。
- 从这组胶囊中,卫星选择具有最少运行作业数量的胶囊。通过执行此操作,卫星将确保远程执行胶囊之间作业负载平衡。
如果您为远程执行启用了 Prefer 通过 Capsule 注册,Satellite 会使用主机注册到的 Capsule 运行 REX 作业。
默认情况下,针对远程执行通过 Capsule 注册 Prefer 将设置为 No。要启用它,在 Satellite web UI 中,进入到 Administer > Settings,在 Content 标签页中将 Prefer registered through Capsule for remote execution 设置为 Yes。这可确保卫星在主机上由他们注册到的胶囊执行 REX 作业。
如果卫星在此阶段找不到远程执行胶囊,并且启用了 Fallback 到 Any Capsule 设置,则卫星会添加另一组胶囊,以从中选择远程执行胶囊。Satellite 从分配给主机的以下类型的胶囊中选择最轻量的载入的胶囊:
- DHCP、DNS 和 TFTP 胶囊分配给主机的子网
- 分配给主机的域的 DNS 胶囊
- 分配给主机的域的 realm Capsule
- Puppet 服务器胶囊
- Puppet CA Capsule
- OpenSCAP Capsule
如果卫星在此阶段找不到远程执行胶囊,并且如果启用了 Enable Global Capsule 设置,则卫星会从主机组织和位置集合中选择最轻量的远程执行胶囊,以执行远程作业。
4.3. 远程执行权限 复制链接链接已复制到粘贴板!
您可以控制哪些角色可以在基础架构内运行哪些作业,包括它们可以针对哪些主机。远程执行功能提供两个内置角色:
- 远程执行管理器 :可以访问所有远程执行特性和功能。
- 远程执行用户 :只能运行作业。
您可以克隆 Remote Execution User 角色,并自定义其过滤器以增加粒度。如果您使用自定义角色的 view_job_templates 权限调整过滤器,则只能根据匹配的作业模板查看和触发作业。您可以使用 view_hosts 和 view_smart_proxies 权限来限制角色可以看到哪些主机或胶囊。
execute_template_invocation 权限是一个特殊权限,在执行作业开始前立即检查。此权限定义您可以在特定主机上运行的作业模板。这在指定权限时允许更多粒度。
您可以针对使用 execute_jobs_on_infrastructure_hosts 权限,针对 Red Hat Satellite 中注册的主机运行远程执行作业。标准管理器和 站点管理器 角色默认具有此权限。如果您使用 Manager 或 Site Manager 角色,或者使用带有 execute_jobs_on_infrastructure_hosts 权限的自定义角色,您可以对注册的 Red Hat Satellite 和 Capsule 主机执行远程作业。
有关使用角色和权限的更多信息,请参阅管理 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
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 结尾的主机池。使用第三行将模板与主机组绑定。
分配给具有这些角色的用户的权限可能会随时间而改变。如果您已经计划一些作业来在以后运行,并且权限更改,这可能会导致执行失败,因为权限会在作业执行前立即检查。
4.4. 远程执行的传输模式 复制链接链接已复制到粘贴板!
您可以将 Satellite 配置为使用两种不同的传输模式进行远程作业执行。
在 ssh 模式的胶囊上,远程执行使用 SSH 服务来传输作业详细信息。这是默认的传输模式。必须在目标主机上启用并激活 SSH 服务。远程执行胶囊必须有权访问目标主机上的 SSH 端口。除非具有不同的设置,否则标准 SSH 端口为 22。
如果您的 Capsule 已使用 pull-mqtt 模式,而您想要切回到 ssh 模式,请运行这个 satellite-installer 命令:
satellite-installer --foreman-proxy-plugin-remote-execution-script-mode=ssh
# satellite-installer --foreman-proxy-plugin-remote-execution-script-mode=ssh
在 pull-mqtt 模式的胶囊上,远程执行使用消息队列遥测传输(MQTT)发布从卫星服务器接收的作业。主机使用 yggdrasil 拉取客户端,订阅 Capsule 上对作业通知的 MQTT 代理。主机收到通知后,它会通过 HTTPS 从胶囊拉取作业详情,运行作业,并将结果报告回 Capsule。
要使用 pull-mqtt 模式,您必须在胶囊服务器上启用它,并在目标主机上配置拉取客户端。
其他资源
- 要在 Capsule 服务器上启用拉取模式,请参阅安装 Capsule 服务器中的 为 Pull Client 配置远程执行。
- 要在现有主机上启用拉取模式,请继续 第 4.5 节 “配置主机以使用 Pull 客户端”。
- 要从 Katello Agent 迁移主机,请参阅管理主机中的 从 Katello Agent 迁移到远程执行。
要在新主机上启用拉取模式,请继续管理主机中的以下任一流程:
4.5. 配置主机以使用 Pull 客户端 复制链接链接已复制到粘贴板!
对于配置为使用 pull-mqtt 模式的胶囊,主机可以使用远程执行拉取客户端订阅远程作业。受管主机不需要 SSH 连接到其胶囊服务器。
前提条件
- 您已将主机注册到 Satellite。
-
主机的胶囊配置为使用
pull-mqtt模式。如需更多信息,请参阅安装 Capsule 服务器 中的 为 Pull 客户端配置远程执行。 - Red Hat Satellite Client 6 存储库在卫星服务器上启用和同步,并在主机上启用。
-
主机可以使用端口
1883与 MQT 上的胶囊通信。 - 主机可以通过 HTTPS 与其胶囊通信。
创建 katello-pull-transport-migrate 软件包,以帮助用户使用 pull 客户端从 Katello Agent 迁移到远程执行。但是,在主机上安装了 Katello Agent 不是要求。无论是否安装了 Katello Agent,您可以使用 katello-pull-transport-migrate。
流程
在您的主机上安装
katello-pull-transport-migrate软件包:在 Red Hat Enterprise Linux 8 和 Red Hat Enterprise Linux 9 主机上:
dnf install katello-pull-transport-migrate
# dnf install katello-pull-transport-migrateCopy to Clipboard Copied! Toggle word wrap Toggle overflow On Red Hat Enterprise Linux 7 hosts:
yum install katello-pull-transport-migrate
# yum install katello-pull-transport-migrateCopy to Clipboard Copied! Toggle word wrap Toggle overflow
软件包将
foreman_ygg_worker和yggdrasil安装为依赖项,并在主机上启用拉取模式。主机的subscription-manager配置和消费者证书用于在主机上配置yggdrasil客户端,并且启动拉取模式客户端 worker。可选: 要验证 pull 客户端是否在正确运行并配置了,请检查
ygdrasild服务的状态:systemctl status yggdrasild
# systemctl status yggdrasildCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:安装软件包后,您可以从主机中删除
katello-agent。警告如果您的主机安装在 Red Hat Virtualization 版本 4.4 或较低版本上,请不要删除
katello-agent软件包,因为删除的依赖关系会破坏主机。
4.6. 创建作业模板 复制链接链接已复制到粘贴板!
使用这个流程创建作业模板。要使用 CLI 而不是 Satellite Web UI,请参阅 CLI 过程。
流程
- 在 Satellite Web UI 中,导航到 Hosts > Job templates。
- 单击 New Job Template。
- 点 Template 选项卡,在 Name 字段中输入您的作业模板的唯一名称。
- 选择 Default 以使模板可用于所有组织和位置。
- 直接在模板编辑器中创建模板,或者通过单击 Import 从文本文件上传。
- 可选:在 Audit Comment 字段中,添加有关更改的信息。
- 单击 Job 选项卡,然后在 Job category 字段中输入您自己的类别,或者从管理主机的默认 作业模板类别中列出的默认类别 中进行选择。
-
可选:在 Description Format 字段中输入描述模板。例如,
Install package %{package_name}.您还可以在模板中使用%{template_name}和%{job_category}。 - 从 Provider Type 列表,为 shell 脚本选择 SSH,为 Ansible 任务或 playbook 选择 Ansible。
- 可选:在 Timeout to kill 字段中,输入超时值,以在未完成时终止作业。
- 可选:点 Add Input 来定义输入参数。在执行作业时请求参数,且不必在模板中定义。有关示例,请参阅 帮助 选项卡。
- 可选:点 Foreign input set 来在此作业中包含其他模板。
-
可选:在 Effective user 区域中,在命令无法使用默认的
remote_execution_effective_user设置时配置用户。 - 可选:如果此模板是要包含在其他模板中的代码片段,点 Type 选项卡并选择 Snippet。
- 可选:如果使用 Ansible 供应商,点 Ansible 选项卡。选择 Enable Ansible Callback 以允许主机发送用于创建配置报告的事实,并在作业完成后返回到 Satellite。
- 点 Location 选项卡,并添加您要使用模板的位置。
- 单击 Organizations 选项卡,再添加您要使用该模板的组织。
- 单击 Submit 以保存您的更改。
您可以通过在模板语法中包含其他模板来扩展和自定义模板。如需更多信息,请参阅管理主机中的模板编写参考 和 作业模板示例和扩展。
CLI 过程
要使用 template-definition 文件创建作业模板,请输入以下命令:
hammer job-template create \ --file "Path_to_My_Template_File" \ --job-category "My_Category_Name" \ --name "My_Template_Name" \ --provider-type SSH
# hammer job-template create \ --file "Path_to_My_Template_File" \ --job-category "My_Category_Name" \ --name "My_Template_Name" \ --provider-type SSHCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.7. 根据名称导入 Ansible Playbook 复制链接链接已复制到粘贴板!
您可以根据名称从在 Capsule 上安装的集合将 Ansible playbook 导入到卫星。Satellite 从导入的 playbook 创建作业模板,并将模板放在 Ansible Playbook - 导入 的作业类别中。
如果您有自定义集合,请将其放在 /etc/ansible/collections/ansible_collections/My_Namespace/My_Collection 中。
前提条件
- Ansible 插件已启用。
-
您的 Satellite 帐户有一个授予
import_ansible_playbooks权限的角色。
流程
使用以下 API 请求获取可用的 Ansible playbook:
curl -X GET -H 'Content-Type: application/json' https://satellite.example.com/ansible/api/v2/ansible_playbooks/fetch?proxy_id=My_capsule_ID
# curl -X GET -H 'Content-Type: application/json' https://satellite.example.com/ansible/api/v2/ansible_playbooks/fetch?proxy_id=My_capsule_IDCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 选择您要导入的 Ansible playbook 并记下其名称。
使用名称导入 Ansible playbook:
curl -X PUT -H 'Content-Type: application/json' -d '{ "playbook_names": ["My_Playbook_Name"] }' https://satellite.example.com/ansible/api/v2/ansible_playbooks/sync?proxy_id=My_capsule_ID# curl -X PUT -H 'Content-Type: application/json' -d '{ "playbook_names": ["My_Playbook_Name"] }' https://satellite.example.com/ansible/api/v2/ansible_playbooks/sync?proxy_id=My_capsule_IDCopy to Clipboard Copied! Toggle word wrap Toggle overflow 导入完成后,您将在 Satellite Web UI 中获取通知。
后续步骤
- 您可以通过从创建的作业模板执行远程作业来运行 playbook。如需更多信息,请参阅 第 4.21 节 “执行远程作业”。
4.8. 导入所有可用的 Ansible Playbook 复制链接链接已复制到粘贴板!
您可以从在 Capsule 上安装的集合中将所有可用的 Ansible playbook 导入到卫星。Satellite 从导入的 playbook 创建作业模板,并将模板放在 Ansible Playbook - 导入 的作业类别中。
如果您有自定义集合,请将其放在 /etc/ansible/collections/ansible_collections/My_Namespace/My_Collection 中。
前提条件
- Ansible 插件已启用。
-
您的 Satellite 帐户有一个授予
import_ansible_playbooks权限的角色。
流程
使用以下 API 请求导入 Ansible playbook:
curl -X PUT -H 'Content-Type: application/json' https://satellite.example.com/ansible/api/v2/ansible_playbooks/sync?proxy_id=My_capsule_ID
# curl -X PUT -H 'Content-Type: application/json' https://satellite.example.com/ansible/api/v2/ansible_playbooks/sync?proxy_id=My_capsule_IDCopy to Clipboard Copied! Toggle word wrap Toggle overflow 导入完成后,您将在 Satellite Web UI 中获取通知。
后续步骤
- 您可以通过从创建的作业模板执行远程作业来运行 playbook。如需更多信息,请参阅 第 4.21 节 “执行远程作业”。
您可以启用 Fallback 到 Any Capsule 设置,以配置卫星,从分配给主机的胶囊列表中搜索远程执行胶囊。如果您需要在没有配置子网的主机上运行远程作业,或者主机子网被分配给没有启用远程执行功能的胶囊,这将非常有用。
如果启用了 Fallback 到 Any Capsule 设置,卫星会添加另一组胶囊,以从中选择远程执行胶囊。Satellite 还从分配给主机的所有胶囊集选择最轻量的载入的胶囊,如下所示:
- DHCP、DNS 和 TFTP 胶囊分配给主机的子网
- 分配给主机的域的 DNS 胶囊
- 分配给主机的域的 realm Capsule
- Puppet 服务器胶囊
- Puppet CA Capsule
- OpenSCAP Capsule
流程
- 在 Satellite Web UI 中,导航到 Administer > Settings。
- 点 Remote Execution。
- 将 Fallback 配置为 Any Capsule 设置。
CLI 过程
在 Satellite 上输入
hammer settings set命令,将 Fallback 配置为任何 Capsule 设置。要将值设为true,请输入以下命令:hammer settings set \ --name=remote_execution_fallback_proxy \ --value=true
# hammer settings set \ --name=remote_execution_fallback_proxy \ --value=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.10. 在 Satellite 中配置全局胶囊远程执行设置 复制链接链接已复制到粘贴板!
默认情况下,无论为主机的子网是否分配了胶囊,Satellite 会在主机组织和位置中搜索远程执行胶囊。如果要将搜索限制为分配给主机子网的胶囊,可以禁用 Enable Global Capsule 设置。
如果启用了 Enable Global Capsule 设置,卫星会添加另一组胶囊,以从中选择远程执行胶囊。卫星还从主机组织和位置中的所有胶囊集合中选择最轻量的远程执行胶囊,以执行远程作业。
流程
- 在 Satellite Web UI 中,导航到 Administer > Settings。
- 点 Remote Execution。
- 配置 Enable Global Capsule 设置。
CLI 过程
在 Satellite 上输入
hammer settings set命令,以配置Enable Global Capsule设置。要将值设为true,请输入以下命令:hammer settings set \ --name=remote_execution_global_proxy \ --value=true
# hammer settings set \ --name=remote_execution_global_proxy \ --value=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.11. 将 Satellite 配置为使用备用目录在主机上执行远程作业 复制链接链接已复制到粘贴板!
Ansible 将自己的文件放在服务器端,并放入 /tmp 目录中。如果需要,您可以选择设置不同的目录。
流程
在 Satellite 服务器或 Capsule 服务器上创建新目录:
mkdir /My_Remote_Working_Directory
# mkdir /My_Remote_Working_DirectoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从默认的
/tmp目录中复制 SELinux 上下文:chcon --reference=/tmp /My_Remote_Working_Directory
# chcon --reference=/tmp /My_Remote_Working_DirectoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将您的 Satellite 服务器或 Capsule 服务器配置为使用新目录:
satellite-installer \ --foreman-proxy-plugin-ansible-working-dir /My_Remote_Working_Directory
# satellite-installer \ --foreman-proxy-plugin-ansible-working-dir /My_Remote_Working_DirectoryCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.12. 更改权限提升方法 复制链接链接已复制到粘贴板!
默认情况下,基于推送的远程执行使用 sudo 从 SSH 用户切换到在主机上执行脚本的有效用户。在某些情况下,您可能需要使用其他方法,如 su 或 dzdo。您可以在 Satellite 设置中全局配置替代方法。
前提条件
-
您的用户帐户分配了一个授予
view_settings和edit_settings权限的角色。 -
如果要将
dzdo用于 Ansible 作业,请确保已安装了包含所需 dzdo become 插件的community.generalAnsible 集合。如需更多信息,请参阅 Ansible 文档中的安装 集合。
流程
- 导航到 Administer > Settings。
- 选择 Remote Execution 选项卡。
- 点 Effective User Method 设置的值。
- 选择新值。
- 点 Submit。
4.13. 为远程执行发布 SSH 密钥 复制链接链接已复制到粘贴板!
对于 ssh 模式中的胶囊,远程执行连接通过 SSH 进行身份验证。来自 Capsule 的公共 SSH 密钥必须分发到您要管理的附加主机。
确保 SSH 服务已启用并在主机上运行。配置任何网络或基于主机的防火墙,以启用对端口 22 的访问。
使用以下方法之一将公共 SSH 密钥从 Capsule 分发到目标主机:
- 第 4.14 节 “为远程执行发布 SSH 密钥”.
- 第 4.16 节 “使用 Satellite API 为远程执行提供 SSH 密钥”.
- 第 4.17 节 “在置备过程中将 Kickstart 模板配置为分布式 SSH 密钥”.
- 对于新的 Satellite 主机,您可以使用全局注册模板在注册过程中将 SSH 密钥部署到 Satellite 主机。如需更多信息,请参阅管理主机中的使用全局注册模板将主机注册到 Red Hat Satellite。
默认情况下,Satellite 分发用于远程执行功能的 SSH 密钥到从 Satellite 调配的主机。
如果主机在 Amazon Web Services 上运行,启用密码身份验证。如需更多信息,请参阅 新用户帐户。
4.14. 为远程执行发布 SSH 密钥 复制链接链接已复制到粘贴板!
要手动分发 SSH 密钥,请完成以下步骤:
流程
将 SSH 公钥从 Capsule 复制到您的目标主机:
ssh-copy-id -i ~foreman-proxy/.ssh/id_rsa_foreman_proxy.pub root@client.example.com
# ssh-copy-id -i ~foreman-proxy/.ssh/id_rsa_foreman_proxy.pub root@client.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow 对您要管理的每个目标主机重复此步骤。
验证
要确认密钥已成功复制到目标主机,请在 Capsule 上输入以下命令:
ssh -i ~foreman-proxy/.ssh/id_rsa_foreman_proxy root@client.example.com
# ssh -i ~foreman-proxy/.ssh/id_rsa_foreman_proxy root@client.example.comCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.15. 将密码添加到用于远程执行的 SSH 密钥 复制链接链接已复制到粘贴板!
默认情况下,胶囊使用非密码短语保护的 SSH 密钥来在主机上执行远程作业。您可以按照以下流程使用密码短语保护 SSH 密钥。
流程
在 Satellite 服务器或 Capsule 服务器上,使用
ssh-keygen在您的 SSH 密钥中添加密码短语:ssh-keygen -p -f ~foreman-proxy/.ssh/id_rsa_foreman_proxy
# ssh-keygen -p -f ~foreman-proxy/.ssh/id_rsa_foreman_proxyCopy to Clipboard Copied! Toggle word wrap Toggle overflow
后续步骤
- 现在,在主机上运行远程执行作业时,用户必须使用密码短语。
4.16. 使用 Satellite API 为远程执行提供 SSH 密钥 复制链接链接已复制到粘贴板!
要使用 Satellite API 从胶囊下载公钥,请在每个目标主机上完成此步骤。
流程
在目标主机上,创建
~/.ssh目录来存储 SSH 密钥:mkdir ~/.ssh
# mkdir ~/.sshCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从 Capsule 下载 SSH 密钥:
curl https://capsule.example.com:9090/ssh/pubkey >> ~/.ssh/authorized_keys
# curl https://capsule.example.com:9090/ssh/pubkey >> ~/.ssh/authorized_keysCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为
~/.ssh目录配置权限:chmod 700 ~/.ssh
# chmod 700 ~/.sshCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为
authorized_keys文件配置权限:chmod 600 ~/.ssh/authorized_keys
# chmod 600 ~/.ssh/authorized_keysCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.17. 在置备过程中将 Kickstart 模板配置为分布式 SSH 密钥 复制链接链接已复制到粘贴板!
您可以在自定义 Kickstart 模板中添加 remote_execution_ssh_keys 片断,以便在置备过程中将 SSH 密钥部署到主机。Satellite 默认附带的 Kickstart 模板包括这个片断。Satellite 在调配期间将用于远程执行的 SSH 密钥复制到系统。
流程
要在新置备的主机中包含公钥,请在您使用的 Kickstart 模板中添加以下片断:
<%= snippet 'remote_execution_ssh_keys' %>
<%= snippet 'remote_execution_ssh_keys' %>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.18. 为 Kerberos Ticket Granting Ticket 配置 keytab 复制链接链接已复制到粘贴板!
使用这个流程将 Satellite 配置为使用 keytab 获取 Kerberos 票据授予票据。如果没有设置 keytab,则必须手动检索票据。
流程
查找
foreman-proxy用户的 ID:id -u foreman-proxy
# id -u foreman-proxyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 修改
umask值,以便新文件具有权限600:umask 077
# umask 077Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 keytab 创建目录:
mkdir -p "/var/kerberos/krb5/user/My_User_ID"
# mkdir -p "/var/kerberos/krb5/user/My_User_ID"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 keytab,或将现有 keytab 复制到目录中:
cp My_Client.keytab /var/kerberos/krb5/user/My_User_ID/client.keytab
# cp My_Client.keytab /var/kerberos/krb5/user/My_User_ID/client.keytabCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将目录所有者改为
foreman-proxy用户:chown -R foreman-proxy:foreman-proxy "/var/kerberos/krb5/user/My_User_ID"
# chown -R foreman-proxy:foreman-proxy "/var/kerberos/krb5/user/My_User_ID"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确保 keytab 文件为只读:
chmod -wx "/var/kerberos/krb5/user/My_User_ID/client.keytab"
# chmod -wx "/var/kerberos/krb5/user/My_User_ID/client.keytab"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 恢复 SELinux 上下文:
restorecon -RvF /var/kerberos/krb5
# restorecon -RvF /var/kerberos/krb5Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.19. 为远程执行配置 Kerberos 身份验证 复制链接链接已复制到粘贴板!
您可以使用 Kerberos 身份验证在 Satellite 主机上建立用于远程执行的 SSH 连接。
前提条件
- 在 Kerberos 服务器上注册卫星服务器
- 在 Kerberos 服务器上注册 Satellite 目标主机
- 配置并初始化用于远程执行的 Kerberos 用户帐户
- 确保 Satellite 上的 foreman-proxy 用户具有有效的 Kerberos 票据授予票据
流程
要为远程执行安装并启用 Kerberos 身份验证,请输入以下命令:
satellite-installer --scenario satellite \ --foreman-proxy-plugin-remote-execution-script-ssh-kerberos-auth true
# satellite-installer --scenario satellite \ --foreman-proxy-plugin-remote-execution-script-ssh-kerberos-auth trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 要编辑用于远程执行的默认用户,请在 Satellite Web UI 中进入到 Administer > Settings 并点 Remote Execution 选项卡。在 SSH User 行中,编辑第二列并为 Kerberos 帐户添加用户名。
- 导航到 remote_execution_effective_user,再编辑第二列,为 Kerberos 帐户添加用户名。
验证
- 要确认 Kerberos 身份验证已准备就绪,请在主机上运行远程作业。如需更多信息,请参阅在 Red Hat Satellite 中使用 Ansible 集成管理配置中的 执行远程作业。
4.20. 设置作业模板 复制链接链接已复制到粘贴板!
Satellite 提供了可用于执行作业的默认作业模板。要查看作业模板列表,请导航到 Hosts > Job templates。如果要使用没有更改的模板,请执行 管理主机 中的 执行远程作业。
您可以使用默认模板作为自己开发的基础。默认作业模板被锁定进行编辑。克隆模板并编辑克隆。
流程
- 要克隆模板,请在 Actions 列中选择 Clone。
- 输入克隆的唯一名称,然后单击 Submit 以保存更改。
作业模板使用嵌入式 Ruby (ERB)语法。有关编写模板的更多信息, 请参阅管理主机中的模板编写参考 。
Ansible 注意事项
要创建 Ansible 作业模板,请使用以下流程,而不使用 ERB 语法,请使用 YAML 语法。使用 --- 开始模板。您可以将 Ansible playbook YAML 文件嵌入到作业模板正文中。您还可以添加 ERB 语法来自定义 YAML Ansible 模板。您也可以在卫星中导入 Ansible playbook。如需更多信息, 请参阅管理主机中的 同步存储库模板。
参数变量
在运行时,作业模板可以接受您为主机定义的参数变量。请注意,只有主机编辑页面中的 Parameters 选项卡上显示的参数可以用作作业模板的输入参数。
4.21. 执行远程作业 复制链接链接已复制到粘贴板!
您可以对一个或多个主机执行基于作业模板的作业。
要使用 CLI 而不是 Satellite Web UI,请参阅 CLI 过程。
流程
在 Satellite Web UI 中,导航到 Monitor > Jobs 并点 Run job。
注意卫星 6.13 具有新的作业向导。如果要使用早期 Satellite 版本中的作业向导,请单击作业向导右上角的 Use legacy 表单。请注意,本指南仅适用于新的作业向导。
- 选择 Job category 和要使用的 Job 模板,然后单击 Next。
选择您要在其上运行作业的主机。如果您没有选择任何主机,该作业将在当前上下文中可在所有主机上运行。
注意如果要选择主机组及其所有子组,则不能选择主机组,因为该作业只会直接在该组的主机上运行,而不在子组中的主机上运行。反之,您必须选择主机组及其所有子组,或者使用此搜索查询:
hostgroup_fullname ~ "My_Host_Group*"
hostgroup_fullname ~ "My_Host_Group*"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 My_Host_Group 替换为顶级主机组的名称。
- 如果需要,请为作业模板提供输入。不同的模板有不同的输入,有些模板没有任何输入。输入所有必需的输入后,点 Next。
- 可选: 要为作业配置高级设置,请填写 Advanced 字段。要了解更多有关高级设置的信息,请参阅 第 4.22 节 “作业向导中的高级设置”。
- 点击 Next。
作业计划时间。
- 要立即执行作业,请保留预先选择的 Immediate 执行。
- 要在以后执行作业,请选择 Future execution。
- 要定期执行作业,请选择 Recurring execution。
可选:如果您选择将来的或重复执行,请选择 Query 类型,否则点 Next。
- 静态查询 意味着作业对您提供的主机的确切列表执行。
- 动态查询 表示仅在执行作业前评估主机列表。如果您根据某些过滤器输入主机列表,则在首次使用该过滤器时结果可能会有所不同。
选择查询类型后,单击 Next。
可选:如果您选择的未来或重复执行,请提供额外的详情:
- 对于未来执行,请输入开始时间和 时间。您还可以选择在日期和时间 之前选择 Starts。如果作业在该时间之前无法启动,它将被取消。
- 对于 周期性执行,请选择开始日期和时间、频率以及结束周期性作业的条件。您可以选择永远不会结束、在特定时间结束,或者在指定次数的重复后结束。您还可以添加 Purpose - 跟踪作业的特殊标签。一次只能有一个具有给定目的的活跃作业。
输入所需信息后,点 Next。
- 查看作业详情。您可以选择返回到作业向导的任意部分,并编辑信息。
- 单击 Submit 以计划执行的作业。
CLI 过程
在 Satellite 中输入以下命令:
hammer settings set \ --name=remote_execution_global_proxy \ --value=false
# hammer settings set \ --name=remote_execution_global_proxy \ --value=falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 查找要使用的作业模板的 ID:
hammer job-template list
# hammer job-template listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 显示模板详情以查看模板所需的参数:
hammer job-template info --id My_Template_ID
# hammer job-template info --id My_Template_IDCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用自定义参数执行远程作业:
hammer job-invocation create \ --inputs My_Key_1="My_Value_1",My_Key_2="My_Value_2",... \ --job-template "My_Template_Name" \ --search-query "My_Search_Query"
# hammer job-invocation create \ --inputs My_Key_1="My_Value_1",My_Key_2="My_Value_2",... \ --job-template "My_Template_Name" \ --search-query "My_Search_Query"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
My_Search_Query替换为定义主机的过滤器表达式,如"name ~ My_Pattern"。有关使用 hammer 执行远程命令的更多信息,请输入hammer job-template --help和hammer job-invocation --help。
4.22. 作业向导中的高级设置 复制链接链接已复制到粘贴板!
有些作业模板要求您输入高级设置。某些高级设置仅对某些作业模板可见。以下是常规高级设置列表。
- SSH 用户
- 用于通过 SSH 连接到主机的用户。
- 有效用户
- 用于执行作业的用户。默认情况下,它是 SSH 用户。如果它与 SSH 用户、su 或 sudo 不同,具体取决于您的设置,则用于切换帐户。
- Description
- 作业的描述模板。
- 要终止的超时
- 任务开始的时间(以秒为单位),如果作业尚未完成,则应终止作业。
- 选择时间
-
客户端未提取作业时取消作业的时间(以秒为单位)。此设置仅适用于使用
pull-mqtt传输的主机。 - 密码
- 如果 SSH 验证方法是密码而不是 SSH 密钥,则使用。
- 私钥密语
- 如果 SSH 密钥受密语保护,则使用。
- 有效用户密码
- 如果有效用户与 ssh 用户不同,则使用。
- 并发级别
- 定义一次性执行的最大作业数。这样可防止在大量主机上执行作业时过载系统资源。
- 时间范围
- 通过所选秒数分发远程执行。作业会定期启动一个时间,以适合给定时间窗。与并发级别类似,这也可以防止系统资源过载。
- 执行顺序
- 决定在主机上执行作业的顺序。它可以是字母或随机的。
4.23. 为主机调度周期性 Ansible 作业 复制链接链接已复制到粘贴板!
您可以计划周期性作业在主机上运行 Ansible 角色。
前提条件
-
确保您有
view_foreman_tasks、view_job_invocations和view_recurring_logics权限。
流程
- 在 Satellite Web UI 中,导航到 Hosts > All Hosts,再选择您要在其上执行远程作业的目标主机。
- 在 Ansible 选项卡中,选择 Jobs。
- 单击 Schedule 周期性作业。
- 在 Create New Recurring Ansible Run 窗口中,定义第一次运行的重复频率、开始时间和日期。
- 点 Submit。
- 可选:查看主机概述中调度的 Ansible 作业,或导航到 Ansible > Jobs。
4.24. 为主机组调度周期性 Ansible 作业 复制链接链接已复制到粘贴板!
您可以计划周期性作业在主机组上运行 Ansible 角色。
流程
- 在 Satellite Web UI 中,导航到 Configure > Host groups。
- 在 Actions 列中,为您要调度 Ansible 角色运行的主机组选择 Configure Ansible Job。
- 单击 Schedule 周期性作业。
- 在 Create New Recurring Ansible Run 窗口中,定义第一次运行的重复频率、开始时间和日期。
- 点 Submit。
4.25. 监控作业 复制链接链接已复制到粘贴板!
您可以在作业运行时监控作业的进度。这可帮助执行任何可能需要的故障排除。
Ansible 作业在 100 个主机的批处理上运行,因此您无法取消在特定主机上运行的作业。只有在 Ansible playbook 在批处理中的所有主机上运行后,作业才会完成。
流程
-
在 Satellite Web UI 中,导航到 Monitor > Jobs。如果您使用
Execute now设置触发了作业,则会自动显示此页面。要监控调度的作业,请导航到 Monitor > Jobs 并选择您要检查的作业运行。 - 在 Job 页面上,单击 Hosts 选项卡。这将显示在其上运行该作业的主机列表。
- 在 Host 列中,单击您要检查的主机的名称。这将显示 Commands 页面的详细信息,您可以在其中实时监控作业执行。
- 随时单击 Back to Job,以返回到 Job Details 页面。
CLI 过程
查找作业的 ID:
hammer job-invocation list
# hammer job-invocation listCopy to Clipboard Copied! Toggle word wrap Toggle overflow 监控作业输出:
hammer job-invocation output \ --host My_Host_Name \ --id My_Job_ID
# hammer job-invocation output \ --host My_Host_Name \ --id My_Job_IDCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选: 要取消作业,请输入以下命令:
hammer job-invocation cancel \ --id My_Job_ID
# hammer job-invocation cancel \ --id My_Job_IDCopy to Clipboard Copied! Toggle word wrap Toggle overflow
4.26. 在 Capsule 上设置作业速率限制 复制链接链接已复制到粘贴板!
您可以一次限制 Capsule 上的活动作业的最大数量,以防止性能激增。该作业从时间 Capsule 开始尝试通知主机有关作业,直到作业在主机上完成为止。
作业速率限制只适用于基于 mqtt 的作业。
活动作业的最佳最大数量取决于您的 Capsule 服务器的计算资源。默认情况下,活跃作业的最大数量是无限的。
流程
使用
satellite-installer设置活跃作业的最大数量:satellite-installer \ --foreman-proxy-plugin-remote-execution-script-mqtt-rate-limit MAX_JOBS_NUMBER
satellite-installer \ --foreman-proxy-plugin-remote-execution-script-mqtt-rate-limit MAX_JOBS_NUMBERCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
satellite-installer \ --foreman-proxy-plugin-remote-execution-script-mqtt-rate-limit 200
satellite-installer \ --foreman-proxy-plugin-remote-execution-script-mqtt-rate-limit 200Copy to Clipboard Copied! Toggle word wrap Toggle overflow
您可以集成 Red Hat Satellite 和 Ansible Automation Controller,以使用 Satellite 服务器作为 Ansible Automation Controller 的动态清单源。Ansible Automation Controller 是 Red Hat Ansible Automation Platform 的一个组件。
您还可以使用置备回调功能,从主机或 Ansible Automation Controller 在由 Satellite 管理的主机上运行 playbook。从 Satellite 服务器置备新主机时,您可以使用置备回调功能从 Ansible Automation Controller 触发 playbook 运行。playbook 在置备过程后配置主机。
要将 Satellite 服务器作为动态清单项目添加到 Ansible Automation Controller 中,您必须在 Ansible Automation Controller 上为 Satellite Server 用户创建一个凭证,将 Ansible Automation Controller 用户添加到凭据中,然后配置清单源。
前提条件
- 例如,如果您的 Satellite 部署非常大,使用非管理员用户管理数万个主机,则由于授权检查期间出现意外时,对性能造成负面影响。对于大型部署,请考虑使用 admin 用户。
-
对于非管理员用户,您必须将
Ansible Tower 清单 Reader角色分配给您的 Satellite Server 用户。有关管理用户、角色和权限过滤器的更多信息,请参阅管理 Red Hat Satellite 中的创建和管理角色。https://docs.redhat.com/en/documentation/red_hat_satellite/6.13/html-single/administering_red_hat_satellite/index#Creating_and_Managing_Roles_admin - 您必须在同一网络或子网上托管 Satellite 服务器和 Ansible Automation Controller。
流程
在 Ansible Automation Controller Web UI 中,为您的 Satellite 创建凭证。有关创建凭证的更多信息,请参阅 自动化控制器用户指南中的 添加新 凭证和 Red Hat Satellite 凭证。
Expand 表 5.1. Satellite 凭证 凭证类型 : Red Hat Satellite 6 Satellite URL :
https://satellite.example.com
用户名 :
Satellite 用户与 integration 角色的用户名。
密码 :
Satellite 用户的密码。
- 将 Ansible Automation Controller 用户添加到新凭据。有关将用户添加到凭证的更多信息,请参阅 自动化控制器用户指南中的 凭证入门。
- 添加新清单。如需更多信息,请参阅 自动化控制器用户指南中的添加新清单。http://docs.ansible.com/automation-controller/latest/html/userguide/inventories.html#add-a-new-inventory
在新清单中,将卫星服务器添加为清单源,并指定以下清单源选项。如需更多信息,请参阅 自动化控制器用户指南中的添加源。https://docs.ansible.com/automation-controller/latest/html/userguide/inventories.html#add-source
Expand 表 5.2. 清单源选项 源 Red Hat Satellite 6 凭证
您为 Satellite 服务器创建的凭据。
覆盖
选择
覆盖变量
选择
启动时更新
选择
缓存超时
90
- 确保同步您添加的源。
5.2. 为主机配置置备回调 复制链接链接已复制到粘贴板!
在 Satellite 中创建主机时,您可以使用 Ansible Automation Controller 运行 playbook 来配置新创建的主机。这在 Ansible Automation Controller 中称为 置备回调。
置备回调功能会触发从 Ansible Automation Controller 运行 playbook,作为置备过程的一部分。playbook 在置备过程后配置主机。
有关置备回调的更多信息,请参阅 自动化控制器用户指南中的 部署回调。
在 Satellite 服务器中,Kickstart Default 和 Kickstart Default Finish 模板包含三个片断:
-
ansible_provisioning_callback -
ansible_tower_callback_script -
ansible_tower_callback_service
您可以在主机或主机组中添加参数,以提供这些代码片段可用于在新创建的主机上运行 Ansible playbook 的凭据。
前提条件
在配置置备回调前,您必须将 Satellite 添加为 Ansible Automation Controller 中的动态清单。如需更多信息,请参阅 集成 Satellite 和 Ansible Automation Controller。
在 Ansible Automation Controller web UI 中,您必须完成以下任务:
流程
- 在 Satellite Web UI 中,导航到 Configure > Host Group。
- 创建主机组或编辑现有的主机组。
- 在 Host Group 窗口中,单击 Parameters 选项卡。
- 点 Add Parameter。
输入每个新参数的以下信息:
Expand 表 5.3. 主机参数 名称 值 Description ansible_tower_provisioningtrue
启用调配回调。
ansible_tower_fqdncontroller.example.com
Ansible Automation Controller 的完全限定域名(FQDN)。不要添加
https,因为这由 Satellite 附加。ansible_job_template_idtemplate_ID
您可以在模板的 URL 中找到的置备模板的 ID:
/templates/job_template/5。ansible_host_config_keyconfig_KEY
作业模板在 Ansible Automation Controller 中生成的主机配置密钥。
- 点 Submit。
- 使用主机组创建主机。
在新主机上输入以下命令来启动
ansible-callback服务:systemctl start ansible-callback
# systemctl start ansible-callbackCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在新主机上输入以下命令输出
ansible-callback服务的状态:systemctl status ansible-callback
# systemctl status ansible-callbackCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果命令返回以下输出,则置备回调会被正确配置:
SAT_host systemd[1]: Started Provisioning callback to Ansible Automation Controller...
SAT_host systemd[1]: Started Provisioning callback to Ansible Automation Controller...Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手动置备回调
您可以使用主机的置备回调 URL 和主机配置密钥来调用 Ansible Automation Controller:
curl -k -s --data curl --insecure --data host_config_key=my_config_key \ https://controller.example.com/api/v2/job_templates/8/callback/
# curl -k -s --data curl --insecure --data host_config_key=my_config_key \ https://controller.example.com/api/v2/job_templates/8/callback/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 确保您在输入置备回调 URL 时使用
https。
这会针对主机触发模板中指定的 playbook。
第 6 章 作业模板示例和扩展 复制链接链接已复制到粘贴板!
使用本节作为参考,以帮助修改、自定义和扩展您的作业模板以满足您的要求。
6.1. 自定义作业模板 复制链接链接已复制到粘贴板!
在创建作业模板时,您可以在模板编辑器字段中包含现有模板。这样,您可以组合模板,或者从一般模板创建更具体的模板。
以下模板组合了默认模板,以在客户端上安装和启动 nginx 服务:
<%= render_template 'Package Action - SSH Default', :action => 'install', :package => 'nginx' %> <%= render_template 'Service Action - SSH Default', :action => 'start', :service_name => 'nginx' %>
<%= render_template 'Package Action - SSH Default', :action => 'install', :package => 'nginx' %>
<%= render_template 'Service Action - SSH Default', :action => 'start', :service_name => 'nginx' %>
以上模板指定呈现模板的参数值。也可以使用 input () 方法,允许用户在作业执行时为呈现的模板定义输入。例如,您可以使用以下语法:
<%= render_template 'Package Action - SSH Default', :action => 'install', :package => input("package") %>
<%= render_template 'Package Action - SSH Default', :action => 'install', :package => input("package") %>
使用上述模板,您必须从呈现的模板导入参数定义。为此,请导航到 Jobs 选项卡,单击 Add Foreign Input Set,然后从 Target template 列表中选择呈现的模板。您可以导入所有参数,或者指定以逗号分隔的列表。
6.2. 默认任务模板类别 复制链接链接已复制到粘贴板!
| 作业模板类别 | Description |
|---|---|
| 软件包 | 用于执行软件包相关操作的模板。默认情况下包括安装、更新和删除操作。 |
| puppet | 在目标主机上运行 Puppet 的模板。 |
| power | 用于执行电源相关操作的模板。默认情况下包括重启和关闭操作。 |
| 命令 | 在远程主机上执行自定义命令的模板。 |
| 服务 | 用于执行服务相关操作的模板。默认情况下,包括 start、stop、restart 和 status 操作。 |
| Katello | 用于执行内容相关操作的模板。这些模板主要从 Satellite Web UI 的不同部分使用(例如,用于内容主机的批量操作 UI),但可用于执行勘误表安装等操作。 |
6.3. restorecon 模板示例 复制链接链接已复制到粘贴板!
本例演示了如何创建名为 Run Command - restorecon 的模板,该模板用于恢复目标主机上所选目录中所有文件的默认 SELinux 上下文。
流程
- 在 Satellite Web UI 中,导航到 Hosts > Job templates。
- 单击 New Job Template。
在 Name 字段中输入 Run Command - restorecon。选择 Default 使模板可供所有组织使用。将以下文本添加到模板编辑器中:
restorecon -RvF <%= input("directory") %>restorecon -RvF <%= input("directory") %>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在作业调用过程中,<%
= input ("directory")%> 字符串被替换为用户定义的目录。-
在 Job 选项卡上,将 Job category 设置为
Commands。 -
单击 Add Input 以允许自定义作业。在 Name 字段中输入
目录。输入名称必须与模板编辑器中指定的值匹配。 - 单击 Required,以便在没有用户指定参数的情况下无法执行该命令。
-
从 Input type 列表中选择 User input。在作业调用过程中输入要显示的描述,如
restorecon 的 Target 目录。 - 点 Submit。如需更多信息,请参阅管理主机中的 在多个主机上执行 restorecon 模板。
6.4. 渲染 restorecon 模板 复制链接链接已复制到粘贴板!
本例演示了如何创建从 Example restorecon Template 中创建的 Run command - restorecon 模板派生出的模板。此模板不需要用户在作业执行时输入,它将在目标主机上的 /home/ 目录下的所有文件中恢复 SELinux 上下文。
创建新模板,如 设置作业模板 中所述,并在模板编辑器中指定以下字符串:
<%= render_template("Run Command - restorecon", :directory => "/home") %>
<%= render_template("Run Command - restorecon", :directory => "/home") %>
6.5. 在多个主机上执行 restorecon 模板 复制链接链接已复制到粘贴板!
本例演示了如何在多个主机上基于 示例 restorecon 模板中创建的模板运行作业。作业在 /home/ 目录下的所有文件中恢复 SELinux 上下文。
流程
- 在 Satellite Web UI 中,导航到 Monitor > Jobs 并点 Run job。
- 选择 Commands as Job category and Run Command - restorecon as Job template,再单击 Next。
- 选择您要在其上运行作业的主机。如果您没有选择任何主机,该作业将在当前上下文中可在所有主机上运行。
-
在 目录 字段中,提供一个目录,如
/home,然后单击 Next。 - 可选: 要为作业配置高级设置,请填写 Advanced 字段。要了解更多有关高级设置的信息,请参阅 第 4.22 节 “作业向导中的高级设置”。当您输入高级设置或不需要时,点 Next。
作业计划时间。
- 要立即执行作业,请保留预先选择的 Immediate 执行。
- 要在以后执行作业,请选择 Future execution。
- 要定期执行作业,请选择 Recurring execution。
可选:如果您选择将来的或重复执行,请选择 Query 类型,否则点 Next。
- 静态查询 意味着,作业会在您提供的确切主机列表上执行。
动态查询 表示仅在执行作业前评估主机列表。如果您根据某些过滤器输入主机列表,则在首次使用该过滤器时结果可能会有所不同。
选择查询类型后,单击 Next。
可选:如果您选择的未来或重复执行,请提供额外的详情:
- 对于未来执行,请输入开始时间和 时间。您还可以选择在日期和时间 之前选择 Starts。如果作业在该时间之前无法启动,它将被取消。
对于 Recurring execution,请选择结束周期性作业的开始日期和时间、频率和条件。您可以选择永远不会结束、在特定时间结束,或者在指定次数的重复后结束。您还可以添加 Purpose - 跟踪作业的特殊标签。一次只能有一个具有给定目的的活跃作业。
输入所需信息后,点 Next。
- 查看作业详情。您可以选择返回到作业向导的任意部分,并编辑信息。
- 单击 Submit 以计划执行的作业。
6.6. 在模板中包括 Power 操作 复制链接链接已复制到粘贴板!
本例演示了如何设置作业模板来执行电源操作,如 reboot。此步骤可防止卫星将重新引导时的断开连接异常解释为错误,因此远程执行作业可以正常工作。
创建新模板,如 设置作业模板 中所述,并在模板编辑器中指定以下字符串:
<%= render_template("Power Action - SSH Default", :action => "restart") %>
<%= render_template("Power Action - SSH Default", :action => "restart") %>