使用 Ansible 配置 Azure 資源的動態清單
- 簡介
- 1.安裝pipx
- 2.通過 pipx 安裝 Ansible
- 3.安裝azure.azcollection
- 4.安裝集合所需的依賴項
- 5.生成動態庫存
簡介
在主機變化不定的云環境中,Ansible 的動態清單功能可以消除維護靜態清單文件的負擔
本教程將帶你使用 Azure 的 dynamic-inventory
插件,自動填充 Ansible 清單。
1.安裝pipx
從 Ubuntu 23.04 開始,系統默認禁止在全局環境中使用 pip install,以避免與系統自帶的 APT 包管理器(如 python3-* 包)產生沖突
所以因為我的是ubuntu版本為24 LTS
, 必須要用pipx來安裝ansible,而不能直接使用apt安裝,這樣后面才能安裝依賴不報錯。
參考文檔:pipx–installation
sudo apt update
sudo apt install pipx
pipx ensurepath
2.通過 pipx 安裝 Ansible
pipx install --include-deps "ansible<10"
參數:
--include-deps
在使用 pipx 安裝 Ansible 時,如果未指定 --include-deps 參數,pipx 只會安裝主包,而不會安裝其依賴項,包括ansible-core
他的輸出會是這樣
installed package ansible 9.13.0, installed using Python 3.12.3These apps are now globally available- ansible- ansible-community- ansible-config- ansible-connection- ansible-console- ansible-doc- ansible-galaxy- ansible-inventory- ansible-playbook- ansible-pull- ansible-test- ansible-vault
done! ? 🌟 ?
這里有個大坑,從 Ansible 10
開始,Ansible 官方做了一個大重構:不再提供 ansible 命令入口點,轉而用 ansible-community 這個命令來代表 Ansible CLI 主入口
。ansible 和 ansible-playbook 等命令被移除,取而代之的是通過 ansible-community 調用相應的插件。所以以前直接ansible是會報錯的,這里降級安裝 小于10
的版本
裝完之后需要重新打開一個bash終端
,然后才能ansible --version
ansible [core 2.16.14]config file = Noneconfigured module search path = ['/home/azureuser/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']ansible python module location = /home/azureuser/.local/share/pipx/venvs/ansible/lib/python3.12/site-packages/ansibleansible collection location = /home/azureuser/.ansible/collections:/usr/share/ansible/collectionsexecutable location = /home/azureuser/.local/bin/ansiblepython version = 3.12.3 (main, Feb 4 2025, 14:48:35) [GCC 13.3.0] (/home/azureuser/.local/share/pipx/venvs/ansible/bin/python)jinja version = 3.1.6libyaml = True
如果顯示出來版本,證明你成功了,可以進入下一步
3.安裝azure.azcollection
此集合提供了一系列用于與 Azure 交互的 Ansible 模塊和插件
參考文檔:Ansible collection for Azure
ansible-galaxy collection install azure.azcollection --force
輸出這樣就是成功了
Starting galaxy collection install process
Process install dependency map
Starting collection install process
Downloading https://galaxy.ansible.com/api/v3/plugin/ansible/content/published/collections/artifacts/azure-azcollection-3.3.1.tar.gz to /home/azureuser/.ansible/tmp/ansible-local-2726e_5yr3jc/tmp8eixr_93/azure-azcollection-3.3.1-52eb6zq_
Installing 'azure.azcollection:3.3.1' to '/home/azureuser/.ansible/collections/ansible_collections/azure/azcollection'
azure.azcollection:3.3.1 was installed successfully
4.安裝集合所需的依賴項
pipx runpip ansible install -r ~/.ansible/collections/ansible_collections/azure/azcollection/requirements.txt
5.生成動態庫存
Ansible 提供了 Azure 動態庫存插件,這里使用環境變量作為憑證,其他配置方法請閱讀參考文檔
參考文檔:azure.azcollection.azure_rm inventory – Azure 資源管理器庫存插件
創建 myazure_rm.yml
文件,配置示例如下:
plugin: azure.azcollection.azure_rm
include_vm_resource_groups:- ansible-inventory-test-rg
auth_source: auto
在Azure的Entra ID注冊一個應用,使其成為一個服務主體,分配其權限,然后復制subscription_id、client_id、secret 和 tenant id,然后使其export為環境變量
參考文檔:快速入門:為 Ansible 創建 Azure 服務主體
export AZURE_SUBSCRIPTION_ID="your_subscription_id"
export AZURE_CLIENT_ID="your_client_id"
export AZURE_CLIENT_SECRET="your_client_secret"
export AZURE_TENANT_ID="your_tenant_id"
運行命令查看資源組內的虛擬機:
ansible-inventory -i myazure_rm.yml --graph
運行結果示例:
@all:|--@ungrouped:| |--linux-vm_cdb4| |--win-vm_3211
這里兩個虛擬機都屬于 ungrouped
組,ungrouped
是 all
組的子組。
Azure 動態庫存插件默認返回全局唯一的虛擬機名稱,名稱中會帶有額外字符。如果想禁用此行為,可以在清單文件里添加:
plain_host_names: yes