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.

程序

  1. 選取基礎結構 > 連線 > 整合,然後按一下新增整合
  2. 按一下 [Ansible]。
    隨即出現 [Ansible 組態] 頁面。
  3. 輸入 Ansible 開放原始碼執行個體的主機名稱、詳細目錄檔案路徑和其他所需資訊。
  4. 按一下驗證來檢查整合。
  5. 按一下新增

結果

Ansible 可用於雲端範本。

下一步

將 Ansible 元件新增至所需雲端範本。

  1. 在雲端範本畫布頁面上,選取雲端範本選項功能表上 [組態管理] 標題下的 Ansible,然後將 Ansible 元件拖曳至畫布。
  2. 使用右側面板設定適當的 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 資源中的使用者名稱和密碼。
  • 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 整合認證隨著時間變更,但路徑仍保持有效。