可以將 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。
- 登入 Ansible Automation Platform,然後導覽至 [範本] 區段。
- 選取 [新增工作範本]。
- 選取您已建立的認證。這些是將由 Ansible Automation Platform 管理之機器的認證。對於每個工作範本,可以有一個認證物件。
- 在 [限制] 選取項目中,選取 [啟動時提示]。這可確保工作範本針對從 Automation Assembler 佈建或取消佈建的節點執行。如果未選取此選項,則會在部署包含工作範本的藍圖時顯示 [未設定限制] 錯誤。
- 選取 [新增工作流程範本]。
- 選取已建立的認證,然後定義詳細目錄。透過工作流程視覺化工具,可以設計工作流程範本。
對於工作流程或工作範本的 [限制] 方塊,通常可以選取 [啟動時提示]。此選取項目可確保工作或工作流程範本針對從 Automation Assembler 佈建或取消佈建的節點執行。
- 您可以在 Ansible Tower 的 [工作] 索引標籤上,檢視從 Automation Assembler 叫用的工作範本或工作流程範本執行。
程序
結果
Ansible Tower 可在雲端範本中使用。
下一步
將 Ansible Automation Platform 元件新增至所需雲端範本。必須針對整合帳戶中指定的使用者指定適用的工作範本及執行權限。
- 在雲端範本畫布頁面上,選取藍圖選項功能表上 [組態管理] 標題下的 Ansible,然後將 Ansible Automation Platform 元件拖曳至畫布。
- 使用右側面板設定適當的 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
我們新增了 maxConnectionsRetries
和 maxJobRetries
來處理 Ansible 相關故障。雲端範本接受自訂值,如果沒有提供值,則會使用預設值。maxConnectionRetries
的預設值為 10,而 maxJobRetries
的預設值為 3。
Ansible Automation Platform 整合的 Automation Assembler 範本包括具有 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 部署的專案,請從該部署的 [動作] 功能表中選取 [變更專案] 選項,如 Automation Assembler [部署] 頁面上所示,然後選擇目標專案並在顯示的對話方塊上按一下提交。
雖然 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 主機項目,並將主機指派給群組。將使用上述同步來源變數根據虛擬機器標籤值建立詳細目錄群組。
如需範例實作,請參閱以下雲端範本。
# 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}