Cloud Assembly 支援與 Ansible 開放原始碼組態管理整合。設定整合後,您可以將 Ansible 元件新增至新部署或現有部署中。
將 Ansible 開放原始碼與 Cloud Assembly 整合時,您可以將其設定為佈建新機器時,按照指定順序執行一或多個 Ansible playbook,以自動執行組態管理。可以在雲端範本中為部署指定所需的 playbook。
設定 Ansible 整合時,您必須指定 Ansible 開放原始碼主機,以及定義用於管理資源的相關資訊的詳細目錄檔案路徑。此外,您必須提供用於存取 Ansible 開放原始碼執行個體的名稱和密碼。稍後,在將 Ansible 元件新增至部署時,您可以更新連線以使用基於金鑰的驗證。
依預設,Ansible 會使用 ssh 連線至實體機器。如果您使用的是在雲端範本中透過 osType Windows 內容指定的 Windows 機器,則 connection_type
變數會自動設定為 winrm
。
一開始,Ansible 整合將使用整合中提供的使用者/密碼或使用者/金鑰認證來連線至 Ansible 控制機器。成功連線後,雲端範本中提供的 playbook 即會進行語法驗證。
如果驗證成功,則會在 Ansible 控制機器的 ~/var/tmp/vmware/provider/user_defined_script/ 中建立執行資料夾。將在此位置執行指令碼以將主機新增至詳細目錄、建立主機 vars 檔案 (包括設定驗證模式以連線至主機) 並最終執行 playbook。此時,雲端範本中提供的認證將用來從 Ansible 控制機器連線至主機。
Ansible 整合支援不使用 IP 位址的實體機器。對於在公有雲 (例如 AWS、Azure 和 GCP) 上佈建的機器,僅當機器連線至公用網路時,才會在已建立資源中的 address 內容中填入機器的公用 IP 位址。對於未連線至公用網路的機器,Ansible 整合會從連結至機器的網路中尋找 IP 位址。如果連結了多個網路,則 Ansible 整合會尋找具有最少 deviceIndex 的網路;即連結至機器的網路介面卡 (NIC) 的索引。如果未在藍圖中指定 deviceIndex 內容,則整合會使用第一個連結的網路。
如需有關在 Cloud Assembly 中設定 Ansible 開放原始碼進行整合的更多詳細資料,請參閱什麼是 Cloud Assembly 中的組態管理。
必要條件
- Ansible 控制機器必須使用 Ansible 版本。請參閱《vRealize Automation 支援對照表》以瞭解支援版本的相關資訊。
- Ansible 記錄詳細資訊層級必須設定為預設值零。
- 使用者必須對 Ansible 詳細目錄檔案所在的目錄具有讀取/寫入權限。此外,使用者還必須具有詳細目錄檔案 (如果已存在) 的讀取/寫入權限。
- 如果您使用具有 sudo 選項的非 root 使用者,請確保 sudoers 檔案中已設定下列內容:
Defaults:user_name !requiretty
和
username ALL=(ALL) NOPASSWD: ALL
- 確保已透過在 /etc/ansible/ansible.cfg 或 ~/.ansible.cfg 中設定
host_key_checking = False
停用主機金鑰檢查。 - 確保已透過將以下行新增至 /etc/ansible/ansible.cfg 或 ~/.ansible.cfg 檔案設定保存庫密碼:
vault_password_file = /path/to/password_file
保存庫密碼檔案包含純文字格式的密碼,僅在雲端範本或部署提供要在 ACM 和節點之間使用的使用者名稱和密碼組合時才會使用該密碼,如下列範例所示。echo 'myStr0ng9@88w0rd' > ~/.ansible_vault_password.txt echo 'ANSIBLE_VAULT_PASSWORD_FILE=~/.ansible_vault_password.txt' >> ~/.profile # Instead of this way, you can also set it setting 'vault_password_file=~/.ansible_vault_password.txt' in either /etc/ansible/ansible.cfg or ~/.ansible.cfg
- 若要在嘗試執行 playbook 時避免主機金鑰失敗,建議您在 /etc/ansible/ansible config 中包含下列設定。
[paramiko_connection] record_host_keys = False [ssh_connection] #ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s ssh_args = -o UserKnownHostsFile=/dev/null # If you already have any options set for ssh_args, just add the additional option shown here at the end.
程序
結果
Ansible 可用於雲端範本。
下一步
將 Ansible 元件新增至所需雲端範本。
- 在雲端範本畫布頁面上,選取雲端範本選項功能表上 [組態管理] 標題下的 Ansible,然後將 Ansible 元件拖曳至畫布。
- 使用右側面板設定適當的 Ansible 內容,例如,指定要執行的 playbook。
在 Ansible 中,使用者可以將變數指派給單一主機,並稍後在 playbook 中使用。Ansible 開放原始碼整合可讓您在雲端範本中指定這些主機變數。hostVariables
內容必須採用正確的 YAML 格式 (如 Ansible 控制機器的預期),且此內容將放置在下列位置:
parent_directory_of_inventory_file/host_vars/host_ip_address/vra_user_host_vars.yml
Ansible 詳細目錄檔案的預設位置在 Cloud Assembly 中的 [整合] 頁面上新增的 Ansible 帳戶中進行定義。Ansible 整合將不會驗證雲端範本中的 hostVariable
YAML 語法,但是,如果在格式或語法錯誤的情況下執行 playbook,Ansible 控制機器會擲回錯誤。
下列雲端範本 YAML 程式碼片段顯示了 hostVariables
內容的使用範例。
Cloud_Ansible_1: type: Cloud.Ansible properties: host: '${resource.AnsibleLinuxVM.*}' osType: linux account: ansible-CAVA username: ${input.username} password: ${input.password} maxConnectionRetries: 20 groups: - linux_vms playbooks: provision: - /root/ansible-playbooks/install_web_server.yml hostVariables: | message: Hello ${env.requestedBy} project: ${env.projectName}
- Ansible 資源中的使用者名稱和密碼。
- Ansible 資源中的使用者名稱和 privateKeyFile。
- Ansible 資源中的使用者名稱和計算資源中的 privatekey,方法是將 remoteAccess 指定為
generatedPublicPrivateKey
。
建立 Ansible 開放原始碼整合時,必須提供整合使用者的登入資訊,才能使用 SSH 與 Ansible 控制機器進行連線。若要使用整合執行 Playbook,您可以在整合 YAML 代碼中指定其他使用者。username
內容為必要項,需要該內容才能連線到 Ansible 將在其中進行變更的虛擬機器。playbookRunUsername
內容為可選項,可以提供該內容以在 Ansible 節點上執行 playbook。playbookRunUsername
的預設值為 Ansible 端點整合使用者名稱。
如果您指定了其他使用者,則該使用者應具有 Ansible 主機檔案的寫入權限,並且應具有建立私密金鑰檔案的權限。
將 Ansible 開放原始碼動態磚新增到雲端範本時,vRealize Automation 會為已連結的虛擬機器建立主機項目。依預設,vRealize Automation 將使用虛擬機器的資源名稱來建立主機項目,但您可以使用藍圖 YAML 中的 hostName
內容指定任何名稱。為了與機器通訊,vRealize Automation 將針對主機項目建立主機變數 ansible_host: IP Address
。可以覆寫預設行為以使用 FQDN 設定通訊,方法是在 hostVariables
下指定關鍵字 ansible_host
並提供 FQDN 作為其值。下列 YAML 程式碼片段顯示如何設定主機名稱和 FQDN 通訊的範例:
Cloud_Ansible: type: Cloud Ansible properties: osType: linux username: ubuntu groups: - sample hostName: resource name host: name of host account: name of account hostVariables: ansible_host:Host FQDN
在此範例中,可以透過提供 FQDN 來覆寫預設 ansible_host
值。這對於希望 Ansible 開放原始碼使用 FQDN 連線到主機電腦的使用者來說,可能非常有用。
YAML 中 hostVariables
的預設值將為 ansible_host:IP_address
,並且 IP 位址可用來與伺服器進行通訊。
如果 Ansible 開放原始碼的 YAML 計數內容大於 1,則主機名稱可以對應到相應虛擬機器的任何內容。下列範例顯示了名為 Ubuntu-VM 的虛擬機器資源的對應 (如果要將其位址內容對應至主機名稱)。
hostname: '${resource.Ubuntu-VM.address[count.index]}'
在雲端範本中,確保在整合帳戶中指定的使用者可以存取 Ansible playbook 的路徑。您可以使用絕對路徑來指定 playbook 位置,但這並不是必要的。建議使用使用者主資料夾的絕對路徑,這樣一來,即使 Ansible 整合認證隨著時間變更,但路徑仍保持有效。
具有雲端管理員權限的使用者可以變更包含 Ansible 開放原始碼資源和 Ansible Tower 資源的部署專案。該功能可作為部署層級的第 2 天動作使用。
若要變更 Ansible 部署的專案,請從該部署的 [動作] 功能表中選取 [變更專案] 選項,如 Cloud Assembly [部署] 頁面上所示,然後選擇目標專案並在顯示的對話方塊上按一下提交。