您可以将 Ansible Tower 与 Cloud Assembly 集成,以支持已部署资源的配置管理。配置集成后,可以从云模板编辑器将 Ansible Tower 虚拟组件添加到新部署或现有部署中。

前提条件

  • 授予非管理员用户访问 Ansible Tower 的适当权限。对于大多数配置,有两种适用方法。请选择最适合您配置的方法。
    • 在组织级别为用户授予清单管理员和作业模板管理员角色。
    • 为用户授予特定清单的管理员权限,以及用于置备的所有作业模板的执行角色。
  • 您必须在 Ansible Tower 中配置相应的凭据和模板,以与您的部署配合使用。模板可以是作业模板或工作流模板。作业模板定义用于部署的清单和 playbook。作业模板和 playbook 之间存在 1:1 映射。Playbook 使用类似 YAML 的语法来定义与模板关联的任务。对于大多数典型部署,请使用计算机凭据进行身份验证。

    工作流模板允许用户创建序列,这些序列包含作业模板、项目同步和清单同步的任意组合,并链接在一起以便您可以作为一个单元执行。Ansible Tower 工作流可视化工具可帮助用户设计工作流模板。对于大多数典型部署,可以使用计算机凭据进行身份验证。

    1. 登录到 Ansible Tower 并导航到“模板”部分。
    2. 选择“添加新作业”模板。
      • 选择已创建的凭据。这些是将由 Ansible Tower 管理的计算机的凭据。每个作业模板可以有一个凭据对象。
      • 对于“限制”选择,选择“启动时提示”。这可确保作业模板针对正从 Cloud Assembly 置备或取消置备的节点运行。如果未选择此选项,则在部署包含作业模板的蓝图时,将显示“未设置限制”错误。
    3. 选择“添加新工作流”模板。
      • 选择已创建的凭据,然后定义清单。使用工作流可视化工具,设计工作流模板。

      对于工作流模板或作业模板的“限制”框,通常会选择“启动时提示”。选择此选项可确保作业模板或工作流模板针对正从 Cloud Assembly 置备或取消置备的节点运行。

  • 您可以在 Ansible Tower 的“作业”选项卡上查看从 Cloud Assembly 调用的作业模板或工作流模板的执行情况。

过程

  1. 选择基础架构 > 连接 > 集成,然后单击添加集成
  2. 单击 Ansible Tower。
    此时将显示 Ansible 配置页面。
  3. 输入主机名(可以是 IP 地址)以及 Ansible Tower 实例所需的其他信息。
  4. 为适用的 Ansible Tower 实例输入基于 UI 的身份验证用户名密码
  5. 单击验证以验证集成。
  6. 为集成键入适当的名称描述
  7. 单击添加

结果

Ansible Tower 可在云模板中使用。

下一步做什么

将 Ansible Towe 组件添加到所需云模板。必须为在集成帐户中指定的用户指定适用的作业模板和执行权限。

  1. 在云模板画布页面上,选择蓝图选项菜单上“配置管理”标题下的“Ansible”,然后将 Ansible Tower 组件拖动到画布。
  2. 使用右侧面板配置相应的 Ansible Tower 属性,例如作业模板。

将 Ansible Tower 图标添加到云模板时,vRealize Automation 会在 Ansible Tower 中为连接的虚拟机创建主机条目。默认情况下,vRealize Automation 将使用虚拟机的资源名称创建主机条目,但可以使用蓝图 YAML 中的 hostName 属性指定任何名称。为了与计算机进行通信,vRealize Automation 将为主机条目创建 ansible_host: IP Address 变量。可以覆盖默认行为,使用 FQDN 配置通信,具体方法为在 hostVariables 下指定关键字 ansible_host,并提供 FQDN 作为其值。以下 YAML 代码片段显示了如何配置主机名和 FQDN 通信的示例:

Cloud_Ansible_Tower_1:
	type: Cloud Ansible Tower
	properties:
		host: name of host
		account: name of account
		hostName: resource name
		hostVariables:
			ansible_host:Host FQDN
			

在此示例中,通过提供 FQDN 覆盖默认的 ansible_host 值。如果用户希望 Ansible Tower 使用 FQDN 连接到主机,此功能可能非常有用。

YAML 中 hostVariables 的默认值为 ansible_host:IP_address,并且 IP 地址用来与服务器通信。

如果 Ansible Tower 的 YAML 计数属性大于 1,则主机名可以映射到相应虚拟机的任何属性。以下示例显示了名为 Ubuntu-VM 的虚拟机资源的映射(如果要将其地址属性映射到主机名)。

 hostname: '${resource.Ubuntu-VM.address[count.index]}' 

将 Ansible Tower 组件添加到云模板时,可以指定要在云模板 YAML 中调用的作业模板。此外,还可以指定工作流模板或作业模板和工作流模板的组合。如果未指定模板类型,则默认情况下,vRealize Automation 会假定您将调用作业模板。

以下 YAML 代码段显示了如何在 Ansible Tower 云模板中调用作业模板和工作流模板组合的示例。

Cloud_Ansible_1:
type: Cloud.Ansible.Tower
  properties:
    host: ‘${resource.CentOS_Machine.*}’
    account:
    maxConnectionRetries: 2
    maxJobRetries: 2
    templates:
      provision:
        - name: My workflow
          type: workflow
        - name: My job template      

我们添加了 maxConnectionsRetriesmaxJobRetries 以处理 Ansible 相关故障。云模板接受自定义值,如果未提供值,则使用默认值。对于 maxConnectionRetries,默认值为 10,对于 maxJobRetries,默认值为 3。

注: 早期版本的 vRealize Automation 仅支持在云模板中使用 jobTemplate 结构定义执行作业模板。jobTemplate 现已弃用,可能会在未来版本中移除。目前,使用 jobTemplate 属性将继续正常工作。要运行工作流模板并使用其他功能,建议使用模板结构定义。

Ansible Tower 集成的 Cloud Assembly 云模板包括 useDefaultLimit 属性,该属性具有 true 或 false 值,用于定义 Ansible 模板的执行位置。Ansible 模板可以是作业模板或工作流模板。如果该值设置为 true,则指定的模板将针对在 Ansible“模板”页面上的“限制”框中指定的计算机运行。如果该值设置为 false,则模板将针对已置备的计算机运行,但用户应选中 Ansible Tower“模板”页面上的“启动时提示”复选框。默认情况下,此属性的值为 false。以下 YAML 示例展示了 useDefaultLimit 属性在云模板中的显示方式。

templates:
  provision:
    - name: ping aws_credentials
      type: job
      useDefaultLimit: false
      extraVars: '{"rubiconSurveyJob" : "checkSurvey"}'

此外,如上例所示,可以使用 extraVars 属性指定额外变量或调查变量。此功能对于运行需要输入的模板非常有用。如果用户保留了调查变量,则您必须在云模板的 extraVars 部分中传递该变量,以避免出现错误。