可以將 Ansible Automation Platform (先前稱為 Ansible Tower) 與 Automation Assembler 整合,以支援已部署資源的組態管理。設定整合後,您可以透過雲端範本編輯器將 Ansible Automation Platform 虛擬元件新增至新部署或現有部署中。

必要條件

  • 為非管理員使用者授與存取 Ansible Automation Platform 的適當權限。有兩個選項可用於大多數組態。選擇最適合您組態的一個選項。
    • 在組織層級授與使用者「詳細目錄管理員」和「工作範本管理員」角色。
    • 授與使用者對特定詳細目錄的管理員權限,以及對用於佈建的所有工作範本的「執行」角色。
  • 您必須在 Ansible Automation Platform 中設定適當的認證和範本,以便與您的部署搭配使用。範本可以是工作範本,也可以是工作流程範本。工作範本定義了要與部署搭配使用的詳細目錄和 playbook。工作範本與 playbook 之間存在 1:1 對應。Playbook 使用類似 YAML 的語法來定義與範本相關聯的工作。對於大多數一般部署,使用機器認證進行驗證。

    工作流程範本允許使用者建立由連結在一起的工作範本、專案同步和詳細目錄同步之任意組合所組成的序列,以便您將這些序列作為一個單位執行。Ansible Automation Platform 工作流程視覺化工具可協助使用者設計工作流程範本。對於大多數一般部署,您可以使用機器認證進行驗證。

    如果使用 Ansible Automation Platform,則必須在 Ansible Controller 上定義執行環境以滿足 ansible-runner 相依性。如需有關執行環境和容器映像的詳細資訊,請參閱 Ansible 說明文件。特別是,請參閱 https://docs.ansible.com/automation-controller/4.2.0/html/userguide/execution_environments.html

    1. 登入 Ansible Automation Platform,然後導覽至 [範本] 區段。
    2. 選取 [新增工作範本]。
      • 選取您已建立的認證。這些是將由 Ansible Automation Platform 管理之機器的認證。對於每個工作範本,可以有一個認證物件。
      • 在 [限制] 選取項目中,選取 [啟動時提示]。這可確保工作範本針對從 Automation Assembler 佈建或取消佈建的節點執行。如果未選取此選項,則會在部署包含工作範本的藍圖時顯示 [未設定限制] 錯誤。
    3. 選取 [新增工作流程範本]。
      • 選取已建立的認證,然後定義詳細目錄。透過工作流程視覺化工具,可以設計工作流程範本。

      對於工作流程或工作範本的 [限制] 方塊,通常可以選取 [啟動時提示]。此選取項目可確保工作或工作流程範本針對從 Automation Assembler 佈建或取消佈建的節點執行。

  • 您可以在 Ansible Tower 的 [工作] 索引標籤上,檢視從 Automation Assembler 叫用的工作範本或工作流程範本執行。

程序

  1. 選取基礎結構 > 連線 > 整合,然後按一下新增整合
  2. 按一下 [Ansible Tower]。
    隨即出現 [Ansible 組態] 頁面。
  3. 輸入主機名稱 (可以是 IP 位址),以及 Ansible Automation Platform 執行個體的其他所需資訊。
  4. 針對適用的 Ansible Automation Platform 執行個體,輸入以使用者介面為基礎的驗證使用者名稱密碼
  5. 按一下驗證來驗證整合。
  6. 為整合輸入適當的名稱說明
  7. 按一下新增

結果

Ansible Tower 可在雲端範本中使用。

下一步

將 Ansible Automation Platform 元件新增至所需雲端範本。必須針對整合帳戶中指定的使用者指定適用的工作範本及執行權限。

  1. 在雲端範本畫布頁面上,選取藍圖選項功能表上 [組態管理] 標題下的 Ansible,然後將 Ansible Automation Platform 元件拖曳至畫布。
  2. 使用右側面板設定適當的 Ansible Automation Platform 內容,例如工作範本。

將 Ansible Automation Platform 動態磚新增到雲端範本時,VMware Aria Automation 會在 Ansible Automation Platform 中為已連結的虛擬機器建立主機項目。依預設,VMware Aria Automation 將使用虛擬機器的資源名稱來建立主機項目,但您可以使用藍圖 YAML 中的 hostName 內容指定任何名稱。為了與機器通訊,VMware Aria 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 Automation Platform 的 YAML 計數內容大於 1,則主機名稱可以對應到相應虛擬機器的任何內容。下列範例顯示了名為 Ubuntu-VM 的虛擬機器資源的對應 (如果要將其位址內容對應至主機名稱)。

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

將 Ansible Automation Platform 元件新增至雲端範本時,可以指定要在雲端範本 YAML 中呼叫的工作範本。此外,還可以指定工作流程範本,或工作範本和工作流程範本的組合。如果您不指定範本類型,則 VMware Aria 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。

備註: 舊版 VMware Aria Automation 支援僅使用雲端範本中的 jobTemplate 架構執行工作範本。jobTemplate 現已過時,並且可能會在未來版本中移除。目前,使用 jobTemplate 內容時將會繼續按預期運作。若要執行工作流程範本並使用其他功能,建議使用範本架構。

Ansible Automation Platform 整合的 Cloud Assembly 雲端範本包括具有 true 或 false 值的 useDefaultLimit 內容,用於定義 Ansible 範本的執行位置。Ansible 範本可以是工作範本,也可以是工作流程範本。如果此值設為 true,則會針對 Ansible [範本] 頁面上 [限制] 方塊中指定的機器執行指定的範本。如果此值設為 false,則會針對已佈建的機器執行範本,但使用者應勾選 Ansible Automation Platform [範本] 頁面上的 [啟動時提示] 核取方塊。依預設,此內容的值為 false。下列 YAML 範例顯示 useDefaultLimit 內容在雲端範本中的顯示方式。

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

此外,如上述範例所示,您可以使用 extraVars 內容指定額外變數或調查變數。此功能對於執行需要輸入的範本來說很有用。如果使用者維持了調查變數,則必須在雲端範本的 extraVars 區段中傳遞該變數,以避免發生錯誤。

具有雲端管理員權限的使用者可以變更包含 Ansible 開放原始碼資源和 Ansible Automation Platform 資源的部署專案。該功能可作為部署層級的第 2 天動作使用。

若要變更 Ansible 部署的專案,請從該部署的 [動作] 功能表中選取 [變更專案] 選項,如 Cloud Assembly [部署] 頁面上所示,然後選擇目標專案並在顯示的對話方塊上按一下提交

雖然 Ansible Tower 整合不支援 groups 內容,但客戶可以使用虛擬機器標籤和 VMware 詳細目錄外掛程式實現同等功能,如以下文章中所述:https://docs.ansible.com/ansible/latest/collections/community/vmware/vmware_vm_inventory_inventory.html

使用者必須進行兩項變更才能使其正常執行:
  • 在雲端範本中使用 ansible_host (例如 FQDN) 和 hostName
  • 在 AWX 中,開啟「啟動時更新」旗標;即,在執行 playbook 之前,同步到新主機的 vCenter。同步將合併由 VMware Aria Automation 新增並由 VMware 詳細目錄外掛程式匯入的 FQDN 主機項目,並將主機指派給群組。將使用上述同步來源變數根據虛擬機器標籤值建立詳細目錄群組。
備註: 雖然 VMware 並不正式支援使用 AWX,但在本文所述的情況下,AWX 將起作用。

如需範例實作,請參閱以下雲端範本。

# Created by Quickstart wizard.
name: RHEL 8
version: 0.0.1
formatVersion: 1
inputs:
  image:
    type: string
    description: Select an OS Version
    default: RHEL 8 Base
    enum:
      - RHEL 8 Base
      - RHEL 7 Base
  AWX:
    type: string
    description: Choose AWX Environment
    enum:
      - LabAWX
      - FA/CC-AWX
  envrionmnetTag:
    type: string
    description: Choose VM Environment
    enum:
      - cel
      - mag
      - wdr
  purposeTag:
    type: string
    description: Choose Server Purpose
    default: ''
    enum:
      - ''
      - mariadb
      - oracle
  authGroupTag:
    type: string
    description: Choose Authentication Group
    default: ''
    enum:
      - ''
      - dbo_linux
      - oracle
      - postgres
  hostname:
    type: string
    description: Desired hostname
    default: changeme
  cpuCount:
    type: integer
    description: Number of virtual processors
    default: 1
  totalMemoryMB:
    type: integer
    description: Machine virtual memory size in Megabytes
    default: 1024
  disk1Size:
    type: integer
    description: A SIZE of 0 will disable the disk and it will not be provisioned.
    default: 0
  disk2Size:
    type: integer
    description: A SIZE of 0 will disable the disk and it will not be provisioned.
    default: 0
  neededip:
    type: string
    description: Enter an available IP Address
    title: Needed-IP-Address
  vlan:
    type: string
    description: Enter in needed vlan
    title: Enter VLAN ID example "vl500"
resources:
  Cloud_Ansible_Tower_1:
    type: Cloud.Ansible.Tower
    metadata:
      layoutPosition:
        - 0
        - 0
    properties:
      host: ${resource.Cloud_vSphere_Machine_1.*}
      account: ${input.AWX}
      hostName: ${input.hostname}
      hostVariables:
        ansible_host: ${input.hostname}.dcl.wdpr.disney.com
      templates:
        provision:
          - name: Linux-Role
  Cloud_vSphere_Machine_1:
    type: Cloud.vSphere.Machine
    metadata:
      layoutPosition:
        - 0
        - 1
    properties:
      image: ${input.image}
      Infoblox.IPAM.Network.dnsSuffix: dcl.wdpr.disney.com
      Infoblox.IPAM.Network.dnsView: Internal
      customizationSpec: Rhel7Base
      name: ${input.hostname}
      cpuCount: ${input.cpuCount}
      totalMemoryMB: ${input.totalMemoryMB}
      attachedDisks: ${map_to_object(resource.Cloud_Volume_1[*].id + resource.Cloud_Volume_2[*].id, "source")}
      networks:
        - network: ${resource.Cloud_vSphere_Network_1.id}
          assignment: static
          address: ${input.neededip}
      tags:
        - key: Server-Team
          value: ${input.envrionmnetTag}
        - key: Server-Team
          value: ${input.purposeTag}
        - key: Server-Team
          value: ${input.authGroupTag}
  Cloud_Volume_1:
    type: Cloud.Volume
    metadata:
      layoutPosition:
        - 0
        - 2
    properties:
      count: '${input.disk1Size == 0 ? 0 : 1 }'
      capacityGb: ${input.disk1Size}
  Cloud_Volume_2:
    type: Cloud.Volume
    metadata:
      layoutPosition:
        - 0
        - 3
    properties:
      count: '${input.disk2Size == 0 ? 0 : 1}'
      capacityGb: ${input.disk2Size}
  Cloud_vSphere_Network_1:
    type: Cloud.vSphere.Network
    metadata:
      layoutPosition:
        - 1
        - 0
    properties:
      networkType: existing
      constraints:
        - tag: ${input.vlan}