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

如果使用 vSphere,則必須設定雲端 Proxy。

必要條件

  • 為非管理員使用者授與存取 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. 如果需要雲端 Proxy,請按一下新增雲端 Proxy,然後輸入所需資訊。通常,僅在使用 vSphere 時,才需要雲端 Proxy。請參閱在 Automation Assembler 中將雲端 Proxy 新增至 vCenter
  6. 按一下驗證來驗證整合。
  7. 為整合輸入適當的名稱說明
  8. 按一下新增

結果

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}