使用自动化执行
使用自动化执行来部署、定义、操作、扩展和委派自动化
摘要
前言 复制链接链接已复制到粘贴板!
感谢您对 Red Hat Ansible Automation Platform 自动化控制器的关注。自动化控制器通过增加控制、知识、协调基于 Ansible 的环境,帮助团队管理复杂的多层部署。
使用自动化控制器描述了自动化控制器中所有可用功能。它假定读者对 Ansible 有一定的了解,包括 playbook、变量和标签等概念。有关这些和其他 Ansible 概念的更多信息,请参阅 Ansible 文档。
对红帽文档提供反馈 复制链接链接已复制到粘贴板!
如果您对本文档有任何改进建议,或发现错误,请通过 https://access.redhat.com 联系技术支持来创建一个请求。
第 1 章 自动化控制器概述 复制链接链接已复制到粘贴板!
通过一个机构中的 Ansible Automation Platform 用户,可以通过简单、强大和无代理的技术实现共享、检查和管理自动化内容。IT 经理可以为各个团队提供如何应用自动化的指导。自动化开发人员可以编写使用现有知识的任务,而无需执行符合复杂工具和框架的操作开销。它是部署端到端自动化解决方案(从混合云到边缘)的更安全、稳定的基础。
Ansible Automation Platform 包括自动化控制器,允许用户在整个企业中定义、操作、扩展和委派自动化。
1.1. 实时 playbook 输出和探索 复制链接链接已复制到粘贴板!
使用自动化控制器,您可以实时监控 playbook 运行,在每个主机签入时查看它们。您可以返回并探索特定任务和主机的结果非常详细,搜索特定 play 或主机,仅查看这些结果,或者查找需要更正的错误。
1.2. "push Button"自动化 复制链接链接已复制到粘贴板!
使用自动化控制器访问您首选的项目,并从 Web 界面重新触发执行。自动化控制器要求输入变量,提示输入您的凭证、启动和监控作业,并显示结果和主机历史记录。
1.3. 简化的基于角色的访问控制和审计 复制链接链接已复制到粘贴板!
使用自动化控制器,您可以:
- 通过 基于角色的访问控制 (RBAC)为不同的团队或显式用户授予权限。示例任务包括查看、创建或修改文件。
- 将一些项目保持私有,同时允许某些用户编辑清单,而其他用户可以在检查(dry run)或实时模式中针对特定系统运行 playbook。
- 启用特定用户使用凭证,而不向他们公开凭证。
自动化控制器记录了操作历史记录以及谁启动,包括编辑的对象和作业启动。
如果要授予任何用户或团队使用作业模板的权限,您可以直接在作业模板上分配权限。凭证是自动化控制器 RBAC 系统中的完整对象,并可分配给多个用户或团队供使用。
自动化控制器包括 审核员 类型。系统级审核员可以查看系统自动化的所有方面,但没有权限运行或更改自动化。审核员对于从 REST API 中提取自动化信息的服务帐户很有用。
其他资源
- 有关用户角色的更多信息 ,请参阅使用基于角色的访问控制管理访问权限。
1.4. 云和自动扩展灵活性 复制链接链接已复制到粘贴板!
自动化控制器包含一个强大的可选置备回调功能,它允许节点按需请求配置。这是云自动扩展方案的理想解决方案,包括以下功能:
- 它与配置服务器(如 Cobbler)集成,并处理受管系统无法预计的运行时间。
- 它要求不会在远程节点上安装管理软件。
-
回调解决方案可以通过调用
curl或wget触发,并可嵌入到初始化脚本、Kickstart 或 preseeds 中。 - 您可以控制访问,以便只有清单中列出的机器才能请求配置。
1.5. 理想的 RESTful API 复制链接链接已复制到粘贴板!
自动化控制器 REST API 是系统管理应用程序的理想 RESTful API,所有资源都完全可发现、分页、可搜索并良好建模。风格的 API 浏览器启用了 API 根的 API 探索,地址为 http://<server name>/api/,显示每个资源和关系。用户界面中可在 API 中完成的所有操作。
1.6. 备份和恢复 复制链接链接已复制到粘贴板!
Ansible Automation Platform 可以备份和恢复系统或系统,您可以根据需要轻松备份和复制实例。
1.7. Ansible Galaxy 集成 复制链接链接已复制到粘贴板!
通过在项目目录中包含 Ansible Galaxy requirements.yml 文件,自动化控制器会自动从 Galaxy、GitHub 或您的本地源控制获取 playbook 所需的角色。有关更多信息,请参阅 Ansible Galaxy 支持。
1.8. OpenStack 的清单支持 复制链接链接已复制到粘贴板!
OpenStack 支持动态清单。通过此功能,您可以针对在 OpenStack 云中运行的任何虚拟机或镜像。
有关更多信息,请参阅 OpenStack 凭据类型。
1.9. 远程命令执行 复制链接链接已复制到粘贴板!
使用远程命令执行来执行简单的任务,如添加单个用户、更新单个安全漏洞或重启失败的服务。您可以描述为单个 Ansible play 的任何任务都可以在清单中的主机或一组主机上运行。您可以快速轻松地管理系统。由于 RBAC 引擎和详细的审计日志记录,您知道哪个用户已完成特定的任务。
1.10. 系统跟踪 复制链接链接已复制到粘贴板!
您可以使用事实缓存功能收集事实。如需更多信息,请参阅 事实缓存。
1.11. 集成通知 复制链接链接已复制到粘贴板!
跟踪自动化的状态。
您可以配置以下通知:
- 作业模板、项目或整个机构的可堆栈通知
- 作业启动、作业成功、作业失败和作业批准的不同通知(用于工作流节点)
支持以下通知源:
- 电子邮件
- Grafana
- IRC
- Mattermost
- PagerDuty
- Rocket.Chat
- Slack
- Twilio
- Webhook (发布到任意 Webhook,用于集成到其他工具)
您还可以为每个上述通知类型自定义通知消息。
1.12. 集成 复制链接链接已复制到粘贴板!
自动化控制器支持以下集成:
- Red Hat Satellite 6 的动态清单源。
如需更多信息,请参阅 Red Hat Satellite 6。
- Red Hat Insights 集成,启用 Insights playbook 以用作 Ansible Automation Platform 项目。
如需更多信息,请参阅为 Red Hat Ansible Automation Platform 修复设置 Red Hat Insights。
- Automation hub 充当自动化控制器的内容供应商,需要自动化控制器部署和自动化中心部署一起运行。
1.13. 自定义虚拟环境 复制链接链接已复制到粘贴板!
使用自定义 Ansible 环境支持,您可以有不同的 Ansible 环境,并为不同的团队和作业指定自定义路径。
1.14. 身份验证增强 复制链接链接已复制到粘贴板!
自动化控制器支持:
- LDAP
- SAML
- 基于令牌的身份验证
通过 LDAP 和 SAML 支持,您可以更加灵活的方式集成您的企业帐户信息。
基于令牌的身份验证允许通过集成的 OAuth 2 令牌支持通过自动化控制器验证第三方工具和服务。
1.15. 集群管理 复制链接链接已复制到粘贴板!
集群组的运行时管理支持可配置的扩展。
1.16. 工作流增强 复制链接链接已复制到粘贴板!
要对复杂置备、部署和编配工作流建模,您可以使用自动化控制器以多种方式扩展工作流:
- 工作流的清单覆盖您可以在工作流定义时间或启动时覆盖工作流中的清单。使用自动化控制器定义应用程序部署工作流,然后在多个环境中重复使用它们。
- 在对复杂进程建模时,工作流的聚合节点 有时会等待许多步骤完成,然后才能继续。自动化控制器工作流可以复制它;工作流步骤可以等待任意数量的早期工作流步骤正确完成,然后再继续。
- 工作流嵌套,您可以重新使用单独的工作流作为更大工作流的组件。示例包括将置备和应用程序部署工作流合并到单个工作流中。
- 工作流暂停和批准 您可以构建包含需要用户干预的批准节点的工作流。这样便可暂停 playbook 之间的工作流,以便用户可以提供批准(或拒绝)以继续工作流中的下一步。
如需更多信息,请参阅 自动化控制器中的工作流。
1.17. 作业分发 复制链接链接已复制到粘贴板!
获取在数千台机器中运行的事实收集或配置作业,并将其划分为可在自动化控制器集群中分发的分片。这提高了可靠性,提供更快的作业完成,并改进了集群使用。
例如,您可以大规模更改 15,000 个交换机的参数,或者在多节点 RHEL estate 中收集信息。
如需更多信息,请参阅 作业分片。
1.18. 支持在启用了 FIPS 的环境中部署 复制链接链接已复制到粘贴板!
自动化控制器以受限模式(如 FIPS)部署和运行
1.19. 限制每个机构中的主机数量 复制链接链接已复制到粘贴板!
许多大型机构在很多机构间共享实例。为确保一个机构无法使用所有许可的主机,此功能可让超级用户对您可以分配给每个机构的许可主机设置指定的上限。自动化控制器算法因素更改机构的限制以及所有机构中的主机总数。如果清单同步使机构不符合该策略,清单更新会失败。此外,超级用户还可以通过警告来过度分配其许可证。
1.20. 清单插件 复制链接链接已复制到粘贴板!
以下清单插件从上游集合使用:
-
amazon.aws.aws_ec2 -
community.vmware.vmware_vm_inventory -
azure.azcollection.azure_rm -
google.cloud.gcp_compute -
theforeman.foreman.foreman -
openstack.cloud.openstack -
ovirt.ovirt.ovirt -
awx.awx.tower
1.21. Secret 管理系统 复制链接链接已复制到粘贴板!
使用 secret 管理系统,外部凭证会存储,并可用于自动化控制器,因此您不需要直接提供这些凭证。
第 2 章 安装后登录到 Ansible Automation Platform 复制链接链接已复制到粘贴板!
安装 Ansible Automation Platform 后,您必须登录。
流程
- 安装完成后提供的登录信息,打开 web 浏览器,并通过导航到其服务器 URL 登录到 Ansible Automation Platform,地址为 https://<CONTROLLER_SERVER_NAME>/
使用安装过程中指定的凭证登录:
- 默认用户名是 admin。
- admin 的密码是指定的值。
- 点所需用户旁的 图标。
- 点 。
- 编辑所需详情并点 。
2.1. 使用服务帐户凭证查找您的订阅 复制链接链接已复制到粘贴板!
第一次登录到 Ansible Automation Platform 时,您必须添加您的订阅信息。
如果您已经添加了订阅,您可以进入 → → 在订阅向导中更新您的订阅详情。
先决条件
- 您是机构管理员。
- 您已创建了服务帐户 并保存客户端 ID 和客户端 secret。
如果您没有管理访问权限,您可以在 Username 和 password 选项卡中输入您的红帽用户名和密码,以找到您的订阅并将其添加到 Ansible Automation Platform 实例中。
流程
输入您的服务帐户凭证来查找与您的配置集关联的订阅:
- 要查找您的订阅,请单击标有 服务帐户的选项卡。
- 在 Client ID 字段中,输入您在创建服务帐户时收到的客户端 ID。
- 在 Client secret 字段中,输入您在创建服务帐户时收到的客户端 secret。您的订阅会出现在标记为 Subscription 的列表菜单中。选择您的订阅。
- 添加订阅后,点 。
- 选中指示您同意 最终用户许可证协议的框。
- 查看您的信息并点 完成。
如果您输入客户端 ID 和客户端 secret,但无法找到订阅,您可能没有在服务帐户上设置正确的权限。有关服务帐户的更多信息和故障排除指南,请参阅配置 Ansible Automation Platform 以通过服务帐户凭证进行身份验证。
第 3 章 用户界面 复制链接链接已复制到粘贴板!
Automation Execution 用户界面 (UI)为您的 IT 编配要求提供图形框架。
使用页面标头中的图标访问您的用户配置文件、About 页面、查看相关文档或注销。
导航面板提供对自动化控制器资源的快速访问,如 作业、模板、计划、项目、基础架构 和 管理。
3.1. Infrastructure 菜单 复制链接链接已复制到粘贴板!
Infrastructure 菜单提供对以下自动化控制器资源的快速访问:
3.2. 管理 复制链接链接已复制到粘贴板!
管理 菜单提供对自动化控制器的管理选项的访问。在这里,您可以创建、查看和编辑:
3.3. Settings 菜单 复制链接链接已复制到粘贴板!
您可以使用用户界面的 Settings 菜单来配置一些自动化控制器选项。
Settings 页面可让管理员配置以下内容:
第 4 章 搜索 复制链接链接已复制到粘贴板!
使用自动化控制器的搜索工具在多个功能间搜索和过滤功能。在搜索字段中的 Name 菜单中提供了可缩放的搜索条件列表。
4.1. 用于搜索的规则 复制链接链接已复制到粘贴板!
这些搜索提示假设您没有搜索主机。
- 搜索的典型语法包含一个字段,后跟一个值。
- 冒号用于将您要搜索的字段与值分开。
-
如果搜索没有冒号(请参阅示例 3),它将被视为一个简单的字符串搜索,其中
?search=foobar被发送。
作业模板的搜索功能仅限于字母数字字符。
以下是用于搜索的语法示例:
-
name:localhost在本示例中,用户在 name 属性中搜索字符串localhost。如果该字符串与来自字段或 相关字段 的内容不匹配,则整个搜索将被视为字符串。 -
organization.name: 默认示例显示了一个相关字段搜索。organization.name中的句点将模型与字段分开。根据搜索的深度或复杂程度,您可以在查询的该部分中有多个句点。 foobar这是一个简单字符串(关键字),搜索搜索词,它使用icontains搜索名称和描述字段查找所有实例。如果您在术语间使用一个空格,如foo bar,则返回包含这两个术语的结果。例如,如果术语用引号括起,例如:"foo bar",自动化控制器会搜索带有术语的字符串。特定名称针对 API 名称搜索。例如,
用户界面中的管理作业是 API 中的system_job。-
Organization:Defaultthis example 显示了一个相关字段搜索,但没有指定与机构一起的字段。API 支持它,这与简单的字符串搜索类似,但对组织执行了一个图标(针对名称和描述进行搜索)。
4.1.1. 搜索字段的值 复制链接链接已复制到粘贴板!
要查找某些字段的值,请参阅 API 端点以了解大量选项及其有效值。例如,如果要针对 /api/v2/jobs > ; type 字段搜索,您可以通过对 /api/v2/jobs 执行 OPTIONS 请求并在 API 中查找 "type" 的条目来查找这些值。另外,您可以通过滚动到每个屏幕的底部来查看相关的搜索。在 /api/v2/jobs 的示例中,相关的搜索显示:
"related_search_fields": [
"modified_by__search",
"project__search",
"project_update__search",
"credentials__search",
"unified_job_template__search",
"created_by__search",
"inventory__search",
"labels__search",
"schedule__search",
"webhook_credential__search",
"job_template__search",
"job_events__search",
"dependent_jobs__search",
"launch_config__search",
"unifiedjob_ptr__search",
"notifications__search",
"unified_job_node__search",
"instance_group__search",
"hosts__search",
"job_host_summaries__search"
字段的值来自 GET 请求中的键。未使用 URL、相关的 和 summary_fields。相关字段的值也来自 OPTIONS 响应,但来自不同的属性。相关字段通过获取 related_search_fields 中的所有值并从末尾去除 __search 来填充。
任何不是以来自字段的值或相关字段中的值开头的搜索都将被视为通用字符串搜索。例如,搜索 localhost 会导致 UI 将 ?search=localhost 作为查询参数发送到 API 端点。这是有关名称和描述字段的 icontains 搜索的快捷方式。
4.1.3. 其他与搜索相关的事项 复制链接链接已复制到粘贴板!
在自动化控制器中搜索时请注意以下问题:
- 目前不支持 OR 查询的语法。所有搜索条件都是在查询参数中的 AND。
- search 参数的左侧部分可以用引号括起来支持搜索带有空格的字符串。如需更多信息,请参阅 搜索的规则。
-
目前,字段中的值是 GET 请求中预期返回的直接属性。每当针对其中一个值进行搜索时,自动化控制器都会进行_
icontains搜索。例如,name:localhost发回?name__icontains=localhost。自动化控制器目前对每个字段值执行此搜索,甚至id。
4.2. 排序 复制链接链接已复制到粘贴板!
在适用的情况下,使用每个列中的箭头按升序排序。以下是调度列表中的示例:
箭头的方向代表字段的排序顺序。
第 5 章 自动化控制器中的作业 复制链接链接已复制到粘贴板!
作业是为主机清单启动 Ansible Playbook 的自动化控制器实例。
Jobs 列表视图显示作业列表及其状态,显示为成功完成、失败或活跃(正在运行)作业。默认视图为折叠状态(Compact),作业名称、状态、作业类型、启动和完成时间。您可以点箭头
图标展开并查看更多信息。您可以根据各种条件对列表进行排序,并执行搜索来过滤感兴趣的作业。
在此屏幕中,您可以完成以下任务:
-
在 Domains 任务栏中,您可以指定一个域来方便访问相关资源。点击
图标编辑现有标签或 来设置您自己的标签。
- 查看特定作业的详情和标准输出
-
重新启动
作业
- 取消或删除所选作业
重新启动操作只适用于重新启动 playbook 运行,不适用于项目或清单更新、系统作业和工作流作业。当作业重启时,会显示 Output 视图。选择任何类型的作业也会带您进入该作业的 Output 视图,您可以根据各种条件过滤作业:
- Search output 列表中的 Event 选项允许您根据感兴趣的事件进行过滤,如错误、主机失败、主机重试和跳过的项目。您可以根据需要在过滤器中包含多个事件。有关使用搜索的更多信息,请参阅 搜索 部分。
5.1. 清单同步作业 复制链接链接已复制到粘贴板!
执行清单同步时,结果会显示在 Output 选项卡中。
有关清单同步的更多信息,请参阅 构造的清单。
如果使用,Ansible CLI 会显示相同的信息。这对调试非常有用。ANSIBLE_DISPLAY_ARGS_TO_STDOUT 参数设置为 False,适用于所有 playbook 运行。此参数与 Ansible 的默认行为匹配,且不会在 作业详情 界面的任务标头中显示任务参数,以避免将某些敏感模块参数泄漏到 stdout。要恢复之前的行为,请通过 AWX_TASK_ENV 配置设置将 ANSIBLE_DISPLAY_ARGS_TO_STDOUT 设置为 True。
如需更多信息,请参阅 Ansible 配置设置中的 ANSIBLE_DISPLAY_ARGS_TO_STDOUT。
您可以 ,,下载
作业输出,或删除
作业。
您可以在相关作业运行时执行清单更新。如果您有大型项目(大约 10 GB),/tmp 上的磁盘空间可能会出现问题。
5.1.1. 清单同步详情 复制链接链接已复制到粘贴板!
访问 Details 选项卡,以查看作业执行的详情:
您可以查看已执行作业的以下详情:
状态 :可以是以下任意一种:
待定 :清单同步已创建,但尚未排队或启动。任何作业(不仅仅是清单源同步)都会处于待处理状态,直到系统准备好运行为止。清单源同步没有就绪的原因包括:
- 当前正在运行的依赖项(所有依赖项都必须完成才能执行下一个步骤)。
- 在为其配置的位置运行不足以达到容量。
- 等待 :清单同步处于等待执行的队列中。
- Running: 清单同步当前正在进行中。
- 成功 :清单同步作业成功。
- 失败 :清单同步作业失败。
- Inventory :关联的清单组的名称。
- Source: 云清单的类型。
- 清单源项目 :用作此清单同步作业源的项目。
- 执行环境 :使用的执行环境。
- 执行节点 :用于执行该作业的节点。
- 实例组 :与此作业使用的实例组的名称(自动化控制器是默认实例组)。
选择这些项目可让您查看对应的作业模板、项目和其他对象。
5.2. SCM 清单作业 复制链接链接已复制到粘贴板!
当执行来自 SCM 的清单(如 git)时,其结果将显示在 Output 选项卡中。如果使用,Ansible CLI 会显示相同的信息。这对调试非常有用。
使用导航菜单重新启动作业、、下载
作业输出或删除
作业。
5.2.1. SCM 清单脚本 复制链接链接已复制到粘贴板!
要查看作业执行及其关联的项目的详细信息,请选择 Details 选项卡。
您可以查看已执行作业的以下详情:
状态 :可以是以下任意一种:
- Pending: SCM 作业已创建,但尚未排队或启动。任何作业(不仅仅是 SCM 作业)会一直处于待处理状态,直到系统准备好运行为止。SCM 作业未准备就绪的原因包括:依赖项当前正在运行(所有依赖项都必须已完成才能执行下一个步骤),或者其配置的位置没有足够的运行容量。
- waiting : SCM 作业处于等待执行的队列中。
- 运行 :SCM 作业当前正在进行中。
- 成功 :最后一个 SCM 作业成功。
- 失败 :最后一个 SCM 作业失败。
- 类型 :SCM 作业显示 Source Control Update。
- 项目 :项目名称。
- Status :指示关联的项目是否已成功更新。
- 修订 :指示此作业中使用的源项目的修订号。
- 执行环境 :指定用于运行此作业的执行环境。
- 执行节点 :指示作业运行的节点。
- 实例组 :指示作业运行的实例组(如果指定)。
- Job tags :标签显示执行的各种作业操作。
选择这些项目来查看对应的作业模板、项目和其他对象。
5.3. Playbook 运行任务 复制链接链接已复制到粘贴板!
执行 playbook 时,结果会显示在 Output 选项卡中。如果使用,Ansible CLI 会显示相同的信息。这对调试非常有用。
事件摘要显示作为此 playbook 一部分运行的以下事件:
- 此 playbook 运行的次数显示在 Plays 字段中
- 与此 playbook 关联的任务数量显示在 Tasks 字段中
- 与此 playbook 关联的主机数量显示在 Hosts 字段中
- 完成 playbook 运行所需的时间显示在 Elapsed 字段中
您可以 ,,下载
作业输出,或删除
作业。
将鼠标悬停在 Output 视图中的主机状态栏的部分上,并且显示与该状态关联的主机数量。
在 Job Templates 页的 Jobs 选项卡中启动作业后,也提供了 playbook 作业的输出。单击输出中的行项目任务,以查看其主机详细信息。
5.3.1. 搜索 复制链接链接已复制到粘贴板!
使用 Search 查找特定的事件、主机名及其状态。要只过滤具有特定状态的某些主机,请指定以下有效状态之一:
- ok
- 表示任务成功完成,但没有在主机上执行任何更改。
- changed
- playbook 任务已执行。由于 Ansible 任务应该具有幂等性,因此任务可以成功退出,而不必在主机上执行任何内容。在这些情况下,该任务返回 ok,但未 更改。
- 失败
- 任务失败。此主机停止了进一步的 playbook 执行。
- unreachable
- 主机无法从网络访问,或者具有与它关联的另一个不可恢复的错误。
- 跳过
- playbook 任务跳过,因为主机不需要更改即可达到目标状态。
- rescued
- 这将显示失败的任务,然后执行 rescue 部分。
- 忽略
-
这将显示失败的任务,
并且配置了 ignore_errors: yes。
以下示例显示一个只包含无法访问主机的搜索:
有关使用搜索的更多信息,请参阅 搜索 部分。
标准输出视图显示特定作业上发生的事件。
单击 Stdout 窗格中的事件行,并在单独的窗口中显示 Host Events 窗口。此窗口显示受该特定事件影响的主机。
升级到最新版本的 Ansible Automation Platform 涉及逐渐迁移所有历史 playbook 输出和事件。这个迁移过程是逐步的,在安装完成后自动在后台进行。在迁移完成前,带有大量历史作业输出(几十或几百 GB 的输出)的安装可能会缺少作业输出。最新的数据显示在输出的顶部,后跟旧的事件。
5.3.2. Playbook 运行详情 复制链接链接已复制到粘贴板!
访问 Details 选项卡,以查看作业执行的详情:
您可以查看已执行作业的以下详情:
状态 :可以是以下任意一种:
- Pending: playbook 运行已创建,但尚未排队或启动。任何作业(不仅仅是 playbook 运行)会一直处于待处理状态,直到系统准备好运行为止。playbook 运行未准备就绪的原因包括:依赖项当前正在运行(所有依赖项都必须已完成才能执行下一个步骤),或者其配置的位置没有足够的运行容量。
- 等待 :playbook 运行处于等待执行的队列中。
- Running: playbook 运行当前正在进行中。
- 成功 :最后一个 playbook 运行成功。
- 失败 :最后一个 playbook 运行失败。
- 作业模板 :从中启动此作业的作业模板的名称。
- 清单 :选择针对此任务运行此清单。
- 项目 :与启动的作业关联的项目名称。
- 项目状态 :与启动作业关联的项目的状态。
- Playbook: 用于启动此作业的 playbook。
- 执行环境 :此作业中使用的执行环境的名称。
- credentials :此作业中使用的凭证。
- 额外变量 :创建作业模板时传递的任何额外变量都会在此处显示。
选择其中一个项目来查看对应的作业模板、项目和其他对象。
5.3.3. Playbook 访问和信息共享 复制链接链接已复制到粘贴板!
自动化控制器使用自动化执行环境和 Linux 容器可防止 playbook 读取其项目目录之外的文件。
默认情况下,公开给容器内 ansible-playbook 进程的唯一数据是当前使用的项目。
您可以在 Job Settings 中自定义此功能,并将主机中的其他目录公开给容器中。
5.3.4. 隔离功能和变量 复制链接链接已复制到粘贴板!
自动化控制器使用容器技术将作业相互隔离。默认情况下,只有当前项目公开给运行作业模板的容器。
如果需要公开其他目录,您必须自定义 playbook 运行。要配置作业隔离,您可以设置变量。
默认情况下,自动化控制器使用系统的 tmp 目录(默认为/tmp )作为其暂存区域。您可以在 Jobs settings 页面的 Job Execution Path 字段中更改它,或者在位于 /api/v2/settings/jobs 的 REST API 中更改:
AWX_ISOLATION_BASE_PATH = "/opt/tmp"
如果应该从主机向运行 playbook 的容器公开任何其他目录,您可以在 Paths 中指定它们,以公开给 Jobs Settings 页面的隔离作业 字段,或者在 /api/v2/settings/jobs 处的 REST API 中公开:
AWX_ISOLATION_SHOW_PATHS = ['/list/of/', '/paths']
- 如果输入到特定文件的路径,则会在执行环境中挂载包含该文件的整个目录。
-
如果您的 playbook 需要使用
AWX_ISOLATION_SHOW_PATHS中定义的密钥或设置,请将此文件添加到/var/lib/awx/.ssh中。
此处描述的字段可在 Jobs 设置 页面中找到:
5.4. 自动化控制器容量确定和作业影响 复制链接链接已复制到粘贴板!
自动化控制器容量系统根据实例可用的资源量以及正在运行的作业的大小(称为影响)来确定可在实例上运行的作业数量。用于确定这一点的算法基于以下两个方面:
-
系统可使用多少内存(
mem_capacity) -
系统可使用多少个处理容量(
cpu_capacity)
容量也会影响实例组。由于组由实例组成,因此实例也可以分配到多个组。这意味着,对一个实例的影响可能会影响其他组的整体容量。
实例组而不是实例本身,可以分配给不同级别的作业使用。如需更多信息, 请参阅配置 自动化执行中的集群。
当任务管理器准备其图形来确定作业运行的组时,它会将实例组的容量提交到尚未准备好启动的作业。
在较小的配置中,如果只有一个实例可用于某个作业运行,任务管理器可让该作业在实例上运行,即使它会使实例超额。这样可保证作业不会因为置备系统而卡住。
其他资源
- 有关容器组的详情,请参考 配置自动化执行 中的 实例组和容器组的容量设置。
- 有关分片作业及其对容量的影响的详情,请参考 作业分片执行行为。
5.4.1. 容量算法的资源确定 复制链接链接已复制到粘贴板!
容量算法确定系统可以同时运行多少个 fork。这些算法控制 Ansible 可以同时与多少个系统通信。增加自动化控制器系统运行的 fork 数量,使作业可以更快地运行,方法是并行执行更多工作。但是,这会增加系统的负载,这可能导致工作变慢。
默认 mem_capacity 可让您超额提交处理资源,同时防止系统内存不足。如果您的大多数工作不是处理器密集型,则选择此模式可最大化 fork 数量。
5.4.1.1. 内存相对容量 复制链接链接已复制到粘贴板!
mem_capacity 相对于每个 fork 所需的内存量计算。考虑到内部组件的开销,每个分叉大约需要 100MB。在考虑 Ansible 作业可用的内存量时,容量算法保留 2GB 内存,以考虑存在其他服务。其算法公式是:
(mem - 2048) / mem_per_fork
以下是一个示例:
(4096 - 2048) / 100 == ~20
具有 4GB 内存的系统可以运行 20 个分叉。mem_per_fork 值通过设置 SYSTEM_TASK_FORKS_MEM 的值来控制,默认值为 100。
5.4.1.2. CPU 相对容量 复制链接链接已复制到粘贴板!
Ansible 工作负载通常是处理器密集型。在这种情况下,您可以减少同步工作负载,使更多任务可以更快地运行,并减少这些作业的平均完成时间。
就像 mem_capacity 算法调整每个 fork 所需的内存量一样,cpu_capacity 算法会调整每个 fork 所需的处理资源量。这个基准值是每个内核的四个 fork。其算法公式是:
cpus * fork_per_cpu
例如,4 核系统类似如下:
4 * 4 == 16
您可以通过将 SYSTEM_TASK_FORKS_CPU 的值设置为 4 来控制 fork_per_cpu 的值。
5.4.2. 容量作业影响 复制链接链接已复制到粘贴板!
在选择容量时,了解每个作业类型对容量的影响非常重要。
Ansible 的默认 fork 值为 5。但是,如果您将自动化控制器设置为针对更少的系统运行,则实际的并发值会较低。
当在自动化控制器中运行作业时,所选的 fork 数量会递增 1,以补充 Ansible 父进程。
Example
如果您针对 5 的五个系统运行 playbook,则从作业影响角度来看,实际的 fork 值为 6。
5.4.2.1. 自动化控制器中作业类型的影响 复制链接链接已复制到粘贴板!
作业和临时作业遵循前面的模型,分叉 +1。如果在作业模板上设置了 fork 值,则您的作业容量值是提供的 forks 值的最小值,以及您拥有的主机数量,再加上 1。+1 是考虑父 Ansible 进程。
实例容量决定了哪些作业被分配给任何特定实例。如果作业和临时命令具有更高的 fork 值,则使用更多容量。
作业类型包括以下内容,具有固定影响:
- 清单更新:1
- 项目更新:1
- 系统作业:5
如果您没有在作业模板上设置 fork 值,则您的作业将使用 Ansible 的默认 fork 值 5。但是,如果您的作业少于五个主机,它会使用较少的主机。通常,设置 fork 值高于系统能够使问题出现内存不足或过量提交 CPU 时的问题。您使用的作业模板 fork 值必须适合于系统。如果您有使用 1000 个 fork 的 playbook,但您的系统都没有足够容量,则您的系统会降低,并面临性能或资源问题的风险。
5.4.2.2. 选择正确的容量 复制链接链接已复制到粘贴板!
从 CPU 密集型或内存密集型容量限制中选择容量会在最小或最大分叉数量之间进行选择。在上例中,CPU 容量最多允许 16 个 fork,而内存容量允许 20 个。对于某些系统,它们之间的差别可能较大,您可能希望在两者之间保持平衡。
instance 字段 capacity_adjustment 允许您选择要考虑多少。它表示为 0.0 到 1.0 之间的值。如果设置为 1.0,则使用最大值。上例涉及内存容量,因此可以选择 20 个 fork。如果设置为 0.0,则使用最小值。值 0.5 是两个算法之间的 50/50 平衡,即 18:
16 + (20 - 16) * 0.5 = 18
流程
查看或编辑容量:
- 在导航面板中,选择 → → 。
- 在 Instance Groups 列表视图中,选择所需的实例。
选择 Instances 选项卡,并调整 Capacity 调整 滑块。
注意滑块调整实例容量算法是否产生较少的分叉(在左侧)或产生更多分叉(在右侧)。
5.5. 作业分支覆盖 复制链接链接已复制到粘贴板!
项目在 scm_branch 字段中指定要从源控制使用的分支、标签或引用。它们由 Type Details 字段中指定的值表示:
在创建或编辑作业时,您可以选择 Allow branch override。选中此选项时,项目管理员可以将分支选择委托给使用该项目的作业模板,只需要项目 use_role。
5.5.1. 源树复制行为 复制链接链接已复制到粘贴板!
每个作业运行都有自己的私有数据目录。此目录包含作业运行的给定 scm_branch 的项目源树的副本。作业可以自由地更改项目文件夹,并在仍在运行时使用这些更改。此文件夹是临时的,在作业运行结束时被删除。
如果您检查 Clean 选项,则在自动化控制器的本地副本中删除修改后的文件。这可以通过在与 git 或 Subversion 相关的相应 Ansible 模块中使用 force 参数来完成。
其他资源
有关更多信息,请参阅 Ansible 文档中的 Parameters 部分。
5.5.2. 项目修订行为 复制链接链接已复制到粘贴板!
在项目更新过程中,默认分支的修订版本(在项目的 Source control branch 字段中指定)会在更新时存储。如果在作业中提供非默认 Source 控制分支 (而不是提交散列或标签),则在作业启动前马上从源控制远程拉取最新的修订版本。此修订版本显示在作业的 Source control revision 字段中,及其项目更新。
因此,非默认分支无法离线作业运行。为确保作业从源控制运行静态版本,请使用标签或提交哈希。项目更新不会保存所有分支,而只有项目默认分支。
Source control branch 字段未验证,因此项目必须更新以确保它有效。如果提供或提示了此字段,则不会验证作业模板的 Playbook 字段,您必须启动作业模板以验证预期的 playbook 是否存在。
5.5.3. Git Refspec 复制链接链接已复制到粘贴板!
Source control refspec 字段指定更新应该从远程下载的额外引用。示例包括以下内容:
-
refs/:refs/remotes/origin/:这将获取所有引用,包括远程的远程 -
refs/pull/:refs/remotes/origin/pull/(GitHub-specific):这将获取所有拉取请求的所有 refs -
refs/pull/62/head:refs/remotes/origin/pull/62/head:这会获取一个 GitHub 拉取请求的 ref
对于大型项目,在使用第一个或第二个示例时请考虑性能影响。
Source control refspec 参数会影响项目分支的可用性,并可启用对不可用的引用的访问。使用前面的示例从 Source 控制分支提供拉取请求,在没有 Source control refspec 字段的情况下无法实现。
默认情况下,Ansible git 模块获取 refs/heads/。这意味着,如果 Source control refspec 为空,您可以使用项目的分支、标签和提交散列作为 Source control 分支。Source control refspec 字段中指定的值会影响哪些 Source control branch 字段可用作覆盖。项目更新(任何类型的)执行额外的 git fetch 命令来从远程拉取该 refspec。
Example
您可以设置使用第一个或第二个 refspec 示例启用分支覆盖的项目。在提示输入 Source control 分支 的作业模板中使用此选项。然后,客户端可以在创建新拉取请求时启动作业模板,提供分支 pull/N/head,并且作业模板可以根据提供的 GitHub 拉取请求引用运行。
其他资源
有关更多信息,请参阅 Ansible git 模块。
第 6 章 作业模板 复制链接链接已复制到粘贴板!
您可以从 → 创建作业模板和工作流作业模板。
有关工作流作业模板,请参阅 工作流作业模板。
作业模板是用于运行 Ansible 作业的定义和一组参数。作业模板可用于多次运行同一作业。它们还鼓励重复使用 Ansible Playbook 内容以及团队间的协作。
6.1. 自动化模板 复制链接链接已复制到粘贴板!
Automation Templates 页面显示当前可用的 作业模板和工作流作业模板 。
自动化模板充当自动化和编排复杂 IT 任务的强大蓝图。
无论定义为作业模板还是工作流模板,它们都标准化和简化日常操作,从而在各种环境中实现一致的执行。
通过指定 playbook、清单、凭证和其他配置详情,自动化模板消除了人工干预,减少错误,并加快任务完成的速度。
它还通过允许串联工作流模板中的多个任务来提供灵活性,支持跨多个系统和流程的复杂自动化用例。
这可确保 IT 团队可靠地扩展自动化,同时保持高效率和控制。
默认视图为折叠状态(Compact),显示模板名称、模板类型和使用该模板运行的最后一个作业的时间戳。您可以点每个条目旁的
图标展开并查看更多信息。此列表按名称按字母顺序排序,但您可以根据其他条件排序,或者根据模板的不同字段和属性进行搜索。
在这个屏幕中,您可以启动
,编辑
,以及重复的
作业模板。
选择模板名称来显示有关模板的更多信息,包括上次运行的时间。
此列表按名称按字母顺序排序,但您可以根据其他条件排序,或者根据模板的不同字段和属性进行搜索。
作业模板的搜索功能仅限于字母数字字符。
工作流模板具有工作流可视化工具
图标,作为访问工作流编辑器的快捷方式。
您可以使用作业模板来构建工作流模板。显示 工作流可视化工具
图标的模板是工作流模板。点图标允许您以图形方式构建工作流。作业模板中的多个参数允许您选择 Prompt on Launch,您可以在工作流级别更改,而不影响作业模板级别分配的值。具体步骤请查看 工作流可视化工具 部分。
6.2. 设置您感兴趣的域 复制链接链接已复制到粘贴板!
通过域过滤,您可以自定义 Automation Execution 的 Jobs 和 Templates 子部分显示的内容。作业和模板链接到描述性标签。当您选择一个标签时,您可以过滤掉不太相关的资源,可让您轻松访问与感兴趣的资源相关的资源。
流程
- 在导航面板中,选择 → 或 → 。
- 在页面标题下(在 Domains 旁边)是与主题相关的标签列表。选择一个标签来过滤作业和作业模板,以便只显示与标签相关的内容。您可以选择多个标签。
- 要清除您的选择,请单击 X。
-
要自定义域选项,请选择
图标。在出现的模式中,选择 Add Domain to add new domain to filter.
当使用相关域标签过滤时,您可以在单独的作业模板中添加标签,使模板显示为资源。进入 → ,选择您的作业模板,然后点 。在编辑屏幕上,在 Labels 字段中输入您要使用的标签,然后点击 。
6.3. 创建作业模板 复制链接链接已复制到粘贴板!
流程
- 在导航面板中,选择 → 。
- 在 Automation Templates 页面中,从 Create template 列表中选择 Create Job template。
在以下字段中输入相关信息:
注意如果某个字段选择了 Prompt on launch 复选框,则启动作业时会提示您输入该字段的值。
大多数提示的值将覆盖作业模板中设置的任何值。
下表中会记录例外情况。
Expand 字段 选项 启动时提示 Name
输入作业的名称。
N/A
描述
根据需要输入任意描述(可选)。
N/A
作业类型
选择作业类型:
- 运行:启动时启动 playbook,在选定的主机上运行 Ansible 任务。
- check:执行 playbook 的"dry run"并报告将要进行的更改,而无需实际进行更改。不支持检查模式的任务将丢失,且不会报告潜在的更改。
如需有关作业类型的更多信息,请参阅 Ansible 文档中的 Playbook 部分。
是
清单(inventory)
从可供登录的用户可用的清单中选择要用于此作业模板的清单。
系统管理员必须授予您或团队权限,才能在作业模板中使用某些清单。
是。
清单提示会在后续提示窗口中以自己的步骤的形式显示。
project
从可供登录的用户可用的项目中选择要用于此作业模板的项目。
N/A
源控制分支
只有在您选择了允许分支覆盖的项目时,才会显示此字段。指定要在任务运行中使用的覆盖分支。如果留空,则使用项目中的指定 SCM 分支(或提交散列或标签)。
如需更多信息,请参阅 作业分支覆盖。
是
playbook
从可用的 playbook 中选择要使用此作业模板启动的 playbook。此字段自动填充所选项目的项目基本路径中找到的 playbook 名称。另外,如果未列出 playbook,则可以输入 playbook 的名称,如您要使用该 playbook 运行的文件的名称(如 foo.yml)。如果您输入无效的文件名,模板会显示一个错误,或者导致作业失败。
N/A
执行环境
选择要运行此任务的容器镜像。您必须选择一个项目,然后才能选择执行环境。
是。
执行环境提示会在后续提示窗口中以自己的步骤的形式显示。
凭证
选择
图标打开一个单独的窗口。
从用于此作业模板的可用选项中选择凭据。
如果列表太长,请使用下拉菜单列表根据凭证类型过滤。某些凭证类型不会被列出,因为它们不适用于某些作业模板。
- 如果选择,在启动具有默认凭证的作业模板时,如果相同类型,则提供另一个凭证会替换默认凭证。以下是这个消息的示例:
作业模板默认凭据必须替换为同一类型之一。请为以下类型选择一个凭证,以便继续: Machine。- 当看到适合时,您可以添加更多凭证。
- 凭证提示会在后续提示窗口中以自己的步骤的形式显示。
标签
-
(可选)提供描述此作业模板的标签,如
dev或test。 - 使用标签对显示中的作业模板和完成的作业进行分组和过滤。
- 标签在添加到作业模板时创建。标签使用作业模板中提供的项目与单个机构关联。如果机构的成员具有编辑权限(如 admin 角色),则机构的成员可以在作业模板上创建标签。
- 保存作业模板后,标签会显示在 Expanded 视图中的 作业模板 概述中。
-
选择标签旁边的
将其删除。删除标签后,它不再与该特定作业或作业模板关联,但它与引用它的任何其他作业关联。
- 在启动时,作业会继承作业模板中的标签。如果您从作业模板中删除标签,它也会从作业中删除。
- 如果选择,即使提供了默认值,也会在启动时提示您提供附加标签(如果需要)。
-
您无法删除现有标签,选择
只删除新添加的标签,而不是现有的默认标签。
forks
执行 playbook 时使用的并行或同步进程数量。值为零使用 Ansible 默认设置,即五个并行进程,除非在
/etc/ansible/ansible.cfg中被覆盖。是
limit
用于进一步限制受 playbook 管理或影响的主机列表的主机模式。您可以通过冒号(:)分隔多个模式。与核心 Ansible 一样:
- a:b 表示"在组 a 或 b 中"
- a:b:&c 表示"在 a 或 b 中,但必须在 c 中"。
- 答:!b 表示"在 a 中,一定不要在 b 中"
如需更多信息,请参阅 Ansible 文档中的 Patterns:以主机和组为目标。
是
如果未选中,则作业模板针对清单中的所有节点,或者仅在 Limit 字段中预定义节点执行。作为工作流的一部分运行时,会使用工作流作业模板限制。
详细程度
控制 Ansible 在 playbook 执行时生成的输出级别。从 Normal 到各种 Verbose 或 Debug 设置中选择详细程度。这只会出现在 详情 报告视图中。详细日志记录包括所有命令的输出。调试日志记录非常详细,包括对某些支持实例有用的 SSH 操作信息。
详细程度
5会导致自动化控制器在作业运行时大量阻断,这可能会延迟报告作业已完成(即使它已经完成),并可能导致浏览器标签页锁定。是
作业分片
指定您希望此作业模板运行的分片数量。每个片段针对清单的一部分运行相同的任务。有关作业分片的更多信息,请参阅 作业分片。
是
Timeout (超时)
这可让您指定在作业被取消前可以运行的时间长度(以秒为单位)。在设置超时值时请考虑以下几点:
- 在设置中定义了一个全局超时,默认为 0,表示没有超时。
- 作业模板上的一个负超时(<0)是作业中的 true "no timeout"。
- 作业模板上的超时为 0,将作业默认为全局超时(默认为没有超时)。
- 一个正超时会设置该作业模板的超时时间。
是
显示更改
允许您查看 Ansible 任务所做的更改。
是
实例组
选择 Instance 和 Container Groups 来与此作业模板关联。如果列表太长,使用
图标缩小选项范围。作业模板实例组贡献作业调度标准,请参阅 作业运行时 行为 和控制针对规则运行的作业的位置。系统管理员必须授予您或团队权限,才能在作业模板中使用实例组。使用容器组需要 admin 权限。
- 是。
如果选择,您将按首选顺序提供作业首选实例组。如果第一个组没有容量,则会考虑列表中的后续组,直到有容量可用为止,该组被选择来运行作业。
- 如果您提示输入实例组,则输入的内容会替换正常的实例组层次结构,并覆盖所有机构和清单实例组。
- 实例组提示在后续提示窗口中以自己的步骤的形式显示。
作业标签
键入 并选择 Create 菜单,以指定应执行 playbook 的哪些部分。有关更多信息和示例,请参阅 Ansible 文档中的 标签。
是
跳过标签
键入 并选择 Create 菜单,以指定要跳过的 playbook 的某些任务或部分。有关更多信息和示例,请参阅 Ansible 文档中的 标签。
是
额外变量
- 向 playbook 传递额外的命令行变量。这是 ansible-playbook 的"-e"或"-extra-vars"命令行参数,记录在 Ansible 文档中 在运行时定义变量的 Ansible 文档中。
-
使用 YAML 或 JSON 赋予键或值对。这些变量具有最大优先级值,并覆盖其他位置指定的其他变量。以下是一个值:
git_branch: production release_version: 1.5
是。
如果要能够在调度中指定
extra_vars,您必须在作业模板中为 Variables 选择 Prompt on launch,或者在作业模板上启用问卷调查。那些回答的问卷调查问题将变为extra_vars。如果需要,您可以设置启动此模板的以下选项:
-
权限升级 :如果选中,您可以让此 playbook 以管理员身份运行。这等同于将--
become 选项传给ansible-playbook命令。 - 置备回调 :如果选中,您可以启用主机通过 REST API 调用自动化控制器,并从此作业模板启动作业。如需更多信息,请参阅 置备回调。
启用 Webhook :如果选中,您可以打开与用于启动作业模板的预定义 SCM 系统 Web 服务进行接口的功能。GitHub 和 GitLab 是支持的 SCM 系统。
- 如果您启用 Webhook,会显示其他字段,提示输入更多信息:
- Webhook 服务 :选择要从哪个服务侦听 Webhook。
- Webhook URL :自动填充将 POST 请求发送到的 Webhook 服务的 URL。
- Webhook 密钥 :生成共享 secret,供 Webhook 服务用来签署发送到自动化控制器的有效负载。您必须在 Webhook 服务上的设置中对此进行配置,以便自动化控制器接受来自该服务的 Webhook。
Webhook 凭证 :(可选)提供 GitHub 或 GitLab 个人访问令牌(PAT)作为凭证,用来向 webhook 服务发回状态更新。
在选择它前,凭证必须存在。
请参阅 凭证类型 来创建。
- 有关设置 Webhook 的更多信息,请参阅使用 Webhook。
- 并发作业 :如果选中,则允许队列中的作业如果不依赖于另一个作业,则同时运行。如果要同时运行作业分片,请选中此框。如需更多信息,请参阅 自动化控制器容量确定和作业影响。
- 启用事实存储 :如果选中,自动化控制器会为与作业运行相关的清单中所有主机存储收集的事实。
- 防止实例组回退 :检查此选项仅允许 Instance Groups 字段中列出的实例组运行作业。如果清除,则执行池中的所有可用实例将根据控制作业运行位置 中描述的层次结构 使用。
-
权限升级 :如果选中,您可以让此 playbook 以管理员身份运行。这等同于将--
- 当您完成作业模板详情配置后,点 。
创建模板不会退出作业模板页面,而是提前进入作业模板 详情选项卡。保存模板后,您可以点 来启动作业。您还可以点 添加或更改模板的属性,如权限、通知、查看完成的作业并添加问卷调查(如果作业类型不是扫描)。在启动前,您必须首先保存模板,否则 仍然被禁用。
验证
- 在导航面板中,选择 → 。
- 验证新创建的模板是否出现在 Templates 页面中。
6.4. 为模板添加权限 复制链接链接已复制到粘贴板!
使用以下步骤为团队添加权限。
流程
- 在导航面板中,选择 → 。
- 选择一个模板,并在 Team Access 或 User Access 选项卡中点 。
选择 Teams 或 Users,然后点 。
- 点名称旁边的复选框从列表中选择一个或多个用户或团队,将它们添加为成员,然后单击 。
- 选择您希望用户或团队具有的角色。确保向下滚动以获得完整的角色列表。每种资源具有不同的可用选项。
- 点 将角色应用到所选用户或团队,并将它们添加为成员。
添加用户和团队关闭的窗口,以显示为每个用户和团队分配的更新角色
要删除特定用户的角色,请点其资源旁的
图标。
这会出现确认对话框,要求您确认解除关联。
6.5. 删除作业模板 复制链接链接已复制到粘贴板!
在删除作业模板前,请确保它不在工作流作业模板中使用。
流程
使用以下方法删除作业模板:
-
点 ProductShortName 图标并选择 Delete Template
图标,或者
-
在 Details 页面中,选择所需的作业模板,点 HEKETI icon 并选择
。
-
点 ProductShortName 图标并选择 Delete Template
如果删除由其他工作项目使用的项目,则会打开一个信息,列出受删除影响的项目,并提示您确认删除。有些屏幕包含无效的或之前删除的项目,且无法运行。
6.6. 使用通知 复制链接链接已复制到粘贴板!
在导航面板中,选择 → → 。如果已运行,您可以查看您设置的任何通知集成及其状态。
使用切换按钮启用或禁用要与特定模板搭配使用的通知。如需更多信息,请参阅 启用和禁用通知。
如果没有设置通知,请点击 来创建新通知。有关配置各种通知类型和扩展消息传递的更多信息,请参阅 通知类型。
6.7. 查看完成的作业 复制链接链接已复制到粘贴板!
Jobs 选项卡提供已运行的作业模板列表。点每个作业旁的展开图标查看以下详情:
- ID 和名称
- Status
- 作业类型
- 运行持续时间
- 开始和完成的时间
- 启动了作业,以及使用哪个模板、清单、项目和凭证。
您可以使用任何这些条件过滤已完成的作业列表。
在此列表中显示的分片作业会相应标记,带有已运行的分片作业数量。
6.8. 调度作业模板 复制链接链接已复制到粘贴板!
从 Schedules 选项卡访问特定作业模板的计划。
流程
要调度作业模板,请从作业模板中选择 Schedules 选项卡,然后选择适当的方法:
- 如果已经设置了调度,请检查、编辑、启用或禁用您的调度首选项。
- 如果还没有设置调度,请参阅 Schedules 以了解更多信息。
如果您为 Credentials 字段 选择了 Prompt on Launch,并且您创建或编辑作业模板的调度信息,则会在 Schedules 表单上显示一个 Prompt 选项。
在保存前,您无法在 Prompt 对话框中删除默认机器凭证,而无需将其替换为其他机器凭证。
要在调度上设置 extra_vars,您必须在作业模板中为 变量 选择 Prompt on Launch,或者在作业模板上配置和启用问卷调查。
然后,回答的问卷调查问题将变为 extra_vars。
6.9. 任务模板中的问卷调查 复制链接链接已复制到粘贴板!
运行或检查 的作业类型 提供了一种在 作业模板 创建或编辑屏幕中设置问卷调查的方法。问卷调查为 playbook 设置额外变量,类似于 Prompt for Extra Variables,但采用用户友好的问题和答案方式。调查还允许验证用户输入。选择 Survey 选项卡来创建问卷调查。
示例
您可以在几个情况下使用问卷调查。例如,操作希望为开发人员提供一个 "push to stage" 按钮,无需提高 Ansible 知识即可运行。启动后,此任务可以提示输入问题的回答,如"应该如何发布标签?"。
您可以询问许多类型的问题,包括多选问题。
6.9.1. 创建问卷调查 复制链接链接已复制到粘贴板!
流程
- 在导航面板中,选择 → 。
- 选择您要为其创建调查的作业模板。
- 在 Survey 选项卡中,单击 。
问卷调查可由任意数量的问题组成。对于每个问题,输入以下信息:
- 问题 :询问用户的问题。
- 可选: 描述: 描述用户被要求的内容。
- 回答变量名称 :用于存储用户响应的 Ansible 变量名称。这是 playbook 要使用的变量。变量名称不能包含空格。
回答类型 :从以下问题类型中选择:
- 文本: 单行文本。您可以为此回答设置最小和最大长度(字符数)。
- 文本域:多行文本字段。 您可以为此回答设置最小和最大长度(字符数)。
- 密码 :响应被视为敏感信息,就像实际密码一样被处理。您可以为此回答设置最小和最大长度(字符数)。
- 多项选择(单选 ):选项列表,一次只能选择一个。在 Multiple Choice Options 字段中输入选项(每行一个)。
- 多项选择(多选) :选项列表,一次可以选择任意数量。在 Multiple Choice Options 字段中输入选项(每行一个)。
- 整数 :整数。您可以为此回答设置最小和最大长度(字符数)。
- 浮点 数:十进制数。您可以为此回答设置最小和最大长度(字符数)。
- 必需 :用户是否需要回答这个问题。
- 最小长度 和 最大长度 :指定是否需要回答中的某个长度。
- 默认回答 :问题的默认回答。这个值在界面中预先填充,并在用户未提供回答时使用。
输入问题信息后,点 添加问题。
调查问题显示在 Survey 列表中。对于任何问题,您可以点
来编辑它。
选中每个问题旁边的框,然后单击 以删除问题,或者使用菜单栏中的切换选项启用或禁用调查提示。
如果您有多个调查问题,点 来通过单击并拖动网格图标来重新安排问题的顺序。
- 要添加更多问题,请点 。
6.9.2. 可选的问卷调查问题 复制链接链接已复制到粘贴板!
问卷调查问题中的 Required 设置决定了对于与之交互的用户是否是可选的。
可选的问卷调查变量也可以传递给 extra_vars 中的 playbook。
-
如果非文本变量(输入类型)标记为可选,且没有填写,则不会将任何问卷调查
extra_var传递给 playbook。 -
如果文本输入或文本区域输入标记为可选,未填写,且
最小长度 > 0,则不会将问卷调查extra_var传递给 playbook。 -
如果文本输入或文本区域输入标记为可选,未填写,并且具有
最小长度 === 0,则调查extra_var将传递给 playbook,并将值设为空字符串("")。
6.10. 启动作业模板 复制链接链接已复制到粘贴板!
自动化控制器的一个优点是 Ansible playbook 的按钮式部署。您可以配置模板,以存储您通常在命令行上传递给 Ansible Playbook 的所有参数。除了 playbook 外,模板还会传递清单、凭证、额外变量以及您可以在命令行上指定的所有选项和设置。
更简单的部署会在每次运行时以相同的方式运行 playbook 来提高一致性,并允许您委派职责。
流程
使用以下方法之一启动作业模板:
-
在导航面板中,选择 → 并点作业模板卡上的 Launch template
。
- 在您要启动的 作业模板的 作业模板详情选项卡中,单击 。
-
在导航面板中,选择 → 并点作业模板卡上的 Launch template
作业可能需要额外信息才能运行。启动时可以请求以下数据:
- 设置的凭证
- 为任意参数选择了 Prompt on Launch 选项
- 已设置为 Ask的密码或密码短语
- 问卷调查(如果已经为作业模板配置了问卷调查)
- 额外变量(如果作业模板要求提供)
如果作业有用户提供的值,则重启时会考虑这些值。如果用户没有指定值,则作业将使用作业模板中的默认值。作业不会按原样重新启动。它们通过用户提示重新应用到作业模板。
如果您为一个标签页提供了值,返回上一个标签页,请继续下一个标签页会导致在剩余标签页中重新提供值。确保您按照提示出现的顺序完成标签页。
启动后,自动化控制器会在 Jobs 选项卡下自动将 Web 浏览器重定向到此作业的 Job Status 页面。
您可以从列表视图中重新启动最新的作业,以便针对指定清单中的所有主机或仅仅是失败的主机重新运行。如需更多信息,请参阅 自动化控制器中的作业 部分。
当分片作业运行时,作业列表会显示工作流和作业分片,以及用于单独查看其详情的链接。
您可以使用 API 中新添加的端点 /api/v2/bulk/job_launch 来批量启动作业。此端点接受 JSON,您可以指定用于启动的统一作业模板(如作业模板和项目更新)的列表。用户必须具有启动所有作业的适当权限。如果没有启动所有作业,则返回错误,指示操作无法完成的原因。使用 OPTIONS 请求返回相关模式。如需更多信息,请参阅 Automation execution API overviewof the Reference 部分中的 /api_ref.html#/Bulk[Bulk endpoint] 部分。
6.10.1. 作业模板中的变量 复制链接链接已复制到粘贴板!
除了作业模板和问卷调查中设置的额外变量外,自动化控制器还会自动将以下变量添加到作业环境中。
-
awxswig 变量由系统定义,无法覆盖。 -
如果在
extra_vars中设置,有关作业上下文的变量,如awx_job_template_name不受影响。
-
awx_job_id:此作业运行的作业 ID。 awx_job_launch_type:指示作业启动方式的描述:- 手动 :作业是由用户手动启动的。
- 重新启动 :作业是通过重新启动来启动的。
- 回调 :作业是通过主机回调启动的。
- Scheduled: 作业是从一个调度启动的。
- 依赖项 :作业是作为另一个作业的依赖项启动的。
- 工作流 :作业是从工作流作业中启动的。
- 同步 :作业是从项目同步启动的。
- SCM :作业是作为清单 SCM 同步创建的。
-
awx_job_template_id:此作业运行使用的作业模板 ID。 -
awx_job_template_name:此作业使用的作业模板名称。 -
awx_execution_node:启动了此作业的执行节点名称。 -
awx_project_revision:此特定作业使用的源树的修订标识符(它也与作业的字段 scm_revision 相同)。 -
awx_project_scm_branch:作业模板使用的项目配置的默认项目 SCM 分支。 -
awx_job_scm_branch:如果作业覆盖了 SCM 分支,则该值将显示在这里。 -
awx_user_email:启动了此作业的控制器用户的用户电子邮件。这不适用于回调或调度的作业。 -
awx_user_first_name:启动此作业的自动化控制器用户的名字。这不适用于回调或调度的作业。 -
awx_user_id:启动了此作业的自动化控制器用户的用户 ID。这不适用于回调或调度的作业。 -
awx_user_last_name:启动此作业的自动化控制器用户的姓氏。这不适用于回调或调度的作业。 -
awx_user_name:启动了此作业的自动化控制器用户的用户名。这不适用于回调或调度的作业。 -
awx_schedule_id:如果适用,启动了此作业的调度的 ID。 -
awx_schedule_name:如果适用,启动了此作业的调度的名称。 -
awx_workflow_job_id:如果适用,启动了此作业的工作流作业的 ID。 -
awx_workflow_job_name:如果适用,启动了此作业的工作流作业的名称。请注意,这也与工作流作业模板相同。 -
awx_inventory_id:如果适用,此作业使用的清单的 ID。 -
awx_inventory_name:如果适用,此作业使用的清单的名称。
为实现兼容性,还为所有变量添加了"awx"前缀,例如 awx_job_id。
6.11. 复制作业模板 复制链接链接已复制到粘贴板!
如果您复制作业模板,它不会重复任何关联的调度、通知或权限。用户必须由用户或管理员创建作业模板重复重新创建调度和通知。用户复制作业模板被授予管理员权限,但没有为作业模板分配(重复数据)权限。
流程
- 在导航面板中,选择 → 。
点击与您要复制的模板关联的 {MoreActionIcon} 图标,然后选择
Duplicate Template 图标。
- 模板名称的新模板显示在模板列表中。
- 单击以打开新模板,然后单击 。
- 将 Name 字段的内容替换为新名称,并提供或更改其他字段中的条目以完成此页面。
- 单击 。
6.12. 事实缓存 复制链接链接已复制到粘贴板!
自动化控制器可以通过 Ansible 事实缓存插件来基于每个主机存储和检索事实。这个行为可根据每个作业模板进行配置。默认情况下,事实缓存会被关闭,但可以启用来为与作业运行相关的清单中所有主机提供事实请求。这可让您使用带有- limit 的作业模板,同时仍可访问整个主机事实清单。您可以在导航面板中指定插件强制按主机(以秒为单位)的全局超时设置,选择 → → 并编辑 Per-Host Ansible Fact Cache Timeout 字段。
在启动使用事实缓存(use_fact_cache=True的作业后,每个主机的 ansible_facts 均由控制器存储在作业的清单中。
包含自动化控制器的 Ansible 事实缓存插件在启用了事实缓存的作业上启用(use_fact_cache=True)。
当一个启用了事实缓存(use_fact_cache=True)的作业正在运行时,自动化控制器会恢复清单中主机的所有记录。任何比每个主机当前存储事实更新时间更新的记录都会在数据库中更新。
新的和更改的事实通过自动化控制器的日志记录功能记录。特别是 system_tracking 命名空间或日志记录 器。日志记录有效负载包括以下字段:
-
host_name -
inventory_id -
ansible_facts
Ansible 事实是自动化控制器清单 inventory_id 中 host_name 的所有 Ansible 事实的字典。
如果主机名包含正斜杠(/),事实缓存不适用于该主机。如果您的清单有 100 个主机,且一个主机的名称中有一个 /,则剩余的 99 个主机仍然收集事实。
6.13. 事实缓存的好处 复制链接链接已复制到粘贴板!
事实缓存可让您通过运行事实收集来节省时间。如果您在某个作业中有一个针对一千个主机和分叉运行的 playbook,您可以花费 10 分钟在所有这些主机上收集事实。但是,如果您定期运行作业,第一次运行会缓存这些事实,下一次运行会从数据库中拉取它们。这可减少针对大型清单的作业运行时。
不要更改 ansible.cfg 文件以应用事实缓存。自定义事实缓存可能会与控制器的事实缓存功能冲突。您必须使用包含自动化控制器的事实缓存模块。
您可以选择在创建或编辑作业模板时检查 Enable fact 存储 选项来在作业中使用缓存的事实。
若要清除事实,请运行 Ansible clear_facts meta 任务。以下是使用 Ansible clear_facts meta 任务的示例 playbook。
- hosts: all
gather_facts: false
tasks:
- name: Clear gathered facts from all currently targeted hosts
meta: clear_facts
您可以在以下找到事实缓存的 API 端点:
http://<controller server name>/api/v2/hosts/x/ansible_facts
6.14. 将云凭证与云清单搭配使用 复制链接链接已复制到粘贴板!
在同步云清单时,可以使用云凭证。它们也可以与作业模板关联,并包含在运行时环境中,供 playbook 使用。支持以下云凭证:
6.15. OpenStack 复制链接链接已复制到粘贴板!
以下示例 playbook 调用 nova_compute Ansible OpenStack 云模块并需要凭证:
-
auth_url -
username -
password -
项目名称
这些字段通过环境变量 OS_CLIENT_CONFIG_FILE 提供给 playbook,它指向控制器基于云凭证内容的 YAML 文件。以下示例 playbook 将 YAML 文件加载到 Ansible 变量空间中:
- OS_CLIENT_CONFIG_FILE 示例:
clouds:
devstack:
auth:
auth_url: http://devstack.yoursite.com:5000/v2.0/
username: admin
password: your_password_here
project_name: demo
- Playbook 示例:
- hosts: all
gather_facts: false
vars:
config_file: "{{ lookup('env', 'OS_CLIENT_CONFIG_FILE') }}"
nova_tenant_name: demo
nova_image_name: "cirros-0.3.2-x86_64-uec"
nova_instance_name: autobot
nova_instance_state: 'present'
nova_flavor_name: m1.nano
nova_group:
group_name: antarctica
instance_name: deceptacon
instance_count: 3
tasks:
- debug: msg="{{ config_file }}"
- stat: path="{{ config_file }}"
register: st
- include_vars: "{{ config_file }}"
when: st.stat.exists and st.stat.isreg
- name: "Print out clouds variable"
debug: msg="{{ clouds|default('No clouds found') }}"
- name: "Setting nova instance state to: {{ nova_instance_state }}"
local_action:
module: nova_compute
login_username: "{{ clouds.devstack.auth.username }}"
login_password: "{{ clouds.devstack.auth.password }}"
6.15.1. Amazon Web Services 复制链接链接已复制到粘贴板!
Amazon Web Services (AWS)云凭证在 playbook 执行过程中作为以下环境变量公开(在作业模板中,选择您的设置所需的云凭证):
-
AWS_ACCESS_KEY_ID -
AWS-SECRET_ACCESS_KEY
每个 AWS 模块在通过控制器运行时都会隐式使用这些凭证,而无需设置 aws_access_key_id 或 aws_secret_access_key 模块选项。
6.15.2. Google 复制链接链接已复制到粘贴板!
Google 云凭证在 playbook 执行过程中作为以下环境变量公开(在作业模板中,选择您的设置所需的云凭证):
-
GCE_EMAIL -
GCE_PROJECT -
GCE_CREDENTIALS_FILE_PATH
每个 Google 模块在通过控制器运行时都会隐式使用这些凭证,而无需设置 service_account_email、project_id 或 pem_file 模块选项。
6.15.3. Azure 复制链接链接已复制到粘贴板!
Azure 云凭证在 playbook 执行过程中作为以下环境变量公开(在作业模板中,选择您的设置所需的云凭证):
-
AZURE_SUBSCRIPTION_ID -
AZURE_CERT_PATH
每个 Azure 模块在通过控制器运行时都会隐式使用这些凭证,而无需设置 subscription_id 或 management_cert_path 模块选项。
6.15.4. VMware 复制链接链接已复制到粘贴板!
VMware 云凭证在 playbook 执行过程中作为以下环境变量公开(在作业模板中,选择您的设置所需的云凭证):
-
VMWARE_USER -
VMWARE_PASSWORD -
VMWARE_HOST
以下示例 playbook 演示了这些凭证的使用情况:
- vsphere_guest:
vcenter_hostname: "{{ lookup('env', 'VMWARE_HOST') }}"
username: "{{ lookup('env', 'VMWARE_USER') }}"
password: "{{ lookup('env', 'VMWARE_PASSWORD') }}"
guest: newvm001
from_template: yes
template_src: linuxTemplate
cluster: MainCluster
resource_pool: "/Resources"
vm_extra_config:
folder: MyFolder
6.16. 置备回调 复制链接链接已复制到粘贴板!
置备回调是自动化控制器的一项功能,使主机能够启动针对自身运行的 playbook,而不是等待用户从自动化控制器控制台管理主机。
置备回调仅用于在调用主机上运行 playbook,用于云突发。云突发是一种云计算配置,它允许私有云在计算需求激增时通过"突发"进入公共云资源来访问公共云资源。
Example
需要客户端到服务器通信(如传输授权密钥)的新实例,而不是对另一主机运行作业。这为自动配置以下内容提供:
- 另一个系统置备后的系统(如 AWS 自动扩展,或操作系统置备系统,如 kickstart 或预装)。
- 以编程方式启动作业,而不直接调用自动化控制器 API。
启动的作业模板仅针对请求调配的主机运行。
这通常通过 firstboot 类型脚本或从 cron 访问。
6.16.1. 启用部署回调 复制链接链接已复制到粘贴板!
流程
要启用回调,请检查作业模板中的 Provisioning 回调 选项。这将显示作业模板的 Provisioning 回调详情。
注意如果要将自动化控制器的置备回调功能与动态清单搭配使用,请为作业模板中使用的清单组设置 Update on Launch。
回调还需要主机配置密钥,以确保具有 URL 的外部主机无法请求配置。为 Host config 键指定自定义值。主机密钥可以在多个主机间重复使用,从而将此作业模板应用到多个主机。如果要控制哪些主机可以请求配置,您可以随时更改密钥。
6.16.2. 手动使用 REST 进行回调 复制链接链接已复制到粘贴板!
使用 REST 手动回调:
流程
检查 UI 中的回调 URL,格式为: https://<CONTROLLER_SERVER_NAME>/api/v2/job_templates/7/callback/
- 示例 URL 中的 "7" 是自动化控制器中的作业模板 ID。
确保来自主机的请求是 POST。以下是使用
curl的示例(全部在一行):curl -k -i -H 'Content-Type:application/json' -XPOST -d '{"host_config_key": "redhat"}' \ https://<CONTROLLER_SERVER_NAME>/api/v2/job_templates/7/callback/- 确保在清单中定义了请求的主机,以便回调成功。
验证
成功请求会在 Jobs 标签页中生成一个条目,您可以在其中查看结果和历史记录。您可以使用 REST 访问回调,但推荐的使用回调方法是使用包含自动化控制器的示例脚本之一:
-
/usr/share/awx/request_tower_configuration.sh(Linux/UNIX) -
/usr/share/awx/request_tower_configuration.ps1(Windows)
通过传递 -h 标志,其用法在文件的源代码中进行了描述,如下所示:
./request_tower_configuration.sh -h
Usage: ./request_tower_configuration.sh <options>
Request server configuration from Ansible Tower.
OPTIONS:
-h Show this message
-s Controller server (e.g. https://ac.example.com) (required)
-k Allow insecure SSL connections and transfers
-c Host config key (required)
-t Job template ID (required)
-e Extra variables
这个脚本可以重试命令,因此比简单的 curl 请求相比,使用回调更为可靠的方法。脚本每分钟重试一次,最多十分钟。
这是示例脚本。如果您在检测到失败情况时需要更多的动态行为,请编辑这个脚本,因为任何非 200 错误代码都可能不是需要重试的临时错误。
您可以在自动化控制器中将回调与动态清单搭配使用。例如,从其中一个受支持的云提供商拉取云清单时。在这些情况下,除了设置 Update On Launch 之外,请确保为清单源配置清单缓存超时,以避免对云的 API 端点造成影响。由于 request_tower_configuration.sh 脚本每分钟轮询一次,因此建议为清单(在清单源本身上配置)的缓存无效时间为一两分钟。
不建议从 cron 任务运行 request_tower_configuration.sh 脚本,但建议每 30 分钟运行推荐的 cron 间隔。重复的配置可以通过调度自动化控制器来处理,以便大多数用户使用回调的主要用途是启用在上线时引导至最新配置的基础镜像。在第一次引导时运行是最佳实践。首次启动脚本是通常自我删除的初始化脚本,因此您设置了一个调用 request_tower_configuration.sh 脚本副本的 init 脚本,并将其设置为自动扩展镜像。
故障排除
如果自动化控制器无法按名称或 IP 地址在您定义的一个清单中根据名称或 IP 地址查找主机,则请求将被拒绝。以这种方式运行作业模板时,请确保针对自身启动 playbook 的主机位于清单中。如果清单中缺少主机,则作业模板会失败,并显示 No Hosts Matched type 错误消息。
如果您的主机不在清单中,并且为清单组检查 Launch 上的 Update,自动化控制器会在运行回调前尝试更新基于云的清单源。
6.16.3. 将额外变量传递给置备回调 复制链接链接已复制到粘贴板!
您可以在 Provisioning Callback 中传递 extra_vars,其方式与在常规作业模板中相同。要传递 extra_vars,发送的数据必须是 POST 正文的一部分,作为应用程序或 JSON,作为内容类型。
流程
使用以下方法之一传递额外变量:
在添加您自己的
extra_vars时要传递时,使用以下 JSON 格式作为示例:'{"extra_vars": {"variable1":"value1","variable2":"value2",...}}'使用
curl将额外变量传递给作业模板调用:root@localhost:~$ curl -f -H 'Content-Type: application/json' -XPOST \ -d '{"host_config_key": "redhat", "extra_vars": "{\"foo\": \"bar\"}"}' \ https://<CONTROLLER_SERVER_NAME>/api/v2/job_templates/7/callback
如需更多信息,请参阅配置 自动化执行中的使用 Curl 启动作业 。
6.17. 额外变量 复制链接链接已复制到粘贴板!
当您传递问卷调查变量时,它们作为自动化控制器中的额外变量(extra_vars)传递。但是,将额外变量传递给作业模板(就像对问卷调查的操作一样)可能会覆盖从清单和项目传递的其他变量。
默认情况下,extra_vars 标记为 !unsafe,除非您在作业模板的 Extra Variables 部分中指定它们。这些是信任的,因为它们只能由具有足够特权的用户添加或编辑作业模板。例如,嵌套变量在作为提示符输入时不会扩展,因为 Jinja 方括号被视为字符串。有关不安全变量的更多信息,请参阅 Unsafe 或 raw string。
只有在以下条件之一被满足时,传递给作业启动 API 的 extra_vars 才有效:
- 它们与启用的问卷调查中的变量对应。
-
ask_variables_on_launch设置为 True。
Example
为 debug = true 定义了清单的变量。此变量 debug = true 可能会在作业模板问卷调查中被覆盖。
要确保您传递的变量不会被覆盖,请在问卷调查中重新定义变量来确保包括它们。您可以在清单、组和主机级别上定义额外变量。
如果您要指定 ALLOW_JINJA_IN_EXTRA_VARS 参数,请参阅 配置自动化执行以配置自动化执行的 ALLOW_JINJA_IN_EXTRA_VARS 变量 部分。
作业模板额外变量字典与问卷调查变量合并。
以下是 YAML 和 JSON 格式的 extra_vars 的一些简化示例:
- YAML 格式的配置:
launch_to_orbit: true
satellites:
- sputnik
- explorer
- satcom
- JSON 格式的配置:
{
"launch_to_orbit": true,
"satellites": ["sputnik", "explorer", "satcom"]
}
下表记录了自动化控制器中变量优先级的行为(层次结构)与 Ansible 中的变量优先级比较。
| Ansible | 自动化控制器 |
|---|---|
| 角色默认值 | 角色默认值 |
| 动态清单变量 | 动态清单变量 |
| 清单变量 | 自动化控制器清单变量 |
|
清单 | 自动化控制器组变量 |
|
清单 | 自动化控制器主机变量 |
|
Playbook |
Playbook |
|
playbook |
playbook |
| 主机事实 | 主机事实 |
| 注册的变量 | 注册的变量 |
| 设置事实 | 设置事实 |
| Play 变量 | Play 变量 |
|
play | (不支持) |
|
play |
play |
| role 和 include 变量 | role 和 include 变量 |
| 块变量 | 块变量 |
| 任务变量 | 任务变量 |
| 额外变量 | 作业模板额外变量 |
| 作业模板调查(defaults) | |
| 任务启动额外变量 |
6.17.1. 重新启动作业模板 复制链接链接已复制到粘贴板!
通过设置 launch_type 以重新启动作业来表示重新启动作业,而不是手动 重新启动作业。重新启动行为与启动行为不同,其不会继承 extra_vars。
作业重新启动不会通过继承逻辑。它使用为重新启动的作业计算的相同 extra_vars。
Example
您启动了一个没有 extra_vars 的作业模板,这导致创建名为 j1 的作业。然后,您编辑作业模板并添加 extra_vars (如添加 "{ "hello": "world" }")。
重新启动 j1 会导致创建 j2,但由于没有继承逻辑,并且 j1 没有 extra_vars,j2 没有任何 extra_vars。
如果您使用您在创建 j1 后添加的 extra_vars 启动作业模板,则创建重新启动作业(j3)包含 extra_vars。重新启动 j3 会导致创建 j4,这还包括 extra_vars。
第 7 章 作业分片 复制链接链接已复制到粘贴板!
分片作业指的是分布式作业的概念。使用分布式作业在大量主机上运行作业。然后,您可以在清单的子集上运行多个 ansible-playbooks,您可以在集群间并行调度。
默认情况下,Ansible 从单个控制实例运行作业。对于不需要跨主机编配的作业,作业分片可以利用自动化控制器将工作分发到集群中的多个节点。
作业分片的工作原理方法是添加一个作业模板字段 job_slice_count,它指定要将 Ansible 运行分片到的作业数量。当这个数字大于 1 时,自动化控制器会从作业模板而不是作业生成工作流。清单在分片作业中平均分配。然后,工作流作业启动,并像正常工作流一样继续。
在启动作业时,API 将返回作业资源(如果 job_slice_count = 1)或工作流作业资源。对应的用户界面(UI)重定向到适当的屏幕,以显示运行的状态。
7.1. 作业分片注意事项 复制链接链接已复制到粘贴板!
在设置作业分片时,请考虑以下几点:
- 分片作业会创建一个工作流作业,然后创建作业。
- 作业分片由作业模板、清单和分片计数组成。
执行后,分片作业会将每个清单分成几个"分片大小"块。然后,它将 ansible-playbook 的作业排队在相应清单的每个块上运行。引入 ansible-playbook 的清单是原始清单的短版本,只有该特定片段中的主机。作业列表中显示的已完成分片作业会相应地标记,以及已运行的分片作业数量:
这些分片作业遵循常规调度行为(fork 数量,根据容量进行排队,根据清单映射分配给实例组)。
注意作业分片旨在水平扩展作业执行。在作业模板上启用作业分片会将清单划分成在启动时配置的分片数量,然后为每个分片启动作业。
通常,分片的数量等于或小于自动化控制器节点的数量。您可以设置大量作业分片,但可能会导致性能下降。作业调度程序不是同时调度数千个工作流节点,即分片作业成为哪些节点。
- 带有提示或额外变量的分片作业模板的行为与标准作业模板相同,将所有变量和限制应用到生成的工作流作业集合。但是,当将限制传递给分片作业时,如果限制导致分片没有分配主机,则这些分片将失败,从而导致整个作业失败。
- 计算分布式作业的作业分片作业状态的方式与工作流作业相同。如果其子作业中存在未处理的失败,则会失败。
- 任何计划在多个主机间编配(而不是只对单个主机应用更改)的作业都不能配置为分片作业。
- 如果分片作业失败,自动化控制器不会尝试发现或考虑特定失败的 playbook。
7.2. 作业分片执行行为 复制链接链接已复制到粘贴板!
当作业被分片时,它们可以在任何节点上运行。系统中的容量不足可能会导致某些在不同时间运行。当分片作业运行时,作业详情会显示当前运行的工作流和作业分片,以及用于单独查看其详情的链接。
默认情况下,作业模板通常不会被配置为同时执行(您必须在 API 中检查 allow_simultaneous 或 UI 中 Concurrent 作业 )。分片会覆盖此行为,即使该设置是明确的,也意味着 allow_simultaneous。如需有关如何指定此功能的信息,以及作业模板配置中的作业分片数量,请参阅作业模板模板。https://docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.5/html/using_automation_execution/controller-job-templates
Job templates 部分提供了在 UI 中执行以下操作的更多详情:
- 使用分片数量大于一的作业模板启动工作流作业。
- 启动分片作业模板后,取消整个工作流或单独的作业。
- 在分片完成运行后,重新启动整个工作流或单独的作业。
- 在启动作业模板后,查看工作流和分片作业的详情。
- 根据搜索 作业分片部分,在创建分片后专门搜索 分片作业。
7.3. 搜索作业分片 复制链接链接已复制到粘贴板!
要更轻松地查找分片作业,请使用搜索功能将搜索过滤器应用到:
- 作业列表仅显示分片作业
- 作业列表仅显示作业分片的父工作流作业
- 作业模板列表仅显示生成分片作业的作业模板
流程
使用以下方法之一搜索分片作业:
要只显示作业列表中的分片作业,就像大多数情况一样,您可以根据类型(此处的作业)或
unified_jobs过滤:/api/v2/jobs/?job_slice_count__gt=1仅显示作业分片的父工作流作业:
/api/v2/workflow_jobs/?job_template__isnull=false仅显示生成分片作业的作业模板:
/api/v2/job_templates/?job_slice_count__gt=1
第 8 章 工作流作业模板 复制链接链接已复制到粘贴板!
您可以从 → 创建作业模板和工作流作业模板。
有关作业模板,请参阅 作业模板。
工作流作业模板将一系列不同资源链接,这些资源将属于发布过程一部分的完整作业集合作为一个单元来跟踪。这些资源包括以下内容:
- 作业模板
- 工作流作业模板
- 项目同步
- 清单源同步
Automation Templates 页面显示当前可用的工作流和作业模板。
选择模板名称来显示有关模板的更多信息,包括上次运行的时间。此列表按名称按字母顺序排序,但您可以根据其他条件排序,或者根据模板的不同字段和属性进行搜索。
在这个屏幕中,您可以启动
,编辑
,并重复的
工作流作业模板。
只有工作流模板带有工作流可视化工具
图标作为访问工作流编辑器的快捷方式。
工作流模板可用作另一个工作流模板的构建块。您可以通过在工作流模板中设置多个设置来启用 Prompt on Launch,您可以在工作流作业模板一级编辑该设置。它们不会影响在各个工作流模板级别分配的值。具体步骤请查看 工作流可视化工具 部分。
8.1. 创建工作流作业模板 复制链接链接已复制到粘贴板!
要创建新工作流作业模板,请完成以下步骤:
如果将限制设置为工作流模板,则不会传递给作业模板,除非您检查了 Prompt on launch 的限制。如果运行的 playbook 是必需的,这可能会导致 playbook 失败。
流程
- 在导航面板中,选择 → 。
- 在 Automation Templates 页面中,从 Create template 列表中选择 Create workflow 作业模板。
在以下字段中输入相关信息:
注意如果某个字段选择了 Prompt on launch 复选框,则启动工作流模板,或者在另一个工作流模板中使用工作流模板,则会提示您输入该字段的值。大多数提示的值将覆盖作业模板中设置的任何值。下表中会记录例外情况。
Expand 字段 选项 启动时提示 Name
输入作业的名称。
N/A
描述
根据需要输入任意描述(可选)。
N/A
机构(Organization)
从可供登录的用户可用的机构中选择用于此模板的组织。
N/A
清单(Inventory)
(可选)从登录的用户可用的清单中选择要与此模板搭配使用的清单。
是
限制
用于进一步限制受 playbook 管理或影响的主机列表的主机模式。您可以通过冒号(:)分隔多个模式。与核心 Ansible 一样:
- a:b 表示"在组 a 或 b 中"
- a:b:&c 表示"在 a 或 b 中,但必须在 c 中"。
- 答:!b 表示"在 a 中,一定不要在 b 中"
如需更多信息,请参阅 Ansible 文档中的 Patterns:以主机和组为目标 。
是
如果选择,即使提供了默认值,也会在启动时提示您选择一个限制。
源控制分支
为工作流选择分支。此分支应用于提示分支的所有工作流作业模板节点。
是
标签
-
(可选)提供描述此工作流作业模板的标签,如
dev或test。使用标签对显示中的工作流作业模板和完成的作业进行分组和过滤。 - 标签在添加到工作流模板时创建。标签使用工作流模板中提供的项目与单个机构关联。如果机构的成员具有编辑权限(如 admin 角色),则机构成员可以在工作流模板上创建标签。
- 保存作业模板后,标签会显示在工作流作业模板 详情视图中。
- 标签仅应用于工作流模板,而不是工作流中使用的作业模板节点。
-
选择标签旁边的
将其删除。删除标签后,它不再与该特定作业或作业模板关联,但它与引用它的任何其他作业关联。
是
如果选择,即使提供了默认值,也会在启动时提示您提供附加标签(如果需要)。- 您无法删除现有标签,选择
仅会删除新添加的标签,而不是现有的默认标签。
作业标签
键入并选择 Create 下拉菜单来指定应运行 playbook 的哪个部分。有关更多信息和示例,请参阅 Ansible 文档中的 标签。
是
跳过标签
键入并选择 Create 下拉菜单来指定要跳过的 playbook 的某些任务或部分。有关更多信息和示例,请参阅 Ansible 文档中的 标签。
是
额外变量
- 向 playbook 传递额外的命令行变量。
这是 ansible-playbook 的"-e"或"-extra-vars"命令行参数,记录在 Ansible 文档中有关 控制 Ansible 的行为方式:优先级规则. - 使用 YAML 或 JSON 对 Give 键或值对。这些变量具有最大优先级值,并覆盖其他位置指定的其他变量。以下是一个值:
git_branch: production release_version: 1.5是
如果要能够在调度中指定
extra_vars,则必须选择 Prompt on launch for Extra variables on the workflow job template,或者在作业模板上启用问卷调查。那些回答的问卷调查问题将变为extra_vars。有关额外变量的更多信息,请参阅 额外变量。如果需要,指定启动此模板的以下选项:
选中 Enable webhook 以打开与用于启动工作流作业模板的预定义 SCM 系统 Web 服务进行接口的功能。GitHub 和 GitLab 是支持的 SCM 系统。
如果您启用 Webhook,会显示其他字段,提示输入更多信息:
- Webhook 服务 :选择要从哪个服务侦听 Webhook。
- Webhook URL :自动填充将 POST 请求发送到的 Webhook 服务的 URL。
- Webhook 密钥 :生成共享 secret,供 Webhook 服务用来签署发送到自动化控制器的有效负载。您必须在 Webhook 服务上的设置中配置此功能,以便在自动化控制器中接受此服务的 Webhook。有关设置 Webhook 的更多信息,请参阅使用 Webhook。
- 选中启用并发作业,以允许同时运行此工作流。如需更多信息,请参阅 自动化控制器容量确定和作业影响。
- 配置完工作流模板后,点 。
保存模板会退出工作流模板页面,工作流可视化工具会打开其中构建工作流。如需更多信息,请参阅 工作流可视化工具 部分。否则,请选择以下方法之一:
关闭工作流可视化工具,以返回到新保存的模板的 Details 选项卡。您可以完成以下任务:
- 查看、编辑、添加权限、通知、计划和调查
- 查看完成的作业
- 构建工作流模板
点 以启动工作流。
注意在启动前保存模板,或者 保持禁用。Notifications 选项卡只有在您保存模板后才会显示。
8.2. 使用权限 复制链接链接已复制到粘贴板!
点 Team Access 或 User Access 选项卡,查看、获取、编辑和删除用户和团队成员的相关权限。
点 ,按照提示分配此工作流模板来创建新权限。
8.3. 使用通知 复制链接链接已复制到粘贴板!
有关在工作流作业模板中使用通知的详情,请参考使用通知。
8.4. 查看完成的工作流作业 复制链接链接已复制到粘贴板!
Jobs 选项卡提供已运行的作业模板列表。点每个作业旁的
图标查看每个作业的详情。
从此视图中,您可以点作业 ID,工作流作业的名称并查看其图形表示。以下示例显示了工作流作业的作业详情:
节点使用标签标记,以帮助您识别它们。如需更多信息,请参阅 工作流可视化工具 部分中的图例。
8.5. 调度工作流作业模板 复制链接链接已复制到粘贴板!
选择 Schedules 选项卡,以访问特定工作流作业模板的计划。
有关调度工作流作业模板运行的更多信息,请参阅 调度作业模板 部分。
如果嵌套工作流中使用的工作流作业模板有问卷调查,或者为 inventory 选项选择了 Prompt on launch,则 选项会显示在调度表单上的 和 选项旁边。单击 以显示可选的 INVENTORY 步骤,您可以在其中提供或删除清单,或者跳过这一步,而无需任何更改。
8.6. 工作流作业模板中的问卷调查 复制链接链接已复制到粘贴板!
包含 运行 或检查 的作业类型 的工作流提供了一种在工作流作业模板创建或编辑屏幕中设置问卷调查的方法。
有关作业调查的更多信息,包括如何在工作流作业模板中创建问卷调查和可选问卷调查问题,请参阅 作业模板中的调查 部分。
8.7. 工作流可视化工具 复制链接链接已复制到粘贴板!
工作流可视化工具提供了一种图形方式,用于将作业模板、工作流模板、项目同步和清单同步链接到构建工作流模板。在构建工作流模板前,请参阅 自动化控制器部分中的工作流,以了解与父、子和同级节点上各种场景相关的注意事项。
8.7.1. 构建工作流 复制链接链接已复制到粘贴板!
您可以设置以下两个或更多节点类型的组合来构建工作流:
- 模板(作业模板或工作流作业模板)
- 项目同步
- 清单同步
- 批准
流程
要启动工作流可视化工具,请使用以下方法之一:
在导航面板中,选择 → 。
- 选择工作流模板并点 。
-
在 Automation Templates 列表中点工作流作业模板旁边的
图标。
- 点 显示要添加到工作流的节点列表。
从 Node type 列表中,选择要添加的节点类型。
如果选择了 Approval node,请参阅 Approval nodes 以了解更多信息。
选择节点会提供与其关联的可用的有效选项。
注意如果您在填充工作流图形时选择了没有默认清单的作业模板,则会使用父工作流的清单。虽然作业模板中不需要凭证,但如果具有需要密码的凭证,则无法为工作流选择作业模板,除非凭证被提示的凭证替代。
- 当您选择节点类型时,工作流开始构建,且您必须指定要为所选节点执行的操作类型。此操作也称为边缘类型。
如果节点是根节点,则边缘类型默认为 Always,不可编辑。对于后续节点,您可以选择以下场景(类型)之一以应用到每个节点:
- 始终运行: 无论成功或失败都继续执行。
- 在成功后运行 :成功完成后,执行下一个模板。
- 在失败时运行 :执行其他模板。
如果节点是 Convergence 字段中的聚合节点,请选择节点的行为:
- 任何 是默认行为,允许任何节点按照指定完成,然后再触发下一个聚合节点。如果一个父状态满足其中一个运行条件,则将 运行任何 子节点。任何节点都 需要所有节点都完成,但只有一个节点必须以预期结果完成。
选择 All 以确保所有节点都按指定完成,然后再聚合并触发下一个节点。所有* 节点的目的是确保每个父节点都满足其运行子节点的预期结果。工作流检查以确保每个父行为都如预期运行子节点。否则,它不会运行子节点。
如果选择,在图形视图中将节点标记为 ALL :
注意如果节点是根节点,或者没有与其聚合的节点,设置 Convergence 规则不会应用,因为它的行为是由触发节点的操作决定的。
如果工作流中使用的作业模板为其任何参数选择了 Prompt on launch,则会出现 选项,以便您在节点级别更改这些值。使用向导更改每个标签页中的值,然后点击 Preview 选项卡中的 。
如果工作流中使用的工作流模板为清单选项选择了 Prompt on launch,请使用向导在提示符处提供清单。如果父工作流有自己的清单,它会覆盖此处提供的任何清单。
注意对于带有提示详细信息但没有默认值的工作流作业模板,您必须在启用 SELECT 选项前提供这些值。
以下两个情况会禁用 选项,直到 选项提供值前:
- 当您在工作流作业模板中选择 Prompt on launch 复选框时,但没有提供默认值。
- 当您创建所需的问卷调查问题时,但没有提供默认回答。
但是,凭证并不如此。创建工作流节点时不允许在启动时需要密码的凭证,因为在创建节点时必须提供启动该节点所需的所有内容。如果您在工作流作业模板中提示输入凭证,则无法选择在自动化控制器中需要密码的凭证。
当提示向导关闭时,您还必须单击 ,以在该节点上应用更改。否则,您所做的任何更改都会恢复到作业模板中设置的值。
创建节点时,会使用其作业类型进行标记。与每个工作流节点关联的模板,会根据所选运行场景运行。单击 ,以显示每个运行场景及其作业类型的图例。
将鼠标悬停在节点上,添加步骤和链接,或删除所选节点:
注意如果您在添加链接时将鼠标悬停在一个步骤上,则会出现一个红色的边框,这意味着您无法将这两个步骤连接在一起。这是避免用户创建"循环依赖项"的一个防止方法,可能会导致工作流处于无限循环中,永远不会完成。
- 添加或编辑节点时,点 保存任何修改并将其呈现在图形视图中。有关构建工作流的可能方法,请参阅 构建节点场景。
- 构建工作流作业模板后,点 保存整个工作流模板并返回到新的工作流作业模板详情页面。
点 不会保存您的工作,而是关闭整个工作流可视化工具,因此您必须再次启动。
8.7.2. 批准节点 复制链接链接已复制到粘贴板!
选择 批准节点 需要您干预才能推进工作流。此功能为在 playbook 间暂停工作流,以便您可以授予继续工作流中的下一个 playbook 的批准。这可让用户指定的时间干预,但也允许您尽快继续,而无需等待其他触发器。
超时的默认值为 none,但您可以指定请求过期前的时间长度,并自动拒绝。选择并提供批准节点的信息后,它会显示在图形视图中,其中包含一个暂停图标。
批准者是满足以下条件的任何人:
- 可以执行包含批准节点的工作流作业模板的用户。
- 具有机构管理员或以上特权的用户(用于与该工作流作业模板关联的机构)。
- 在该特定工作流作业模板中明确为其分配了 Approve 权限的用户。
如果待处理的批准节点没有在指定的时间限制内批准(如果分配了过期时间),或者被拒绝,则它们被标记为 "timed out" 或 "failed",并移到下一个 "on fail node" 或 "always node"。如果批准,则使用 "on success" 路径。如果您试图将 API 中的 POST 发布到已批准、被拒绝或超时的节点,则会显示错误消息通知您此操作冗余,且不会执行进一步的步骤。
下表显示了在批准工作流中允许的各种权限级别:
8.7.3. 构建节点场景 复制链接链接已复制到粘贴板!
了解如何在以下场景中管理节点。
流程
点击父节点上的(
)图标和添加 步骤,并链接 添加同级节点:
-
点击 或 (
)和 添加步骤 来添加根节点来描述分割场景。
-
在您要创建分割场景的任意节点上,将鼠标悬停在分割场景开始的节点上,然后点击父节点上的加号(
)图标,以及添加 步骤和链接。这会从同一父节点添加多个节点,从而创建同级节点。
点 来引用键,以确定与图形描述相关的符号和颜色的含义。
如果您在带有一组具有不同边缘类型的同级节点的工作流中删除附加有后续节点的节点,则附加节点会自动加入同级节点组并保留其边缘类型:
8.7.4. 编辑节点 复制链接链接已复制到粘贴板!
流程
使用以下方法之一编辑节点:
- 如果要编辑节点,点节点的图标。窗格中显示当前的选择,单击 以更改这些选择。进行更改并点击 将它们应用到图形视图。
-
要编辑现有链接的边缘类型(运行成功,运行失败,运行始终 ),在现有状态上点(
)。
-
要删除链接,点链接
并点击 。只有在目标或子节点有多个父节点时,此选项才会出现在窗格中。所有节点都必须始终链接到另一个其他节点,因此您必须在删除旧链接前创建新链接。
使用以下方法之一编辑工作流图的视图:
-
点击检查图标
放大、减少图标(
)缩放、展开图标(
) (
)以适合屏幕或重置图标(
)以重新组成视图。
- 拖动工作流图以在屏幕上进行重新定位,或使用鼠标上的滚动来缩放。
-
点击检查图标
8.8. 启动工作流作业模板 复制链接链接已复制到粘贴板!
流程
使用以下方法之一启动工作流作业模板:
-
在导航面板中,选择 → 并点作业模板旁的
图标。
- 在您要启动的工作流作业模板的 Details 选项卡中,点 。
-
在导航面板中,选择 → 并点作业模板旁的
在启动时,为工作流作业模板添加的变量会在自动化控制器中自动添加,以及工作流作业模板和问卷调查中设置的额外变量。
与工作流上的批准相关的事件显示在活动流(
)中,其中包含有关批准请求的详细信息(若有)。
8.9. 复制工作流作业模板 复制链接链接已复制到粘贴板!
使用自动化控制器,您可以复制工作流作业模板。当您复制工作流作业模板时,它不会重复任何关联的调度、通知或权限。用户或系统管理员必须重新创建调度和通知,以创建工作流模板的副本。用户复制工作流模板被授予管理员权限,但没有为工作流模板分配(重复)权限。
流程
- 在导航面板中,选择 → 。
点击与您要复制的模板关联的
图标,然后选择
Duplicate 模板图标。
- 模板名称的新模板显示在模板列表中。
- 单击以打开新模板,然后单击 。
- 将 Name 字段的内容替换为新名称,并提供或更改其他字段中的条目以完成此页面。
- 单击 。
如果资源具有您没有正确权限级别的相关资源,则无法复制该资源。例如,如果项目使用了当前用户仅具有 Read 访问权限的凭据。但是,对于工作流作业模板,如果其任何节点使用未授权的作业模板、清单或凭证,工作流模板仍然可以重复。但是在重复的工作流作业模板中,工作流模板节点中的对应字段不存在。
8.10. 工作流作业模板额外变量 复制链接链接已复制到粘贴板!
如需更多信息,请参阅 Extra variables 部分。
第 9 章 自动化控制器中的工作流 复制链接链接已复制到粘贴板!
工作流允许您配置一组不同的作业模板(或工作流模板),它们可能或不共享清单、playbook 或权限。
工作流具有 和执行权限,类似于作业模板。工作流完成的任务是将属于发布过程一部分的完整作业集合作为一个单元来跟踪。
管理员
作业或工作流模板使用类似图形的结构(称为节点)链接在一起。这些节点可以是作业、项目同步或清单同步。模板可以是不同工作流的一部分,也可以在同一工作流中多次使用。在启动工作流时,图形结构的副本会保存到工作流作业中。
以下示例显示了具有所有三个和工作流作业模板的工作流:
当工作流运行时,作业会从节点的链接模板生成。链接到具有提示驱动的字段(job_type、job_tags、skip_tags、limit)的节点可以包含这些字段,且不会在启动时提示。提示凭证或清单的作业模板没有默认值,无法包含在工作流中。
9.1. 工作流场景和注意事项 复制链接链接已复制到粘贴板!
在构建工作流时,请考虑以下事项:
- 根节点默认设置为 ALWAYS,且无法编辑。
- 节点可以有多个父项,子项可以链接到任何 success, failure, 或 always 状态。如果为 always,则状态既不会成功,也没有失败。State 在节点级别应用,而不是在工作流作业模板级别应用。工作流作业标记为成功,除非被取消或遇到错误。
- 如果您删除工作流中的作业或工作流模板,则之前连接到删除的节点会自动连接上游,并保留边缘类型,如下例所示:
您可以有一个聚合的工作流,其中多个作业聚合成一个。在这种情况下,任何作业或所有作业都必须在下一个运行前完成,如下例所示:
- 在本例中,自动化控制器会并行运行前两个作业模板。当它们都按照指定完成并成功时,第三个下游(聚合节点)会触发。
- 应用于工作流作业模板中的工作流节点的清单和问卷调查提示。
-
如果从 API 启动,运行
get命令会显示一个警告列表并突出显示缺少的组件。下图演示了工作流作业模板的基本工作流:
- 可以同时启动多个工作流,并为启动它们的时间设置一个调度。您可以在工作流上设置通知,如作业完成时,类似于作业模板的通知。
- 您可以构建递归工作流,但如果自动化控制器检测到错误,它会在嵌套工作流尝试运行时停止。
- 在子工作流的作业中收集到的工件会被传递给下游节点。
- 清单可以在工作流级别设置,或在启动时提示设置清单。
-
启动后,带有
ask_inventory_on_launch=true的工作流中的所有作业模板都使用工作流级别清单。 - 不提示清单的作业模板会忽略工作流清单,并针对自己的清单运行。
- 如果工作流提示提供清单,调度和其他工作流节点可以提供清单。
-
在工作流聚合场景中,
set_stats数据会以未定义的方式合并,因此您必须设置唯一的键。
9.2. 工作流额外变量 复制链接链接已复制到粘贴板!
工作流使用调查来指定工作流中 playbook 中使用的变量,称为 extra_vars。问卷调查变量与工作流作业模板上定义的 extra_vars 合并,并保存到工作流作业 extra_vars 中。在工作流内生成作业时,工作流作业中的 extra_vars 与作业模板变量合并。
工作流使用与作业模板相同的变量优先级行为(层次结构),但有三个额外变量除外。请参阅作业模板的额外变量部分中的 自动化控制器变量优先级层次结构。三个额外变量包括:
- 工作流作业模板额外变量
- 工作流作业模板问卷调查(defaults)
- 工作流作业启动额外变量
工作流中包含的工作流遵循相同的变量优先级,它们仅在特别提示或定义为调查的一部分时继承变量。
除了工作流 extra_vars 外,作为工作流的一部分运行的作业和工作流还可继承工作流中父作业的工件字典中的变量(也与分支中上游的祖先合并)。它们可由 set_stats Ansible 模块 定义。
如果在 playbook 中使用 set_stats 模块,您可以生成可供下游其他作业使用的结果。
Example
向用户通知用户集成运行是成功还是失败。在本例中,工作流中可以合并两个 playbook,用于操作工件传递:
- invoke_set_stats.yml: 工作流中的第一个 playbook:
---
- hosts: localhost
tasks:
- name: "Artifact integration test results to the web"
local_action: 'shell curl -F "file=@integration_results.txt" https://file.io'
register: result
- name: "Artifact URL of test results to Workflows"
set_stats:
data:
integration_results_url: "{{ (result.stdout|from_json).link }}"
- use_set_stats.yml: second playbook in the workflow:
---
- hosts: localhost
tasks:
- name: "Get test results from the web"
uri:
url: "{{ integration_results_url }}"
return_content: true
register: results
- name: "Output test results"
debug:
msg: "{{ results.content }}"
set_stats 模块处理此工作流,如下所示:
- 集成结果的内容将上传到 web。
-
通过
invoke_set_statsplaybook,调用set_stats将上传的integration_results.txt的 URL 打包到 Ansible 变量integration_results_url。 -
工作流中的第二个 playbook 使用 Ansible 额外变量
integration_results_url。它通过使用 URI 模块调用 Web,以获取上一作业模板作业上传的文件内容。然后,它会输出获取的 文件的内容。
要使工件正常工作,请在 set 的默认设置。
_stats 模块中保留每个_host = False
9.3. 工作流状态 复制链接链接已复制到粘贴板!
工作流可以具有以下状态(无“Failed”状态):
- Waiting
- Running
- Success (finished)
- Cancel
- 错误
- Failed
在工作流方案中,取消作业会取消分支,而取消工作流作业会取消整个工作流。
9.4. 基于角色的访问控制 复制链接链接已复制到粘贴板!
要编辑和删除工作流作业模板,您必须具有管理员角色。要创建工作流作业模板,您必须是机构管理员或系统管理员。但是,您可以运行具有您没有权限的作业模板的工作流作业模板。系统管理员可以创建空白工作流,然后将 admin_role 授予低级用户,之后他们可以委派更多访问权限并构建图形。您必须具有对 作业模板的执行 访问权限,才能将其添加到工作流作业模板中。
您还可以执行其他任务,如复制复制或重新启动工作流,具体取决于向用户授予哪些权限。在重新启动或制作副本前,您必须对工作流中使用的所有资源(如作业模板)具有权限。
如需更多信息,请参阅使用基于角色的访问控制管理访问权限。
有关执行上述任务的更多信息,请参阅 工作流作业模板。
第 10 章 调度 复制链接链接已复制到粘贴板!
在导航面板中,点 → 来访问您配置的调度。调度列表可以根据每个列中的任何属性使用方向箭头进行排序。您还可以按名称、日期或调度运行的月份名称进行搜索。
使用 On 或 Off 切换停止活跃的调度或激活已停止的调度。
点 Edit
图标编辑调度。
如果您要设置模板、项目或清单源,请单击该资源的 Details 页面中的 Schedules 选项卡,以配置这些资源的调度。在创建调度时,它有以下参数:
- Name
- 点计划名称打开其详情。
- 相关资源
- 描述调度的功能。
- 类型
- 这标识调度是否与源控制更新关联或系统管理的作业调度。
- 下次运行
- 此任务的下一次调度运行。
10.1. 添加新调度 复制链接链接已复制到粘贴板!
您可以从模板、项目或清单源创建调度,并直接在主 Schedules 页面中创建计划。
在 Schedules 页面中创建新调度:
流程
- 在导航面板中,选择 → 。
- 单击 。这将打开 Create schedule 窗口。
选择应用此调度的资源类型。
select from:
作业模板
- 对于 Job template,请从菜单中选择一个 Job template。
工作流作业模板
- 对于 工作流作业模板,请从菜单中选择工作流作业模板。
清单源
- 对于 清单源,请从适当的菜单中选择清单和 清单源。
项目同步
- 对于 项目同步,请从菜单中选择项目。
管理作业模板
- 对于 Management 作业模板,请从菜单中选择 工作流作业模板。
对于 作业模板和 项目同步,请在以下字段中输入相关信息:
- schedule name :输入名称。
- 可选: 描述 :输入描述。
- 开始日期/时间 :输入开始计划的日期和时间。
时区 :选择时区。您输入的开始日期/时间 必须在此时区中。
Schedule Details 在建立调度时显示,供您查看调度设置以及所选本地时区中调度的发生次数列表。
重要作业以 UTC 的形式调度。当夏时制发生时,在一天的特定时间运行的重复作业可能会针对本地时区有相应变化。在保存调度时,系统会将基于本地时区的时间解析为 UTC。要确保正确创建了您的调度,以 UTC 时间设置调度。
- 点击 。此时会显示 Define rules 页面。
10.2. 在资源页面中添加新调度 复制链接链接已复制到粘贴板!
从资源页面创建新调度:
流程
- 单击您要配置的资源的 Schedules 选项卡。这可以是模板、项目或清单源。
- 单击 。这将打开 Create schedule 窗口。
在以下字段中输入相关信息:
- schedule name :输入名称。
- 可选: 描述 :输入描述。
- 开始日期/时间 :输入开始计划的日期和时间。
时区 :选择时区。您输入的开始日期/时间 必须在此时区中。
Schedule Details 在建立调度时显示,供您查看调度设置以及所选本地时区中调度的发生次数列表。
重要作业以 UTC 的形式调度。当夏时制发生时,在一天的特定时间运行的重复作业可能会针对本地时区有相应变化。在保存调度时,系统会将基于本地时区的时间解析为 UTC。要确保正确创建了您的调度,以 UTC 时间设置调度。
- 点击 。此时会显示 Define rules 页面。
10.2.1. 为调度定义规则 复制链接链接已复制到粘贴板!
流程
输入以下信息:
- 频率 :输入调度运行的频率。
- interval :选择规则重复的时间间隔。
- 周开始 :选择您想要开始的星期几。
- 小时: 使用此字段在调度应运行的小时内声明分钟。
- 几小时时间 :使用此字段声明调度应运行的几小时时间。
- 周的天数 :选择运行时间表的星期几。
- 月份的天数 : 选择要运行计划的一年的月
- 年周: 使用此字段声明计划应运行的年周的数周。
- 年 月的月 :使用此字段声明时间表应运行的月的普通天数。
- 年的天数 :使用此字段声明计划应运行的一年的普通天数。
- occurrences: 使用此字段根据规则部分中的表单字段过滤索引规则,具体取决于声明的规则。
schedule end type: 使用此字段在调度设置为 end 时选择。
如需更多信息,请参阅
iCalendar 文档中的到 iCalendar RFC的链接。
- 点 。此时会显示 Schedule Rules 摘要页面。
- 点 添加附加规则。
点击 。
此时会显示 Schedule Exceptions 页面。
10.2.2. 为调度设置例外 复制链接链接已复制到粘贴板!
流程
在 Schedule Exceptions 页面上,单击 。
使用与调度规则相同的格式来创建调度异常。
- 点 以保存并查看计划和例外。
第 11 章 项目 复制链接链接已复制到粘贴板!
项目是在自动化控制器中表示的 Ansible playbook 的逻辑集合。您可以以不同的方式管理 playbook 和 playbook 目录:
- 将它们手动放置到自动化控制器服务器的 Project Base 路径下。
- 通过将 playbook 放置到自动化控制器支持的源代码管理(SCM)系统中。这包括 Git、Subversion、Mercurial 和 Red Hat Insights。
有关创建 Red Hat Insights 项目的更多信息,请参阅为 Red Hat Ansible Automation Platform 修复设置 Red Hat Insights。
项目基本路径为 /var/lib/awx/projects。但是,这可以被系统管理员进行修改。它在 /etc/tower/conf.d/custom.py 中配置。
编辑此文件时要小心,因为不正确的设置可以禁用您的安装。
Projects 页面中显示当前可用的项目列表。
提供了一个 Demo Project,您可以先使用它。
对于列出的每个项目,您可以使用每个项目旁边的图标获取最新的 SCM 修订
,编辑
项目或重复
项目属性。
在相关作业运行时,可以更新项目。
如果您有大型项目(大约 10 GB),/tmp 上的磁盘空间可能会出现问题。
status 表示项目的状态,可以是以下之一(注意您也可以根据特定状态类型过滤您的视图):
Pending - 已创建源控制更新,但尚未排队或启动。任何作业(不仅仅是源控制更新)会一直处于待处理状态,直到系统准备好运行为止。可能的原因包括:
- 它有依赖项当前正在运行,因此必须等到它们完成为止。
- 在其配置的位置没有足够的运行容量。
- waiting - 源控制更新处于等待执行的队列中。
- Running - 源控制更新当前正在进行中。
- 成功 - 此项目的最后源控制更新成功。
- Failed - 此项目的最后源控制更新失败。
- Error - 最后的源控制更新作业根本无法运行。
- 已取消 - 项目的最新源控制更新已被取消。
- 永不更新 - 项目是为源控制配置的,但从未更新。
- OK - 项目没有配置为源控制,且正确就位。
-
缺少 项目基本路径的
/var/lib/awx/projects中没有。这适用于手动或源控制受管项目。
凭证类型 Manual 的项目无法更新或调度基于源控制的操作,而无需重新配置为 SCM 类型凭证。
11.1. 添加新项目 复制链接链接已复制到粘贴板!
您可以在自动化控制器中创建一个名为 projects 的 playbook 的逻辑集合。
流程
- 在导航面板中,选择 → 。
- 在 Projects 页面上,单击 以启动 Create Project 窗口。
在以下必填字段中输入相关信息:
- Name (必需)
- 可选: 描述
- Organization (必需):项目必须至少有一个机构。现在选择一个机构来创建项目。创建项目时,您可以添加额外的机构。
- 可选: 执行环境 :输入执行环境的名称,或从现有环境列表中搜索以运行此项目。如需更多信息,请参阅 创建和使用执行环境。
- 源控制类型 (必需):从菜单中选择与此项目关联的 SCM 类型。以下部分中的选项会根据所选的类型提供。如需更多信息,请参阅 手动管理 playbook 或使用 源控制管理 playbook。
- 可选: 内容签名验证凭证 :使用此字段启用内容验证。指定用于在项目同步期间验证内容签名的 GPG 密钥。如果内容已被篡改,则该作业将不会运行。如需更多信息,请参阅 项目签名和验证。
- 单击 。
其他资源
以下描述了项目源的方式:
11.1.1. 手动管理 playbook 复制链接链接已复制到粘贴板!
虽然通常推荐与源代码管理(SCM)系统集成来实现版本控制和协作开发,但可能存在需要直接管理 playbook 文件的实例。这种方法涉及在本地文件系统上创建和整理 playbook 目录和文件,确保正确执行所有权和权限。
流程
-
在 Project Base Path 下创建一个或多个目录来存储 playbook,例如
/var/lib/awx/projects/。 - 创建 playbook 文件或将其复制到 playbook 目录中。
- 确保 playbook 目录和文件属于运行该服务的同一 UNIX 用户和组。
- 确保权限适合 playbook 目录和文件。
故障排除
如果您还没有将任何 Ansible Playbook 目录添加到基本项目路径,则会显示错误消息。选择以下选项之一排除这个错误:
- 创建适当的 playbook 目录,并从您的 SCM 中签出 playbook。
- 将 playbook 复制到适当的 playbook 目录中。
11.1.2. 使用源控制管理 playbook 复制链接链接已复制到粘贴板!
在使用源控制管理 playbook 时选择以下选项之一:
11.1.2.1. SCM 类型 - 配置 playbook 以使用 Git 和 Subversion 复制链接链接已复制到粘贴板!
配置您的项目,以从 Git 和 Subversion 等源代码管理(SCM)系统同步 Ansible playbook。与 SCM 集成是管理 playbook 的最佳实践,因为它为您的自动化代码提供版本控制、协作功能和集中存储库。通过按照以下步骤,您可以确保您的环境始终直接从您选择的 SCM 中使用最新版本的 playbook。
流程
- 在导航面板中,选择 → 。
- 点您要使用的项目名称。
- 在项目 Details 选项卡中,单击 。
- 从 Source control type 菜单中选择适当的选项(Git 或 Subversion)。
在以下字段中输入相关信息:
- 源控制 URL - 请参阅工具提示 中的示例。
-
可选: Source control branch/tag/commit :从源控制(Git 或 Subversion)输入 SCM 分支、标签、提交散列、任意 refs 或修订号(如果适用)。除非在下一字段中还提供了自定义 refspec,否则某些提交哈希和引用可能不可用。如果留空,则默认为
HEAD,这是此项目最后一次签出的 Branch、Tag 或 Commit。 - 源控制 refspec - 此字段特定于 git 源控制的选项,只有熟悉和熟悉的高级用户才应指定要从远程存储库下载哪些引用。如需更多信息,请参阅 作业分支覆盖。
- 源控制凭证 - 如果需要身份验证,请选择适当的源控制凭证。
可选: Options - 选择启动行为(如果适用):
- 在 进行更新前清除任何本地修改。
- 删除 - 在进行更新前删除整个本地存储库。根据存储库的大小,这可能会显著增加完成更新所需的时间。
-
跟踪子模块 - 跟踪最新的提交。工具提示
中提供了更多信息。
- 更新启动时的修订版本,将项目的修订更新至远程源控制中的当前修订版本,并缓存 Ansible Galaxy 支持或 集合支持 中的 roles 目录。自动化控制器可确保本地修订版本匹配,并且角色和集合与最近更新保持同步。另外,为了避免在生成作业的速度超过项目可以同步的速度,为了避免作业溢出,请选择此选项可让您将缓存超时配置为缓存之前的项目同步。
- Allow branch override - 启用作业模板或使用此项目的清单源,从项目以外的指定 SCM 分支或修订开始。如需更多信息,请参阅 作业分支覆盖。
- 单击 。
11.1.2.2. SCM 类型 - 配置 playbook 以使用 Red Hat Insights 复制链接链接已复制到粘贴板!
配置项目,以直接从 Red Hat Insights 检索 Ansible playbook。通过与 Red Hat Insights 集成,您可以使用它来管理和部署通过分析 Red Hat Enterprise Linux 环境确定的补救 playbook。此集成简化了寻址识别的漏洞并优化系统配置的过程,确保您的自动化与最佳实践和安全建议保持一致。
流程
- 在导航面板中,选择 → 。
- 点您要使用的项目名称。
- 在项目 Details 选项卡中,单击 。
- 从 Source Control Type 菜单中选择 Red Hat Insights。
- 在 Insights credential 字段中,选择用于 Insights 的适当凭证,因为 Red Hat Insights 需要凭证进行身份验证。
可选:在 Options 字段中,选择启动行为(如果适用):
- 在 进行更新前清除任何本地修改。
- 删除 - 在进行更新前删除整个本地存储库。根据存储库的大小,这可能会显著增加完成更新所需的时间。
- 在启动时更新 项目的修订 - 将项目的修订更新至远程源控制中的当前修订版本,并缓存 Ansible Galaxy 支持 或集合中的 roles 目录。???自动化控制器可确保本地修订版本匹配,并且角色和集合是最新的。如果生成作业的速度比项目可以同步的速度快,请选择此选项可让您将缓存超时配置为缓存以前的项目同步,以避免作业溢出。
- 单击 。
11.1.2.3. SCM 类型 - 配置 playbook 以使用远程归档 复制链接链接已复制到粘贴板!
使用远程存档的 playbook 使项目基于生成版本工件或发行版本的构建过程,其中包含该项目在单个存档中的所有要求。
流程
- 在导航面板中,选择 → 。
- 点您要使用的项目名称。
- 在项目 Details 选项卡中,单击 。
- 从 Source control type 菜单中选择 Remote Archive。
在以下字段中输入相关信息:
- 源控制 URL - 需要一个远程归档的 URL,如 GitHub 发行版本或 存储在 Artifactory 中的构建工件,并将其解包到要使用的项目路径中。
- 源控制凭证 - 如果需要身份验证,请选择适当的源控制凭证。
可选:在 Options 字段中,选择启动行为(如果适用):
- 在 进行更新前清除任何本地修改。
- 删除 - 在进行更新前删除整个本地存储库。根据存储库的大小,这可能会显著增加完成更新所需的时间。
- 不建议 在启动时更新修订。此选项将项目的修订更新至远程源控制中的当前修订版本,并缓存 Ansible Galaxy 支持 或 集合 支持的 roles 目录。
不建议使用分支覆盖。此选项可让使用此项目的作业模板通过项目以外的指定 SCM 分支或修订启动。
注意由于此源控制类型旨在支持未更改工件的概念,因此建议禁用 Galaxy 集成(至少针对角色)。
- 单击 。
11.2. 从源控制更新项目 复制链接链接已复制到粘贴板!
定期更新项目可确保您的环境可以访问最新版本的 playbook、角色和集合,反映 Git、Subversion 或其他集成 SCM 存储库所做的任何更改。此过程对于维护 SCM 和 Ansible Automation Platform 之间的同步非常重要。
流程
- 在导航面板中,选择 → 。
点您要更新的项目旁的同步
图标。
注意在添加项目设置以使用源控制后,同步开始从配置的源控制获取项目详情。
- 单击 Status 列下项目的状态,以获取有关更新过程的更多信息。这会进入 Jobs 部分的 Output 选项卡。
11.3. 使用权限 复制链接链接已复制到粘贴板!
分配给项目的权限集(基于角色的访问控制),可提供读取、更改和管理项目、清单、作业模板及其他元素的能力。
要访问项目权限,请选择 Projects 页面的 User Access 或 Team Access 选项卡。此屏幕显示目前具有此项目权限的用户列表。
您可以根据 用户名、名字或 Last Name 进行排序和搜索此列表。
11.3.1. 添加项目权限 复制链接链接已复制到粘贴板!
管理用户和团队需要访问项目的权限。
流程
- 在导航面板中,选择 → 。
- 选择您要更新的项目,然后点 User Access 或 Team Access 选项卡。
- 点 。
- 选择要添加的用户或团队,然后点 。
- 点名称旁边的复选框从列表中选择一个或多个用户或团队,将它们添加为成员。
- 点击 。
- 选择您希望所选用户或团队具有的角色。不同的资源有不同的可用选项。
- 点 将角色应用到所选用户或团队,并将它们添加为成员。此时会显示为每个用户和团队分配的更新角色。
11.3.2. 从项目中删除权限 复制链接链接已复制到粘贴板!
删除特定用户的角色。
流程
- 在导航面板中,选择 → 。
- 选择您要更新的项目,然后点 User Access 或 Team Access 选项卡。
-
点 Roles 列中用户角色旁边的
图标。
- 在确认窗口中点击 确认解除关联。
11.4. Ansible Galaxy 支持 复制链接链接已复制到粘贴板!
在项目更新结束时,自动化控制器会在 roles 目录中搜索 requirements.yml 文件,位于 < project-top-level-directory>/roles/requirements.yml。
如果找到这个文件,以下命令会自动运行:
ansible-galaxy role install -r roles/requirements.yml -p <project-specific cache location>/requirements_roles -vvv
此文件允许您引用 Ansible Galaxy 角色或其他可以与您自己的项目一起签出的其他存储库中的角色。增加 Ansible Galaxy 访问后,无需创建 git 子模块来实现此结果。假设 SCM 项目以及角色或集合是从私有作业环境中拉取并执行的,默认为创建特定于 /tmp 中的项目的 <private job directory >。
缓存目录是全局项目文件夹中的一个子目录。您可以将内容从缓存位置复制到 < job private directory>/requirements_roles。
默认情况下,自动化控制器有一个系统范围的设置,可让您从 SCM 项目的 roles/requirements.yml 文件中动态下载角色。您可以通过取消选中 Enable Role Download 复选框,在导航面板 → → 中关闭此设置。
每当项目同步运行时,自动化控制器会决定项目源以及来自 Galaxy 或 Collections 的任何角色是否与项目不同步。项目更新将下载更新中的角色。
如果作业需要获取上游角色的更改,更新项目可确保发生这种情况。对角色的更改意味着新提交已推送到 provision-role 源控制。
要使此更改在作业中生效,您不必将新提交推送到 playbook 存储库。您必须更新项目,将角色下载到本地缓存中。
例如,假设您在源控制中有两个 git 存储库。第一个是 playbook,自动化控制器中的项目指向此 URL。第二个是 provision-role,它由 playbook git 存储库中的 roles/requirements.yml 文件引用。
每次作业运行前,作业都会下载最新的角色。由于性能的原因,角色和集合会在本地缓存。您必须在项目 Options 中 在启动时选择 Update revision,以确保在每次作业运行前都会重新下载上游角色:
与同步相比,更新会在进程早期发生,因此这会更快地识别错误和详情。
如需有关 requirements.yml 文件语法的更多信息和示例,请参阅 Ansible 文档中的 角色要求部分。
如果有任何需要特别公开的目录,您可以从导航面板 → 屏幕中指定这些目录,以公开给隔离的作业。您还可以更新设置文件中的以下条目:
AWX_ISOLATION_SHOW_PATHS = ['/list/of/', '/paths']
如果您的 playbook 需要使用 AWX_ISOLATION_SHOW_PATHS 中定义的密钥或设置,您必须将 AWX_ISOLATION_SHOW_PATHS 添加到 /var/lib/awx/.ssh。
如果您在设置文件中进行了更改,请确保在保存更改后使用 automation-controller-service restart 命令重启服务。
在 UI 中,您可以在 Jobs Settings 窗口中配置这些设置。
11.5. 集合支持 复制链接链接已复制到粘贴板!
自动化控制器在作业运行中支持特定于项目的 Ansible 集合。如果您在 SCM 中指定集合要求文件在 collections/requirements.yml 处,则自动化控制器会在作业运行前在隐式项目同步中将集合安装到该文件中。
自动化控制器有一个系统范围的设置,它允许从 SCM 项目的 collections/requirements.yml 文件中动态下载集合。您可以通过取消选中 Enable Collection (s) Download 复选框,在导航面板 → → 中关闭此设置。
因为性能的原因,角色和集合会在本地缓存,并在项目 Options 中 在启动时选择 Update revision 以确保:
如果您在执行环境中安装了集合,则项目的 requirements.yml 文件中指定的集合将在运行作业时优先使用。无论集合版本是什么,这个优先级都适用。例如,如果 requirements.yml 中指定的集合比执行环境中的集合旧,则会使用 requirements.yml 中指定的集合。
11.5.1. 在自动化中心中使用集合 复制链接链接已复制到粘贴板!
在自动化控制器可以使用自动化中心作为集合内容的默认源前,您必须在自动化中心 UI 中创建 API 令牌。然后,您可以在自动化控制器中指定此令牌。
使用以下步骤连接到私有自动化中心或自动化中心,唯一区别是您指定的 URL。
流程
- 进入 https://console.redhat.com/ansible/automation-hub/token。
- 单击 。
-
点复制
图标将 API 令牌复制到剪贴板。
通过选择以下选项之一来创建凭证:
要使用自动化中心,请使用复制的令牌创建一个自动化中心凭证,并指向令牌页面的 Server URL 和 SSO URL 字段中显示的 URL:
-
Galaxy 服务器 URL =
https://console.redhat.com/ansible/automation-hub/token
-
Galaxy 服务器 URL =
要使用私有自动化中心,请使用从私有自动化中心的 Repo Management 仪表板中获取的令牌创建一个自动化中心凭证,并指向公布的存储库 URL,如下所示:
您可以使用不同命名空间或集合创建不同的存储库。对于自动化中心中的每个存储库,您必须创建不同的凭证。
将 UI 中的 Ansible CLI URL (格式为
/https://$<hub_url>/api/galaxy/content/<repo)复制到 Create Credential 的 Galaxy Server URL 字段中:有关 UI 具体说明,请参阅 自动化中心中的红帽认证、验证和 Ansible Galaxy 内容。
进入您要从中同步内容的组织,并将新凭据添加到机构中。这可让您将每个机构与要使用的内容的凭证或存储库关联。
Example
您有两个软件仓库:
-
prod:
Namespace 1和Namespace 2,每个命名空间都带有集合A和B,因此namespace1.collectionA:v2.0.0和namespace2.collectionB:v2.0.0 stage:
Namespace 1仅带有集合Aso:namespace1.collectionA:v1.5.0,您具有 Prod 和 Stage 的存储库 URL。您可以为每个凭证创建一个凭证。
然后,您可以为不同的机构分配不同的访问权限级别。例如,您可以创建一个有权访问这两个存储库的
Developers组织,而 Operations 组织仅有权访问 Prod 存储库。有关 UI 具体说明,请参阅在 私有自动化中心中为容器存储库配置用户访问。
-
prod:
- 如果自动化中心有自签名证书,请使用切换按钮在作业设置中启用 Ignore Ansible Galaxy SSL Certificate Verification。 对于使用签名证书的自动化中心,请使用切换来禁用它。这是一个全局设置:
-
创建一个项目,其中源仓库在
collections/requirements.yml文件中的要求文件中指定必要的集合。有关使用的语法信息,请参阅 Ansible 文档中的使用 Ansible 集合。 -
在 Projects 列表视图中,点同步
图标更新此项目。自动化控制器从 collections/requirements.yml文件获取 Galaxy 集合,并根据更改进行报告。使用此项目为任何作业模板安装集合。
如果需要从 Galaxy 或 Collections 进行更新,则会执行一个下载所需角色的同步,这会消耗您的 /tmp 文件中更多的空间。如果您有大型项目(大约 10 GB),/tmp 上的磁盘空间可能会出现问题。
其他资源
如需有关集合的更多信息,请参阅使用 Ansible Collections。
有关红帽如何发布其中一个官方集合(可用于直接自动化安装)的更多信息,请参阅 AWX Ansible Collection 文档。
第 12 章 项目签名和验证 复制链接链接已复制到粘贴板!
项目签名和验证可让您在项目目录中签署文件,然后验证内容是否以任何方式更改,或者文件被意外地从项目中添加或删除。要做到这一点,您需要私钥来签名和匹配的公钥进行验证。
12.1. 关于项目签名 复制链接链接已复制到粘贴板!
对于项目维护人员,支持签署内容的方式是使用 ansible-sign 实用程序,其 使用提供的命令行界面 (CLI)。
CLI 旨在方便地使用加密技术,如 GNU Privacy Guard (GPG)等技术来验证项目中的文件是否未被篡改。目前,GPG 是唯一支持的签名和验证方法。
自动化控制器用于验证签名的内容。在与签名项目关联了匹配的公钥后,自动化控制器会验证包含的文件在签名过程中没有改变,并且文件已被意外添加或删除。如果签名无效或者文件已更改,则项目无法更新,并且使用项目的作业不会启动。项目的验证状态可确保只有安全、未被调整的内容才能在作业中运行。
如果已经为签名和验证配置了存储库,更改项目的常见工作流如下:
- 您已设置了项目存储库,并希望更改文件。
您可以进行更改,并运行以下命令:
ansible-sign project gpg-sign /path/to/project此命令更新校验和清单并进行签名。
- 您可以将更改、更新的校验和清单以及签名提交到存储库。
当您同步项目时,自动化控制器会拉取新的更改,检查与自动化控制器中的项目关联的公钥是否与校验和清单签名的私钥匹配(这可以防止对校验和清单本身的篡改),然后重新计算清单中每个文件的校验和,以确保校验和匹配(从而没有更改文件)。它还确保考虑了所有文件:
文件必须包含在 MANIFEST.in 文件中,或排除在 MANIFEST.in 文件中。有关此文件的更多信息,请参阅 签署项目。如果意外添加或删除文件,验证会失败
12.2. 先决条件 复制链接链接已复制到粘贴板!
RHEL 节点必须正确订阅:
- 必须启用带有 baseos 和 appstream 软件仓库的 RHEL 订阅。
您的 Red Hat Ansible Automation Platform 订阅和正确的频道必须启用:
ansible-automation-platform-2.5-for-rhel-8-x86_64-rpms for RHEL 8 ansible-automation-platform-2.5-for-rhel-9-x86_64-rpms for RHEL 9
您需要一个有效的 GPG 公共或私有密钥对来签名内容。有关更多信息,请参阅 如何创建 GPG 密钥对。
有关 GPG 密钥的更多信息,请参阅 GnuPG 文档。
使用以下命令,验证您是否在默认的 GnuPG 密钥环中具有有效的 GPG 密钥对:
gpg --list-secret-keys如果此命令没有生成输出,或者输出的一行内容,则
trustdb 已创建,那么您在默认密钥环中没有 secret 密钥。在这种情况下,请参阅 如何创建 GPG 密钥对 以了解如何创建新密钥对,然后再继续。如果生成任何其他输出,则代表您有有效的 secret 密钥,并可使用ansible-sign。
12.3. 在自动化控制器中添加 GPG 密钥 复制链接链接已复制到粘贴板!
要将 GPG 密钥用于自动化控制器中的内容签名和验证,请在 CLI 中运行以下命令来添加它:
$ gpg --list-keys
$ gpg --export --armour <key fingerprint> > my_public_key.asc
- 在导航面板中,选择 → → 。
- 点 。
- 为新凭证指定一个有意义的名称,例如:"Infrastructure team public GPG key"。
- 在 Credential type 字段中,选择 GPG Public Key。
-
单击 Browse,再选择公钥文件,如
my_public_key.asc。 点 。
您可以在项目 <
ug_projects_add>中选择此凭证,内容验证会在将来的项目同步上自动进行。
使用项目缓存 SCM 超时来控制自动化控制器重新验证签名内容的频率。当项目配置为在启动时更新(任何配置为使用该项目的作业模板),您可以启用缓存超时设置,这会在 N 秒后进行更新。如果验证运行太频繁,您可以通过在项目的 Options Details 视图中的 Cache Timeout 字段中指定时间来减慢项目更新的频率。
12.4. 安装 ansible-sign CLI 工具 复制链接链接已复制到粘贴板!
使用 ansible-sign 实用程序为用户提供签名和验证项目是否已签名的选项。
流程
运行以下命令来安装
ansible-sign:$ dnf install ansible-sign使用以下命令验证
ansible-sign是否已成功安装:$ ansible-sign --version类似于以下内容的输出表示您已成功安装了
ansible-sign:ansible-sign 0.1
12.5. 为项目签名 复制链接链接已复制到粘贴板!
对项目进行签名涉及 Ansible 项目目录。如需有关项目目录结构的更多信息,请参阅 Ansible 文档中的示例 Ansible 设置。
以下示例项目有一个非常简单的结构:一个清单文件,以及 playbook 目录下的两个小 playbook:
$ cd sample-project/
$ tree -a .
.
├── inventory
└── playbooks
└── get_uptime.yml
└── hello.yml
1 directory, 3 files
所用的命令假定您的工作目录是项目的根目录。ansible-sign 项目 命令将项目根目录用作其最后一个参数。
使用 . 表示当前工作目录。
Ansible-sign 通过对项目中所有安全文件进行校验和(SHA256)来保护内容,将它们编译到校验和清单文件中,然后对该清单文件进行签名。
要签署内容,请在项目根目录中创建 MANIFEST.in 文件,该文件告知 ansible-sign which 文件要保护。
在内部,ansible-sign 使用 Python distlib 库的 distlib.manifest 模块,因此 MANIFEST.in 必须遵循这个库指定的语法。有关 MANIFEST.in 文件指令的说明,请参阅 Python 打包用户指南。
在示例项目中,包括两个指令,生成以下 MANIFEST.in 文件:
include inventory
recursive-include playbooks *.yml
使用这个文件,生成您的校验和清单文件并对其进行签名。这两个步骤都在一个 ansible-sign 命令中实现:
$ ansible-sign project gpg-sign .
成功执行会显示类似如下的输出:
[OK ] GPG signing successful!
[NOTE ] Checksum manifest: ./.ansible-sign/sha256sum.txt
[NOTE ] GPG summary: signature created
该项目现已签名。
请注意,gpg-sign 子命令位于 project 子命令下。
对于签名项目内容,每个命令都以 ansible-sign 项目 开头。
每个 ansible-sign project 命令都使用项目根目录 。 作为其最终参数。
Ansible-sign 使用默认密钥环,并查找可找到的第一个可用 secret 密钥来为您的项目签名。您可以使用-- fingerprint 选项指定要使用的特定 secret 密钥,甚至使用 --gnupg-home 选项指定完全独立的 GPG 主目录。
如果您使用桌面环境,GnuPG 会自动提示您输入 secret 密钥的密码短语。
如果此功能无法正常工作,或者您在没有桌面环境的情况下工作,例如通过 SSH,您可以在 gpg-sign 后面使用 the -p --prompt-passphrase 标志,这会导致 ansible-sign 提示输入密码。
请注意,在项目目录中创建了一个 .ansible-sign 目录。此目录包含校验和清单以及分离的 GPG 签名。
$ tree -a .
.
├── .ansible-sign
│ ├── sha256sum.txt
│ └── sha256sum.txt.sig
├── inventory
├── MANIFEST.in
└── playbooks
├── get_uptime.yml
└── hello.yml
12.6. 验证您的项目 复制链接链接已复制到粘贴板!
要验证已签名的 Ansible 项目没有被更改,您可以使用 ansible-sign 检查签名是否有效,以及文件的校验和是否与应该是什么的校验和匹配。ansible-sign project gpg-verify 命令可用于自动验证这两个条件。
$ ansible-sign project gpg-verify .
[OK ] GPG signature verification succeeded.
[OK ] Checksum validation succeeded.
默认情况下,ansible-sign 使用您的默认 GPG 密钥环来查找匹配的公钥。您可以使用 -keyring 选项指定 密钥环文件,或使用-- gnugpg-home 选项指定不同的 GPG 主页。
如果出于某种原因验证失败,则会显示信息以帮助您调试原因。通过在命令中的 ansible-sign 后立即传递 global-- debug 标志来启用更详细的详细程度。
在项目中使用 GPG 凭据时,内容验证会在将来的项目同步上自动发生。
12.7. 自动签名 复制链接链接已复制到粘贴板!
在具有高度可信 持续集成 (CI)环境(如 OpenShift 或 Jenkins)的环境中,可以自动执行签名过程。
例如,您可以将 GPG 私钥存储在一个选择的 CI 平台上作为一个 secret,并在 CI 环境中将其导入到 GnuPG 中。然后,您可以通过普通的 CI 环境中的签名工作流运行。
使用 GPG 对项目进行签名时,环境变量 ANSIBLE_SIGN_GPG_PASSPHRASE 可以设置为签名密钥的密码短语。这可以在 CI 管道中注入和屏蔽或保护。
根据场景,在签名和验证过程中,ansible-sign 会以不同的退出代码返回。这在 CI 和自动化上下文中也很有用,因为 CI 环境根据故障而不同。例如,它可以发送一些错误的警报,但对其他错误有静默失败。
这些是 ansible-sign 中使用的当前退出代码,可被视为稳定:
| 退出代码 | 大约含义 | 示例情境 |
|---|---|---|
| 0 | 成功 |
|
| 1 | 常规故障 |
|
| 2 | 验证和验证失败 |
|
| 3 | 签名验证失败 |
|
| 4 | 签名进程失败 |
|
第 13 章 拓扑视图 复制链接链接已复制到粘贴板!
如果您已经部署了网格拓扑,请使用 Topology View 查看节点类型、节点健康状况和每个节点的具体详情。
要从自动化控制器 UI 访问拓扑视图,您必须具有 System Administrator 权限。
有关基于虚拟机的安装中的自动化网格的更多信息,请参阅 VM 环境的自动化网格。
有关基于 Operator 的安装中自动化网格的更多信息,请参阅 受管云或 operator 环境的自动化网格。
13.1. 访问拓扑视图 复制链接链接已复制到粘贴板!
使用以下步骤从自动化控制器 UI 访问拓扑视图。
流程
- 在导航面板中,选择 → → 。Topology 视图 会打开并显示每个 receptor 节点如何连接在一起的图形表示。
要调整缩放级别或操作图形视图,请使用控制图标:缩放(
)、缩放(
)、扩展(
),并在工具栏中重置(
)。
您还可以单击并拖动以弹出;并使用鼠标或跟踪板进行滚动以放大。fit-to-screen 功能自动扩展图形以适应屏幕,并将其重新定位到中心。当您希望在整个网格中看到大型网格时,这特别有用。
要将视图重置为默认视图,请点 重置视图 (
)图标。
请参阅 图例 来识别所代表的节点类型。
有关基于虚拟机的安装,请参阅 控制和执行平面。
有关基于 operator 的安装,请参阅 控制和执行平面,以了解有关每种节点类型的更多信息。
图例以颜色显示
节点状态 <node_statuses>,它代表节点的健康状态。Legend 中的 Error 状态包括 Unavailable 状态(如实例列表视图中显示),以及后续自动化控制器版本中遇到的错误条件。图例中还显示以下链接状态:
- 已建立 :这是一个链接状态,代表节点间的对等连接就绪、不可用或禁用。
- 添加 :这是一个链接状态,代表节点间的一个对等连接被选择添加到网格拓扑中。
- 删除 :这是一个链接状态,代表选择从拓扑中删除的节点之间的对等连接。
- 将鼠标悬停在节点和连接器上会突出显示,以显示其即时连接的节点(peer),或者点击节点来检索它的详情,如主机名、节点类型和状态。
单击显示的详细信息中的实例主机名链接,以重定向到其 Details 页面,该页面提供有关该节点的更多信息,特别是有关
Error状态的信息,如下例所示。您可以使用 Details 页面删除实例,根据需要在实例上运行健康检查,或者从实例取消分配作业。默认情况下,可以为每个节点分配作业。但是,您可以禁用它,将节点排除在其中运行的任何作业。
- 其他资源以了解有关创建新节点和扩展网格的更多信息,请参阅使用 实例管理容量。
第 14 章 清单 复制链接链接已复制到粘贴板!
Red Hat Ansible Automation Platform 使用清单文件,根据您以逻辑方式组织的基础架构中的受管节点或主机列表进行工作。您可以使用 Red Hat Ansible Automation Platform 安装程序清单文件指定您的安装场景,并描述 Ansible 的主机部署。通过使用清单文件,Ansible 可以通过一个命令管理大量主机。清单还可以通过减少您指定的命令行选项数目来更有效地使用 Ansible。清单被分成不同的组,这些组包含主机。
组可以通过将主机名输入到自动化控制器或其支持的云供应商来手动提供。
如果您有自定义动态清单脚本,或者尚未在自动化控制器中受到原生支持的云供应商,您也可以将其导入到自动化控制器中。
如需更多信息,请参阅配置 自动化执行中的导入清单文件。
在导航面板中,选择 → → 。Inventories 窗口显示当前可用的清单列表。
清单详情页面 包括:
- Name :清单名称。
Status
状态为:
- 成功 :清单源同步成功完成
- disabled: 没有添加到清单中的清单源
- Error: 当清单源同步完成并出错时
- Type: 标识它是标准清单、智能清单还是构建的清单。
Organization: 清单所属的机构。以下操作可用于所选清单:
-
编辑
:编辑所选清单的属性
-
重复
:制作现有清单的副本作为创建新清单的模板
- 删除清单 :删除所选清单
-
编辑
单击 Inventory 名称,以显示所选清单的 Details 页面,其中显示清单的组和主机。
14.1. 智能清单 复制链接链接已复制到粘贴板!
智能清单是由存储的搜索定义的主机集合,可以像标准清单一样查看,可轻松用于作业运行。机构管理员对其机构中的清单具有 admin 权限,并可创建智能清单。
智能清单由 KIND=smart 标识。
您可以使用与搜索相同的方法定义智能清单。InventorySource 与清单直接关联。
智能清单已弃用,并将在以后的发行版本中删除。考虑移至构建的清单以进行功能增强和替换。
清单 模型具有以下新字段,默认为空白,但会针对智能清单进行相应设置:
-
对于智能清单,
kind设置为smart。 -
host_filter是针对智能清单设置的 ANDkind,设置为smart。
主机模型 具有一个相关的端点 smart_inventories,用于标识主机所关联的所有智能清单的集合。每次作业针对智能清单运行时,都会更新成员资格表。
要更频繁地更新成员资格,您可以将 AWX_REBUILD_SMART_MEMBERSHIP 文件的设置改为 True。(默认为 False)。如果发生以下事件,这个更新成员资格:
- 添加了新主机
- 修改(更新或删除)现有主机
- 添加了新智能清单
- 修改(更新或删除)现有智能清单
您可以在不编辑的情况下查看清单:
- 清单源同步后创建的主机和组的名称。
- 组记录无法编辑或移动。
您不能像普通清单一样从智能清单主机端点(/inventories/N/hosts/)创建主机。智能清单的管理员具有编辑名称、描述、变量以及删除功能等字段的权限,但没有修改 host_filter 的权限,因为这会影响智能清单中包含哪些主机(在另一个清单中具有主要成员资格)。
host_filter 仅适用于智能清单机构中清单内的主机。
要修改 host_filter,您必须是清单机构的机构管理员。机构管理员具有对机构内所有清单的隐式"管理员"访问权限,因此,这不会使他们尚未拥有的任何权限。
智能清单的管理员可以向智能清单授予其他用户(不是您机构的管理员)权限。它们允许角色指示的操作,与其他标准清单一样。但是,这不会为主机(位于不同的清单中)授予任何特殊权限。它不允许主机直接读取权限,或者允许它们查看 /#/hosts/ 下的其他主机,但它们仍然可以查看智能清单主机列表下的主机。
在有些情况下,您可以修改以下内容:
- 使用清单源在清单上手动创建的新主机。
- 清单源同步后创建的组。
- 主机和组上的变量不可更改,即使作为本地系统管理员也是如此。
与智能清单关联的主机会在查看时显示。如果智能清单的结果包含多个具有相同主机名的主机,则只会包含一个匹配的主机作为智能清单的一部分,按主机 ID 排序。
14.1.1. 智能主机过滤器 复制链接链接已复制到粘贴板!
您可以使用搜索过滤器为清单填充主机。此功能使用事实搜索功能。
每当每个作业模板设置了 use_fact_cache=True 时,自动化控制器会在数据库中存储由 Ansible Playbook 生成的事实。新事实与现有事实合并,并按主机合并。这些存储的事实可用于使用 GET 查询参数 host_filter 使用 /api/v2/hosts 端点过滤主机。
例如:
/api/v2/hosts?host_filter=ansible_facts__ansible_processor_vcpus=8
host_filter 参数允许:
- 使用()进行分组
使用布尔值和运算符:
-
__用于引用关系字段中的相关字段 -
ansible_facts 中的
__用于分隔 JSON 密钥路径中的键 - '[] 用于表示路径规格中的 json 数组
-
当值中需要空格时,
""可以在值中使用
-
-
"Classic" Django 查询可以嵌入到
host_filter中
示例 :
/api/v2/hosts/?host_filter=name=localhost
/api/v2/hosts/?host_filter=ansible_facts__ansible_date_time__weekday_number="3"
/api/v2/hosts/?host_filter=ansible_facts__ansible_processor[]="GenuineIntel"
/api/v2/hosts/?host_filter=ansible_facts__ansible_lo__ipv6[]__scope="host"
/api/v2/hosts/?host_filter=ansible_facts__ansible_processor_vcpus=8
/api/v2/hosts/?host_filter=ansible_facts__ansible_env__PYTHONUNBUFFERED="true"
/api/v2/hosts/?host_filter=(name=localhost or name=database) and (groups__name=east or groups__name="west coast") and ansible_facts__an
您可以根据主机名、 组名称 和 Ansible 事实 来搜索 host _filter。
组搜索具有以下格式:
groups.name:groupA
事实搜索具有以下格式:
ansible_facts.ansible_fips:false
您还可以执行由主机名和主机描述组成的智能搜索。
host_filter=name=my_host
如果 host_filter 中的搜索词为字符串类型,要使值成为数字(如 2.66)或 JSON 关键字(如 null、true 或 false)有效,请在值之间添加双引号以防止控制器将其解析为非字符串:
host_filter=ansible_facts__packages__dnsmasq[]__version="2.66"
14.2. 构建的清单 复制链接链接已复制到粘贴板!
您可以从输入清单列表中创建新清单(称为构建的清单)。
构建的清单在其输入清单中具有主机和组副本,允许作业在很多清单中到目标服务器组。可将组和 hostvars 添加到清单内容中,并且可以过滤主机来限制构建的清单的大小。
构建的清单使用 ansible.builtin.constructed 清单 模型。
构建的清单的关键因素是:
- 普通的 Ansible hostvars 命名空间可用
- 它们提供组
构建的清单取 source_vars 和 limit 作为输入,并将其 input_inventories 转换为新清单,随组一起完成。组(现有或构建)可以在 limit 字段中引用,以减少生成的主机数量。
您可以根据以下主机属性构建组:
- RHEL 主版本或次版本
- Windows 主机
- 在特定区域中标记的基于云的实例
- 其他
后续小节中描述的示例由输入清单的结构进行组织。
14.2.1. 过滤组名称和变量 复制链接链接已复制到粘贴板!
您可以根据组和变量的组合进行过滤。例如,您可以过滤与 group 变量值匹配的主机,同时匹配主机变量值。
执行此过滤器的方法有两种:
-
定义两个组:一个组来匹配 group 变量,另一个组与主机变量值匹配。使用
限制模式返回两个组中的主机。这是推荐的方法。 -
定义一个组。在定义中,包含组和主机变量必须与特定值匹配的条件。使用
限制模式返回新组中的所有主机。
例 14.1. Example
以下清单文件定义了四个主机,并设置组和主机变量。它定义了一个产品组,一个 keeping group,它会将两个主机设置为关闭状态。
目标是创建一个仅返回关闭生产主机的过滤器。
[account_1234]
host1
host2 state=shutdown
[account_4321]
host3
host4 state=shutdown
[account_1234:vars]
account_alias=product_dev
[account_4321:vars]
account_alias=sustaining
此处的目标是仅返回与 product_dev 相等的 account_alias 变量所存在的主机。这种方法有两种,它们都以 YAML 格式显示。建议第一个建议。
构造 2 个组,限制为交集 :
source_vars:plugin: constructed strict: true groups: is_shutdown: state | default("running") == "shutdown" product_dev: account_alias == "product_dev"限制:is_shutdown:&product_dev这个构建的清单输入会为这两个类别创建一个组,
并使用限制(主机模式)来仅返回位于这两个组的交集中的主机,如 Patterns:以 主机和组为目标。当变量为 或 未定义(取决于主机)时,您可以指定一个默认值。例如,如果您知道未定义值,请使用
| default ("running")。这有助于进行调试,如 调试提示 中所述。构造 1 组,限制为组 :
source_vars:plugin: constructed strict: true groups: shutdown_in_product_dev: state | default("running") == "shutdown" and account_alias == "product_dev"限制:shutdown_in_product_dev此输入会创建一个组,它只包含匹配这两个条件的主机。然后,限制本身只是组名称,返回 host2。与之前的方法相同。
14.2.2. 调试提示 复制链接链接已复制到粘贴板!
务必要将 strict 参数设置为 true,以便您可以调试模板的问题。如果模板无法呈现,则会在该构建的清单关联的清单更新中发生错误。
遇到错误时,会增加详细程度来获取更多详细信息。
提供默认值,如 | default ("running") 是 Ansible 中的 Jinja2 模板的通用使用。设置 strict: true 时,这可避免模板的错误。
您还可以设置 strict: false,因此启用模板生成错误,这会导致主机没有包含在该组中。但是,如果模板继续复杂性,则在以后无法调试问题。
如果没有生成预期的清单内容,您可能仍必须调试模板的预期功能。例如,如果 组 组有一个复杂的过滤器(如 shutdown_in_product_dev),但没有包含因构建的清单中的任何主机,则使用 compose 参数来帮助调试。
例 14.2. Example
source_vars:
plugin: constructed
strict: true
groups:
shutdown_in_product_dev: state | default("running") == "shutdown" and account_alias == "product_dev"
compose:
resolved_state: state | default("running")
is_in_product_dev: account_alias == "product_dev"
limit: ``
使用空白 限制 运行会返回所有主机。您可以使用此选项检查特定主机上的特定变量,从而深入了解 组中 的问题。
14.2.3. 嵌套组 复制链接链接已复制到粘贴板!
嵌套组由两个组组成,其中一个是另一个组的子组。在以下示例中,子组在其中有另一个主机,父组定义了一个变量。
由于 Ansible 核心运行方式,父组的变量在命名空间中作为 playbook 正在运行,并可用于过滤。
以下示例清单文件 nested.yml 是 YAML 格式:
all:
children:
groupA:
vars:
filter_var: filter_val
children:
groupB:
hosts:
host1: {}
ungrouped:
hosts:
host2: {}
由于 host1 位于 groupB 中,因此它也位于 groupA 中。
过滤嵌套组名称
使用以下 YAML 格式过滤嵌套组名称:
`source_vars`:
plugin: constructed
`limit`: `groupA`
过滤嵌套组属性
使用以下 YAML 格式过滤组变量,即使主机间接是该组的成员。
请注意,在清单内容中,host2 不应定义变量 filter_var,因为它不在任何组中。由于使用了 strict: true,因此请使用默认值,以便定义没有该变量的主机。使用此选项时,host2 会从表达式返回 false,而不是生成错误。host1 从其组中继承 变量,并且返回。
source_vars:
plugin: constructed
strict: true
groups:
filter_var_is_filter_val: filter_var | default("") == "filter_val"
limit: filter_var_is_filter_val
14.2.4. Ansible 事实 复制链接链接已复制到粘贴板!
要创建具有 Ansible 事实的清单,您必须针对具有设置 gather_facts: true 的清单运行一个 playbook。事实因 system-to-system 而异。以下示例并不能解决所有已知的场景。
14.2.4.1. 过滤环境变量 复制链接链接已复制到粘贴板!
以下示例涉及使用 YAML 格式在环境变量上过滤:
source_vars:
plugin: constructed
strict: true
groups:
hosts_using_xterm: ansible_env.TERM == "xterm"
limit: hosts_using_xterm
14.2.4.2. 根据处理器类型过滤主机 复制链接链接已复制到粘贴板!
以下示例涉及使用 YAML 格式根据处理器类型(Intel)过滤主机:
source_vars:
plugin: constructed
strict: true
groups:
intel_hosts: "GenuineIntel" in ansible_processor
limit: intel_hosts
构建中的主机不会根据您的许可证计算,因为它们引用原始清单主机。此外,原始清单中禁用的主机也不包含在构建的清单中。
使用 ansible-inventory 运行清单更新将创建构建的清单内容。
这始终配置为在作业前更新时启动,但您仍可以选择缓存超时值,以防这用时过长。
在创建构建的清单时,API 会确保它始终关联了一个清单源。所有清单更新都有一个关联的清单源,构建的清单(source_vars 和 limit)所需的字段都已存在于清单源模型中。
14.3. 清单插件 复制链接链接已复制到粘贴板!
清单更新使用动态生成的 YAML 文件,这些文件由其清单插件解析。在自动化控制器 v4.4 中,您可以使用以下清单源的清单源 source_vars 将清单插件配置直接提供给自动化控制器:
为清单源新创建的配置包含默认插件配置值。如果您希望新创建的清单源与旧源的输出匹配,您必须为该源应用一组特定的配置值。为确保向后兼容,自动化控制器对每个源都使用"templates"将清单插件的输出强制为旧格式。
有关源及其模板的更多信息,请参阅支持的清单插件模板。
包含插件的 source_vars : foo.bar.baz 作为顶层键会被在运行时基于 InventorySource 源的完全限定清单插件名称替代。例如,如果您为 InventorySource 选择 ec2,则在运行时插件被设置为 amazon.aws.aws_ec2。
14.4. 添加新清单 复制链接链接已复制到粘贴板!
添加新清单涉及以下组件:
使用以下步骤创建清单:
流程
- 在导航面板中,选择 → → 。Inventories 窗口显示当前可用的清单列表。
- 单击 ,再选择要创建的清单类型。
在以下字段中输入相关信息:
- Name :输入适合此清单的名称。
- 可选: 描述 :根据需要输入任意描述。
- Organization: 必需。在可用的机构中进行选择。
仅适用于智能清单:智能主机过滤器:使用搜索过滤器 替换此清单的主机。
例如 "name__icontains=RedHat"。
这些选项基于您选择的机构。
过滤器与标签类似,用于过滤包含这些名称的某些主机。因此,要填充 Smart host filter 字段,请指定具有您想要的主机的标签,而不是主机本身。
过滤是区分大小写的。
实例组 : 选择要运行此清单的实例组或组。
您可以选择多个实例组,并根据您想要运行的顺序对它们进行排序。
- 可选: 标签 :选择描述此清单的标签,以便它们可用于对清单和作业进行分组和过滤。
- 仅适用于构建的清单:输入清单 :指定要包含在此构建的清单中的源清单。 来自输入清单的空组将复制到构建的清单中。
- 可选:(仅适用于构建的清单): 缓存超时(秒) :设置您希望缓存插件数据超时的时间长度。
仅适用于构建的清单:详细控制 Ansible 生成的输出级别,因为 playbook 执行与构建的清单关联的清单源相关的级别。
从中选择详细程度:
- normal
- 详细
- 更详细的
- debug
- 连接调试
WinRM Debug
- 详细日志记录 包括所有命令的输出。
- 详细 详细地提供了比 Verbose 的更多详细信息。
- 调试日志记录 非常详细,包括对某些支持实例有用的 SSH 操作信息。大多数用户都不需要查看调试模式输出。
- 连接调试 允许您在详细模式下运行 SSH,提供有关 SSH 连接进度的调试信息。
WinRM Debug 用于特定于窗口远程管理的详细程度
点
图标 了解有关如何使用构建的清单插件 的信息。
- 只适用于构建的清单: 限制 与构建的清单关联的清单源返回的主机数量。您可以将组名称粘贴到 limit 字段中,以仅包含该组中的主机。如需更多信息,请参阅 Source vars 设置。
- 仅适用于标准清单: 选项 :检查 Prevent Instance Group Fallback 选项,仅启用 Instance Groups 字段中列出的实例组来执行该作业。如果取消选中,则执行池中的所有可用实例将根据控制 作业运行 中描述的层次结构使用。
变量 (构建的清单 的源变量):
- 要应用到此清单中的所有主机 的变量 变量定义和值。使用 JSON 或 YAML 语法输入变量。使用单选按钮在两者之间切换。
-
构建的清单 的源变量会创建组,特别是在数据的
groups键下。它接受 Jinja2 模板语法,呈现每个主机,进行true或false评估,如果结果为true,则包括组中的主机(来自条目的密钥)。这特别有用,因为您可以将组名称粘贴到 limit 字段中,以仅包含该组中的主机。
- 单击 。
后续步骤
保存新清单后,您可以继续配置权限、组、主机、源和查看已完成的作业(如果适用于相关清单类型)。
14.4.1. 为清单添加权限 复制链接链接已复制到粘贴板!
使用以下步骤为清单添加权限:
流程
- 在导航面板中,选择 → → 。
- 选择一个模板,并在 User Access 或 Team Access 选项卡中点 。
- 选择要添加的用户或团队,然后点 。
- 选择名称旁边的复选框,从列表中选择一个或多个用户或团队作为成员。
- 点击 。
- 选择您希望所选用户或团队具有的角色。不同的资源有不同的可用选项。
- 点 将角色应用到所选用户或团队,并将它们添加为成员。此时会显示为每个用户和团队分配的更新角色。
14.4.2. 删除权限 复制链接链接已复制到粘贴板!
从与资源关联的用户中删除特定权限。解除关联角色限制用户对不再需要的功能或数据的访问权限。
流程
-
要删除特定用户的角色,请点其资源旁的
图标。这会启动一个确认窗口,要求您确认解除关联。
14.4.3. 将组添加到清单 复制链接链接已复制到粘贴板!
清单被分成不同的组,这些组可以包含主机和其他组。组仅适用于标准清单,不能直接通过智能清单进行配置。您可以通过用于标准清单的主机关联现有组。
以下操作可用于标准清单:
- 创建新组
- 创建新主机
- 在所选清单上运行命令
- 编辑清单属性
- 查看组和主机的活动流
- 获取构建清单的帮助
清单源不与组关联。生成的组为顶级组,仍然可以具有子组。所有这些生成的组都可以有主机。
流程
- 在导航面板中,选择 → → 。
- 选择您要添加组的清单名称。
- 在 Inventory Details 页面中,选择 Groups 选项卡。
- 点 。
输入相关详情:
- 名称 :必需
- 可选: 描述 :根据需要输入描述。
- 可选: 变量 :输入要应用到此组中的所有主机的定义和值。使用 JSON 或 YAML 语法输入变量。使用单选按钮在两者之间切换。
- 点 。
结果
将组添加到模板后,会显示 Group Details 页面。
14.4.3.1. 在组内添加组 复制链接链接已复制到粘贴板!
将组添加到模板后,会显示 Group Details 页面。
流程
- 选择 Related Groups 选项卡。
- 点 添加您的配置中已存在的组,或 以创建新组。
如果创建新组,请在必填和可选字段中输入相关详情:
- Name (必需):
- 可选: 描述 :根据需要输入描述。
- 可选: 变量 :输入要应用到此组中的所有主机的定义和值。使用 JSON 或 YAML 语法输入变量。使用单选按钮在两者之间切换。
- 点 。
- Create group 窗口关闭,在为之创建了组组关联的组列表中,新创建的组会显示为一个条目。
后续步骤
如果您选择添加现有组,可用组会出现在单独的选择窗口中。当您选择一个组时,它会显示在与组关联的组列表中。
- 要在子组下配置附加组和主机,请点击组列表中的子组名称,然后重复列出的步骤。
14.4.3.2. 查看或编辑清单组 复制链接链接已复制到粘贴板!
groups 列表视图会显示所有清单组,或者您可以将其过滤为仅显示根组。如果清单组不是另一个组的子集,则清单组被视为根组。
您可以删除子组而无需考虑依赖项,因为自动化控制器会查找依赖项,如子组或主机。如果存在,会显示一个确认窗口,供您选择是删除根组及其所有子组和主机,还是提升子组,以便它们及其主机成为顶层清单组。
14.4.4. 将主机添加到清单 复制链接链接已复制到粘贴板!
您可以为清单以及组中的组和组配置主机。
流程
- 在导航面板中,选择 → → 。
- 选择您要添加组的清单名称。
- 在 Inventory Details 页面中,选择 Hosts 选项卡。
- 单击 。
- 选择是添加您的配置中已存在的主机还是创建新主机。
- 如果创建新主机,请将切换设置为 On,以在运行作业时包含此主机。
输入相关详情:
- Name (必需):
- 可选: 描述 :根据需要输入描述。
可选 :输入要应用到此组中的所有主机的定义和值,如下例所示:
{ ansible_user : <username to ssh into> ansible_ssh_pass : <password for the username> ansible_become_pass: <password for becoming the root> }使用 JSON 或 YAML 语法输入变量。使用单选按钮在两者之间切换。
- 单击 。
Create host 窗口关闭,新建的主机显示在为其为其创建的组关联的主机列表中。
如果您选择添加现有主机,可用主机会出现在单独的选择窗口中。
当您选择主机时,它将显示在与组关联的主机列表中。
您可以通过选择主机并点
图标从此屏幕取消关联主机。
注意您也可以在此屏幕中运行临时命令。如需更多信息,请参阅 运行临时命令。
要为主机配置额外的组,请点击主机列表中的主机名称。
这将打开所选主机的 Details 选项卡。
- 选择 Groups 选项卡为主机配置组。
- ,将主机与现有组关联。可用的组会出现在单独的选择窗口中。
选择要与主机关联的组,然后点 。
关联了一个组时,它将显示在与主机关联的组列表中。
- 如果您使用主机运行作业,您可以在主机的 Completed Jobs 选项卡中查看这些作业的详情。
- 点 查看每个作业的详情。
您可以使用 API 中新添加的端点 /api/v2/bulk/host_create 来批量创建主机。此端点接受 JSON,您可以指定目标清单和要添加到清单的主机列表。这些主机在清单中必须是唯一的。添加所有主机,或者返回一个错误,指示操作无法完成的原因。使用 OPTIONS 请求返回相关模式。
14.4.5. 添加源 复制链接链接已复制到粘贴板!
清单源不与组关联。生成的组为顶级组,仍然可以具有子组。所有这些生成的组都可以有主机。在清单中添加源只适用于标准清单。
流程
- 在导航面板中,选择 → → 。
- 选择您要添加源的清单名称。
- 在 Inventory Details 页面中,选择 Sources 选项卡。
- 点 。
输入相关详情:
- 完成所选清单源的 信息后,您可以选择指定其他常用参数,如详细程度、主机过滤器和变量。
- 使用 Verbosity 菜单选择任何清单源更新作业上的输出级别。
- 使用 Host filter 字段指定仅导入自动化控制器中的匹配主机名。
在 Enabled variable 字段中,指定自动化控制器从主机变量的字典中检索 enabled 状态。您可以使用点表示法指定为 'foo.bar' 指定启用的变量,在这种情况下,查找嵌套字典等同于:
from_dict.get ('foo', {}).get ('bar', default)。Enabled value 字段会被忽略,除非您设置了 Enabled variable 字段。如果启用的变量与这个值匹配,则主机会在导入时启用。
如果在 Enabled variable 字段中指定了主机变量字典,您可以提供一个在导入时启用的值。例如,对于以下主机变量中的
enabled_var='status.power_state'和'enabled_value='powered_on',主机被标记为enabled:{ "status": { "power_state": "powered_on", "created": "2020-08-04T18:13:04+00:00", "healthy": true }, "name": "foobar", "ip_address": "192.168.2.1" }如果
power_state是powered_on以外的任何值,则主机在导入到自动化控制器时被禁用。如果没有找到密钥,则主机会被启用。所有云清单源都有以下更新选项:
覆盖 :如果选中,以前存在于外部源上的但现已被删除的任何主机和组都将从自动化控制器清单中删除。未由清单源管理的主机和组将提升到下一个手动创建的组,如果没有手动创建的组来提升它们,则它们将保留在清单的"all"默认组中。
如果没有选中,外部源上没有的本地子主机和组不会受到清单更新过程的影响。
覆盖变量 :如果选中,子组和主机的所有变量都将被删除,并替换为外部源上的变量。
如果没有选中,就会执行合并,将本地变量与外部源上的变量合并。
启动时更新 :每次使用此清单运行作业时,请在执行作业任务前从所选源中刷新清单。
为了避免生成作业的速度比清单可以同步的速度快,请选择此选项可让您为以前的缓存清单同步配置缓存超时。
Update on launch 设置指的是项目和清单的依赖项系统,它不特别排除两个作业同时运行。
如果指定了缓存超时,则创建第二个作业的依赖项,并使用第一个作业生成的项目和清单更新。
然后,两个作业都会等待该项目或清单更新完成,然后继续操作。如果它们是不同的作业模板,则可以同时启动并运行它们(如果系统有能力)。如果要将自动化控制器的置备回调功能与动态清单源搭配使用,则必须为清单组设置在启动时更新。
如果您同步了使用设置了 Update On launch 的项目的清单源,则项目可能会在清单更新开始前自动更新(根据缓存超时规则)。
您可以创建一个作业模板,该模板使用来自模板使用的同一项目中的清单。在这种情况下,项目更新,然后清单更新(如果还没有进行更新,或者缓存超时还没有过期)。
- 检查您的条目和选择。这可让您配置其他详情,如调度和通知。
要配置与此清单源关联的调度,请点 Schedules 选项卡:
- 如果已经设置了调度,请检查、编辑、启用或禁用您的调度首选项。
- 如果还没有设置调度,请参阅 Schedules。
14.4.6. 为源配置通知 复制链接链接已复制到粘贴板!
使用以下步骤为源配置通知:
流程
后续步骤
当您定义源时,它会显示在与清单关联的源列表中。在 Sources 选项卡中,您可以对单个源执行同步,或者一次性同步它们。您还可以执行其他操作,如调度同步过程,以及编辑或删除源。
14.4.7. 清单源 复制链接链接已复制到粘贴板!
选择与可以作为主机输入的清单类型匹配的源:
14.4.7.1. 来自项目的源 复制链接链接已复制到粘贴板!
源于一个项目的清单意味着它使用它所关联的项目中的 SCM 类型。例如,如果项目的源来自 GitHub,则清单将使用相同的源。
使用以下步骤配置项目的清单:
流程
- 在导航面板中,选择 → → 。
- 选择您要源的清单名称,然后点 Sources 选项卡。
- 点 。
- 在 Create source 页面中,从 Source 列表中选择 Sourced from a Project。
在附加字段中输入以下详情:
可选: Source control branch/tag/commit :从源控制(Git 或 Subversion)输入 SCM 分支、标签、提交散列、任意 refs 或修订号(如果适用)。
只有在源项目检查了 Allow branch override 选项时,才会显示此字段。如需更多信息,请参阅 SSCM 类型 - 配置 playbook 以使用 Git 和 Subversion。
除非在下一字段中还提供了自定义 refspec,否则某些提交散列和 refs 可能不可用。如果留空,则默认为 HEAD,这是此项目最后一次签出的 Branch/Tag/Commit。
- 可选: Credential: 指定用于此源的凭证。
-
Project (必需):与默认项目预先填充,否则指定此清单将用作其源的项目。点
图标从项目列表中选择。如果列表太长,请使用搜索来缩小选项范围。
清单文件 (必需):选择与源项目关联的清单文件。如果尚未填充,您可以在菜单中的文本字段中输入它,以过滤额外的文件类型。除了平面文件清单外,您还可以指向目录或清单脚本。
- 可选: 您可以指定详细程度、主机过滤器、启用的变量/值和更新选项,如 添加源 中所述。
- 可选: 要传递给自定义清单脚本,您可以在 Source variables 字段中设置环境变量。您还可以将清单脚本放在源控制中,然后从项目运行它。如需更多信息,请参阅配置 自动化执行中的清单文件 导入 。
故障排除
如果您要从 SCM 执行自定义清单脚本,请确保在上游源控制中为脚本设置执行位(chmod +x)。
如果没有,自动化控制器会在执行时抛出 [Error 13] Permission denied 错误。
14.4.7.2. Amazon Web Services EC2 复制链接链接已复制到粘贴板!
使用以下步骤配置 AWS EC2-sourced 清单。
流程
- 在导航面板中,选择 → → 。
- 选择您要源的清单名称,然后点 Sources 选项卡。
- 点 。
- 在 Create source 页面中,从 Source 列表中选择 Amazon EC2。
Create source 窗口会展开其他字段。输入以下详情:
可选: 凭证 :从现有 AWS 凭证中选择。如需更多信息,请参阅管理用户凭证。
如果自动化控制器在带有分配的 IAM 角色的 EC2 实例上运行,则可以省略凭证,并且改为使用实例元数据中的安全凭证。有关使用 IAM 角色的更多信息,请参阅 Amazon 的 Amazon EC2_documentation_at_Amazon 文档中的 IAM 角色。
- 可选: 您可以指定详细程度、主机过滤器、启用的变量或值以及更新选项,如 添加源 中所述。
-
使用 Source variables 字段覆盖
aws_ec2清单插件使用的变量。使用 JSON 或 YAML 语法输入变量。使用单选按钮在两者之间切换。有关这些变量的更多信息,请参阅 aws 清单插件文档。
故障排除
如果您只使用 include_filters,AWS 插件始终返回所有主机。要正确使用它,或 上的第一个条件必须为过滤器,然后在 include_ 列表中构建 filters OR 条件的其余部分。
14.4.7.3. Google Compute Engine 复制链接链接已复制到粘贴板!
使用以下步骤配置 Google-sourced 清单:
流程
- 在导航面板中,选择 → → 。
- 选择您要源的清单名称,然后点 Sources 选项卡。
- 点 。
- 在 Add new source 页面中,从 Source 列表中选择 Google Compute Engine。
- Create source 窗口会展开所需的 Credential 字段。从现有的 GCE 凭证中选择。如需更多信息,请参阅管理用户凭证。
- 可选: 您可以指定详细程度、主机过滤器、启用的变量或值以及更新选项,如 添加源 中所述。
-
使用 Source Variables 字段覆盖
gcp_compute清单插件使用的变量。使用 JSON 或 YAML 语法输入变量。使用单选按钮在两者之间切换。有关这些变量的更多信息,请参阅 gcp_compute 清单插件文档。
14.4.7.4. Microsoft Azure 资源管理器 复制链接链接已复制到粘贴板!
使用以下步骤配置 Microsoft Azure Resource Manager-sourced 清单。
流程
- 在导航面板中,选择 → → 。
- 选择您要源的清单名称,然后点 Sources 选项卡。
- 点 。
- 在 Create source 页面中,从 Source 列表中选择 Microsoft Azure Resource Manager。
- 在附加字段中输入以下详情:
- 可选: 凭证 :从现有 Azure 凭证中选择。如需更多信息,请参阅管理用户凭证。
- 可选: 您可以指定详细程度、主机过滤器、启用的变量或值以及更新选项,如 添加源 中所述。
-
使用 Source variables 字段覆盖
azure_rm清单插件使用的变量。使用 JSON 或 YAML 语法输入变量。使用单选按钮在两者之间切换。有关这些变量的更多信息,请参阅 azure_rm 清单插件文档。
14.4.7.5. VMware vCenter 复制链接链接已复制到粘贴板!
使用以下步骤配置 VMWare 源的清单。
流程
- 在导航面板中,选择 → → 。
- 选择您要源的清单名称,然后点 Sources 选项卡。
- 点 。
- 在 Create source 页面中,从 Source 列表中选择 VMware vCenter。
Create source 窗口会展开其他字段。输入以下详情:
- 可选: 凭证 :从现有 VMware 凭证中选择。如需更多信息,请参阅管理用户凭证。
- 可选: 您可以指定详细程度、主机过滤器、启用的变量或值以及更新选项,如 添加源 中所述。
-
使用 Source Variables 字段覆盖
vmware_inventory清单插件使用的变量。使用 JSON 或 YAML 语法输入变量。使用单选按钮在两者之间切换。有关这些变量的更多信息,请参阅 vmware_inventory 清单插件。
故障排除
VMware 属性已从小写改为 camel case。自动化控制器为顶级键提供别名,但不再使用嵌套属性中的小写键。有关有效和支持的属性列表,请参阅在 VMware 动态插件中使用虚拟机属性。
14.4.7.6. VMware ESXi 复制链接链接已复制到粘贴板!
使用以下步骤配置 VMWare-ESXI 源的清单。
流程
- 在导航面板中,选择 → → 。
- 选择您要添加源的清单名称,然后点 Sources 选项卡。
- 点 。
- 输入源的 Name (必需)。
- 在 Create source 页面中,从 Source 列表中选择 VMware ESXi。
Create source 窗口会展开其他字段。输入以下详情:
- 凭证 :从现有 VMware 凭证中选择。如需更多信息,请参阅管理用户凭证。
- 使用 Verbosity 菜单选择任何清单源更新作业上的输出级别。
- 可选: 您可以指定主机过滤器、启用的变量或值以及更新选项,如 添加源 中所述。
-
使用 Source Variables 字段覆盖
vmware_inventory清单插件使用的变量。使用 JSON 或 YAML 语法输入变量。使用单选按钮在两者之间切换。
故障排除
VMware 属性已从小写改为 camel case。自动化控制器为顶级键提供别名,但不再使用嵌套属性中的小写键。有关有效和支持的属性列表,请参阅在 VMware 动态插件中使用虚拟机属性。
其他资源
14.4.7.7. Red Hat Satellite 6 复制链接链接已复制到粘贴板!
使用以下步骤配置 Red Hat Satellite 源于 Red Hat Satellite 的清单。
流程
- 在导航面板中,选择 → → 。
- 选择您要源的清单名称,然后点 Sources 选项卡。
- 点 。
- 在 Create source 页面中,从 Source 列表中选择 Red Hat Satellite 6。
Create source 窗口会展开其他字段。输入以下详情:
- 可选: 凭证 :从现有 Satellite 凭证中选择。如需更多信息,请参阅管理用户凭证。
- 可选: 您可以指定详细程度、主机过滤器、启用的变量或值以及更新选项,如 添加源 中所述。
-
使用 Source Variables 字段指定
foreman清单源使用的参数。使用 JSON 或 YAML 语法输入变量。使用单选按钮在两者之间切换。有关这些变量的更多信息,请参阅 Ansible 文档中的 Foreman 清单源。
故障排除
如果您遇到自动化控制器清单没有 Satellite 中的"相关组"的问题,您可能需要在清单源中定义这些变量。如需更多信息,请参阅 Red Hat Satellite 6。
如果您在 同步清单时看到消息"no foreman.id"变量,请查看红帽客户门户网站中的解决方案:https://access.redhat.com/solutions/5826451。https://access.redhat.com/solutions/5826451请确定使用您的客户凭证登录以访问完整文章。
14.4.7.8. Red Hat Insights 复制链接链接已复制到粘贴板!
使用以下步骤配置 Red Hat Insights-sourced 清单。
流程
- 在导航面板中,选择 → → 。
- 选择您要源的清单名称,然后点 Sources 选项卡。
- 点 。
- 在 Create source 页面中,从 Source 列表中选择 Red Hat Insights。
Create source 窗口会展开其他字段。输入以下详情:
- 可选: 凭证 :从现有 Red Hat Insights 凭证中选择。如需更多信息,请参阅管理用户凭证。
- 可选: 您可以指定详细程度、主机过滤器、启用的变量或值以及更新选项,如 添加源 中所述。
-
使用 Source Variables 字段覆盖
insights清单插件使用的变量。使用 JSON 或 YAML 语法输入变量。使用单选按钮在两者之间切换。有关这些变量的更多信息,请参阅 Insights 清单插件。
14.4.7.9. OpenStack 复制链接链接已复制到粘贴板!
使用以下步骤配置 OpenStack 源的清单。
流程
- 在导航面板中,选择 → → 。
- 选择您要源的清单名称,然后点 Sources 选项卡。
- 点 。
- 在 Create source 页面中,从 Source 列表中选择 OpenStack。
Create source 窗口会展开其他字段。输入以下详情:
- 可选: 凭证 :从现有 OpenStack 凭证中选择。如需更多信息,请参阅管理用户凭证。
- 可选: 您可以指定详细程度、主机过滤器、启用的变量或值以及更新选项,如 添加源 中所述。
-
使用 Source Variables 字段覆盖由
openstack清单插件使用的变量。使用 JSON 或 YAML 语法输入变量。使用单选按钮在两者之间切换。有关这些变量的更多信息,请参阅 openstack 清单插件。
14.4.7.10. Red Hat Virtualization 复制链接链接已复制到粘贴板!
使用以下步骤配置 Red Hat virtualization-sourced 清单。
流程
- 在导航面板中,选择 → → 。
- 选择您要源的清单名称,然后点 Sources 选项卡。
- 点 。
- 在 Create source 页面中,从 Source 列表中选择 Red Hat Virtualization。
Create source 窗口会展开其他字段。输入以下详情:
- 可选: 凭证 :从现有 Red Hat Virtualization 凭证中选择。如需更多信息,请参阅管理用户凭证。
- 可选: 您可以指定详细程度、主机过滤器、启用的变量或值以及更新选项,如 添加源 中所述。
-
使用 Source Variables 字段覆盖由
ovirt清单插件使用的变量。使用 JSON 或 YAML 语法输入变量。使用单选按钮在两者之间切换。有关这些变量的更多信息,请参阅 ovirt 清单插件
Red Hat Virtualization (ovirt)清单源请求默认是安全的。要更改此默认设置,请在 source_variables 中将键 ovirt_insecure 设置为 true,这只在 /api/v2/inventory_sources/N/ 端点的清单源的 API 详情中可用。
14.4.7.11. Red Hat Ansible Automation Platform 复制链接链接已复制到粘贴板!
使用以下步骤配置自动化控制器提供的清单。
流程
- 在导航面板中,选择 → → 。
- 选择您要源的清单名称,然后点 Sources 选项卡。
- 点 。
- 在 Create source 页面中,从 Source 列表中选择 Red Hat Ansible Automation Platform。
Create source 窗口会展开其他字段。输入以下详情:
- 可选: 凭证 :从现有 Red Hat Ansible Automation Platform 凭证中选择。如需更多信息,请参阅管理用户凭证。
- 可选: 您可以指定详细程度、主机过滤器、启用的变量或值以及更新选项,如 添加源 中所述。
-
使用 Source Variables 字段覆盖
控制器清单插件使用的变量。使用 JSON 或 YAML 语法输入变量。使用单选按钮在两者之间切换。有关这些变量的更多信息,请参阅 控制器清单插件。这需要您的红帽客户登录。
14.4.7.12. Terraform 状态 复制链接链接已复制到粘贴板!
此清单源使用 cloud.terraform 集合中的 terraform_state 清单插件。该插件解析 terraform 状态文件,并为 AWS EC2、GCE 和 Microsoft Azure 实例添加主机。
流程
- 在导航面板中,选择 → 。
在 Projects 页面上,单击 以启动 Create project 窗口。
- 根据 Adding a new project 中的步骤输入相关详情。
- 在导航面板中选择 → → 。
- 选择您要添加源的清单。
- 在 Sources 选项卡中,单击 。
在 菜单中,选择 Terraform State。
Create source 窗口会展开可选的 Credential 字段。
选择现有的 Terraform 后端配置凭证。如需更多信息,请参阅 Terraform 后端配置。
- 启用 在启动时 覆盖 和更新 的选项。
使用 Source variables 字段覆盖
terraform_state清单插件使用的变量。使用 JSON 或 YAML 语法输入变量。使用单选按钮在两者之间切换。有关这些变量的更多信息,请参阅 terraform_state 文件。Terraform State 清单插件需要
backend_type变量。这应该与 Terraform 后端凭证中配置的远程后端 匹配。以下是 Amazon S3 后端示例:backend_type: s3- 选择具有 Terraform 二进制文件的 Execution 环境。清单插件需要此项,才能运行从 Terraform 状态文件中读取清单数据的 Terraform 命令。
Ansible Automation Platform 清单的 Terraform 供应商由 Terraform 管理,您不能在 Ansible Automation Platform 中编辑它们,因为它可能会引入 Terraform 部署偏移。
14.4.7.13. OpenShift Virtualization 复制链接链接已复制到粘贴板!
此清单源使用能够部署 Red Hat OpenShift Container Platform Virtualization 的集群。要配置 Red Hat OpenShift Container Platform Virtualization,您需要在特定命名空间中部署虚拟机,以及 OpenShift 或 Kubernetes API Bearer Token 凭证。
流程
- 在导航面板中选择 → → 。
- 选择您要添加源的清单。
- 在 Sources 选项卡中,单击 。
在 菜单中,选择 OpenShift Virtualization。
Add new source 窗口会展开所需的 Credential 字段。
从现有的 Kubernetes API Bearer Token 凭证中选择。如需更多信息,请参阅 OpenShift 或 Kubernetes API 持有者令牌凭据类型。在本例中,使用
cmv2.engineering.redhat.com凭证。
- 您可以选择指定 Verbosity, Host Filter, Enabled Variable/Value, 和 Update 选项,如 Adding a source 步骤所述。
使用 Source Variables 字段覆盖
kubernetes清单插件使用的变量。使用 JSON 或 YAML 语法输入变量。使用单选按钮在两者之间切换。有关这些变量的更多信息,请参阅 kubevirt.core.kubevirt 清单源 文档。在以下示例中,connect 变量用于指定对集群中特定命名空间的访问:
--- connections: - namespaces: - hao-test- 单击 ,然后单击 以同步清单。
14.4.7.14. 使用自定义清单插件 复制链接链接已复制到粘贴板!
本节论述了如何使用 servicenow.itsm 集合清单插件在 Ansible Automation Platform 上同步清单。
流程
使用包含以下文件的 Source Control Git 存储库创建并同步项目:
>> requirements.yml --- collections: - name: servicenow.itsm >> inventories/myinventory.now.yml # Create a file following the example below. It must have a configuration file extension ending in either "now.yml" or "now.yaml". plugin: servicenow.itsm.now query: - os: = Linux Red Hat - os: = Windows XP keyed_groups: - key: os prefix: os注意有关使用和配置
servicenow.itsm.now插件的详细指导,请参阅官方 Ansible 文档。-
通过将源 从项目设置为 Sourced, 选择新项目,然后在清单文件部分选择
/(项目根)来创建清单。 - 同步清单中的源。
14.4.7.15. 导出旧的清单脚本 复制链接链接已复制到粘贴板!
尽管删除了自定义清单脚本 API,但脚本仍然保存在数据库中。使用以下命令,以适合您随后检查源控制的格式从数据库中恢复脚本。
使用以下命令:
$ awx-manage export_custom_scripts --filename=my_scripts.tar
Dump of old custom inventory scripts at my_scripts.tar
使用输出:
$ mkdir my_scripts
$ tar -xf my_scripts.tar -C my_scripts
脚本的名称具有以下形式: < pk>_ <name>。这是用于项目文件夹的命名方案。
$ ls my_scripts
10inventory_script_rawhook _19 _30inventory_script_listenhospital _11inventory_script_upperorder _1inventory_script_commercialinternet45 _4inventory_script_whitestring _12inventory_script_eastplant _22inventory_script_pinexchange _5inventory_script_literaturepossession _13inventory_script_governmentculture _23inventory_script_brainluck _6inventory_script_opportunitytelephone _14inventory_script_bottomguess _25inventory_script_buyerleague _7inventory_script_letjury _15inventory_script_wallisland _26inventory_script_lifesport _8random_inventory_script
16inventory_script_wallisland _27inventory_script_exchangesomewhere _9random_inventory_script _17inventory_script_bidstory _28inventory_script_boxchild _18p _29__inventory_script_wearstress
每个文件包含一个脚本。脚本可以是 bash/python/ruby/more,因此不会包含扩展。它们都是直接执行的。执行脚本可转储清单数据。
$ ./my_scripts/11__inventory_script_upperorder {"group\ud801\udcb0\uc20e\u7b0e\ud81c\udfeb\ub12b\ub4d0\u9ac6\ud81e\udf07\u6ff9\uc17b": {"hosts":
["host_\ud821\udcad\u68b6\u7a51\u93b4\u69cf\uc3c2\ud81f\uddbe\ud820\udc92\u3143\u62c7",
"host_\u6057\u3985\u1f60\ufefb\u1b22\ubd2d\ua90c\ud81a\udc69\u1344\u9d15",
"host_\u78a0\ud820\udef3\u925e\u69da\ua549\ud80c\ude7e\ud81e\udc91\ud808\uddd1\u57d6\ud801\ude57",
"host_\ud83a\udc2d\ud7f7\ua18a\u779a\ud800\udf8b\u7903\ud820\udead\u4154\ud808\ude15\u9711",
"host_\u18a1\u9d6f\u08ac\u74c2\u54e2\u740e\u5f02\ud81d\uddee\ufbd6\u4506"], "vars": {"ansible_host": "127.0.0.1", "ansible_connection":
"local"}}}
您可以使用 ansible-inventory 验证功能。这提供了相同的数据,但重新格式化。
$ ansible-inventory -i ./my_scripts/_11__inventory_script_upperorder --list --export
在前面的示例中,您可以 cd 到 my_scripts,然后发出 git init 命令,添加您想要的脚本,将其推送到源控制,然后在用户界面中创建 SCM 清单源。
有关同步或使用自定义清单脚本的更多信息,请参阅配置 自动化执行中的清单文件导入。
14.5. 查看完成的作业 复制链接链接已复制到粘贴板!
如果使用清单来运行作业,您可以在清单的 Jobs 选项卡中查看这些作业的详情,点 Expanded 查看每个作业的详情。
14.6. 运行临时命令 复制链接链接已复制到粘贴板!
临时命令 使用 Ansible 执行快速命令,使用 /usr/bin/ansible,而不是编配语言,即 /usr/bin/ansible-playbook。一个临时命令的示例可能会在您的基础架构中重新引导 50 个机器。您可以编写 playbook 来完成任何操作。Playbook 也可以将许多其他操作组合在一起。
流程
- 在导航面板中,选择 → → 。
- 选择您要运行临时命令的清单名称。
- 从 Hosts 或 Groups 选项卡中选择一个清单源。清单源可以是单个组或主机,也可以是特定的多个主机,也可以是特定的多个组。
- 单击 。这将打开 Run 命令窗口。
输入以下信息:
模块 :选择支持运行命令的模块之一。
Expand 命令
apt_repository
mount
win_service
shell
apt_rpm
ping
win_updates
yum
service
SELinux
win_group
apt
group
setup
win_user
apt_key
user
win_ping
win_user
- 参数 :提供要与您选择的模块搭配使用的参数。
-
限制 :输入用于清单中目标主机的限制。要以清单中的所有主机为目标,请输入
all或*,或者将该字段留空。在点启动按钮之前,这会自动填充上一次视图中选择的任何信息。 - Machine Credential: 选择访问远程主机时要使用的凭据,以运行该命令。选择包含 Ansible 需要登录远程主机所需的用户名和 SSH 密钥或密码的凭据。
- 详细程度 :为标准输出选择详细程度。
- fork :如果需要,请选择执行命令时使用的并行或同步进程数量。
- 显示更改 :选择此项可在标准输出中显示 Ansible 更改。默认值为 OFF。
-
启用权限升级 :如果启用,则使用管理员权限运行 playbook。这等同于将--
become选项传递给ansible命令。 - 额外变量 :提供在运行此清单时要应用的额外命令行变量。使用 JSON 或 YAML 语法输入变量。使用单选按钮在两者之间切换。
- 单击 以选择要对其运行的执行环境。
- 点 以选择要使用的凭证。
- 点 。结果会显示在模块作业窗口的 Output 选项卡中。
第 15 章 支持的清单插件模板 复制链接链接已复制到粘贴板!
升级到 4.x 后,现有配置将迁移到生成向后兼容的清单输出的新格式。使用以下模板来帮助将清单迁移到新风格的清单插件输出。
15.1. Amazon Web Services EC2 复制链接链接已复制到粘贴板!
compose:
ansible_host: public_ip_address
ec2_account_id: owner_id
ec2_ami_launch_index: ami_launch_index | string
ec2_architecture: architecture
ec2_block_devices: dict(block_device_mappings | map(attribute='device_name') | list | zip(block_device_mappings | map(attribute='ebs.volume_id') | list))
ec2_client_token: client_token
ec2_dns_name: public_dns_name
ec2_ebs_optimized: ebs_optimized
ec2_eventsSet: events | default("")
ec2_group_name: placement.group_name
ec2_hypervisor: hypervisor
ec2_id: instance_id
ec2_image_id: image_id
ec2_instance_profile: iam_instance_profile | default("")
ec2_instance_type: instance_type
ec2_ip_address: public_ip_address
ec2_kernel: kernel_id | default("")
ec2_key_name: key_name
ec2_launch_time: launch_time | regex_replace(" ", "T") | regex_replace("(\+)(\d\d):(\d)(\d)$", ".\g<2>\g<3>Z")
ec2_monitored: monitoring.state in ['enabled', 'pending']
ec2_monitoring_state: monitoring.state
ec2_persistent: persistent | default(false)
ec2_placement: placement.availability_zone
ec2_platform: platform | default("")
ec2_private_dns_name: private_dns_name
ec2_private_ip_address: private_ip_address
ec2_public_dns_name: public_dns_name
ec2_ramdisk: ramdisk_id | default("")
ec2_reason: state_transition_reason
ec2_region: placement.region
ec2_requester_id: requester_id | default("")
ec2_root_device_name: root_device_name
ec2_root_device_type: root_device_type
ec2_security_group_ids: security_groups | map(attribute='group_id') | list | join(',')
ec2_security_group_names: security_groups | map(attribute='group_name') | list | join(',')
ec2_sourceDestCheck: source_dest_check | default(false) | lower | string
ec2_spot_instance_request_id: spot_instance_request_id | default("")
ec2_state: state.name
ec2_state_code: state.code
ec2_state_reason: state_reason.message if state_reason is defined else ""
ec2_subnet_id: subnet_id | default("")
ec2_tag_Name: tags.Name
ec2_virtualization_type: virtualization_type
ec2_vpc_id: vpc_id | default("")
filters:
instance-state-name:
- running
groups:
ec2: true
hostnames:
- network-interface.addresses.association.public-ip
- dns-name
- private-dns-name
keyed_groups:
- key: image_id | regex_replace("[^A-Za-z0-9\_]", "_")
parent_group: images
prefix: ''
separator: ''
- key: placement.availability_zone
parent_group: zones
prefix: ''
separator: ''
- key: ec2_account_id | regex_replace("[^A-Za-z0-9\_]", "_")
parent_group: accounts
prefix: ''
separator: ''
- key: ec2_state | regex_replace("[^A-Za-z0-9\_]", "_")
parent_group: instance_states
prefix: instance_state
- key: platform | default("undefined") | regex_replace("[^A-Za-z0-9\_]", "_")
parent_group: platforms
prefix: platform
- key: instance_type | regex_replace("[^A-Za-z0-9\_]", "_")
parent_group: types
prefix: type
- key: key_name | regex_replace("[^A-Za-z0-9\_]", "_")
parent_group: keys
prefix: key
- key: placement.region
parent_group: regions
prefix: ''
separator: ''
- key: security_groups | map(attribute="group_name") | map("regex_replace", "[^A-Za-z0-9\_]", "_") | list
parent_group: security_groups
prefix: security_group
- key: dict(tags.keys() | map("regex_replace", "[^A-Za-z0-9\_]", "_") | list | zip(tags.values()
| map("regex_replace", "[^A-Za-z0-9\_]", "_") | list))
parent_group: tags
prefix: tag
- key: tags.keys() | map("regex_replace", "[^A-Za-z0-9\_]", "_") | list
parent_group: tags
prefix: tag
- key: vpc_id | regex_replace("[^A-Za-z0-9\_]", "_")
parent_group: vpcs
prefix: vpc_id
- key: placement.availability_zone
parent_group: '{{ placement.region }}'
prefix: ''
separator: ''
plugin: amazon.aws.aws_ec2
use_contrib_script_compatible_sanitization: true
15.2. Google Compute Engine 复制链接链接已复制到粘贴板!
auth_kind: serviceaccount
compose:
ansible_ssh_host: networkInterfaces[0].accessConfigs[0].natIP | default(networkInterfaces[0].networkIP)
gce_description: description if description else None
gce_id: id
gce_image: image
gce_machine_type: machineType
gce_metadata: metadata.get("items", []) | items2dict(key_name="key", value_name="value")
gce_name: name
gce_network: networkInterfaces[0].network.name
gce_private_ip: networkInterfaces[0].networkIP
gce_public_ip: networkInterfaces[0].accessConfigs[0].natIP | default(None)
gce_status: status
gce_subnetwork: networkInterfaces[0].subnetwork.name
gce_tags: tags.get("items", [])
gce_zone: zone
hostnames:
- name
- public_ip
- private_ip
keyed_groups:
- key: gce_subnetwork
prefix: network
- key: gce_private_ip
prefix: ''
separator: ''
- key: gce_public_ip
prefix: ''
separator: ''
- key: machineType
prefix: ''
separator: ''
- key: zone
prefix: ''
separator: ''
- key: gce_tags
prefix: tag
- key: status | lower
prefix: status
- key: image
prefix: ''
separator: ''
plugin: google.cloud.gcp_compute
retrieve_image_info: true
use_contrib_script_compatible_sanitization: true
15.3. Microsoft Azure Resource Manager 复制链接链接已复制到粘贴板!
conditional_groups:
azure: true
default_host_filters: []
fail_on_template_errors: false
hostvar_expressions:
computer_name: name
private_ip: private_ipv4_addresses[0] if private_ipv4_addresses else None
provisioning_state: provisioning_state | title
public_ip: public_ipv4_addresses[0] if public_ipv4_addresses else None
public_ip_id: public_ip_id if public_ip_id is defined else None
public_ip_name: public_ip_name if public_ip_name is defined else None
tags: tags if tags else None
type: resource_type
keyed_groups:
- key: location
prefix: ''
separator: ''
- key: tags.keys() | list if tags else []
prefix: ''
separator: ''
- key: security_group
prefix: ''
separator: ''
- key: resource_group
prefix: ''
separator: ''
- key: os_disk.operating_system_type
prefix: ''
separator: ''
- key: dict(tags.keys() | map("regex_replace", "^(.*)$", "\1_") | list | zip(tags.values() | list)) if tags else []
prefix: ''
separator: ''
plain_host_names: true
plugin: azure.azcollection.azure_rm
use_contrib_script_compatible_sanitization: true
15.4. VMware vCenter 复制链接链接已复制到粘贴板!
compose:
ansible_host: guest.ipAddress
ansible_ssh_host: guest.ipAddress
ansible_uuid: 99999999 | random | to_uuid
availablefield: availableField
configissue: configIssue
configstatus: configStatus
customvalue: customValue
effectiverole: effectiveRole
guestheartbeatstatus: guestHeartbeatStatus
layoutex: layoutEx
overallstatus: overallStatus
parentvapp: parentVApp
recenttask: recentTask
resourcepool: resourcePool
rootsnapshot: rootSnapshot
triggeredalarmstate: triggeredAlarmState
filters:
- runtime.powerState == "poweredOn"
keyed_groups:
- key: config.guestId
prefix: ''
separator: ''
- key: '"templates" if config.template else "guests"'
prefix: ''
separator: ''
plugin: community.vmware.vmware_vm_inventory
properties:
- availableField
- configIssue
- configStatus
- customValue
- datastore
- effectiveRole
- guestHeartbeatStatus
- layout
- layoutEx
- name
- network
- overallStatus
- parentVApp
- permission
- recentTask
- resourcePool
- rootSnapshot
- snapshot
- triggeredAlarmState
- value
- capability
- config
- guest
- runtime
- storage
- summary
strict: false
with_nested_properties: true
15.5. VMWare ESXI 复制链接链接已复制到粘贴板!
compose:
ansible_host: guest.ipAddress
ansible_ssh_host: guest.ipAddress
ansible_uuid: 99999999 | random | to_uuid
availablefield: availableField
configissue: configIssue
configstatus: configStatus
customvalue: customValue
effectiverole: effectiveRole
guestheartbeatstatus: guestHeartbeatStatus
layoutex: layoutEx
overallstatus: overallStatus
parentvapp: parentVApp
recenttask: recentTask
resourcepool: resourcePool
rootsnapshot: rootSnapshot
triggeredalarmstate: triggeredAlarmState
filters:
- runtime.powerState == "poweredOn"
keyed_groups:
- key: config.guestId
prefix: ""
separator: ""
- key: '"templates" if config.template else "guests"'
prefix: ""
separator: ""
plugin: vmware.vmware.vms
properties:
- availableField
- configIssue
- configStatus
- customValue
- datastore
- effectiveRole
- guestHeartbeatStatus
- layout
- layoutEx
- name
- network
- overallStatus
- parentVApp
- permission
- recentTask
- resourcePool
- rootSnapshot
- snapshot
- triggeredAlarmState
- value
- capability
- config
- guest
- runtime
- storage
- summary
strict: false
flatten_nested_properties: true
15.6. Red Hat Satellite 6 复制链接链接已复制到粘贴板!
group_prefix: foreman_
keyed_groups:
- key: foreman['environment_name'] | lower | regex_replace(' ', '') | regex_replace('[^A-Za-z0-9_]', '_') | regex_replace('none', '')
prefix: foreman_environment_
separator: ''
- key: foreman['location_name'] | lower | regex_replace(' ', '') | regex_replace('[^A-Za-z0-9_]', '_')
prefix: foreman_location_
separator: ''
- key: foreman['organization_name'] | lower | regex_replace(' ', '') | regex_replace('[^A-Za-z0-9_]', '_')
prefix: foreman_organization_
separator: ''
- key: foreman['content_facet_attributes']['lifecycle_environment_name'] | lower | regex_replace(' ', '') | regex_replace('[^A-Za-z0-9_]', '_')
prefix: foreman_lifecycle_environment_
separator: ''
- key: foreman['content_facet_attributes']['content_view_name'] | lower | regex_replace(' ', '') | regex_replace('[^A-Za-z0-9_]', '_')
prefix: foreman_content_view_
separator: ''
legacy_hostvars: true
plugin: theforeman.foreman.foreman
validate_certs: false
want_facts: true
want_hostcollections: false
want_params: true
15.7. OpenStack 复制链接链接已复制到粘贴板!
expand_hostvars: true
fail_on_errors: true
inventory_hostname: uuid
plugin: openstack.cloud.openstack
15.8. Red Hat Virtualization 复制链接链接已复制到粘贴板!
compose:
ansible_host: (devices.values() | list)[0][0] if devices else None
keyed_groups:
- key: cluster
prefix: cluster
separator: _
- key: status
prefix: status
separator: _
- key: tags
prefix: tag
separator: _
ovirt_hostname_preference:
- name
- fqdn
ovirt_insecure: false
plugin: ovirt.ovirt.ovirt
15.9. Red Hat Ansible Automation Platform 复制链接链接已复制到粘贴板!
include_metadata: true
inventory_id: <inventory_id or url_quoted_named_url>
plugin: awx.awx.tower
validate_certs: <true or false>
第 16 章 主机 复制链接链接已复制到粘贴板!
主机是由 Ansible Automation Platform 管理的系统,可能包含物理、虚拟、基于云的服务器或其他设备。
通常,主机是操作系统实例。
主机在清单中分组,有时也称为"节点"。
Ansible 使用一个列表或一组列表(称为清单),在您的基础架构中针对多个受管节点或"主机"进行操作。
定义清单后,使用模式来选择您希望 Ansible 针对的主机或组。
16.1. 创建主机 复制链接链接已复制到粘贴板!
创建新主机的步骤。
流程
- 在导航面板中,选择 → → 。
- 单击 。
在 Create Host 页面中输入以下信息:
- 名称 :输入您的主机的名称。
- (可选) 描述 :输入主机的描述。
- Inventory :选择此主机要属于的清单。
- 变量 :输入与主机关联的清单文件变量。
- 点 保存您的更改。
16.2. 查看主机详情 复制链接链接已复制到粘贴板!
查看作业运行的主机详情。
流程
- 在导航面板中,选择 → → 。Hosts 页面显示有关受最新作业运行影响的主机或主机的以下信息。
选择特定主机会显示该主机的 Details 页面,其中包含以下信息:
- 主机的名称。
- 与 该主机关联的清单。选择此清单会显示清单的详细信息。
- 当主机被创建 且由 whom.选择创建者会显示创建者的详细信息。
- 当主机被 最后修改 时。选择创建者会显示创建者的详细信息。
- 与主机关联的 变量.您可以使用 YAML 或 JSON 格式显示变量。
单击 以编辑主机的详细信息。
- 选择 Facts 选项卡,以显示与主机关联的事实。
选择 Groups 选项卡来显示与主机关联的组。
- 单击 ,将组与主机关联。
选择 Jobs 选项卡,以显示主机上运行的作业。
点
图标显示作业详情。
第 17 章 管理实例组 复制链接链接已复制到粘贴板!
实例组可让您在集群环境中对实例进行分组。策略指定实例组的行为方式以及任务的执行方式。以下视图显示基于策略算法的容量级别:
如需更多信息,请参阅:
17.1. 创建实例组 复制链接链接已复制到粘贴板!
使用以下步骤创建新实例组。
流程
- 在导航面板中,选择 → → 。
- 点 ,然后从列表中选择 Create instance group。
在以下字段中输入相关信息:
- 名称 :名称必须是唯一的,且不能命名为 "controller"。
- 策略实例最小值 :在新实例上线时,自动分配给此组的最少实例数量。
策略实例百分比 :使用滑块来选择在新实例上线时自动分配给此组的最小实例百分比。
注意创建新实例组时不需要策略实例字段。如果没有指定值,则 Policy 实例最小值 和 Policy 实例百分比 默认为 0。
- 最大并发作业 :指定可为任何给定作业运行的最大 fork 数量。
最大 fork :指定可为任何给定作业运行的最大并发作业数。
注意Max concurrent jobs 和 Max forks 的默认值 0 表示没有限制。如需更多信息,请参阅 实例组容量限制。
- 如果编辑了现有实例组,或者点击 ,点
后续步骤
当您成功创建实例组时,新创建的实例组的 Details 选项卡可让您查看和编辑您的实例组信息。
您还可以编辑 实例, 并查看与此实例组关联的 作业 :
17.1.1. 将实例关联到实例组 复制链接链接已复制到粘贴板!
流程
- 选择实例组的 Details 页面中的 Instances 选项卡。
- 单击 。
- 单击列表中一个或多个可用实例旁边的复选框,以选择要与实例组关联的实例,然后点
17.1.2. 查看与实例组关联的作业 复制链接链接已复制到粘贴板!
流程
- 选择 Instance Group 窗口中的 Jobs 选项卡。
点击作业旁边的箭头
图标展开视图并显示每个作业的详情。
每个作业都显示以下详情:
- 作业状态
- ID 和名称
- 作业类型
- 它启动和完成的时间
- 谁启动了作业以及与其关联的可用资源,如模板、清单、项目和执行环境
其他资源
第 18 章 实例和容器组 复制链接链接已复制到粘贴板!
自动化控制器允许您通过 Ansible playbook 直接在集群成员或置备了所需服务帐户的 OpenShift 集群命名空间中运行作业。这称为容器组。
您可以在每个 playbook 中根据需要在容器组中运行作业。如需更多信息,请参阅 容器组。
有关执行环境,请参阅 执行环境。
18.1. 实例组 复制链接链接已复制到粘贴板!
实例可以分组到一个或多个实例组中。实例组可以分配给以下一个或多个列出的资源:
- 机构
- 清单
- 作业模板
当与其中一个资源关联的作业执行时,它将分配给与该资源关联的实例组。在执行过程中,与作业模板关联的实例组会在与清单关联的实例组之前被检查。与清单关联的实例组在与机构关联的实例组之前被检查。因此,这三个资源的实例组分配形成层次结构:
Job Template > Inventory > Organization
在使用实例组时请考虑以下几点:
-
您可以在这些组中定义其他组和组实例。这些组必须带有
instance_group_前缀。实例需要位于automationcontroller或execution_nodes组中,与其他instance_group_组一起。在集群设置中,至少有一个实例必须存在于automationcontroller组中,该组在 API 实例组中显示为controlplane。如需更多信息和示例场景,请参阅Automationcontroller的组策略。 您无法修改
controlplane实例组,并尝试这样做会导致任何用户的权限被拒绝。因此,
controlplane的 Instances 选项卡中不提供 Disassociate 选项。-
自动创建
默认API 实例组,其中包含能够运行作业的所有节点。这与任何其他实例组一样,但如果一个特定的实例组没有与特定资源关联,则作业执行始终回退到默认实例组。默认实例组始终存在,您无法删除或重命名它。 -
不要创建名为
instance_group_default的组。 - 请勿将任何实例命名为与组名相同。
18.1.1. Automationcontroller的组策略 复制链接链接已复制到粘贴板!
在定义节点时使用以下条件:
-
automationcontroller组中的节点可以将node_typehostvar 定义为混合(默认)或控制。 -
可以定义要执行(默认)或execution_nodes 组中的节点hop的node_typehostvar。
您可以在清单文件中定义自定义组,将组命名为 instance_group solutions,其中 * 成为 API 中的组名称。您还可以在安装完成后在 API 中创建自定义实例组。
当前的行为需要 instance_groupEscalation 的一个成员是 automationcontroller 或 execution_nodes 组的成员。
例 18.1. 定义实例组
[automationcontroller]
126-addr.tatu.home ansible_host=192.168.111.126 node_type=control
[automationcontroller:vars]
peers=execution_nodes
[execution_nodes]
[instance_group_test]
110-addr.tatu.home ansible_host=192.168.111.110 receptor_listener_port=8928
运行安装程序后,会出现以下错误:
TASK [ansible.automation_platform_installer.check_config_static : Validate mesh topology] ***
fatal: [126-addr.tatu.home -> localhost]: FAILED! => {"msg": "The host '110-addr.tatu.home' is not present in either [automationcontroller] or [execution_nodes]"}
要解决这个问题,请将 110-addr.tatu.home 框移到 execution_node 组中,如下所示:
[automationcontroller]
126-addr.tatu.home ansible_host=192.168.111.126 node_type=control
[automationcontroller:vars]
peers=execution_nodes
[execution_nodes]
110-addr.tatu.home ansible_host=192.168.111.110 receptor_listener_port=8928
[instance_group_test]
110-addr.tatu.home
结果:
TASK [ansible.automation_platform_installer.check_config_static : Validate mesh topology] ***
ok: [126-addr.tatu.home -> localhost] => {"changed": false, "mesh": {"110-addr.tatu.home": {"node_type": "execution", "peers": [], "receptor_control_filename": "receptor.sock", "receptor_control_service_name": "control", "receptor_listener": true, "receptor_listener_port": 8928, "receptor_listener_protocol": "tcp", "receptor_log_level": "info"}, "126-addr.tatu.home": {"node_type": "control", "peers": ["110-addr.tatu.home"], "receptor_control_filename": "receptor.sock", "receptor_control_service_name": "control", "receptor_listener": false, "receptor_listener_port": 27199, "receptor_listener_protocol": "tcp", "receptor_log_level": "info"}}}
从自动化控制器 4.0 或更早版本升级后,旧的 instance_group_ 成员可能会安装 awx 代码。这会将该节点放置在 automationcontroller 组中。
18.1.2. 从 API 配置实例组 复制链接链接已复制到粘贴板!
您可以作为系统管理员 POST 到 /api/v2/instance_groups 来创建实例组。
创建后,您可以使用以下命令将实例与实例组关联:
HTTP POST /api/v2/instance_groups/x/instances/ {'id': y}`
添加到实例组中的实例会自动重新配置自身,以侦听组的工作队列。如需更多信息,请参阅 实例组策略。
18.1.3. 实例组策略 复制链接链接已复制到粘贴板!
您可以通过定义策略,将自动化控制器实例配置为在其上线时自动加入实例组。这些策略会针对上线的每个新实例进行评估。
实例组策略由一个实例组中的以下三个可选字段控制:
-
policy_instance_percentage:这是 0 到 100 之间的数字。它保证了这个百分比的活动自动化控制器实例添加到此实例组中。随着新实例上线,如果这个组中的实例数量相对于实例的总数量小于给定的百分比,则会添加新实例,直到满足百分比条件为止。 -
policy_instance_minimum: 此策略尝试在实例组中保留至少此数量的实例。如果可用实例的数量低于这个最小值,则所有实例都放置在此实例组中。 -
policy_instance_list:这是此实例组中始终包含的实例名称列表。
自动化控制器用户界面(UI)中的 实例组 列表视图根据实例组策略为每个实例组提供容量级别的概述:
其他资源
如需更多信息,请参阅 管理实例组部分。
18.1.4. 重要策略注意事项 复制链接链接已复制到粘贴板!
请考虑以下策略注意事项:
policy_instance_percentage和policy_instance_minimum设置最小分配。导致分配给组更多实例的规则生效。例如,如果您的
policy_instance_percentage为 50%,policy_instance_minimum为 2,并且您启动 6 个实例,则它们的 3 个会被分配给实例组。如果您将集群中的实例总数减少到 2,则这两个实例都会被分配给实例组以满足
policy_instance_minimum。这可让您对可用资源量设置较低限制。策略不会主动阻止实例与多个实例组关联,但可以通过使最多 100 的百分比来实现。
如果您有 4 个实例组,为每个实例组分配一个百分比值 25,实例会在它们之间分布,且没有重叠。
18.1.5. 手动将实例固定到特定的组中 复制链接链接已复制到粘贴板!
如果您有一个特殊的实例,它只需要分配给特定的实例组,但不想根据"百分比"或"最小"策略自动加入其他组:
流程
-
将实例添加到一个或多个实例组的
policy_instance_list中。 -
将实例的
managed_by_policy属性更新为False。
这可防止实例根据百分比和最小策略自动添加到其他组中。它仅属于您手动为其分配的组:
HTTP PATCH /api/v2/instance_groups/N/
{
"policy_instance_list": ["special-instance"]
}
HTTP PATCH /api/v2/instances/X/
{
"managed_by_policy": False
}
18.1.6. 作业运行时行为 复制链接链接已复制到粘贴板!
当您运行与实例组关联的作业时,请注意以下行为:
- 如果您将集群划分为不同的实例组,则行为与整个集群类似。
- 如果您将两个实例分配给组,则任一实例都可能作为同一组中的任何其他实例接收作业。
- 随着自动化控制器实例上线,它可以有效地扩展系统的工作容量。
- 如果将这些实例放入实例组中,则它们也会扩展该组的容量。
- 如果一个实例正在执行工作,并且它是多个组的成员,则会从它所属的所有组中减少容量。
- 取消置备实例会从分配该实例的集群中删除容量。如需更多信息,请参阅 取消置备实例组 部分。
不是所有实例都需要置备相同的容量。
18.1.7. 控制作业运行的位置 复制链接链接已复制到粘贴板!
如果您将实例组与作业模板、清单或机构关联,则从该作业模板运行的作业不符合默认行为。这意味着,如果与这三个资源关联的实例组中的所有实例都没有容量,则作业会一直处于 pending 状态,直到容量可用为止。
决定哪个实例组提交该作业的优先顺序如下:
- 作业模板
- 清单(Inventory)
- 机构(通过项目)
如果您将实例组与作业模板关联,并且所有这些实例组都满负荷,则该作业将提交到清单上指定的实例组,然后提交到机构。在资源可用时,作业必须在这些组中以优先顺序执行。
您仍然可以将全局 默认组 与一个资源关联,如 playbook 中定义的任何自定义实例组。您可以使用它来指定作业模板或清单上的首选实例组,但仍然启用将作业提交到任何实例(如果它们没有容量)。
-
如果您将
group_a与一个作业模板关联,并将default组与其清单关联,您可以在group_a超出容量时启用default组用作回退。 - 另外,也可以不将实例组与一个资源关联,而是选择另一个资源作为回退。例如,不将实例组与作业模板关联,并使它回退到清单或机构的实例组。
这显示了以下 possibilites:
- 将实例组与清单关联(忽略将作业模板分配给实例组)可确保针对特定清单运行的任何 playbook 都仅在与其关联的组上运行。当只有这些实例有到受管节点的直接链接时,这很有用。
管理员可以将实例组分配给机构。
这可让管理员对整个基础架构进行分段,并确保每个机构都有能力运行作业,而不会影响到其它机构运行作业的能力。
管理员可以为每个机构分配多个组,类似于以下情况:
- 有三个实例组: 、 B 和 C。有两个机构: Org1 和 Org2。
- 管理员将组 A 分配给 Org1,将 B 组分配给 Org2,然后将组 C 分配给 Org1 和 Org2,作为可能需要的额外容量的溢出。
- 然后,机构管理员可以自由地为他们想要的组分配清单或作业模板,或者让他们从机构中继承默认顺序。
以这种方式安排资源为您提供了灵活性。您还可以只使用一个实例创建实例组,允许您将工作直接指向自动化控制器集群中的特定主机。
18.1.8. 实例组容量限制 复制链接链接已复制到粘贴板!
有外部业务逻辑可以驱动发送到实例组的作业并发性,或者要消耗的 fork 数量上限。
对于传统实例和实例组,您可能希望使两个机构能够在同一底层实例上运行作业,但限制每个机构的并发作业总数。这可以通过为每个机构创建一个实例组并为 max_concurrent_jobs 分配值来实现。
对于自动化控制器组,自动化控制器通常不知道 OpenShift 集群的资源限值。您可以设置命名空间中 pod 数量的限制,或者如果没有自动扩展,则一次只能调度特定 pod 数量的资源。在这种情况下,您可以调整 max_concurrent_jobs 的值。
另一个可用的参数是 max_forks。这为限制实例组或容器组消耗的容量提供了额外的灵活性。如果作业具有各种清单大小,并且正在运行"forks"值,则可以使用它。您可以把机构限制为同时运行最多 10 个作业,但一次不消耗超过 50 个 fork:
max_concurrent_jobs: 10
max_forks: 50
如果运行了 10 个作业,每个作业都使用 5 个 fork,则作业会等待到其中一个完成以在该组上运行(或调度到具有容量的其他组中)。
如果 2 个作业使用 20 个 fork 运行,则每个作业有 20 个 fork,然后有一个 task_impact 为 11 个作业,直到其中一个完成以在该组上运行(或调度到具有容量的其他组中)。
对于容器组,使用 max_forks 值时,如果所有作业都使用相同的资源请求的 pod_spec 提交,无论作业的"forks"值如何。默认 pod_spec 设置请求而不是限制,因此 pod 可以在请求的值上"burst",而无需节流或恢复。通过设置 max_forks 值,您可以帮助防止同时调度具有大量 fork 值的作业的情况,并导致 OpenShift 节点使用比请求的值更多的资源超额订阅。
要在实例组中为并发作业和分叉设置最大值,请参阅创建实例组。
18.1.9. 取消置备实例组 复制链接链接已复制到粘贴板!
重新运行设置 playbook 不会取消置备实例,因为集群目前不会区分您有意关闭的实例与因故障而关闭的实例。相反,请关闭自动化控制器实例上的所有服务,然后从任何其他实例运行取消置备工具。
流程
使用以下命令关闭实例或停止服务:
automation-controller-service stop从另一个实例运行以下取消置备命令将其从控制器集群 registry 中删除:
awx-manage deprovision_instance --hostname=<name used in inventory file>例如:
awx-manage deprovision_instance --hostname=hostB
在自动化控制器中取消置备实例组不会自动取消置备或删除实例组,即使重新置备通常会导致这些实例组没有被使用。它们仍然可以显示在 API 端点和统计监控中。您可以使用以下命令删除这些组:
awx-manage unregister_queue --queuename=<name>
从清单文件中的实例组中删除实例成员资格,并重新运行 setup playbook 并不确保实例没有重新添加到组中。为确保实例没有添加回组中,请通过 API 将其移除,并在清单文件中删除。您还可以停止在清单文件中定义实例组。您可以通过自动化控制器 UI 管理实例组拓扑。有关在 UI 中管理实例组的更多信息,请参阅管理实例组。
如果您在旧版本的自动化控制器(3.8.x 及更早版本)中创建隔离实例组,并希望将它们迁移到执行节点,使其与自动化网格架构兼容,请参阅 Ansible Automation Platform 升级和迁移指南 中的迁移 隔离实例到执行节点。
18.2. 容器组 复制链接链接已复制到粘贴板!
Ansible Automation Platform 支持容器组,它们允许您在自动化控制器中运行作业,无论自动化控制器是作为单机安装、在虚拟环境中还是在容器中安装。
容器组充当虚拟环境中的资源池。
您可以创建实例组以指向 OpenShift 容器。这些是按需置备为 pod 的作业环境,该 pod 仅在 playbook 运行期间存在。这称为临时执行模型,并确保每个作业运行都有一个干净的环境。
在某些情况下,您可能希望将容器组设置为"始终开启",您可以通过创建实例来配置这些容器组。
在自动化控制器 4.0 恢复到默认版本并删除旧的 pod 定义前,容器组从版本升级,清除迁移中的所有自定义 pod 定义。
容器组与执行环境的不同之处在于,执行环境是容器镜像,且不使用虚拟环境。如需更多信息,请参阅 执行环境。
18.2.1. 创建容器组 复制链接链接已复制到粘贴板!
ContainerGroup 是一种 InstanceGroup 类型,它具有一个关联的凭证,供您连接到 OpenShift 集群。
先决条件
- 您可以启动的命名空间。每个集群都有一个"默认"命名空间,但您可以使用特定的命名空间。
- 具有允许在此命名空间中启动和管理 pod 的角色的服务帐户。如需更多信息,请参阅在 OpenShift Container Platform 或 Kubernetes 中创建服务帐户。
-
如果您在私有 registry 中使用执行环境,并在自动化控制器中有一个与其关联的容器 registry 凭证,则服务帐户还需要角色在命名空间中获取、创建和删除 secret。如果您不想为服务帐户授予这些角色,您可以预先创建
ImagePullSecrets,并在ContainerGroup的 pod 规格中指定它们。在这种情况下,执行环境不能关联容器 registry 凭证,或者自动化控制器会尝试为您在命名空间中创建 secret。 - 与该服务帐户关联的令牌。OpenShift 或 Kubernetes 持有者令牌。
- 与集群关联的 CA 证书。
流程
- 在导航面板中,选择 → → 。
- 单击 ,再选择 Create container group。
- 输入新容器组的名称,再选择在将其与容器组关联的凭证之前创建的凭证。
- 单击 。
- 选中 Customize pod spec 复选框,并编辑 Pod spec 覆盖 使其包含您在前面的步骤中使用的命名空间和服务帐户名称。
使用 OpenShift 集群或 Kubernetes 中的服务帐户,通过自动化控制器在容器组中运行作业。创建服务帐户后,其凭据以 OpenShift 或 Kubernetes API Bearer Token 凭据的形式提供给自动化控制器。
流程
要创建服务帐户,请下载并使用以下示例服务帐户示例,
containergroup sa并根据需要修改它来获取凭证:--- apiVersion: v1 kind: ServiceAccount metadata: name: containergroup-service-account namespace: containergroup-namespace --- kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: role-containergroup-service-account namespace: containergroup-namespace rules: - verbs: - get - list - watch - create - update - patch - delete apiGroups: - '' resources: - pods - verbs: - get apiGroups: - '' resources: - pods/log - verbs: - create apiGroups: - '' resources: - pods/attach - verbs: - get - create - delete apiGroups: - '' resources: - secrets --- kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: role-containergroup-service-account-binding namespace: containergroup-namespace subjects: - kind: ServiceAccount name: containergroup-service-account namespace: containergroup-namespace roleRef: kind: Role name: role-containergroup-service-account apiGroup: rbac.authorization.k8s.io应用
containergroup-sa.yml的配置:oc apply -f containergroup-sa.yml通过生成服务帐户令牌来获取 API 令牌:
oc create token containergroup-service-account --duration=$((365*24))h > containergroup-sa.token获取 CA 证书:
oc get secret -n openshift-ingress wildcard-tls -o jsonpath='{.data.ca\.crt}' | base64 -d > containergroup-ca.crt-
使用
containergroup-sa.token和containergroup-ca.crt的内容,为容器组所需的 OpenShift 或 Kubernetes API Bearer Token 提供信息。
要创建容器组,请创建一个 OpenShift 或 Kubernetes API Bearer Token 凭据,以用于您的容器组。如需更多信息,请参阅创建新凭证。
18.2.3. 自定义 pod 规格 复制链接链接已复制到粘贴板!
Ansible Automation Platform 提供了一个简单的默认 pod 规格,但您可以提供一个自定义 YAML 或 JSON 文档来覆盖默认的 pod 规格。此字段使用任何自定义字段,如 ImagePullSecrets,它可以"序列化"为有效的 pod JSON 或 YAML。完整的选项列表可在 OpenShift 文档的 Pods 和 Services 部分找到。
流程
- 在导航面板中,选择 → → 。
- 单击 ,再选择 Create container group。
- 检查 Customize pod spec 的选项。
在 Pod spec override 字段中输入自定义 Kubernetes 或 OpenShift Pod 规格。
- 单击 。
作业启动时的镜像由与作业关联的执行环境决定。如果您将容器 registry 凭证与执行环境关联,则自动化控制器会尝试生成 ImagePullSecret 来拉取镜像。如果您不希望授予服务帐户管理 secret 的权限,您必须预先创建 ImagePullSecret 并在 pod 规格中指定它,并从使用的执行环境省略任何凭证。
如需更多信息,请参阅 Red Hat Container Registry 身份验证 的 Allowing Pods to reference Images from other Secured Registries 部分。
成功创建容器组后,新创建的容器组的 Details 选项卡将保留,供您查看和编辑容器组信息。如果您点 Instance Groups 列表视图中的
图标,则打开这个菜单。
您还可以编辑 实例, 并查看与此实例组关联的 作业。
对容器组和实例组进行相应的标记。
18.2.4. 验证容器组功能 复制链接链接已复制到粘贴板!
验证容器的部署和终止:
流程
通过在 Instance groups 字段中填充容器组的名称来创建 mock 清单,并将容器组与其关联。如需更多信息,请参阅 添加新清单。
使用以下变量在清单中创建
localhost主机:{'ansible_host': '127.0.0.1', 'ansible_connection': 'local'}使用 ping 或 setup 模块对 localhost 启动一个临时作业。即使需要 Machine Credential 字段,但为这个测试选择哪个字段无关紧要:
您可以使用其中一个临时作业在 Jobs 详情视图中看到容器已被成功访问。
如果您有 OpenShift UI,您可以在部署和结束时看到 pod 出现和消失。您还可以使用 CLI 在命名空间中执行 get pod 操作,以实时观察这些相同事件。
18.2.5. 查看容器组作业 复制链接链接已复制到粘贴板!
当您运行与容器组关联的作业时,您可以在 Details 选项卡中看到该作业的详情。您还可以查看其关联的容器组以及启动的执行环境。
流程
- 在导航面板中,选择 → 。
- 点击您要查看容器组作业的作业。
- 点 Details 选项卡。
18.2.6. Kubernetes API 故障状况 复制链接链接已复制到粘贴板!
在运行容器组和 Kubernetes API 时,Kubernetes API 会响应超过资源配额,自动化控制器会将作业保持为待处理状态。其他失败会导致 Error Details 字段的回溯显示失败原因,如下例所示:
Error creating pod: pods is forbidden: User "system: serviceaccount: aap:example" cannot create resource "pods" in API group "" in the namespace "aap"
18.2.7. 容器容量限制 复制链接链接已复制到粘贴板!
容器的容量限制和配额由 Kubernetes API 中的对象定义:
-
要设置一个指定命名空间中的所有 pod 的限制,请使用
LimitRange对象。如需更多信息,请参阅 OpenShift 文档中的 quota 和 Limit Ranges 部分。 - 要直接在由自动化控制器启动的 pod 定义上设置限制,请参阅 OpenShift 文档中的 自定义 pod 规格 和 Compute Resources 部分。
容器组不使用普通节点使用的容量算法。您需要在作业模板级别上设置 fork 数量。如果在自动化控制器中配置 fork,则该设置会随同传递给容器。
第 19 章 使用实例管理容量 复制链接链接已复制到粘贴板!
在 Red Hat Ansible Automation Platform 的 OpenShift 部署中扩展自动化网格,可以使用 UI 的 Instances 资源动态添加或删除集群中的节点,而无需运行安装脚本。
实例充当网格拓扑中的节点。自动化网格允许您扩展自动化的空间。您启动作业的位置可能与 ansible-playbook 运行的位置不同。
要从 UI 管理实例,必须具有 System Administrator 或 System Auditor 权限。
通常,节点有更多处理器内核(CPU)和内存(RAM),可以计划一次在该节点上运行。
如需更多信息,请参阅 自动化控制器容量确定和作业影响。
19.1. 先决条件 复制链接链接已复制到粘贴板!
自动化网格依赖于在 Red Hat Enterprise Linux (RHEL)上运行的跃点和执行节点。您的 Red Hat Ansible Automation Platform 订阅可让您 10 个 Red Hat Enterprise Linux 许可证,该许可证可用于运行 Ansible Automation Platform 的组件。
有关 Red Hat Enterprise Linux 订阅的更多信息,请参阅 Red Hat Enterprise Linux 文档中的 注册系统和管理订阅。
以下步骤准备 RHEL 实例以部署自动化网格。
- 您需要一个 Red Hat Enterprise Linux 操作系统。网格中的每个节点都需要一个静态 IP 地址,或者 Ansible Automation Platform 可访问的 DNS 主机名。
- 在继续操作前,请确保您具有 RHEL 虚拟机的最低要求。如需更多信息,请参阅 系统要求。
在需要通信的远程网络中部署 RHEL 实例。有关创建虚拟机的详情,请参考 Red Hat Enterprise Linux 文档中的 创建虚拟机。请记住,以足够的方式扩展虚拟机的容量,以便您的提议的任务可以在它们上运行。
- RHEL ISO 可以从 access.redhat.com 获取。
- 可以使用来自 console.redhat.com 的镜像构建器构建 RHEL 云镜像。
19.2. 拉取 secret 复制链接链接已复制到粘贴板!
如果您使用默认执行环境(由自动化控制器提供)在远程执行节点上运行,您必须在包含拉取执行环境镜像的自动化控制器中添加 pull secret。
要做到这一点,在自动化控制器命名空间中创建 pull secret,并在 Operator 中配置 ee_pull_credentials_secret 参数,如下所示:
流程
创建 secret:
oc create secret generic ee-pull-secret \ --from-literal=username=<username> \ --from-literal=password=<password> \ --from-literal=url=registry.redhat.io oc edit automationcontrollers <instance name>将
ee_pull_credentials_secret ee-pull-secret添加到规格中:spec.ee_pull_credentials_secret=ee-pull-secret
要从自动化控制器 UI 管理实例,必须具有系统管理员权限。
19.3. 设置用于自动化网格的虚拟机 复制链接链接已复制到粘贴板!
流程
SSH 到每个 RHEL 实例并执行以下步骤。根据您的网络访问和控制,可能需要 SSH 代理或其他访问模型。
使用以下命令:
ssh [username]@[host_ip_address]例如,对于在 Amazon Web Services 上运行的 Ansible Automation Platform 实例。
ssh ec2-user@10.0.0.6- 创建或复制可用于从跃点节点连接到执行节点的 SSH 密钥。这可以是仅用于自动化网格配置的临时密钥,也可以是长期的密钥。后续步骤中使用 SSH 用户和密钥。
使用
baseos和appstream软件仓库启用 RHEL 订阅。Ansible Automation Platform RPM 存储库只能通过 subscription-manager 提供,不适用于 Red Hat Update Infrastructure (RHUI)。如果您试图使用其它 Linux 占用空间,包括带有 RHUI 的 RHEL,这会导致错误。sudo subscription-manager register --auto-attach如果为您的帐户启用了简单内容访问,请使用:
sudo subscription-manager register有关简单内容访问的更多信息,请参阅开始使用简单内容访问。
启用 Ansible Automation Platform 订阅和正确的 Red Hat Ansible Automation Platform 频道:
对于 RHEL 8
# subscription-manager repos --enable ansible-automation-platform-2.5-for-rhel-8-x86_64-rpms对于 RHEL 9
# subscription-manager repos --enable ansible-automation-platform-2.5-for-rhel-9-x86_64-rpms对于 ARM
# subscription-manager repos --enable ansible-automation-platform-2.5-for-rhel-aarch64-rpms确定软件包为最新版本:
sudo dnf upgrade -y在运行下载的捆绑包的机器上安装 ansible-core 软件包:
sudo dnf install -y ansible-core注意运行自动化网格配置捆绑包 playbook 的机器上需要 Ansible 内核。本文档假定在执行节点上发生。但是,如果您从其他机器运行 playbook,则可以省略这一步。您无法直接从控制节点运行,但这目前还不被支持,但将来的支持预期控制节点直接连接到执行节点。
19.4. 管理实例 复制链接链接已复制到粘贴板!
要扩展作业容量,请创建一个可以添加的独立 执行节点,与自动化控制器部署一起运行。这些执行节点不是自动化控制器 Kubernetes 集群的一部分。
控制节点在集群连接中运行,并通过 Receptor 向执行节点提交工作。
这些执行节点在自动化控制器中注册为类型 执行 实例,这意味着它们仅用于运行作业,而不是分配工作或作为控制节点处理 Web 请求。
在创建执行节点时,请确保执行节点上的系统时区与自动化控制器上的 settings.TIME_ZONE (默认为 'UTC')匹配。事实缓存依赖于工件文件的修改时间,这些修改的时间不是对时区感知的。因此,执行节点的时区与自动化控制器的时区设置匹配至关重要。
跃点节点 可以添加到自动化控制器和独立执行节点的 control plane 之间。这些跃点节点不是 Kubernetes 集群的一部分,并在自动化控制器中注册,作为类型跃点( hop )的实例,这意味着它们只会处理不同或更严格的网络中的入站和出站流量。
以下流程演示了如何为主机设置节点类型。
流程
- 在导航面板中,选择 → → 。
在 Instances 列表页面中,单击 。此时会打开 Add Instance 窗口。
实例需要以下属性:
主机名 :(必需)为您的实例输入完全限定域名(公共 DNS)或 IP 地址。此字段等同于基于安装程序部署
的主机名。注意如果实例使用无法从控制集群解析的私有 DNS,DNS 查找路由会失败,并且生成的 SSL 证书无效。改为使用 IP 地址。
- 可选: 描述 :输入实例的描述。
- 实例状态 :此字段是自动填充的,表示它正在安装,且无法修改。
-
监听器端口 :此端口用于 receptor 侦听进入的连接。您可以将端口设置为适合您的配置的端口。此字段等同于 API 中的
listener_port。默认值为 27199,但您可以设置自己的端口值。 实例类型 :只能创建
execution和hop节点。基于 Operator 的部署不支持控制或混合节点。选项:
- 启用实例 :选中此框,使它可用于在执行节点上运行。
- 选中 Managed by policy 复选框,以启用策略来确定如何分配实例。
来自控制节点的对等点 :
如果要配置跃点节点:
- 如果跃点节点需要直接从自动化控制器推送请求,请选中 Peers from Control 复选框。
- 如果跃点节点与另一个跃点节点对等,则确保未 检查来自 Control 的 Peers。
如果要配置执行节点:
- 如果执行节点需要直接从自动化控制器推送请求,请选中 Peers from Control 复选框。
- 如果执行节点与跃点节点对等,则确保未 检查来自 Control 的 Peers。
- 单击 。
要查看更新拓扑的图形表示,请参阅 Topology 视图。
注意从任何可通过 SSH 访问新创建的实例的计算机完成以下步骤。
点 Download Bundle 旁边的
图标下载包含这个新实例的 tar 文件,以及将创建的节点安装到自动化网格所需的文件。
安装捆绑包具有 TLS 证书和密钥、证书颁发机构和正确的 Receptor 配置文件。
receptor-ca.crt work-public-key.pem receptor.key install_receptor.yml inventory.yml group_vars/all.yml requirements.yml-
从您下载的位置中提取下载的
tar.gzInstall Bundle。为确保这些文件位于远程机器上的正确位置,安装捆绑包包含install_receptor.ymlplaybook。 在运行
ansible-playbook命令前,请编辑inventory.yml文件中的以下字段:all: hosts: remote-execution: ansible_host: localhost # change to the mesh node host name ansible_user: <username> # user provided ansible_ssh_private_key_file: ~/.ssh/<id_rsa>-
确保
ansible_host设置为节点的 IP 地址或 DNS。 -
将
ansible_user设置为运行安装的用户名。 -
将
ansible_ssh_private_key_file设置为包含用于连接实例的私钥的文件名。 -
inventory.yml文件的内容充当模板,其中包含在网格拓扑中安装和配置 receptor 节点期间应用的角色的变量。您可以修改一些其他字段,或者在高级场景中完全替换该文件。如需更多信息,请参阅 角色变量。
-
确保
对于使用私有 DNS 的节点,请将以下行添加到
inventory.yml中:ansible_ssh_common_args: <your ssh ProxyCommand setting>这指示
install-receptor.ymlplaybook 使用 proxy 命令通过本地 DNS 节点连接到私有节点。- 配置属性后,单击 。所创建的实例的 Details 页面将打开。
- 保存文件以继续。
运行安装捆绑包的系统来设置远程节点并运行
ansible-playbook需要安装ansible.receptor集合:ansible-galaxy collection install ansible.receptor或者
ansible-galaxy install -r requirements.yml-
从
requirements.yml文件安装 receptor 集合依赖项会持续检索指定的 receptor 版本。另外,它会检索将来可能需要的任何其他集合依赖项。 - 在运行 playbook 的所有节点上安装 receptor 集合,否则会出现错误。
-
从
如果定义了
receptor_listener_port,机器还需要一个可用的开放端口来建立入站 TCP 连接,例如 27199。运行以下命令,为 receptor 通信打开端口 27199 (确保您在防火墙中打开端口 27199):sudo firewall-cmd --permanent --zone=public --add-port=27199/tcp- 在您要更新自动化网格的机器上运行以下 playbook:
ansible-playbook -i inventory.yml install_receptor.yml
+
此 playbook 需要 openssl。您可以运行以下命令来安装它:
openssl -v
如果返回,则会安装版本 OpenSSL。否则,您需要使用以下内容安装 OpenSSL:
sudo dnf install -y openssl
+ 此 playbook 运行后,您的自动化网格会被配置。
可能是有些服务器没有侦听 receptor 端口(默认为 27199)
假设您有一个带有节点 A、B 和 C 的 Control plane
以下是三个控制器节点的对等设置:
Controller 节点 A -→ Controller 节点 B
Controller 节点 A -→ Controller 节点 C
Controller 节点 B -→ Controller 节点 C
您可以通过设置强制监听程序
receptor_listener=True
但是,连接 Controller B -→ A 可能会被拒绝,因为连接已存在。
这意味着没有连接到 Controller A,因为 Controller A 会创建与其他节点的连接,以下命令不会在 Controller A 上返回任何内容:
[root@controller1 ~]# ss -ntlp | grep 27199 [root@controller1 ~]#
RPM 安装程序使用最低特权方法在 control plane 节点之间创建高度连接的对等点,并仅在需要它的那些节点上打开 tcp 侦听器。所有 receptor 连接都是双向的,因此在创建连接后,receptor 可以在两个方向通信。
要从网格中删除实例,请参阅 删除实例。r
19.5. 删除实例 复制链接链接已复制到粘贴板!
在 Instances 页面中,您可以在节点上添加、删除或运行健康检查。
您必须遵循为您创建的任何其他节点安装 RHEL 软件包的步骤。如果将这个额外节点对等到现有的跃点节点,还必须在每个节点上安装 Install Bundle。
使用实例旁边的复选框来选择它以移除它,或者针对它运行健康检查。
- 如果使用 UI 删除节点,则节点为"removed",不显示状态。如果在 UI 中删除前删除了节点的虚拟机,它将显示错误。
- 只有拓扑更改通信模式(即 hop 节点或您添加节点)时,才需要重新安装 Install Bundle。
当禁用按钮时,您没有该特定操作的权限。请联系您的管理员,为您提供所需的访问权限级别。
如果您能够删除实例,您会收到确认提示。
您仍然可以删除实例,即使它处于活动状态且作业正在运行。自动化控制器会在删除前等待此节点上运行的作业完成。
第 20 章 执行环境 复制链接链接已复制到粘贴板!
执行环境是容器镜像,可以纳入系统级别的依赖项和基于集合的内容。每个执行环境都可让您有一个自定义镜像来运行作业,且仅在运行作业时需要什么。
Execution Environments 页面的默认视图使用执行环境名称及其镜像名称折叠(Compact)。选择执行环境名称会展开条目以了解更多信息。
对于列出的每个执行环境,您可以使用
编辑所选执行环境的属性或 AssumeRole 来重复执行环境。它们也可从 Details 页面显示。
20.1. 构建一个执行环境 复制链接链接已复制到粘贴板!
如果您的 Ansible 内容依赖于自定义虚拟环境而不是默认环境,则必须执行额外的步骤。您必须在与主机系统上安装的其他软件一起一起安装软件包,并使其保持同步。
要简化此过程,您可以构建作为 Ansible 控制节点 的容器镜像。https://docs.ansible.com/ansible/latest/network/getting_started/basic_concepts.html#control-node这些容器镜像称为自动化执行环境,您可以使用 ansible-builder 创建。然后,ansible-runner 可以使用这些镜像。
20.1.1. 安装 ansible-builder 复制链接链接已复制到粘贴板!
要构建镜像,您必须安装 Podman 或 Docker,以及 ansible-builder Python 软件包。
--container-runtime 选项必须与您要使用的 Podman 或 Docker 可执行文件对应。
在构建执行环境镜像时,它必须支持部署 Ansible Automation Platform 的架构。
如需更多信息,请参阅 Ansible Builder 的 Quickstart,或 创建和使用执行环境。
20.1.2. 执行环境所需的内容 复制链接链接已复制到粘贴板!
ansible-builder 用于创建执行环境。
执行环境必须包含:
- Ansible
- Ansible Runner
- Ansible Collections
Python 和系统依赖项:
- 集合中的模块或插件
- ansible-base 中的内容
- 自定义用户需要
构建新的执行环境涉及定义,该定义指定要包含在执行环境中的内容,如集合、Python 要求和系统级软件包。定义必须是 .yml 文件
从迁移到执行环境生成的输出中的内容有一些需要的数据,这些数据可以传送到文件或粘贴到此定义文件中。
其他资源
20.1.3. 构建镜像的 YAML 文件示例 复制链接链接已复制到粘贴板!
ansible-builder build 命令将执行环境定义用作输入。它输出构建执行环境镜像所需的构建上下文,然后构建该镜像。镜像可以使用其他构建上下文重新构建,并生成相同的结果。默认情况下,构建器在当前目录中搜索名为 execution-environment.yml 的文件。
以下示例 execution-environment.yml 文件可用作起点:
---
version: 3
dependencies:
galaxy: requirements.yml
requirements.yml 的内容:
---
collections:
- name: kubernetes.core
要使用前面的文件构建执行环境,并运行以下命令:
ansible-builder build
...
STEP 7: COMMIT my-custom-ee
--> 09c930f5f6a
09c930f5f6ac329b7ddb321b144a029dbbfcc83bdfc77103968b7f6cdfc7bea2
Complete! The build context can be found at: context
除了生成随时可用的容器镜像外,构建上下文也会保留。这可以通过您选择的工具(如 docker build 或 podman build )在不同时间或位置进行重建。
其他资源
如需有关 ansible-builder build 命令的更多信息,请参阅 Ansible 的 CLI 用法 文档。
20.1.4. 执行环境挂载选项 复制链接链接已复制到粘贴板!
重建执行环境是添加证书的一种方式,但从主机继承证书提供了一种更方便的解决方案。对于基于虚拟机的安装,自动化控制器会在作业运行时会在执行环境中自动挂载系统信任存储。
您可以在 Paths 中自定义执行环境挂载选项和挂载路径,以公开给 Job Settings 页面的 isolated jobs 字段,其中支持 Podman 风格的卷挂载语法。
其他资源
如需更多信息,请参阅 Podman 文档。
20.1.4.1. 执行环境挂载选项故障排除 复制链接链接已复制到粘贴板!
在某些情况下,由于自定义执行环境,/etc/ssh decisions 文件被添加到执行环境镜像中,可能会出现 SSH 错误。
例如,公开 /etc/ssh/ssh_config.d:/etc/ssh/ssh_config.d:O 路径可让容器被挂载,但所有权权限无法正确映射。
如果您满足这个错误,或者已从旧版本的自动化控制器升级,请使用以下步骤:
流程
-
将挂载卷上的容器所有权更改为
root。 - 在导航面板中,选择 → → 。
- 点 。
使用当前示例,在 Paths 中公开要公开给隔离的 jobs 字段的路径:
[ "/ssh_config:/etc/ssh/ssh_config.d/:0" ]注意:O选项只支持目录。尽可能详细,特别是在指定系统路径时。直接挂载/etc或/usr会影响到故障排除的难度。这会通知 Podman 运行类似以下示例的命令,其中挂载了配置,
ssh命令可以正常工作:podman run -v /ssh_config:/etc/ssh/ssh_config.d/:O ...
要在 OpenShift 或 Kubernetes 容器中公开隔离路径为 HostPath,请使用以下配置:
[
"/mnt2:/mnt2",
"/mnt3",
"/mnt4:/mnt4:0"
]
将容器组的主机路径设置为 On 以启用它。
当 playbook 运行时,生成的 Pod 规格类似以下示例。请注意 volumeMounts 和 volumes 部分的详情。
20.1.4.2. 将执行节点中的目录挂载到执行环境容器中 复制链接链接已复制到粘贴板!
此流程描述了如何配置公开给隔离作业的路径,允许将卷从执行或混合节点挂载到作业容器。
流程
- 在导航面板中,选择 → → 。
编辑 要向隔离的 jobs 字段公开 的路径:
- 输入卷从执行节点或混合节点挂载到容器的路径列表。
- 每行输入一个路径。
支持的格式为
HOST-DIR[:CONTAINER-DIR[:OPTIONS]。允许的路径有z、O、ro和rw。Example
[ "/var/lib/awx/.ssh:/root/.ssh:O" ]对于
rw选项,请正确配置 SELinux 标签。例如,要挂载/foo目录,请完成以下命令:sudo sumkdir /foochmod 777 /foosemanage fcontext -a -t container_file_t "/foo(/.*)?"restorecon -vvFR /foo
awx 用户必须至少允许在这个目录中读取或写入。将权限设置为 777。
其他资源
有关挂载卷的更多信息,请参阅 Podman 文档中的 podman-run (1)部分中的--volume 选项。
20.2. 将执行环境添加到作业模板 复制链接链接已复制到粘贴板!
先决条件
您必须构建执行环境,如构建执行环境 中所述,然后才能使用自动化控制器创建 执行环境。
在构建后,您必须将它推送到存储库(如 quay),然后在 UI 中使用自动化控制器创建执行环境时,您必须指向该存储库在 Ansible Automation Platform 中使用它,例如在作业模板中使用。
- 根据执行环境是否为全局用途或者与某个机构关联,您必须具有适当的管理员特权级别才能在作业中使用执行环境。与组织关联的执行环境需要机构管理员能够使用这些执行环境运行作业。
- 在运行使用为其分配了凭证的执行环境的作业或作业模板前,请确保凭据包含用户名、主机和密码。
流程
- 在导航面板中,选择 → → 。
- 点 添加执行环境。
在以下字段中输入相关信息:
- Name (必需):输入执行环境的名称。
-
Image (必需):输入镜像名称。镜像名称需要其完整位置(存储库)、registry、镜像名称和版本标签,格式为
quay.io/ansible/awx-ee:latestrepo/project/image-name:tag。 可选: Pull: 在运行作业时选择拉取类型:
- 在运行前始终拉取容器 :为容器拉取最新的镜像文件。
- 只有在运行前不存在时才拉取镜像 :如果没有指定,则仅拉取最新的镜像。
永不会拉取容器,然后再运行: 永不拉取容器镜像的最新版本。
注意如果没有为 pull 设置类型,则值默认为运行 之前不存在的镜像。
- 可选: 描述 :
- 可选: 机构 分配机构以专门使用此执行环境。要使执行环境可用于多个机构,请将此字段留空。
- Registry Credential: 如果镜像有一个受保护的容器 registry,请为访问它的凭证提供凭证。
单击 。
您新添加的执行环境已准备好在作业模板中使用。
- 要将执行环境添加到作业模板,请在作业模板的 Execution Environment 字段中指定它。
当您将执行环境添加到作业模板时,这些模板会在执行环境的 Templates 选项卡中列出:
第 21 章 执行环境设置参考 复制链接链接已复制到粘贴板!
本节包含与执行环境定义关联的参考信息。您可以在 YAML 文件中定义执行环境的内容。默认情况下,该文件名为 execution_environment.yml。此文件告知 Ansible Builder 如何创建构建指令文件(适用于 Podman 的Containerfile,Docker 的 Dockerfile)并为容器镜像构建上下文。
Ansible Builder 3.x 的定义模式记录在此处。如果您正在运行旧版本的 Ansible Builder,则需要一个旧的 schema 版本。如需更多信息,请参阅本文档 的旧版本。我们建议使用版本 3,它提供了比之前的版本更可配置的选项和功能。
21.1. 执行环境定义示例 复制链接链接已复制到粘贴板!
您必须创建一个定义文件来为执行环境构建镜像。该文件采用 YAML 格式。
您必须在定义文件中指定 Ansible Builder 的版本。默认版本为 1。
以下定义文件使用 Ansible Builder 版本 3:
version: 3
build_arg_defaults:
ANSIBLE_GALAXY_CLI_COLLECTION_OPTS: '--pre'
dependencies:
galaxy: requirements.yml
python:
- six
- psutil
system: bindep.txt
images:
base_image:
name: registry.redhat.io/ansible-automation-platform-24/ee-minimal-rhel8:latest
additional_build_files:
- src: files/ansible.cfg
dest: configs
additional_build_steps:
prepend_galaxy:
- ADD _build/configs/ansible.cfg /home/runner/.ansible.cfg
prepend_final: |
RUN whoami
RUN cat /etc/os-release
append_final:
- RUN echo This is a post-install command!
- RUN ls -la /etc
21.2. 配置选项 复制链接链接已复制到粘贴板!
在定义文件中使用以下配置 YAML 键。
Ansible Builder 3.x 执行环境定义文件接受七个顶级部分:
21.2.1. additional_build_files 复制链接链接已复制到粘贴板!
构建文件指定要添加到构建上下文目录中的内容。然后,可以在任何构建阶段通过 additional_build_steps 引用或复制它们。
格式是字典值的列表,每个值都有一个 src 和 dest 键和值。
每个列表项都必须是一个字典,其中包含以下所需键:
| src | 指定要复制到构建上下文目录中的源文件。
这可以是绝对路径,例如 |
| dest |
指定构建上下文目录的
这不能是绝对路径,也不能包含 注意
当使用 |
21.3. additional_build_steps 复制链接链接已复制到粘贴板!
构建步骤为任何构建阶段指定自定义构建命令。这些命令直接插入到容器运行时的 build 指令文件中,如 Containerfile 或 Dockerfile。命令必须符合容器化工具所需的任何规则。
您可以在镜像创建过程的任何阶段之前或之后添加构建步骤。例如,如果在安装依赖项前需要安装 git,您可以在基本构建阶段添加构建步骤。
以下是有效的密钥。分别支持多行字符串或字符串列表。
| append_base | 构建基础镜像后插入的命令。 |
| append_builder | 构建构建器镜像后要插入的命令。 |
| append_final | 构建最终镜像后要插入的命令。 |
| append_galaxy | 构建 galaxy 镜像后插入的命令。 |
| prepend_base | 在构建基础镜像前插入的命令。 |
| prepend_builder | 在构建构建器镜像前插入的命令。 |
| prepend_final | 在构建最终镜像前插入的命令。 |
| prepend_galaxy | 在构建 galaxy 镜像前插入的命令。 |
21.3.1. build_arg_defaults 复制链接链接已复制到粘贴板!
这将构建参数的默认值指定为字典。
这是使用- build-arg CLI 标志的替代选择。
Ansible Builder 使用以下构建参数:
| ANSIBLE_GALAXY_CLI_COLLECTION_OPTS |
允许用户传递 |
| ANSIBLE_GALAXY_CLI_ROLE_OPTS |
这可让用户将任何标记(如 |
| PKGMGR_PRESERVE_CACHE | 这控制在镜像构建过程中清除软件包管理器缓存的频率。
如果没有设置这个值(这是默认值),则缓存会被频繁清除。如果 |
在 build_arg_defaults 中给出的 Ansible Builder 硬编码值,以便在手动运行容器构建时保留它们。
如果您在定义中指定相同的变量,且在命令行中使用 CLI build-arg 标志,CLI 值会覆盖定义中的值。
21.3.2. 依赖项 复制链接链接已复制到粘贴板!
指定要安装到最终镜像的依赖项,包括 ansible-core、ansible-runner、Python 软件包、系统软件包和集合。Ansible Builder 会自动安装您安装的任何 Ansible 集合的依赖项。
通常,您可以使用标准语法来约束软件包版本。使用您传递给 dnf、pip、ansible-galaxy 或任何其他软件包管理工具的语法。您还可以在单独的文件中定义软件包或集合,并在定义文件的 dependencies 部分中引用这些文件。
以下键有效:
| ansible_core |
要安装
这个值是一个字典,其中包含一个键
|
| ansible_runner | 要安装的 Ansible Runner Python 软件包的版本。
这个值是一个字典,其中包含一个键
|
| galaxy | 要从 Ansible Galaxy 安装的集合。
这可以是 Ansible Galaxy |
| python | Python 安装要求。
这可以是文件名,也可以是要求列表。Ansible Builder 使用 此库支持复杂的语法,包括对其他文件的引用。如果很多集合需要相同的 软件包名称,Ansible Builder 会将它们合并到一个条目中,并组合了约束。
Ansible Builder 排除 Python 依赖项组合文件中的一些软件包,即使集合将它们列为依赖项。其中包括提供 Ansible 本身的测试软件包和软件包。完整列表可以在
如果您需要包含其中一个排除的软件包名称,请使用 introspection 命令的 以这种方式提供的软件包不会针对排除的 Python 软件包列表进行处理。 |
| python_interpreter |
定义 dnf 要安装的 Python 系统软件包名称的字典( |
| system | 要安装的系统软件包,采用 bindep 格式。这可以是文件名或要求列表。 有关 bindep 的更多信息,请参阅 OpenDev 文档。
对于系统软件包,使用 |
以下示例使用包含各种依赖项的文件名:
dependencies:
python: requirements.txt
system: bindep.txt
galaxy: requirements.yml
ansible_core:
package_pip: ansible-core==2.14.2
ansible_runner:
package_pip: ansible-runner==2.3.1
python_interpreter:
package_system: "python310"
python_path: "/usr/bin/python3.10"
这个示例使用内联值:
dependencies:
python:
- pywinrm
system:
- iputils [platform:rpm]
galaxy:
collections:
- name: community.windows
- name: ansible.utils
version: 2.10.1
ansible_core:
package_pip: ansible-core==2.14.2
ansible_runner:
package_pip: ansible-runner==2.3.1
python_interpreter:
package_system: "python310"
python_path: "/usr/bin/python3.10"
如果这些依赖项文件(requirements.txt、bindep.txt 和 requirements.yml)位于集合的 build_ignore 中,则构建会失败。
集合维护器可以使用 introspection 命令验证 ansible-builder 是否可以识别他们期望的要求:
ansible-builder introspect --sanitize ~/.ansible/collections/
--sanitize 选项查看所有集合要求并删除重复项。它还会删除通常排除的任何 Python 要求(请参阅 python 依赖项)。
使用 -v3 选项 内省,以查看关于被排除的要求的消息。
21.3.3. images 复制链接链接已复制到粘贴板!
指定要使用的基础镜像。至少,您必须为基础镜像指定源、镜像和标签。基础镜像提供操作系统,也可以提供一些软件包。使用标准 host/namespace/container:tag 语法来指定镜像。您可以使用 Podman 或 Docker 快捷方式语法,但完整定义更为可靠和可移植。
本节的有效键包括:
| base_image | 定义执行环境的父镜像的字典。
必须为要使用的容器镜像提供 |
21.3.4. 镜像验证 复制链接链接已复制到粘贴板!
如果使用 podman 容器运行时,您可以验证签名的容器镜像。
设置 container-policy CLI 选项,以控制与容器镜像签名验证相关的 Podman policy.json 文件。
-
ignore_all策略:在构建上下文目录 <context> 中生成一个policy.json文件,但没有执行签名验证。 -
系统策略:使用标准系统位置中的预先存在的policy.json文件来执行签名验证。Ansible-builder不负责这些文件中的内容,并且用户对内容有完全的控制权。 -
signature_required策略:ansible-builder使用容器镜像定义在构建期间使用的构建上下文目录 <context>中生成policy.json文件来验证镜像。
21.3.5. options 复制链接链接已复制到粘贴板!
影响运行时功能的关键字或选项的字典。
本节的有效键包括:
container_init: 带有键的字典,用于自定义容器
ENTRYPOINT和CMD指令(及相关行为)。自定义这些行为是一个高级任务,可能会导致无法调试失败。由于提供的默认值控制多个中间的行为,覆盖任何值都跳过此字典中的所有剩余默认值。有效键是:
-
cmd:
CMDContainerfile 指令的 Literal 值。默认值为["bash"]。 -
ENTRYPOINT:
ENTRYPOINTContainerfile 指令的 Literal 值。默认入口点行为处理到子进程的信号传播,并在运行时确保容器用户具有具有有效写入主目录(在 /etc/passwd 中代表)的正确环境(在/etc/passwd中表示),并将HOME环境变量设置为匹配。当无法适当调整用户运行时环境时,默认入口点脚本会向stderr发送警告。此行为可以忽略或提升为致命错误;请查阅entrypoint目标脚本的来源以了解更多详细信息。 - package_pip :使用 pip 进行入口点支持安装的软件包。此软件包安装在最终构建镜像中。
-
cmd:
- package_manager_path: 字符串,带有要使用的软件包管理器(dnf 或 microdnf)的路径。这个值用于安装软件包。
skip_ansible_check :此布尔值控制检查在最终镜像上执行 Ansible 和 Ansible Runner 的安装。
将此值设置为
True以不执行此检查。默认值为
False。relax_passwd_permissions :此布尔值控制
root组(GID 0)是否明确授予最终容器镜像中的/etc/passwd的写入权限。默认入口点脚本可以在某些容器运行时下尝试通过动态创建用户来更新/etc/passwd,以确保全功能 POSIX 用户环境和主目录。禁用此功能可能会导致软件功能失败,要求用户在/etc/passwd中列出具有有效且可写入的主目录,例如 ansible-core 中的async和~usernameshell 扩展。默认值为
True。WORKDIR :在最终容器镜像下启动新进程的默认当前工作目录。有些容器运行时也将此值用作
root(GID 0)组中动态创建用户的HOME。当指定这个值时,如果目录不存在,则创建该目录,设置为root组所有权,并且rwx组权限会递归应用到其中。默认值为
/runner。用户 :这会设置用户名或 UID,以用作最终容器镜像的默认用户。
默认值为
1000。
示例选项:
options:
container_init:
package_pip: dumb-init>=1.2.5
entrypoint: '["dumb-init"]'
cmd: '["csh"]'
package_manager_path: /usr/bin/microdnf
relax_password_permissions: false
skip_ansible_check: true
workdir: /myworkdir
user: bob
21.3.6. version 复制链接链接已复制到粘贴板!
一个整数值,用于设置执行环境定义文件的 schema 版本。
默认为 1。
如果使用 Ansible Builder 3.x,则该值必须是 3。
21.4. AWX 的默认执行环境 复制链接链接已复制到粘贴板!
test/data/pytz 中的示例需要定义中的 awx.awx 集合。lookup 插件 awx.awx.tower_schedule_rrule 需要 PyPI pytz 和另一个库正常工作。如果提供了 test/data/pytz/execution 文件,它会在镜像中安装集合,读取集合中的 - environment.ymlrequirements.txt 文件,然后将 pytz 安装到镜像中。
生成的镜像可以通过将这些变量放在私有数据目录中来在 ansible-runner 项目内使用。
---
container_image: image-name
process_isolation_executable: podman # or docker
process_isolation: true
awx.awx 集合是默认 AWX 中包含的内容子集。
如需更多信息,请参阅 awx-ee 存储库。
第 22 章 管理用户凭证 复制链接链接已复制到粘贴板!
在针对机器启动作业、与清单源同步以及从版本控制系统中导入项目内容时,凭证会验证自动化控制器用户。
您可以向用户和团队授予使用这些凭证的权限,而无需向用户公开凭证。如果用户移至不同的团队或离开机构,则不必再更新所有系统的密钥,因为这些凭证在自动化控制器中可用。
自动化控制器会加密数据库中的密码和密钥信息,且永远不会通过 API 使 secret 信息可见。如需更多信息,请参阅配置自动化执行。
22.1. 凭证如何工作 复制链接链接已复制到粘贴板!
自动化控制器使用 SSH 连接到远程主机。要将密钥从自动化控制器传递给 SSH,必须在将其写入命名管道之前解密密钥。自动化控制器使用该管道将密钥发送到 SSH,因此密钥永远不会写入磁盘。如果使用密码,自动化控制器会直接响应密码提示并解密密码,然后再将其写入提示符。
Credentials 页面显示当前可用的凭据。默认视图为折叠(Compact),显示凭证名称和凭证类型。
在这个屏幕中,您可以编辑
,重复
或删除一个凭证。
可以使用相同名称和没有机构创建重复的凭证。但是,无法在同一机构中创建两个重复的凭证。
Example
- 创建两个机器凭证,名称相同,但没有机构。
-
使用模块
ansible.controller.export导出凭据。 -
在不同的自动化执行环境中使用
ansible.controller.import模块。 - 检查导入的凭据。
当您导出两个重复凭证,然后在另一节点中导入它们时,只会导入一个凭证。
22.2. 创建新凭证 复制链接链接已复制到粘贴板!
添加到团队的凭证可供团队的所有成员使用。您还可以为单个用户添加凭证。
作为初始设置的一部分,可以使用两个凭证: Demo Credential 和 Ansible Galaxy。使用 Ansible Galaxy 凭据作为模板。您可以复制此凭证,但不能编辑它。根据需要添加更多凭证。
流程
- 在导航面板中,选择 → → 。
- 在 Credentials 页面中,单击 。
输入以下信息:
- 名称 :新凭证的名称。
- (可选) 描述: 新凭证的描述。
- 可选 机构 :与凭证关联的机构名称。默认值为 Default。
- 凭证类型 :输入或选择您要创建的凭证类型。
根据所选的凭证类型输入相关详情,如 凭证类型 所述。
- 点 。
22.3. 将新用户和作业模板添加到现有凭证 复制链接链接已复制到粘贴板!
流程
- 在导航面板中,选择 → → 。
- 选择您要分配给其他用户的凭证。
- 点 User Access 选项卡。您可以查看与此凭证及其角色关联的用户和团队。如果没有用户,从 Users 菜单添加它们。如需更多信息,请参阅 用户。
- 点 。
- 选择您要授予凭据访问权限的用户,然后单击 。
- 在 Select roles to apply 页面中,选择您要添加到用户的角色。
- 点击 。
检查您的选择并点 添加角色,或者点击 进行更改。
将显示 Add roles 窗口,说明操作是否成功。
如果操作不成功,则会显示警告。
- 点 。
- User Access 页面显示摘要信息。
- 选择 Job templates 选项卡选择要为其分配此凭证的作业模板。
选择作业模板或从 Create template 列表中选择 Create job template,将凭证分配给额外的作业模板。
有关创建新作业模板的更多信息,请参阅 作业模板。
22.4. 凭证类型 复制链接链接已复制到粘贴板!
自动化控制器支持以下凭证类型:
- Amazon Web Services
- Ansible Galaxy/Automation Hub API 令牌
- AWS Secrets Manager Lookup
- Bitbucket 数据中心 HTTP 访问令牌
- Centrify Vault Credential Provider Lookup
- 容器注册表
- CyberArk Central Credential Provider Lookup
- CyberArk Conjur Secrets Manager Lookup
- GitHub 个人访问令牌
- GitLab 个人访问令牌
- Google Compute Engine
- GPG 公钥
- HashiCorp Vault Secret Lookup
- HashiCorp Vault Signed SSH
- Insights
- 机器
- Microsoft Azure Key Vault
- Microsoft Azure Resource Manager
- 网络
- OpenShift 或 Kubernetes API 持有者令牌
- OpenStack
- Red Hat Ansible Automation Platform
- Red Hat Satellite 6
- Red Hat Virtualization
- 源控制
- Terraform 后端配置
- Thycotic DevOps Secrets Vault
- Thycotic Secret Server
- Vault
- VMware vCenter
与 AWS Secret Manager、Centrify、CyberArk、HashiCorp Vault、Microsoft Azure Key Vault 和 Thycotic 关联的凭证类型是凭证插件功能的一部分,它允许外部系统查找您的 secret 信息。
如需更多信息,请参阅 Secret 管理系统。
22.4.1. Amazon Web Services 凭证类型 复制链接链接已复制到粘贴板!
选择此凭证以启用与 Amazon Web Services 的云清单同步。
自动化控制器为 AWS 凭证使用以下环境变量:
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_SECURITY_TOKEN
用户界面中会提示这些字段。
Amazon Web Services 凭据由 AWS 访问密钥和 Secret Key 组成。
自动化控制器提供对 EC2 STS 令牌的支持,也称为 Identity and Access Management (IAM) STS 凭证。安全令牌服务 (STS)是一个 Web 服务,可让您为 AWS IAM 用户请求临时的、有有限权限的凭证。
如果 EC2 中的标签值包含布尔值(是/no/true/false),则必须为它们加上引号。
要使用隐式 IAM 角色凭证,在依赖 IAM 角色访问 AWS API 时请不要在自动化控制器中附加 AWS 云凭证。
将 AWS 云凭证附加到作业模板会强制使用 AWS 凭证,而不是您的 IAM 角色凭证。
其他资源
如需有关 IAM/EC2 STS 令牌的更多信息,请参阅 IAM 中的临时安全凭证。
22.4.1.1. 在 Ansible Playbook 中访问 Amazon EC2 凭证 复制链接链接已复制到粘贴板!
您可以从作业运行时环境获取 AWS 凭证参数:
vars:
aws:
access_key: '{{ lookup("env", "AWS_ACCESS_KEY_ID") }}'
secret_key: '{{ lookup("env", "AWS_SECRET_ACCESS_KEY") }}'
security_token: '{{ lookup("env", "AWS_SECURITY_TOKEN") }}'
22.4.2. Ansible Galaxy/automation hub API 令牌凭证类型 复制链接链接已复制到粘贴板!
选择此凭据以访问 Ansible Galaxy,或者使用在私有自动化中心实例上发布的集合。
在此屏幕上输入 Galaxy 服务器 URL。
使用 Red Hat Hybrid Cloud Console 上的 Server URL 字段的内容填充 Galaxy Server URL 字段。使用 Red Hat Hybrid Cloud Console 上的 SSO URL 字段的内容填充 Auth Server URL 字段。
其他资源
如需更多信息,请参阅 在自动化中心中使用集合。
22.4.3. AWS secret 管理器查找 复制链接链接已复制到粘贴板!
这被视为 secret 管理功能的一部分。如需更多信息,请参阅 AWS Secrets Manager Lookup
22.4.4. Bitbucket 数据中心 HTTP 访问令牌 复制链接链接已复制到粘贴板!
Bitbucket 数据中心是一个自托管 Git 存储库,用于协作和管理。选择此凭证类型,可让您使用 HTTP 访问令牌来代替 Git 通过 HTTPS 的密码。
如需更多信息,请参阅 Bitbucket 数据中心文档中的 HTTP 访问令牌。
22.4.5. Centrify Vault Credential Provider Lookup 凭证类型 复制链接链接已复制到粘贴板!
这被视为 secret 管理功能的一部分。
如需更多信息,请参阅 Centrify Vault Credential Provider Lookup。
22.4.6. Container Registry 凭证类型 复制链接链接已复制到粘贴板!
选择此凭证可让自动化控制器访问容器镜像集合。如需更多信息,请参阅 容器 registry 是什么?
您必须指定一个名称。Authentication URL 字段预先填充一个默认值。您可以通过为不同的容器 registry 指定身份验证端点来更改值。
22.4.7. CyberArk Central Credential Provider Lookup 凭证类型 复制链接链接已复制到粘贴板!
这被视为 secret 管理功能的一部分。
如需更多信息,请参阅 CyberArk Central Credential Provider (CCP) Lookup。
22.4.8. CyberArk Conjur Secrets Manager Lookup 凭证类型 复制链接链接已复制到粘贴板!
这被视为 secret 管理功能的一部分。
如需更多信息,请参阅 CyberArk Conjur Secrets Manager Lookup。
22.4.9. GitHub 个人访问令牌凭证类型 复制链接链接已复制到粘贴板!
选择这个凭证可让您使用 个人访问令牌(PAT)访问 GitHub,您可以通过 GitHub 获取该凭证。
如需更多信息 ,请参阅设置 GitHub Webhook。
GitHub PAT 凭证需要在 Token 字段中提供一个值,它位于您的 GitHub 配置集设置中。
使用此凭证建立与 GitHub 的 API 连接,以用于 Webhook 侦听器作业,以发布状态更新。
22.4.10. GitLab 个人访问令牌凭证类型 复制链接链接已复制到粘贴板!
选择这个凭证可让您使用 个人访问令牌(PAT)访问 GitLab,您可以通过 GitLab 获取该凭证。
如需更多信息 ,请参阅设置 GitLab Webhook。
GitLab PAT 凭证需要在 Token 字段中提供一个值,它位于 GitLab 配置集设置中。
使用此凭证建立与 GitLab 的 API 连接,以用于 Webhook 侦听器作业,以发布状态更新。
22.4.11. Google Compute Engine 凭证类型 复制链接链接已复制到粘贴板!
选择此凭证以启用与 Google Compute Engine (GCE)的云清单同步。
自动化控制器为 GCE 凭证使用以下环境变量:
GCE_EMAIL
GCE_PROJECT
GCE_CREDENTIALS_FILE_PATH
用户界面中会提示这些字段:
GCE 凭证需要以下信息:
- 服务帐户电子邮件地址 :分配给 Google Compute Engine 服务帐户的电子邮件地址。
- 可选: 项目 :提供 GCE 分配的标识或您在项目创建时提供的唯一项目 ID。
- 可选: 服务帐户 JSON 文件 :上传 GCE 服务帐户文件。点 浏览具有特殊帐户信息的文件,这些文件可供 GCE 实例上运行的服务和应用程序用于与其他 Google Cloud API 交互。这为服务帐户和虚拟机实例授予权限。
- RSA 私钥 :与服务帐户电子邮件关联的 PEM 文件。
您可以从作业运行时环境获取 GCE 凭证参数:
vars:
gce:
email: '{{ lookup("env", "GCE_EMAIL") }}'
project: '{{ lookup("env", "GCE_PROJECT") }}'
pem_file_path: '{{ lookup("env", "GCE_PEM_FILE_PATH") }}'
22.4.12. GPG 公钥凭证类型 复制链接链接已复制到粘贴板!
选择此凭证类型,以启用自动化控制器,在与源控制同步时验证项目的完整性。
有关如何生成有效密钥对的更多信息,请使用 CLI 工具签署内容,以及如何将公钥添加到控制器,请参阅 项目签名和验证。
22.4.13. HashiCorp Vault Secret Lookup 凭证类型 复制链接链接已复制到粘贴板!
这被视为 secret 管理功能的一部分。
如需更多信息,请参阅 HashiCorp Vault Secret Lookup。
22.4.14. HashiCorp Vault Signed SSH 凭证类型 复制链接链接已复制到粘贴板!
这被视为 secret 管理功能的一部分。
如需更多信息,请参阅 HashiCorp Vault Signed SSH。
22.4.15. Insights 凭证类型 复制链接链接已复制到粘贴板!
选择此凭证类型,以启用与 Red Hat Insights 的云清单同步。
Insights 凭证是 Insights Username 和 Password,它们是用户的红帽客户门户网站帐户的用户名和密码。
Insights 的 extra_vars 和 env injectors 如下:
ManagedCredentialType(
namespace='insights',
....
....
....
injectors={
'extra_vars': {
"scm_username": "{{username}}",
"scm_password": "{{password}}",
},
'env': {
'INSIGHTS_USER': '{{username}}',
'INSIGHTS_PASSWORD': '{{password}}',
},
22.4.16. 机器凭证类型 复制链接链接已复制到粘贴板!
机器凭据可让自动化控制器在管理下的主机上调用 Ansible。您可以指定 SSH 用户名,可选地提供密码、SSH 密钥、密钥密码,或者让自动化控制器在部署时提示用户输入其密码。它们为 playbook 定义 SSH 和用户级特权升级访问权限,并在提交作业以在远程主机上运行 playbook 时使用。
以下网络连接使用 Machine 作为凭证类型: httpapi、netconf 和 network_cli
机器和 SSH 凭据不使用环境变量。它们通过 ansible -u 标志传递用户名,并在底层 SSH 客户端提示时以交互方式写入 SSH 密码。
机器凭证需要以下输入:
- 用户名 :用于 SSH 身份验证的用户名。
- Password: 用于 SSH 验证的密码。如果输入,此密码将加密存储在数据库中。或者,您也可以通过选择 Prompt on launch 来在启动时要求用户输入密码。在这些情况下,在作业启动时打开一个对话框,提升用户以输入密码和密码确认。
- SSH Private Key :复制或拖放机器凭证的 SSH 私钥。
- Private Key Passphrase: 如果 SSH 私钥受密码保护,您可以为私钥配置密钥密码。如果输入,此密码将加密存储在数据库中。您还可以通过选择 Prompt on launch,将自动化控制器配置为在启动时要求用户输入密钥密码短语。在这些情况下,在作业启动时打开一个对话框,提示用户输入密钥密码短语和密钥密码短语确认。
Privilege Escalation Method :指定要分配给特定用户的升级权限类型。这与指定
-become-method=BECOME_METHOD参数相同,其中BECOME_METHOD是任何现有方法或您编写的自定义方法。开始输入方法的名称,以及适当的名称 auto-populates。-
空选择 :如果某个任务或 play 已设为
yes,并且与空选择一起使用,则它将默认为sudo。 - sudo :执行具有超级用户(root 用户)特权的单个命令。
- su :切换到超级用户(root 用户)帐户(或其他用户帐户)。
- Pbrun :请求在受控帐户中运行应用程序或命令,并为高级 root 权限委托和键盘记录提供。
- P fexec :执行带有预定义的进程属性的命令,如特定的用户或组 ID。
- dzdo: sudo 的增强版本,它使用 Centrify 的 Active Directory 服务中的 RBAC 信息。如需更多信息,请参阅 DZDO 上的 Centrify 站点。
- pmrun :在控制帐户中运行应用程序的请求。请参阅 Unix 6.0 的特权管理器。
- RunAs :使您能够以当前用户身份运行。
- 启用 :切换到网络设备上的升级权限。
- doas :使您的远程/登录用户能够以另一个用户的身份通过 doas ("Do as user")实用程序运行命令。
- ksu :使您的远程/登录用户能够通过 Kerberos 访问以另一个用户的身份运行命令。
-
machinectl :允许您通过
systemd机器管理器管理容器。 - sesu :使您的远程/登录用户能够通过 CA 特权访问管理器以另一个用户身份运行命令。
-
空选择 :如果某个任务或 play 已设为
Ansible 2.8+ 提供了自定义 become 插件。如需更多信息,请参阅了解 Privilege Escalation 和 Become 插件列表
- 权限升级用户名 :只有在您为权限升级 选择了选项时,才会看到此字段。输入要与远程系统升级权限一起使用的用户名。
- 权限升级密码 :只有在您为权限升级选择了选项时看到此字段。输入密码,以使用 通过远程系统中的所选权限升级类型来验证用户。此密码将加密存储在数据库中。您还可以通过选择 Prompt on launch 将自动化控制器配置为在启动时要求用户输入密码。在这些情况下,在作业启动时打开一个对话框,提升用户以输入密码和密码确认。
您必须使用 sudo 密码或 SSH 私钥结合使用,因为自动化控制器必须首先与主机建立经过身份验证的 SSH 连接,然后才能调用 sudo 以更改为 sudo 用户。
在调度作业中使用的凭证不能配置为 Prompt on launch。
22.4.16.1. 访问 ansible playbook 中的机器凭证 复制链接链接已复制到粘贴板!
您可以从 Ansible 事实获取用户名和密码:
vars:
machine:
username: '{{ ansible_user }}'
password: '{{ ansible_password }}'
22.4.17. Microsoft Azure Key Vault 凭证类型 复制链接链接已复制到粘贴板!
这被视为 secret 管理功能的一部分。
如需更多信息,请参阅 Microsoft Azure Key Vault。
22.4.18. Microsoft Azure Resource Manager 凭证类型 复制链接链接已复制到粘贴板!
选择此凭证类型,以启用与 Microsoft Azure Resource Manager 的云清单同步。
Microsoft Azure Resource Manager 凭证需要以下输入:
- 订阅 ID :Microsoft Azure 帐户的订阅 UUID。
- 用户名 :用于连接 Microsoft Azure 帐户的用户名。
- Password: 用于连接到 Microsoft Azure 帐户的密码。
- 客户端 ID :Microsoft Azure 帐户的客户端 ID。
- Client Secret :Microsoft Azure 帐户的客户端 Secret。
- 租户 ID :Microsoft Azure 帐户的租户 ID。
- Azure Cloud Environment :与 Azure 云或 Azure 堆栈环境关联的变量。
这些字段等同于 API 中的变量。
要传递服务主体凭证,请定义以下变量:
AZURE_CLIENT_ID
AZURE_SECRET
AZURE_SUBSCRIPTION_ID
AZURE_TENANT
AZURE_CLOUD_ENVIRONMENT
要传递 Active Directory 用户名和密码对,请定义以下变量:
AZURE_AD_USER
AZURE_PASSWORD
AZURE_SUBSCRIPTION_ID
您还可以将凭证作为参数传递给 playbook 中的任务。优先级顺序是参数,然后是环境变量,最后是位于您主目录中的文件。
要将凭证作为参数传递给某个任务,请为服务主体凭证使用以下参数:
client_id
secret
subscription_id
tenant
azure_cloud_environment
或者,为 Active Directory 用户名/密码传递以下参数:
ad_user
password
subscription_id
您可以从作业运行时环境获取 Microsoft Azure 凭证参数:
vars:
azure:
client_id: '{{ lookup("env", "AZURE_CLIENT_ID") }}'
secret: '{{ lookup("env", "AZURE_SECRET") }}'
tenant: '{{ lookup("env", "AZURE_TENANT") }}'
subscription_id: '{{ lookup("env", "AZURE_SUBSCRIPTION_ID") }}'
22.4.19. 网络凭证类型 复制链接链接已复制到粘贴板!
如果您使用与 提供程序 的本地连接,请选择 Network credential type,以使用 Ansible 网络模块连接和管理网络设备。
当连接到网络设备时,凭证类型必须与连接类型匹配:
-
对于使用
提供程序的本地连接,凭证类型应该是 Network。 -
对于所有其他网络连接(
httpapi、netconf和network_cli),凭证类型应该是 Machine。
有关网络设备的可用连接类型的更多信息,请参阅 多通信协议。
自动化控制器为网络凭证使用以下环境变量:
ANSIBLE_NET_USERNAME
ANSIBLE_NET_PASSWORD
为网络凭证提供以下信息:
- 用户名 :与网络设备结合使用的用户名。
- Password :与网络设备结合使用的密码。
- SSH Private Key :复制或拖放要用于通过 SSH 向网络验证用户的实际 SSH 私钥。
- Private Key Passphrase: 通过 SSH 向网络验证用户的私钥的密码短语。
授权 :选择此选项来控制是否进入特权模式。
- 如果选中 Authorize,请在 Authorize Password 字段中输入密码以访问特权模式。
有关更多信息,请参阅使用新连接插件移植 Ansible Network Playbook。
22.4.19.1. 访问 ansible playbook 中的网络凭证 复制链接链接已复制到粘贴板!
您可以从作业运行时环境获取用户名和密码参数:
vars:
network:
username: '{{ lookup("env", "ANSIBLE_NET_USERNAME") }}'
password: '{{ lookup("env", "ANSIBLE_NET_PASSWORD") }}'
22.4.19.2. 多个通信协议 复制链接链接已复制到粘贴板!
由于网络模块在控制节点上执行而不是在受管节点上执行,因此它们可以支持多个通信协议。为每个网络模块所选的通信协议(通过 SSH、CLI 通过 SSH 或 API)取决于平台和模块的用途。有些网络模块只支持一个协议,而有些网络模块则提供支持。
最常见的协议是 CLI 通过 SSH。您可以使用 ansible_connection 变量设置通信协议:
| ansible_connection 的值 | 协议 | Requires | persistent? |
|---|---|---|---|
|
| CLI over SSH | network_os setting | 是 |
|
| XML over SSH | network_os setting | 是 |
|
| API over HTTP/HTTPS | network_os setting | 是 |
|
| 取决于供应商 | Provider 设置 | 否 |
ansible_connection: local 已被弃用。使用上面列出的持久连接类型之一。使用持久连接,您只能定义主机和凭证一次,而不是在每个任务中定义。您还必须为您要通信的特定网络平台设置 network_os 变量。
22.4.20. OpenShift 或 Kubernetes API Bearer Token 凭证类型 复制链接链接已复制到粘贴板!
选择此凭证类型来创建实例组以指向 Kubernetes 或 OpenShift 容器。
如需更多信息,请参阅 实例和容器组。
为容器凭证提供以下信息:
- OpenShift 或 Kubernetes API 端点 (必需):用于连接到 OpenShift 或 Kubernetes 容器的端点。
- API authentication bearer 令牌 (必需):用于验证连接的令牌。
- 可选: 验证 SSL :您可以检查这个选项以验证服务器的 SSL/TLS 证书是否有效且可信。使用内部或私有 证书颁发机构 (CA)的环境必须保留此选项来禁用验证。
-
证书颁发机构数据 :如果提供,请在粘贴证书时包括
BEGIN CERTIFICATE和END CERTIFICATE行。
容器组是具有关联凭证的实例组类型,它允许连接到 OpenShift 集群。要设置容器组,您必须具有以下项目:
- 您可以开始进入的命名空间。虽然每个集群都有一个 default 命名空间,但您可以使用特定的命名空间。
- 具有角色的服务帐户,使其能够启动和管理此命名空间中的 pod。
如果您在私有 registry 中使用执行环境,并在自动化控制器中关联有容器 registry 凭证,则服务帐户还需要角色在命名空间中获取、创建和删除 secret。
如果您不想为服务帐户授予这些角色,您可以预先创建
ImagePullSecrets,并在容器组的 pod 规格中指定它们。在这种情况下,执行环境不能关联 Container Registry 凭证,或者自动化控制器会尝试为您在命名空间中创建 secret。- 与该服务帐户关联的令牌(OpenShift 或 Kubernetes Bearer Token)
- 与集群关联的 CA 证书
22.4.20.1. 在 Openshift 集群中创建服务帐户 复制链接链接已复制到粘贴板!
在 Openshift 或 Kubernetes 集群中创建服务帐户,用于通过自动化控制器在容器组中运行作业。创建服务帐户后,其凭证以 Openshift 或 Kubernetes API bearer 令牌凭证的形式提供给自动化控制器。
创建服务帐户后,使用新服务帐户中的信息来配置自动化控制器。
流程
要创建服务帐户,请下载并使用示例服务帐户
containergroup sa,并根据需要修改它以获取凭证:--- apiVersion: v1 kind: ServiceAccount metadata: name: containergroup-service-account namespace: containergroup-namespace --- kind: Role apiVersion: rbac.authorization.k8s.io/v1 metadata: name: role-containergroup-service-account namespace: containergroup-namespace rules: - apiGroups: [""] resources: ["pods"] verbs: ["get", "list", "watch", "create", "update", "patch", "delete"] - apiGroups: [""] resources: ["pods/log"] verbs: ["get"] - apiGroups: [""] resources: ["pods/attach"] verbs: ["get", "list", "watch", "create"] --- kind: RoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: role-containergroup-service-account-binding namespace: containergroup-namespace subjects: - kind: ServiceAccount name: containergroup-service-account namespace: containergroup-namespace roleRef: kind: Role name: role-containergroup-service-account apiGroup: rbac.authorization.k8s.io应用
containergroup-sa.yml的配置:oc apply -f containergroup-sa.yml获取与服务帐户关联的 secret 名称:
export SA_SECRET=$(oc get sa containergroup-service-account -o json | jq '.secrets[0].name' | tr -d '"')从 secret 获取令牌:
oc get secret $(echo ${SA_SECRET}) -o json | jq '.data.token' | xargs | base64 --decode > containergroup-sa.token获取 CA 证书:
oc get secret $SA_SECRET -o json | jq '.data["ca.crt"]' | xargs | base64 --decode > containergroup-ca.crt-
使用
containergroup-sa.token和containergroup-ca.crt的内容,为容器组所需的 OpenShift 或 Kubernetes API Bearer Token 提供信息。
22.4.21. OpenStack 凭证类型 复制链接链接已复制到粘贴板!
选择此凭证类型,以启用与 OpenStack 的云清单同步。
输入 OpenStack 凭证的以下信息:
- 用户名 :用于连接 OpenStack 的用户名。
- Password (API Key) :用于连接 OpenStack 的密码或 API 密钥。
- 主机(身份验证 URL) :用于身份验证的主机。
- Project (Tenant Name): 用于 OpenStack 的租户名称或租户 ID。这个值通常与用户名相同。
- 可选: Project (Domain Name) :提供与您的域关联的项目名称。
- 可选 :域名 :提供用于连接 OpenStack 的 FQDN。
- 可选 :区域名称 :提供区域名称。对于某些云提供商,如 OVH,必须指定区域。
如果您有兴趣使用 OpenStack 云凭证,请参阅使用带有 云清单的 Cloud Credentials,其中包含一个示例 playbook。
22.4.22. Red Hat Ansible Automation Platform 凭证类型 复制链接链接已复制到粘贴板!
选择这个凭证来访问另一个自动化控制器实例。
Ansible Automation Platform 凭证需要以下输入:
- Red Hat Ansible Automation Platform: 要连接的其他实例的基本 URL 或 IP 地址。
- 用户名 :用于连接的用户名。
- Password :用于连接的密码。
- OAuth 令牌 :如果没有使用用户名和密码,请提供一个 OAuth 令牌来进行验证。
Ansible Automation Platform 的 env injectors 如下:
ManagedCredentialType(
namespace='controller',
....
....
....
injectors={
'env': {
'TOWER_HOST': '{{host}}',
'TOWER_USERNAME': '{{username}}',
'TOWER_PASSWORD': '{{password}}',
'TOWER_VERIFY_SSL': '{{verify_ssl}}',
'TOWER_OAUTH_TOKEN': '{{oauth_token}}',
'CONTROLLER_HOST': '{{host}}',
'CONTROLLER_USERNAME': '{{username}}',
'CONTROLLER_PASSWORD': '{{password}}',
'CONTROLLER_VERIFY_SSL': '{{verify_ssl}}',
'CONTROLLER_OAUTH_TOKEN': '{{oauth_token}}',
}
22.4.22.1. 访问 Ansible Playbook 中的自动化控制器凭证 复制链接链接已复制到粘贴板!
您可以从作业运行时环境获取主机、用户名和密码参数:
vars:
controller:
host: '{{ lookup("env", "CONTROLLER_HOST") }}'
username: '{{ lookup("env", "CONTROLLER_USERNAME") }}'
password: '{{ lookup("env", "CONTROLLER_PASSWORD") }}'
22.4.23. Red Hat Satellite 6 凭证类型 复制链接链接已复制到粘贴板!
选择此凭证类型,以启用与 Red Hat Satellite 6 的云清单同步。
自动化控制器会根据用户界面中提示的字段写入 Satellite 配置文件。文件的绝对路径在以下环境变量中设置:
FOREMAN_INI_PATH
Satellite 凭证有以下所需的输入:
- Satellite 6 URL :要连接的 Satellite 6 URL 或 IP 地址。
- 用户名 :用于连接 Satellite 6 的用户名。
- Password: 用于连接到 Satellite 6 的密码。
22.4.24. Red Hat Virtualization 凭证类型 复制链接链接已复制到粘贴板!
选择此凭据以启用自动化控制器来访问 Ansible 的 oVirt4.py 动态清单插件,该插件由 Red Hat Virtualization 管理。
自动化控制器为 Red Hat Virtualization 凭证使用以下环境变量。以下是用户界面中的字段:
OVIRT_URL
OVIRT_USERNAME
OVIRT_PASSWORD
为 Red Hat Virtualization 凭证提供以下信息:
-
主机(身份验证 URL) :要连接的主机 URL 或 IP 地址。要与清单同步,凭证 URL 需要包含
ovirt-engine/api路径。 -
用户名 :用于连接 oVirt4 的用户名。这必须包含域配置集才能成功,例如
username@ovirt.host.com。 - Password :用于连接的密码。
-
可选: CA 文件 :提供 oVirt 证书文件的绝对路径(它可能以
.pem、.cer和.crt扩展结尾,但最好是.pem以实现一致性)
22.4.24.1. 访问 Ansible Playbook 中的虚拟化凭证 复制链接链接已复制到粘贴板!
您可以从作业运行时环境获取 Red Hat Virtualization 凭证参数:
vars:
ovirt:
ovirt_url: '{{ lookup("env", "OVIRT_URL") }}'
ovirt_username: '{{ lookup("env", "OVIRT_USERNAME") }}'
ovirt_password: '{{ lookup("env", "OVIRT_PASSWORD") }}'
Red Hat Virtualization 的文件 和 env injectors 如下:
ManagedCredentialType(
namespace='rhv',
....
....
....
injectors={
# The duplication here is intentional; the ovirt4 inventory plugin
# writes a .ini file for authentication, while the ansible modules for
# ovirt4 use a separate authentication process that support
# environment variables; by injecting both, we support both
'file': {
'template': '\n'.join(
[
'[ovirt]',
'ovirt_url={{host}}',
'ovirt_username={{username}}',
'ovirt_password={{password}}',
'{% if ca_file %}ovirt_ca_file={{ca_file}}{% endif %}',
]
)
},
'env': {'OVIRT_INI_PATH': '{{tower.filename}}', 'OVIRT_URL': '{{host}}', 'OVIRT_USERNAME': '{{username}}', 'OVIRT_PASSWORD': '{{password}}'},
},
)
22.4.25. 源控制凭证类型 复制链接链接已复制到粘贴板!
源控制凭证 与项目一起使用,从远程修订控制系统(如 Git 或 Subversion)克隆和更新本地源代码存储库。
源控制凭证需要以下输入:
- 用户名 :与源控制系统结合使用的用户名。
- Password :与源控制系统结合使用的密码。
- SCM 私钥 :复制或拖放要用于通过 SSH 向源控制系统验证用户的实际 SSH 私钥。
- Private Key Passphrase :如果使用的 SSH 私钥受密码保护,您可以为私钥配置密钥密码。
您不能将 Source Control 凭证配置为 启动时提示。
如果您使用 GitHub 帐户作为 Source Control 凭证,且您的帐户上启用了 两个 Factor Authentication (2FA),您必须在 password 字段中使用您的个人访问令牌而不是您的帐户密码。
22.4.26. Terraform 后端配置 复制链接链接已复制到粘贴板!
Terraform 是一个 HashiCorp 工具,用于自动化各种基础架构任务。选择此凭证类型来启用与 Terraform 清单源的同步。
Terraform 凭证需要 Backend 配置属性,它必须包含 Terraform 后端块 中的数据。保存它会将后端配置的文件路径存储在环境变量 TF_BACKEND_CONFIG_FILE 中,该变量可用于附加了凭证的任何作业。
您可以粘贴、拖动文件、浏览上传文件,或者点击
图标从外部 Secret Management System 填充字段。
Terraform 后端配置需要以下输入:
- Name
- 凭证类型 :选择 Terraform 后端配置。
- 可选: 机构
- 可选: 描述
后端配置 :在此处销毁文件或浏览以上传。
S3 后端配置示例:
bucket = "my-terraform-state-bucket" key = "path/to/terraform-state-file" region = "us-east-1" access_key = "my-aws-access-key" secret_key = "my-aws-secret-access-key"- 可选: Google Cloud Platform 帐户凭证
22.4.27. Thycotic DevOps Secrets Vault 凭证类型 复制链接链接已复制到粘贴板!
这被视为 secret 管理功能的一部分。
如需更多信息,请参阅 Thycotic DevOps Secrets Vault。
22.4.28. Thycotic secret 服务器凭证类型 复制链接链接已复制到粘贴板!
这被视为 secret 管理功能的一部分。
如需更多信息,请参阅 Thycotic Secret Server。
22.4.29. Ansible Vault 凭据类型 复制链接链接已复制到粘贴板!
选择此凭证类型,以启用与 Ansible Vault 的清单同步。
如果应用多 Vault 凭证,则 Vault 凭证需要 Vault 密码 和可选的 Vault 标识符。
您可以通过选择 Prompt on launch 将自动化控制器配置为在启动时要求用户输入密码。
当您选择 启动时提示 时,将在作业启动时打开一个对话框,提示用户输入密码。
在调度作业中使用的凭证不能配置为 Prompt on launch。
如需有关 Ansible Vault 的更多信息,请参阅使用 Ansible vault 保护敏感数据。
22.4.30. VMware vCenter 凭证类型 复制链接链接已复制到粘贴板!
选择此凭证类型以启用与 VMware vCenter 的清单同步。
自动化控制器为 VMware vCenter 凭证使用以下环境变量:
VMWARE_HOST
VMWARE_USER
VMWARE_PASSWORD
VMWARE_VALIDATE_CERTS
用户界面中会提示这些字段。
VMware 凭证需要以下输入:
- vCenter Host :要连接的 vCenter 主机名或 IP 地址。
- 用户名 :用于连接到 vCenter 的用户名。
- Password: 用于连接到 vCenter 的密码。
如果 VMware 客户机工具没有在实例上运行,VMware 清单同步不会返回该实例的 IP 地址。
22.4.30.1. 在 ansible playbook 中访问 VMware vCenter 凭证 复制链接链接已复制到粘贴板!
您可以从作业运行时环境获取 VMware vCenter 凭证参数:
vars:
vmware:
host: '{{ lookup("env", "VMWARE_HOST") }}'
username: '{{ lookup("env", "VMWARE_USER") }}'
password: '{{ lookup("env", "VMWARE_PASSWORD") }}'
22.5. 在 playbook 中使用自动化控制器凭证 复制链接链接已复制到粘贴板!
以下 playbook 是在 playbook 中使用自动化控制器凭证的示例。
- hosts: all
vars:
machine:
username: '{{ ansible_user }}'
password: '{{ ansible_password }}'
controller:
host: '{{ lookup("env", "CONTROLLER_HOST") }}'
username: '{{ lookup("env", "CONTROLLER_USERNAME") }}'
password: '{{ lookup("env", "CONTROLLER_PASSWORD") }}'
network:
username: '{{ lookup("env", "ANSIBLE_NET_USERNAME") }}'
password: '{{ lookup("env", "ANSIBLE_NET_PASSWORD") }}'
aws:
access_key: '{{ lookup("env", "AWS_ACCESS_KEY_ID") }}'
secret_key: '{{ lookup("env", "AWS_SECRET_ACCESS_KEY") }}'
security_token: '{{ lookup("env", "AWS_SECURITY_TOKEN") }}'
vmware:
host: '{{ lookup("env", "VMWARE_HOST") }}'
username: '{{ lookup("env", "VMWARE_USER") }}'
password: '{{ lookup("env", "VMWARE_PASSWORD") }}'
gce:
email: '{{ lookup("env", "GCE_EMAIL") }}'
project: '{{ lookup("env", "GCE_PROJECT") }}'
azure:
client_id: '{{ lookup("env", "AZURE_CLIENT_ID") }}'
secret: '{{ lookup("env", "AZURE_SECRET") }}'
tenant: '{{ lookup("env", "AZURE_TENANT") }}'
subscription_id: '{{ lookup("env", "AZURE_SUBSCRIPTION_ID") }}'
tasks:
- debug:
var: machine
- debug:
var: controller
- debug:
var: network
- debug:
var: aws
- debug:
var: vmware
- debug:
var: gce
- shell: 'cat {{ gce.pem_file_path }}'
delegate_to: localhost
- debug:
var: azure
使用 'delegate_to' 和任何查找变量
- command: somecommand
environment:
USERNAME: '{{ lookup("env", "USERNAME") }}'
PASSWORD: '{{ lookup("env", "PASSWORD") }}'
delegate_to: somehost
第 23 章 自定义凭证类型 复制链接链接已复制到粘贴板!
作为系统管理员,您可以使用 YAML 或类 JSON 的定义以标准格式定义自定义凭证类型。您可以定义一个与现有凭证类型类似的自定义凭证类型。例如,自定义凭证类型可将第三方 Web 服务的 API 令牌注入到 playbook 或自定义清单脚本的环境变量中。
自定义凭证支持以下注入身份验证信息的方法:
- 环境变量
- Ansible 额外变量
-
基于文件的模板,这意味着生成包含凭证值的
.ini或.conf文件
您可以将一个 SSH 和多个云凭证附加到作业模板。每个云凭证都必须是不同的类型。只允许每种凭证类型中的一个凭证。Vault 凭证和机器凭证是单独的实体。
-
在创建新凭证类型时,您必须避免在
extra_vars、env和 file 命名空间中发生冲突。 -
环境变量或额外变量名称不能以
ANSIBLE_开头,因为它们是保留的。 -
您必须具有系统管理员(超级用户)权限才能创建和编辑凭证类型(
CredentialType),并能够查看CredentialType.injection字段。
23.1. 从集合中获取内容 复制链接链接已复制到粘贴板!
"受管"凭证类型 kind=galaxy 代表在运行项目更新时,在 requirements.yml 中定义的集合的内容源。内容源示例包括 galaxy.ansible.com、console.redhat.com 或内部自动化中心。这个新凭证类型代表了在项目更新运行 ansible-galaxy 集合安装 时构建环境变量所需的 URL 和(可选)身份验证详情,如 Ansible 文档 配置 ansible-galaxy 客户端 中所述。它有字段直接映射到公开给 Ansible Galaxy CLI 的配置选项,如每个服务器。
API 中的端点反映了在机构级别这些凭证的排序列表:
/api/v2/organizations/N/galaxy_credentials/
当自动化控制器安装迁移现有的面向 Galaxy 的设置值时,会创建升级后正确的凭证并附加到每个机构。升级到最新版本后,在升级前存在的每个机构现在都有与其关联的一个或多个 "Galaxy" 凭证的列表。
另外,这些设置在升级后无法从 /api/v2/settings/jobs/ 端点可见(或编辑)。
即使 galaxy.ansible.com 不是机构列表中的第一个凭证,自动化控制器也会继续直接从公共 Galaxy 获取角色。全局 Galaxy 设置不再在作业级别配置,而是在用户界面中的机构级别配置。
机构的 Create organization 和 Edit organization 窗口具有一个可选的 Galaxy credentials lookup 字段,用于 kind=galaxy 的凭证。
务必要将这些凭证的顺序指定为同步和查找内容的优先级。如需更多信息,请参阅创建机构。
有关如何使用集合设置项目的更多信息,请参阅使用带有自动化中心 的集合。
23.2. 后向兼容 API 注意事项 复制链接链接已复制到粘贴板!
支持 API 版本 2 (api/v2/)意味着作业模板与凭证有一对多的关系(包括多组支持)。
您可以过滤 v2 API 的凭证:
curl "https://controller.example.org/api/v2/credentials/?credential_type__namespace=aws"
在 V2 Credential Type 模型中,关系定义如下:
| 机器 | SSH |
|---|---|
| Vault | Vault |
| 网络 |
设置环境变量,如 |
| SCM | 源控制 |
| 云 | EC2、AWS |
| 云 | 很多其他服务 |
| Insights | Insights |
| Galaxy | galaxy.ansible.com, console.redhat.com |
| Galaxy | 内部自动化中心 |
23.3. 内容验证 复制链接链接已复制到粘贴板!
自动化控制器使用 GNU Privacy Guard (GPG)验证内容。
如需更多信息,请参阅 GNU Privacy Handbook。
23.4. 凭证类型入门 复制链接链接已复制到粘贴板!
流程
在导航面板中,选择 → → 。如果没有创建自定义凭证类型,则 凭证类型 页面会提示您添加一个。
如果创建了凭证类型,本页会显示现有和可用的凭证类型的列表。
-
选择凭证的名称或 Edit
图标查看有关凭证类型的更多信息。
- 在 Details 标签页中,每个凭证类型在 Input Configuration 字段和 Injector Configuration 字段中显示自己的唯一配置(如果适用)。配置字段支持 YAML 和 JSON 格式。
23.5. 创建新凭证类型 复制链接链接已复制到粘贴板!
要创建新凭证类型,请执行以下操作:
流程
- 在导航面板中,选择 → → 。
- 在 Credential Types 视图中,点 。
在 Name 和 Description 字段中输入相关详情。
注意在创建新凭证类型时,请不要为 INPUT 和 INJECTOR 名称和 ID 使用以
ANSIBLE_开头的 保留变量名称,因为它们对于自定义凭证类型无效。在 Input configuration 字段中,指定一个输入模式,为该类型定义一组排序字段。格式可以是 YAML 或 JSON:
YAML
fields: - type: string id: username label: Username - type: string id: password label: Password secret: true required: - username - password在 YAML 页面 查看更多 YAML 示例。
JSON
{ "fields": [ { "type": "string", "id": "username", "label": "Username" }, { "secret": true, "type": "string", "id": "password", "label": "Password" } ], "required": ["username", "password"] }请参阅 JSON 网站 查看更多 JSON 示例。
以下 JSON 格式的配置显示了每个字段以及它们的使用方式:
{ "fields": [{ "id": "api_token", # required - a unique name used to reference the field value "label": "API Token", # required - a unique label for the field "help_text": "User-facing short text describing the field.", "type": ("string" | "boolean") # defaults to 'string' "choices": ["A", "B", "C"] # (only applicable to `type=string`) "format": "ssh_private_key" # optional, can be used to enforce data format validity for SSH private key data (only applicable to `type=string`) "secret": true, # if true, the field value will be encrypted "multiline": false # if true, the field should be rendered as multi-line for input entry # (only applicable to `type=string`) },{ # field 2... },{ # field 3... }], "required": ["api_token"] # optional; one or more fields can be marked as required },当
type=string时,字段可以选择性地指定多个选择选项:{ "fields": [{ "id": "api_token", # required - a unique name used to reference the field value "label": "API Token", # required - a unique label for the field "type": "string", "choices": ["A", "B", "C"] }] },在 Injector 配置 字段中,输入环境变量或额外变量来指定凭证类型可注入的值。格式可以是 YAML 或 JSON (请参阅上一步中的示例)。
以下 JSON 格式的配置显示了每个字段以及它们的使用方式:
{ "file": { "template": "[mycloud]\ntoken={{ api_token }}" }, "env": { "THIRD_PARTY_CLOUD_API_TOKEN": "{{ api_token }}" }, "extra_vars": { "some_extra_var": "{{ username }}:{{ password }}" } }凭证类型也可以生成临时文件来支持
.ini文件或证书或密钥数据:{ "file": { "template": "[mycloud]\ntoken={{ api_token }}" }, "env": { "MY_CLOUD_INI_FILE": "{{ tower.filename }}" } }在本例中,自动化控制器会编写一个具有以下内容的临时文件:
[mycloud]\ntoken=SOME_TOKEN_VALUE生成的文件的绝对路径存储在名为
MY_CLOUD_INI_FILE的环境变量中。以下是引用自定义凭证模板中的很多文件的示例:
输入
{ "fields": [{ "id": "cert", "label": "Certificate", "type": "string" },{ "id": "key", "label": "Key", "type": "string" }] }injectors
{ "file": { "template.cert_file": "[mycert]\n{{ cert }}", "template.key_file": "[mykey]\n{{ key }}" }, "env": { "MY_CERT_INI_FILE": "{{ tower.filename.cert_file }}", "MY_KEY_INI_FILE": "{{ tower.filename.key_file }}" } }单击 。
您新创建的凭证类型显示在凭证类型列表中:
点 Edit
图标修改凭证类型选项。
注意在 Edit 屏幕中,您可以修改详情或删除凭证。如果 Delete 选项被禁用,这意味着凭证正在使用凭证类型,且您必须在删除它前从所有使用的凭证中删除凭证类型。
验证
- 验证在创建新凭证时是否可从 Credential Type 选择窗口中选择新创建的凭证类型:
其他资源
有关如何创建新凭证的详情,请参考 创建凭证。
第 24 章 活动流 复制链接链接已复制到粘贴板!
在导航面板中,选择 → → 。
活动流显示特定对象的所有更改。对于每个更改,活动流会显示事件的时间、启动事件的用户以及操作。显示的信息因事件类型而异。
点
图标显示更改的事件日志。
您可以通过启动用户、系统启动(如果是系统启动)或任何相关的对象(如凭证、作业模板或调度)过滤活动流。活动流显示整个实例的活动流。大多数页面都允许查看针对该特定对象过滤的活动流。
您可以点击
图标查看任何页面中的活动流。
第 25 章 通知程序 复制链接链接已复制到粘贴板!
通知类型 (如 Email、Slack 或 Webhook)是通知模板的实例,具有通知模板中定义的名称、描述和配置。
以下是添加通知模板所需的详情示例:
- 电子邮件通知模板需要用户名、密码、服务器和收件人
- Slack 通知模板需要令牌和频道列表
- Webhook 通知模板需要 URL 和标头
当作业失败时,将使用您在通知模板中定义的配置发送通知。
以下显示了通知系统的典型流程:
-
您可以通过 API 或 UI 创建指向
/api/v2/notification_templates 端点的REST API的通知模板。 -
您可以将通知模板分配给支持它的各种对象(所有作业模板变体以及机构和项目)以及您想要通知的适当触发器级别(启动、成功或错误)。例如,您可能希望分配特定的通知模板,以便在作业模板 1 失败时触发。在这种情况下,您可以将通知模板与
/api/v2/job_templates/n/notification_templates_errorAPI 端点的作业模板关联。 - 您可以在作业启动和作业结束时设置通知。用户和团队也可以定义他们自己的通知,这些通知可以附加到任意作业。
25.1. 通知层次结构 复制链接链接已复制到粘贴板!
通知模板继承父对象上定义的模板,如下所示:
- 作业模板使用为它们定义的通知模板。此外,他们可以从作业模板使用的项目中继承通知模板,以及它列在下面列出的机构中。
- 项目更新使用项目上定义的通知模板,并从与其关联的机构中继承通知模板。
- 清单更新使用在下面列出的机构上定义的通知模板。
- 临时命令使用与清单关联的组织上定义的通知模板。
25.2. 通知工作流 复制链接链接已复制到粘贴板!
当作业成功或失败时,错误或成功处理程序使用 Notifiers 部分中定义的步骤拉取相关通知模板列表。
然后,它会为每个对象创建一个通知对象,其中包含作业的相关详情并将其发送到目的地。这包括电子邮件地址、slack 频道和 SMS 号。
这些通知对象作为作业类型上的相关资源(作业、清单更新、项目更新、项目更新)以及 /api/v2/notifications 提供。您还可以通过检查其相关资源来查看从通知模板发送了哪些通知。
如果通知失败,它不会影响与其关联的作业,或导致它失败。通知的状态可以在其详情端点 /api/v2/notifications/<n> 中查看。
25.3. 创建通知模板 复制链接链接已复制到粘贴板!
使用以下步骤创建通知模板。
流程
- 在导航面板中,选择 → → 。
- 点 。
完成以下字段:
- Name :输入通知的名称。
- 描述 :输入通知的描述。此字段是可选的。
- Organization: 指定通知所属的机构。
- 类型 :从下拉菜单中选择通知类型。如需更多信息,请参阅 通知类型 部分。
- 点 。
25.4. 通知类型 复制链接链接已复制到粘贴板!
自动化控制器支持以下通知类型:
每个通知类型都有自己的配置和行为语义。您可能需要以不同的方式进行测试。另外,您可以将每种通知类型自定义为特定的详情,或一组用于触发通知的条件。
其他资源
25.4.1. 电子邮件 复制链接链接已复制到粘贴板!
电子邮件通知类型支持各种 SMTP 服务器,并支持 SSL/TLS 连接。
提供以下详情来设置电子邮件通知:
- Host
- 接收者列表
- 发件人电子邮件
- Port
- Timeout (以秒为单位):您可以将其设置为 120 秒。这是自动化控制器在失败前尝试连接到电子邮件服务器的时间长度。
25.4.2. Grafana 复制链接链接已复制到粘贴板!
要集成 Grafana,您必须首先在 Grafana 系统中创建 API 密钥。这是提供给自动化控制器的令牌。
提供以下详情来设置 Grafana 通知:
- Grafana URL :Grafana API 服务的 URL,例如: http://yourcompany.grafana.com。
- Grafana API 密钥 :您必须首先在 Grafana 系统中创建一个 API 密钥。
- 可选: 仪表板 ID :当您为 Grafana 帐户创建 API 密钥时,您可以使用唯一 ID 设置仪表板。
- 可选: 面板 ID :如果您向 Grafana 界面添加了面板和图形,您可以在此处提供其 ID。
- 可选: 注解的标签: 输入关键字来标识您要配置的通知类型。
- 禁用 SSL 验证 :默认情况下 SSL 验证是开启的,但您可以关闭验证目标证书真实性的功能。选择这个选项来禁用使用内部或私有 CA 的环境验证。
25.4.3. IRC 复制链接链接已复制到粘贴板!
IRC 通知采用 IRC bot 的形式,它连接,将消息传送到频道或单个用户,然后断开连接。通知 bot 还支持 SSL 身份验证。bot 目前不支持 Nickserv 身份识别。如果频道或用户不存在或者没有在线,通知会失败。故障场景是为连接而保留的。
提供以下详情来设置 IRC 通知:
- 可选: IRC 服务器密码 :IRC 服务器可能需要密码才能连接。如果服务器不需要,则将其留空。IRC Server Port: IRC 服务器端口。IRC Server Address: IRC 服务器的主机名或地址。IRC Nick :bot 连接到服务器的别名。目标频道或用户 :通知发送到的用户或频道列表。
- 可选: 禁用 SSL 验证 :检查是否希望 bot 在连接时使用 SSL。
25.4.4. Mattermost 复制链接链接已复制到粘贴板!
Mattermost 通知类型为 Mattermost 的消息和协作工作区提供了一个简单的接口。
提供以下详情来设置 Mattermost 通知:
- 目标 URL :发布的完整 URL。
- 可选: 用户名 :输入通知的用户名。
- 可选 : 输入通知频道。
- Icon URL: 指定为这个通知显示的图标。
- 禁用 SSL 验证 :关闭验证目标证书真实性的功能。选择这个选项来禁用使用内部或私有 CA 的环境验证。
25.4.5. Pagerduty 复制链接链接已复制到粘贴板!
要集成 Pagerduty,您必须首先在 PagerDuty 系统中创建一个 API 密钥。这是提供给自动化控制器的令牌。然后创建一个 提供 自动化控制器的 Integration Key 的服务。
提供以下详情来设置页面通知:
- API Token :您必须首先在 Pagerduty 系统中创建一个 API 密钥。这是提供给自动化控制器的令牌。
-
PagerDuty 子域 :当您注册 Pagerduty 帐户时,您会收到一个用来进行通信的唯一子域。例如,如果您以"testuser"身份注册,Web 仪表板位于
testuser.pagerduty.com,并且为您提供 APItestuser作为子域,而不是完整的域。 - API 服务/集成 密钥 :输入在 Pagerduty 中创建的 API 服务/集成密钥。
- 客户端标识符 :这与警报内容一同发送到 Pagerduty 服务,以帮助识别使用 API 密钥和服务的服务。如果多个集成使用相同的 API 密钥和服务,这非常有用。
25.4.6. Rocket.Chat 复制链接链接已复制到粘贴板!
Rocket.Chat 通知类型为 Rocket.Chat 的协作和通信平台提供了一个接口。
提供以下详情来设置 Rocket.Chat 通知:
-
目标 URL :
POST到的完整 URL。 - 可选: 用户名 :输入用户名。
- 可选: Icon URL: 指定为这个通知显示的图标
- Disable SSL Verification :关闭验证目标证书真实性的功能。选择这个选项来禁用使用内部或私有 CA 的环境验证。
25.4.7. Slack 复制链接链接已复制到粘贴板!
Slack 是一个协作团队通信和消息传递工具。
提供以下详情来设置 Slack 通知:
- Slack 应用程序。如需更多信息,请参阅 Slack 文档中的 Quickstart 页面。
- Token: 令牌。如需更多信息,请参阅 Current token type 文档 页中的 Legacy bots 以及 bot 令牌令牌的特定详情。
- 目的地频道 :每行一个 Slack 频道。频道需要 pound 符号(TALM)。要响应或启动线程到特定消息,请将父消息 Id 添加到父消息 Id 为 16 位的频道。必须在 10 位数字后手动插入句点(.)。例如: :#destination-channel, 1231257890.006423。
通知颜色 :指定一个通知颜色。可接受的颜色是十六进制颜色代码,例如: #3af 或 #789abc。当您设置 bot 或应用程序时,您必须完成以下步骤:
- 转至应用 。
- 点新创建的应用程序,然后进入 Add features and functionality,它可让您配置传入的 webhook、bot 和 permissions,并将您的应用程序安装到工作区中。
25.4.8. Twilio 复制链接链接已复制到粘贴板!
Twilio 是一个语音和 SMS 自动化服务。当您签名后,您必须创建一个从其中发送消息的电话号码。然后,您可以在 Programmable SMS 下定义一个 消息传递服务,并将之前创建的号码与其相关联。
在被允许使用它发送到任何数字之前,您可能需要验证这个数字或一些其他信息。消息传递服务 不需要状态回调 URL,不需要处理入站消息。
在您的单独(或子)帐户设置下,您有 API 凭证。Twilio 使用两个凭证来确定来自哪个帐户。帐户 SID 充当用户名,以及作为密码的 Auth Token。
提供以下详情来设置 Twilio 通知:
- 帐户 SID :输入帐户 SID。
- Account Token: 输入帐户令牌。
- 源电话号码 :以"+15556667777"的形式输入与消息传递服务关联的号码。
- 目标 SMS Numbers:输入您要接收 SMS 的数字列表。它必须是 10 位的电话号码。
25.4.9. Webhook 复制链接链接已复制到粘贴板!
webhook 通知类型提供了一个简单接口,用于将 POST 发送到预定义的 Web 服务。自动化控制器使用应用程序和 JSON 内容类型以及包含 JSON 格式的相关详情的数据有效负载来 POST 到此地址。有些 Web 服务 API 预期 HTTP 请求采用特定格式,带有特定字段。
使用以下命令配置 webhook 通知:
-
使用基本身份验证
PUT配置 HTTP 方法。 - 传出请求的正文。
- 使用基本身份验证配置身份验证。
提供以下详情来设置 Webhook 通知:
- 可选: 用户名 :输入用户名。
- 可选: 基本身份验证密码 :
-
目标 URL :输入 webhook 通知为
PUT或POSTed的完整 URL。 - HTTP Headers :以 JSON 格式输入标头,其中键和值是字符串。例如:
{"Authentication": "988881adc9fc3655077dc2d4d757d480b5ea0e11", "MessageType": "Test"}`.
- Disable SSL Verification :默认情况下 SSL 验证是开启的,但您可以选择关闭验证目标证书真实性的功能。选择这个选项来禁用使用内部或私有 CA 的环境验证。
- HTTP 方法 :选择 Webhook 的方法:
- POST :创建新资源。它还作为操作的一个捕获全部,它们不适合于其他类别。除非您知道 Webhook 服务需要 PUT,否则您可能需要 POST。
- PUT :更新特定资源(按标识符)或资源集合。如果事先知道资源标识符,也可以使用 PUT 来创建特定资源。
25.4.9.1. Webhook 有效负载 复制链接链接已复制到粘贴板!
自动化控制器在 Webhook 端点发送以下数据:
job id
name
url
created_by
started
finished
status
traceback
inventory
project
playbook
credential
limit
extra_vars
hosts
http method
以下是通过自动化控制器返回的 webhook 消息的 启动 通知示例:
{"id": 38, "name": "Demo Job Template", "url": "https://host/#/jobs/playbook/38", "created_by": "bianca", "started":
"2020-07-28T19:57:07.888193+00:00", "finished": null, "status": "running", "traceback": "", "inventory": "Demo Inventory",
"project": "Demo Project", "playbook": "hello_world.yml", "credential": "Demo Credential", "limit": "", "extra_vars": "{}",
"hosts": {}}POST / HTTP/1.1
自动化控制器会在 Webhook 端点中 返回成功/失败状态 的数据:
job id
name
url
created_by
started
finished
status
traceback
inventory
project
playbook
credential
limit
extra_vars
hosts
以下是自动化控制器通过 Webhook 消息返回的 成功/失败 通知示例:
{"id": 46, "name": "AWX-Collection-tests-awx_job_wait-long_running-XVFBGRSAvUUIrYKn", "url": "https://host/#/jobs/playbook/46",
"created_by": "bianca", "started": "2020-07-28T20:43:36.966686+00:00", "finished": "2020-07-28T20:43:44.936072+00:00", "status": "failed",
"traceback": "", "inventory": "Demo Inventory", "project": "AWX-Collection-tests-awx_job_wait-long_running-JJSlglnwtsRJyQmw", "playbook":
"fail.yml", "credential": null, "limit": "", "extra_vars": "{\"sleep_interval\": 300}", "hosts": {"localhost": {"failed": true, "changed": 0,
"dark": 0, "failures": 1, "ok": 1, "processed": 1, "skipped": 0, "rescued": 0, "ignored": 0}}}
25.5. 创建自定义通知 复制链接链接已复制到粘贴板!
您可以在通知表单上 自定义每个 通知类型 的文本内容。
流程
- 在导航面板中,选择 → → 。
- 点 。
- 从 Type 列表中选择通知类型。
使用切换启用 自定义消息。
您可以为各种作业事件提供自定义消息,如下所示:
- 启动消息正文
- 成功消息正文
- 错误消息正文
- 工作流已批准的正文
- 工作流拒绝消息正文
- 工作流待处理消息正文
工作流超时消息正文
消息表单因您要配置的通知类型而异。例如,电子邮件和 PagerDuty 通知的消息显示为典型的电子邮件,其中包含正文和主题,在这种情况下,自动化控制器会将字段显示为 Message 和 Message Body。其他通知类型仅针对每种事件要求 消息。
Message 字段预先填充一个模板,其中包含顶层变量,并与属性合并,如
id或name。模板用大括号括起,可以从自动化控制器提供的固定字段集合中提取,如预先填充的消息字段所示:这个预先填充的字段建议通常向接收事件通知的接收者显示信息。您可以根据需要为作业添加自己的属性来自定义这些消息。自定义通知消息使用 Jinja 呈现;Ansible playbook 使用的同一模板引擎。
消息和消息正文具有不同的内容类型,如下所示:
- 信息始终只是字符串,仅一行。不支持新行。
消息正文可以是字典或文本块:
-
Webhooks 和 PagerDuty 的消息正文使用字典定义。这些的默认消息正文是
{{ job_metadata }},您可以保留原样的值,或者提供自己的字典。 电子邮件的消息正文使用文本块或多行字符串。默认消息正文为:
{{ job_friendly_name }} #{{ job.id }} had status {{ job.status }}, view details at {{ url }} {{ job_metadata }}您可以编辑此文本,使
{{ job_metadata }}留在,或者丢弃{{ job_metadata }}。由于正文是文本块,它可以是您想要的任何字符串。{{ job_metadata }}呈现为包含描述正在执行作业的字段的字典。在所有情况下,{{ job_metadata }}包括以下字段:-
id -
name -
url -
created_by -
started -
finished -
status 追溯您无法查询
{{ job_metadata }}中的各个字段。当您在通知模板中使用{{ job_metadata }}时,所有数据都会被返回。生成的字典类似如下:
{"id": 18, "name": "Project - Space Procedures", "url": "https://host/#/jobs/project/18", "created_by": "admin", "started": "2019-10-26T00:20:45.139356+00:00", "finished": "2019-10-26T00:20:55.769713+00:00", "status": "successful", "traceback": "" }如果
{{ job_metadata }}在作业中呈现,它将包括以下附加字段:-
清单(inventory) -
project -
playbook -
credential -
limit -
extra_vars 主机生成的字典类似如下:
{"id": 12, "name": "JobTemplate - Launch Rockets", "url": "https://host/#/jobs/playbook/12", "created_by": "admin", "started": "2019-10-26T00:02:07.943774+00:00", "finished": null, "status": "running", "traceback": "", "inventory": "Inventory - Fleet", "project": "Project - Space Procedures", "playbook": "launch.yml", "credential": "Credential - Mission Control", "limit": "", "extra_vars": "{}", "hosts": {} }如果
{{ job_metadata }}在工作流作业中呈现,它将包括以下附加字段:body(此枚举工作流作业中的节点,并包含与每个节点关联的作业描述)生成的字典类似如下:
{"id": 14, "name": "Workflow Job Template - Launch Mars Mission", "url": "https://host/#/workflows/14", "created_by": "admin", "started": "2019-10-26T00:11:04.554468+00:00", "finished": "2019-10-26T00:11:24.249899+00:00", "status": "successful", "traceback": "", "body": "Workflow job summary: node #1 spawns job #15, \"Assemble Fleet JT\", which finished with status successful. node #2 spawns job #16, \"Mission Start approval node\", which finished with status successful.\n node #3 spawns job #17, \"Deploy Fleet\", which finished with status successful." }
-
-
Webhooks 和 PagerDuty 的消息正文使用字典定义。这些的默认消息正文是
如果您创建使用无效语法或引用不可用字段的通知模板,则会显示一条错误消息,指出错误的性质。如果您删除通知的自定义消息,则会在其位置显示默认消息。
如果您在不编辑自定义消息(或编辑并恢复到默认值)的情况下保存通知模板,Details 屏幕会假定默认值,且不会显示自定义消息表。如果您编辑并保存任何值,则整个表会显示在 Details 屏幕中。
25.6. 启用和禁用通知 复制链接链接已复制到粘贴板!
您可以将通知设置为在特定作业启动时通知您,并在作业运行结束时出现成功或失败。请注意以下行为:
- 如果工作流作业模板启动时启用了通知,并且该工作流中的作业模板也启用了启动时通知,您会收到这两者的通知。
- 您可以启用在工作流作业模板中的多个作业模板上运行通知。
- 您可以启用在分片作业模板启动中运行的通知,每个分片都会生成通知。
- 当您启用在作业启动时运行通知并且通知被删除时,作业模板将继续运行,但会生成错误消息。
您可以从以下资源的 Details 页面中的 Notifications 选项卡在作业启动、作业成功和作业失败时启用通知:
- 作业模板
- 工作流模板
- 项目
对于具有批准节点的工作流模板,除了 启动、成功 和 Failure 外,您还可以启用或禁用某些与批准相关的事件:
其他资源
25.7. 为通知配置主机主机名 复制链接链接已复制到粘贴板!
在 System 设置中,您可以将 service 字段的 Base URL 中的默认值替换为您首选的主机名,以更改通知主机名。
刷新您的许可证也会更改通知主机名。新的自动化控制器安装不必为通知设置主机名。
25.7.1. 重置 TOWER_URL_BASE 复制链接链接已复制到粘贴板!
自动化控制器通过查看传入请求并根据该传入请求设置服务器地址来确定如何定义基本 URL (TOWER_URL_BASE)。
自动化控制器首先从数据库获取设置值。如果没有找到设置值,它将使用设置文件中的值。如果您通过进入到自动化控制器主机的 IP 地址发布许可证,发布的许可证将写入数据库中的设置条目。
如果选择了错误的地址,请使用以下步骤重置 TOWER_URL_BASE :
流程
- 在导航面板中,选择 → 。
- 点 。
- 在您要 出现在通知的 DNS 条目的 service 项中输入地址。
25.8. 通知 API 复制链接链接已复制到粘贴板!
使用已启动的 、success 或 error 端点:
/api/v2/organizations/N/notification_templates_started/
/api/v2/organizations/N/notification_templates_success/
/api/v2/organizations/N/notification_templates_error/
另外,../ .././N/notification_templates_started 端点具有 GET 和 POST 操作:
- 机构
- 项目
- 清单源
- 作业模板
- 系统作业模板
- 工作流任务模板
第 26 章 自定义通知支持的属性 复制链接链接已复制到粘贴板!
了解支持的作业属性列表以及构建通知消息文本的正确语法。
以下是支持的作业属性:
-
allow_simultaneous- (布尔值)指示多个作业是否可以从与此作业关联的作业模板同时运行。 -
controller_node- (字符串)管理隔离执行环境的实例。 -
created- (日期时间)创建此作业时的时间戳。 -
custom_virtualenv- (字符串)用于运行作业的自定义虚拟环境。 -
description- (字符串)作业的可选描述。 -
diff_mode- (布尔值)如果启用,标准输出中会显示对主机上任何模板文件进行的文本更改。 -
elapsed-(decimal)作业运行经过的时间(以秒为单位)。 -
execution_node- (字符串)作业执行的节点。 -
failed- (布尔值)如果作业失败,则为 True。 -
finished- (日期时间)作业完成执行的日期和时间。 -
force_handlers- (布尔值)当处理程序被强制运行时,它们也会在通知时运行,即使该主机上的任务失败也是如此。请注意,一些条件(如不可访问的主机)仍然可以阻止处理程序运行。 -
forks- (整数)此作业请求的 fork 数量。 -
id- (整数)此作业的数据库 ID。 -
job_explanation- (字符串)在无法运行和捕获stdout时指示作业状态的 status 字段。 -
job_slice_count- (整数)如果作为分片作业的一部分运行,则这是分片(如果为 1,则作业不是分片作业的一部分)的总数。 -
job_slice_number- (整数)如果作为分片作业的一部分运行,这是在其上操作的清单分片的 ID (如果不是分片作业的一部分,则不使用属性)。 -
job_tags- (字符串)只有带有指定标签运行的任务。 -
job_TYPE-(选择)这可以可以运行、检查或scan。 -
launch_type- (选择)这可以是手动、重新启动、回调、计划、依赖项、工作流、同步或scm。 -
limit- (字符串)如果指定,则 playbook 执行仅限于这组主机。 -
modified- (日期时间)最后一次修改此作业的时间戳。 -
name- (字符串)此作业的名称。 -
playbook-(字符串)执行的 playbook。 -
scm_revision- (字符串)用于此作业的项目中的 scm 修订(如果可用)。 -
skip_tags- (字符串)如果指定,playbook 执行将跳过此组标签。 -
start_at_task- (字符串)如果指定,playbook 执行从与此名称匹配的任务开始。 -
started- (日期时间)作业加入启动队列的日期和时间。 -
状态-(选择)可以是新的、pending、waiting、running、successful、failed、error或Canceled。 -
timeout- (整数)取消任务前运行的时间(以秒为单位)。 -
type- (选择)此作业的数据类型。 -
url- (字符串)此作业的 URL。 -
use_fact_cache- (布尔值)如果已为作业启用,自动化控制器会在 playbook 运行到数据库和缓存事实的末尾充当 Ansible 事实缓存插件。 verbosity- (选择)0 到 5 (与 Normal 到 WinRM Debug 相对应)。host_status_counts(分配给每个状态的唯一主机数量)-
skipped(整数) -
ok(整数) -
changed(整数) -
failures(整数) -
dark(整数) -
processed(整数) -
rescued(整数) -
ignored(整数) -
failed(布尔值)
-
summary_fields:清单(inventory)-
id- (整数)清单的数据库 ID。 -
name- (字符串)清单的名称。 -
description- (字符串)清单的可选描述。 -
has_active_failures- (布尔值)(已弃用)指示此清单中是否有主机失败的标记。 -
total_hosts- (已弃用)(整数)此清单中的主机总数。 -
hosts_with_active_failures- (已弃用)(整数)此清单中有活跃故障的主机数量。 -
total_groups- (已弃用)(整数)此清单中的组总数。 -
groups_with_active_failures- (已弃用)(整数)此清单中有活跃故障的主机数量。 -
has_inventory_sources- (已弃用)(布尔值)指明此清单是否具有外部清单源的标记。 -
total_inventory_sources-(整数)在此清单中配置的外部清单源总数。 -
inventory_sources_with_failures-(整数)此清单中有故障的外部清单源数量。 -
organization_id-(id)包含此清单的机构。 -
kind-(选择)(空字符串)(代表主机与清单有直接链接)或smart
-
project-
id- (整数)项目的数据库 ID。 -
name- (字符串)项目名称。 -
description(字符串)项目的可选描述。 -
status- (选择)新、pending、waiting、running、successful、failed、error、canceled、never updated、ok或missing之一。 -
scm_type(选择) 其中一个(空字符串)、git、hg、svn、insights.
-
job_template-
id- (整数)作业模板的数据库 ID。 -
description- (字符串)项目的可选描述。 -
status- (选择)新、pending、waiting、running、successful、failed、error、canceled、never updated、ok或missing之一。
-
job_template-
id- (整数)作业模板的数据库 ID。 -
name- (字符串)作业模板的名称。 -
description- (字符串)作业模板的可选描述。
-
unified_job_template-
id-(整数)统一的作业模板的数据库 ID。 -
name- (字符串)统一的作业模板的名称。 -
description- (字符串)统一的作业模板的可选描述。 -
unified_job_type-(choice)统一作业类型,如作业、workflow_job或project_update。
-
instance_group-
id- (整数)实例组的数据库 ID。 -
name- (字符串)实例组的名称。
-
created_by-
id-(int)启动操作的用户的数据库 ID。 -
username- (字符串)启动操作的用户名。 -
first_name- (字符串)名。 -
last_name-(string)姓氏。
-
labels-
count-(int)标签数。 -
results- 代表标签的字典列表。例如: {"id": 5, "name": "database jobs"}。
-
您可以使用分组大括号 {{ }} 在自定义通知消息中引用有关作业的信息。使用点表示法访问特定的作业属性,例如 {{ job.summary_fields.inventory.name }}。您可以添加在大括号或周围使用的任何字符,或纯文本,如 ":" 用于作业 ID,单引号用于表示某些描述符。自定义消息可在整个消息中包含多个变量:
{{ job_friendly_name }} {{ job.id }} ran on {{ job.execution_node }} in {{ job.elapsed }} seconds.
以下是可添加到模板中的额外变量:
-
approval_node_name- (字符串)批准节点名称。 -
approval_status-(选择)批准的、denied和timed_out之一。 -
URL- (字符串)发出通知的作业 URL (这适用于
启动、成功、失败和批准通知)。 -
workflow_url- (字符串)相关批准节点的 URL。这允许通知接收者进入相关的工作流作业页面来检查这种情况。例如,可在以下位置查看此节点:{{workflow_url }}。在与批准相关的通知中,url和workflow_url都相同。 -
job_friendly_name- (字符串)作业的友好名称。 job_metadata-(string)作业元数据作为 JSON 字符串,例如:{'url': 'https://automationcontroller.example.com/$/jobs/playbook/13', 'traceback': '', 'status': 'running', 'started': '2019-08-07T21:46:38.362630+00:00', 'project': 'Stub project', 'playbook': 'ping.yml', 'name': 'Stub Job Template', 'limit': '', 'inventory': 'Stub Inventory', 'id': 42, 'hosts': {}, 'friendly_name': 'Job', 'finished': False, 'credential': 'Stub credential', 'created_by': 'admin'}
第 27 章 使用 Webhook 复制链接链接已复制到粘贴板!
使用 Webhook 通过 Web 在应用程序之间运行指定的命令。自动化控制器目前提供 webhook 与 GitHub 和 GitLab 的集成。
使用以下服务设置 webhook:
webhook 的 GitHub 和 GitLab 的 post-status-back 功能旨在仅在某些 CI 事件下工作。在服务日志中接收其他类型的事件会导致信息类似如下:
awx.main.models.mixins Webhook 事件没有关联状态 API 端点并跳过。
27.1. 设置 GitHub Webhook 复制链接链接已复制到粘贴板!
自动化控制器可根据触发的 webhook 事件运行作业。作业状态信息(待定、错误、成功)只能针对拉取请求事件发回。如果您不需要自动化控制器将作业状态回 webhook 服务,请直接转至第 3 步。
流程
生成用于自动化控制器 的个人访问令牌 (PAT):
- 在 GitHub 帐户的配置集设置中,选择 Settings。
- 在导航面板中,选择 <> 。
- 在 Developer Settings 页面中,选择 Personal access token。
- 选择 Tokens (经典)
- 在 个人访问令牌 屏幕中,单击 。
- 提示时,请输入您的 GitHub 帐户密码以继续。
- 在 Note 字段中,输入有关此 PAT 用途的简要描述。
- 在 Select scopes 字段中,选中 repo:status、repo_deployment 和 public_repo 旁边的框。自动化 Webhook 只需要存储库范围访问权限,但邀请除外。如需更多信息,请参阅 OAuth 应用文档的范围。
点 。
重要生成令牌时,请确保复制 PAT,因为您在第 2 步中需要它。您无法在 GitHub 中再次访问此令牌。
使用 PAT 创建 GitHub 凭证(可选):
- 进入您的实例,并使用生成的令牌为 GitHub PAT 创建新凭证。
记录此凭据的名称,因为您在回发到 GitHub 的作业模板中使用它。
进入您要启用 webhook 的作业模板,然后选择 webhook 服务和您在上一步中创建的凭证。
- 点击 。您的作业模板已设置为回 GitHub。
- 进入您要配置 webhook 的 GitHub 存储库,然后选择 。
- 在导航面板中,选择 → 。
- 要完成 Add webhook 页面,您必须检查作业模板或工作流作业模板中的 Enable Webhook 选项。如需更多信息, 请参阅创建 作业模板和创建工作流作业模板 中的第 3 步。
完成以下字段:
- payload URL :从作业模板中复制 Webhook URL 的内容,并将它粘贴。结果从 GitHub 发送到此地址。
- 内容类型 :将其设置为 application/json。
- Secret :从作业模板中复制 Webhook 密钥的内容并将其粘贴到此处。
您要触发此 Webhook 的事件类型? :选择您要触发 Webhook 的事件类型。任何这样的事件都会触发作业或工作流。要让作业状态(pending, error, success)发送到 GitHub,您必须在 Let me select individual events 部分中选择 Pull requests 部分。
- Active :保留此检查。
- 点击 。
- 配置 webhook 时,它会显示在您的仓库活跃的 webhook 列表中,并能够编辑或删除它。点 webhook,进入 Manage webhook 屏幕。
- 滚动以查看向 webhook 发出的发送尝试,以及它们是成功还是失败。
其他资源
27.2. 设置 GitLab Webhook 复制链接链接已复制到粘贴板!
自动化控制器可根据触发的 webhook 事件运行作业。作业状态信息(待定、错误、成功)只能针对拉取请求事件发回。如果自动化控制器不需要将作业状态回 webhook 服务,请直接转至第 3 步。
流程
生成用于自动化控制器 的个人访问令牌 (PAT):
- 在 GitLab 中的导航面板中,选择您的 avatar 和 。
- 在导航面板中,选择 。
完成以下字段:
- 令牌名称 :输入有关此 PAT 用途的简要描述。
- 过期日期 :跳过此字段,除非您想为您的 webhook 设置过期日期。
- 选择范围 :选择适用于您的集成的范围。对于自动化控制器,api 是唯一需要的选择。
单击 。
重要生成令牌时,请确保复制 PAT,因为您在第 2 步中需要它。您无法在 GitLab 中再次访问此令牌。
使用 PAT 创建 GitLab 凭证(可选):
- 进入您的实例,并使用生成的令牌为 GitLab PAT 创建新凭证。
记录此凭据的名称,因为您在回发到 GitLab 的作业模板中使用它。
进入您要启用 webhook 的作业模板,然后选择 webhook 服务和您在上一步中创建的凭证。
- 点击 。您的作业模板设置为回发到 GitLab。
- 进入您要配置 webhook 的 GitLab 存储库。
- 在导航面板中,选择 → 。
- 要完成 Add webhook 页面,您必须检查作业模板或工作流作业模板中的 Enable Webhook 选项。如需更多信息, 请参阅创建 作业模板和创建工作流作业模板 中的第 3 步。
完成以下字段:
- URL :从作业模板中复制 Webhook URL 的内容,并将它粘贴。结果从 GitLab 发送到此地址。
- Secret Token :从作业模板中复制 Webhook 密钥的内容并粘贴它。
- trigger :选择您要触发 Webhook 的事件类型。 任何这样的事件都会触发作业或工作流。要让作业状态(pending, error, success)发送到 GitLab,您必须在 Trigger 部分中选择 Merge request 事件。
- SSL 验证 :使 启用 SSL 验证 被选择。
- 点击 。
- 配置 webhook 后,它会显示在存储库的列表 Project Webhooks 中,并能够测试事件、编辑或删除 webhook。测试 Webhook 事件会显示每个页面的结果是成功还是失败。
其他资源
27.3. 查看有效负载输出 复制链接链接已复制到粘贴板!
您可以查看作为额外变量公开的整个有效负载。
流程
- 在导航面板中,选择 → 。
- 选择启用了 webhook 的作业模板。
- 选择 Details 选项卡。
在 Extra Variables 字段中,查看
awx_webhook_payload变量中的有效负载输出,如下例所示:
自动化控制器支持与 Red Hat Insights 集成。
当使用 Red Hat Insights 注册主机时,它会持续扫描漏洞和已知的配置冲突。识别的每个问题都可以以 Ansible Playbook 的形式进行相关的修复。
Red Hat Insights 用户创建一个维护计划来对修复进行分组,并您可以创建一个 playbook 来缓解问题。自动化控制器通过 Red Hat Insights 项目跟踪维护计划 playbook。
通过基本授权向 Red Hat Insights 进行身份验证由特殊凭证支持,它必须首先在自动化控制器中建立。
要运行 Red Hat Insights 维护计划,您需要一个 Red Hat Insights 项目和清单。
28.1. 创建 Red Hat Insights 凭证 复制链接链接已复制到粘贴板!
要创建 Red Hat Insights 凭证,请使用以下流程:
流程
- 在导航面板中,选择 → → 。
- 点 。
在以下字段中输入相关信息:
- 名称 :输入凭证的名称。
- 可选: 描述 :输入凭证的描述。
-
可选: 机构 :输入与凭证关联的机构名称,或者点击搜索
图标并从 Select organization 窗口中选择它。
凭证类型 :输入 Insights 或从列表中选择它。
- 用户名 :输入有效的 Red Hat Insights 凭证。
Password: 输入有效的 Red Hat Insights 凭证。
Insights for Ansible Automation Platform 凭证是用户的 红帽客户门户网站 帐户的用户名和密码。
- 点 。
28.2. 创建 Red Hat Insights 项目 复制链接链接已复制到粘贴板!
使用以下步骤创建新项目以用于 Red Hat Insights:
流程
- 在导航面板中,选择 → 。
- 单击 。
在以下字段中输入相关详情。请注意,以下字段需要特定的 Red Hat Insights 相关条目:
- 名称 :输入 Red Hat Insights 项目的名称。
- 可选: 描述 :输入项目的描述。
-
机构 :输入与凭证关联的机构名称,或者点击搜索
图标并从 Select organization 窗口中选择它。
- 可选: 执行环境 :用于使用这个项目的作业的执行环境。
- 源控制类型 :选择 Red Hat Insights。
- 可选: 内容签名验证凭证 :启用内容签名以验证内容在项目同步时是否保持安全。
-
Insights 凭证 :这会预先填充您之前创建的 Red Hat Insights 凭证。如果没有,输入凭证,或者点击搜索
图标并从 Select Insights Credential 窗口中选择它。
从 Options 字段中选择此项目的更新选项,并提供任何其他值(如果适用)。有关每个选项的更多信息,请点每个选项旁的工具提示
图标。
- 单击 。
您第一次保存新项目时,所有 SCM 和项目同步会自动进行。如果您希望它们被更新为 Red Hat Insights 中的当前内容,点项目可用操作下的更新
图标手动更新基于 SCM 的项目。
此过程会将 Red Hat Insights 项目与 Red Hat Insights 帐户解决方案同步。请注意,当同步运行后,项目名称旁的状态点会更新。
28.3. 创建 Insights 清单 复制链接链接已复制到粘贴板!
Insights playbook 包含一个 hosts: 行,其中值是提供给红帽 insights 的主机名,它与提供给自动化控制器的主机名不同。
28.4. 修复 Red Hat Insights 清单 复制链接链接已复制到粘贴板!
修复 Red Hat Insights 清单可让自动化控制器使用单个点击运行 Red Hat Insights playbook。
您可以通过创建一个作业模板来运行 Red Hat Insights 修复。
流程
- 在导航菜单中选择 → 。
- 在 Templates 列表视图中,点 并从列表中选择。
在以下字段中输入相关详情。请注意,以下字段需要特定的 Red Hat Insights 相关条目:
- 名称 :输入维护计划的名称。
- 可选: 描述 :输入作业模板的描述。
- Job Type: 如果还没有填充,请从作业类型列表中选择 Run。
- 清单 :选择您之前创建的 Red Hat Insights 清单。
- 项目 :选择您之前创建的 Red Hat Insights 项目。
- 可选: 执行环境 :用于执行的容器镜像。
- Playbook: 从 playbook 列表中选择一个与您要运行的维护计划关联的 playbook。
-
可选:凭证 :输入要用于此项目的凭证,或者点击搜索(
)图标并从弹出窗口中选择它。 凭证不必是 Red Hat Insights 凭证。
详细程度 :保持默认设置,或者从列表中选择所需的详细程度。
- 单击 。
-
点击启动
图标启动作业模板。
完成后,作业将生成 Job Details 页面。
第 29 章 自动化控制器的最佳实践 复制链接链接已复制到粘贴板!
下面描述了使用自动化控制器的最佳实践:
29.1. 使用源控制 复制链接链接已复制到粘贴板!
自动化控制器支持直接存储在服务器上的 playbook。因此,您必须将 playbook、角色和任何关联的详情存储在源控制中。这样,您就能获得一个审计跟踪,用于描述您何时和为什么更改了自动化基础架构的规则。另外,它允许与基础架构或团队的其他部分共享 playbook。
29.2. Ansible 文件和目录结构 复制链接链接已复制到粘贴板!
如果您要创建跨项目使用的通用角色集合,则应该通过源控制子模块或一个通用位置(如 /opt )访问它们。项目不应预期从其他项目导入角色或内容。
有关更多信息,请参阅 Ansible 文档中的链接 常规提示。
-
避免使用 playbooks
vars_prompt功能,因为自动化控制器不以交互方式允许vars_prompt问题。如果无法使用vars_prompt,请参阅 作业模板功能中的调查。 -
避免使用 playbook
暂停功能时没有超时,因为自动化控制器不允许以交互方式取消暂停。如果无法使用pause,则必须设置超时。
作业使用 playbook 目录作为当前工作目录,尽管必须编写作业来使用 playbook_dir 变量,而不必依赖于此操作。
29.3. 使用动态清单源(Dynamic Inventory Sources) 复制链接链接已复制到粘贴板!
如果您的基础架构有外部的数据源,无论是云供应商还是本地 CMDB,最好定义一个清单同步过程,并使用对动态清单(包括云清单源)的支持。这样可确保您的清单始终为最新版本。
只要 未设置 - overwrite_vars,在清单同步后编辑和添加清单主机变量仍然有效。
29.4. 清单的变量管理 复制链接链接已复制到粘贴板!
使用主机和组定义保留变量数据(请参阅清单编辑器),而不是使用 group_vars/ 和 host_vars/。如果使用动态清单源,只要未设置 Overwrite Variables 选项,自动化控制器就可以将这些变量与数据库同步。
29.5. 自动缩放 复制链接链接已复制到粘贴板!
使用 "callback" 功能允许新引导实例请求配置自动扩展或置备集成。
29.6. 大量主机 复制链接链接已复制到粘贴板!
将作业模板上的 "forks" 设置为较大的值,以增加执行运行的并行性。
29.7. 持续集成/持续部署 复制链接链接已复制到粘贴板!
对于持续集成系统(如 Jenkins)来生成作业,它必须向作业模板发出 curl 请求。作业模板的凭证不需要提示输入任何特定密码。有关配置和使用说明,请参阅 Ansible 文档中的安装。
第 30 章 术语表 复制链接链接已复制到粘贴板!
- ad hoc
-
临时命令 使用 Ansible 执行快速命令,使用 /usr/bin/ansible,而不是编配语言,即
/usr/bin/ansible-playbook。一个临时命令的示例可能会在您的基础架构中重新引导 50 个机器。您可以编写 Playbook 来完成任何操作。playbook 也可以将许多其他操作组合在一起。 - Automation mesh
- 描述由节点组成的网络。节点之间的通信通过 TCP、UDP 或 Unix 套接字等协议在传输层建立。
另请参阅 节点。
- 回调插件(Callback Plugin)
- 是指用户编写的代码,这些代码可以从 Ansible 截获结果并对其执行操作。GitHub 项目中的一些示例执行自定义日志记录、发送电子邮件或播放声音效果。
- 控制组群
- 也称为 'cgroups',控制组是 Linux 内核中的一个功能,使资源可以被分组并分配以运行进程。除了将资源分配给进程外,cgroups 还可以报告 cgroup 内运行的所有进程使用资源。
- 检查模式
-
使用-
check选项运行 Ansible,该选项不会在远程系统上进行任何更改,而是仅输出命令在没有此标志的情况下运行时可能发生的更改。这与其它系统中所谓的"dry run"模式类似。但是,这不会考虑意外的命令故障或级联效果(在其它系统中有类似模式)。使用 Check 模式了解可能发生的情况,但它并不是一个好的暂存环境的替代品。 - 容器组
- 容器组是实例组的一种类型,用于指定在运行任务的 Kubernetes 或 OpenShift 集群中置备 pod 的配置。这些 pod 按需置备,且仅在 playbook 运行期间存在。
- 凭证
- 身份验证详情,供自动化控制器用于针对机器启动作业、与清单源同步以及从版本控制系统中导入项目内容。如需更多信息,请参阅管理用户凭证。
- 凭证插件
- Python 代码,包含外部凭证类型、其元数据字段以及与 secret 管理系统交互所需代码的定义。
- 分布式作业
- 由作业模板、清单和分片大小组成的作业。执行后,分布式作业会将每个清单划分为多个"分片大小"块,然后用于运行较小的作业分片。
- 外部凭证类型
- 用于与 secret 管理系统进行身份验证的受管凭证类型。
- 事实
-
事实是发现与远程节点相关的内容。虽然它们可以像变量一样在 playbook 和模板中使用,但事实是推断出来的,而不是设置。通过在远程节点上执行内部设置模块,在运行 play 时自动发现事实。您不必显式调用 setup 模块:只需要运行。如果不需要,可以禁用它来节省时间。为方便从其他配置管理系统切换的用户,事实模块也会从
ohai和facter工具中提取事实(如果分别安装了事实库)和 Puppet。 - Forks
-
Ansible 和自动化控制器并行与远程节点通信。可以在创建或编辑作业模板的过程中通过传递-
forks或编辑配置文件中的默认设置,以多种方式设置并行级别。默认值为非常保守的五个 fork,但如果您有大量 RAM,您可以将它设置为更高的值,如 50,以增加并行性。 - Group
- Ansible 中的一组主机,可以作为集合进行寻址,其中很多主机可以存在于单个清单中。
- 组变量
-
group_vars/文件是存储在具有清单文件的目录中的文件,具有以每个组命名的可选文件名。这是放置为给定组提供的变量(特别是复杂的数据结构)的便捷位置,因此这些变量不必嵌入到清单文件或 playbook 中。 - 处理程序(handler)
- 处理程序类似于 Ansible playbook 中的常规任务(请参阅 任务),但只有任务包含"notify"指令并且指示它更改了内容时才运行。例如,如果更改了配置文件,则引用配置文件模板操作的任务可能会通知服务重启处理程序。这意味着,只有在需要重启服务时,才能退回服务。处理程序可用于服务重启以外的内容,但服务重启是最常见的用途。
- 主机
- 由自动化控制器管理的系统,可能包含物理、虚拟或基于云的服务器,或其他设备(通常是操作系统实例)。主机包含在清单中。有时被称为"节点"。
- 主机指定符
- Ansible 中的每个 Play 将一系列任务(定义系统的角色、目的或顺序)映射到一组系统。每个 play 中的这个"hosts:"指令通常称为主机指定符。它可以选择一个系统、多个系统、一个或多个组,或者一个组中的主机,并且明确不在另一个组中。
- 实例组
- 包含用于在集群环境中使用的实例的组。实例组提供根据策略对实例进行分组的功能。
- 清单(Inventory)
- 可对其启动任务的主机集合。
- 清单脚本
- 查找主机、组成员资格以及来自外部资源的变量信息的程序,无论是 SQL 数据库、CMDB 解决方案还是 LDAP。这个概念由 Puppet (其中称为"外部节点分类器")调整,并以类似的方式工作。
- 清单源
- 有关要合并到当前清单组中的云或其他脚本的信息,从而自动填充组、主机以及有关这些组和主机的变量。
- 作业
- 自动化控制器启动的许多后台任务之一,这通常是实例化作业模板来启动 Ansible playbook。其他类型的作业包括清单导入、从源控制进行项目同步或管理清理操作。
- 作业详情
- 运行特定作业的历史记录,包括其输出和成功/失败状态。
- 作业分片
- 请参阅 分布式作业。
- 任务模板
- Ansible playbook 以及启动它所需的一组参数的组合。如需更多信息,请参阅 作业模板。
- JSON
- JSON 是基于文本的格式,用于根据 JavaScript 对象语法表示结构化数据。Ansible 和自动化控制器使用 JSON 从远程模块返回数据。这可让使用任何语言编写的模块,而不只是 Python 编写的模块。
- 元数据
- 身份验证后,用于在外部系统中查找 secret 的信息。用户在将外部凭证链接到目标凭证字段时提供此信息。
- 节点
节点对应于实例数据库模型或
/api/v2/instances/端点中的条目,是参与集群或网格的机器。统一作业 API 报告controller_node和execution_node字段。执行节点是作业运行的位置,以及作业和服务器功能之间的控制器节点接口。Expand 节点类型 描述 控制
运行持久服务的节点,并将作业委托给混合节点和执行节点。
混合
运行持久服务和执行作业的节点。
hop
仅用于跨网格转发。
执行
用于运行从控制节点交付的作业的节点(从用户的 Ansible 自动化提交的作业)
- 通知模板
- 通知类型的实例(电子邮件、Slack 、Webhook 等),其名称、描述和定义的配置。
- 通知
- 通知(如 Email、Slack 或 Webhook)在通知模板中定义名称、描述和配置。例如,当作业失败时,将使用通知模板定义的配置发送通知。
- 通知
- 任务注册更改事件并通知处理器任务在 play 结束时需要运行另一个操作。如果处理程序由多个任务通知,它仍然仅运行一次。处理程序按照列出的顺序运行,而不是按照通知的顺序运行。
- 机构(Organization)
- 用户、团队、项目和清单的逻辑集合。机构是对象层次结构中的最高级别。
- Organization Administrator(机构管理员)
- 具有修改机构成员资格和设置权限的用户,包括在该机构中创建新用户和项目。机构管理员也可以向该机构内的其他用户授予权限。
- 权限
- 分配给用户和团队的权限集,它提供读取、修改和管理项目、清单和其他对象的能力。
- Play
- 一个 play 在由主机指定符选择的一组主机(通常由组选择,但有时由主机名 glob 选择)与那些主机上运行的任务之间的映射最小,以定义这些系统执行的角色。playbook 是 play 的列表。playbook 中可以有一个或多个 play。
- Playbook
- 一个 Ansible playbook。如需更多信息,请参阅开始使用 playbook。
- policy
- 策略指定实例组的行为方式以及任务的执行方式。
- 项目
- 自动化控制器中代表 Ansible playbook 的逻辑集合。
- 角色
- 角色是 Ansible 和自动化控制器中的机构单元。将角色分配给一组主机(或一组组或主机模式等)意味着它们实施特定的行为。角色可以包含应用变量值、任务和处理程序,或者这些因素的组合。由于与角色关联的文件结构,角色成为可重新分发的单元,允许您在 playbook 或其他用户之间共享行为。
- Secret 管理系统
- 用于安全存储并控制对令牌、密码、证书、加密密钥和其他敏感数据的访问的服务器或服务。
- 调度
- 作业应自动运行的日期和时间日历。
- 分片作业
- 请参阅 分布式作业。
- 源凭证
- 链接到目标凭证字段的外部凭证。
- Sudo
-
Ansible 不需要 root 登录,因为它是无守护进程的,因此不需要 root 级别守护进程(可能是敏感环境中的安全问题)。Ansible 可以登录并执行嵌套在
sudo命令中的许多操作,并可处理无密码和基于密码的 sudo。在以sudo模式运行时,可以使用 Ansible 复制、模板 和 获取 模块来实现一些通常无法使用sudo的操作(如scp文件传输)。 - 超级用户
- 具有编辑系统中任何对象权限的服务器的管理员,无论它是否与任何机构相关联。超级用户可以创建机构和其他超级用户。
- 问卷调查
- 在作业启动时由作业模板询问的问题,可在作业模板上配置。
- 目标凭证
- 一个非外部的凭证,它带有一个输入字段,用来链接到外部凭证。
- Team
- 具有关联用户、项目、凭证和权限的机构子部门。团队提供了一种方式来实现基于角色的访问控制方案,并跨机构委派职责。
- 用户
- 具有相关权限和凭证的操作器。
- Webhook
- Webhook 支持应用程序之间的通信和信息共享。它们用于响应推送到 SCM 的提交以及启动作业模板或工作流模板。
- 工作流作业模板
- 由任何作业模板组合、项目同步和清单同步组成的集合,将它们链接在一起,以便以单个单元的形式执行。
- YAML
- 人类可读的语言,通常用于编写配置文件。Ansible 和自动化控制器使用 YAML 定义 playbook 配置语言和变量文件。YAML 具有最小的语法,非常干净,用户可以轻松地。它是配置文件和人类的数据格式,但也是机器可读。YAML 在动态语言社区中很常见,格式具有可用于多种语言序列化的库。示例包括 Python、Perl 或 Ruby。