在Ubuntu使用 Ansible 配置 Azure 资源的动态清单

使用 Ansible 配置 Azure 资源的动态清单

简介

在主机变化不定的云环境中,Ansible 的动态清单功能可以消除维护静态清单文件的负担

本教程将带你使用 Azure 的 dynamic-inventory 插件,自动填充 Ansible 清单。


1.安装pipx

从 Ubuntu 23.04 开始,系统默认禁止在全局环境中使用 pip install,以避免与系统自带的 APT 包管理器(如 python3-* 包)产生冲突

所以因为我的是ubuntu版本为24 LTS, 必须要用pipx来安装ansible,而不能直接使用apt安装,这样后面才能安装依赖不报错。

参考文档:pipx--installation

shell 复制代码
sudo apt update
sudo apt install pipx
pipx ensurepath

2.通过 pipx 安装 Ansible

shell 复制代码
pipx install --include-deps "ansible<10"

参数:--include-deps

在使用 pipx 安装 Ansible 时,如果未指定 --include-deps 参数,pipx 只会安装主包,而不会安装其依赖项,包括ansible-core

他的输出会是这样

bash 复制代码
  installed package ansible 9.13.0, installed using Python 3.12.3
  These 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

bash 复制代码
ansible [core 2.16.14]
  config file = None
  configured 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/ansible
  ansible collection location = /home/azureuser/.ansible/collections:/usr/share/ansible/collections
  executable location = /home/azureuser/.local/bin/ansible
  python 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.6
  libyaml = True

如果显示出来版本,证明你成功了,可以进入下一步

3.安装azure.azcollection

此集合提供了一系列用于与 Azure 交互的 Ansible 模块和插件

参考文档:Ansible collection for Azure

bash 复制代码
ansible-galaxy collection install azure.azcollection --force

输出这样就是成功了

bash 复制代码
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 文件,配置示例如下:

yaml 复制代码
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 服务主体

bash 复制代码
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"

运行命令查看资源组内的虚拟机:

bash 复制代码
ansible-inventory -i myazure_rm.yml --graph

运行结果示例:

复制代码
@all:
  |--@ungrouped:
  |  |--linux-vm_cdb4
  |  |--win-vm_3211

这里两个虚拟机都属于 ungrouped 组,ungroupedall 组的子组。


Azure 动态库存插件默认返回全局唯一的虚拟机名称,名称中会带有额外字符。如果想禁用此行为,可以在清单文件里添加:

yaml 复制代码
plain_host_names: yes
相关推荐
你的人类朋友3 小时前
DevOps是什么?
运维·自动化运维·devops
小-黯7 小时前
Ubuntu离线安装软件包
linux·运维·ubuntu
无敌最俊朗@20 小时前
通过Ubuntu和i.MX 6ULL开发板实现网络共享
服务器·数据库·ubuntu
防搞活机1 天前
ubuntu 服务器(带NVLink)更新显卡驱动 (巨坑!!)
linux·服务器·深度学习·ubuntu·gpu算力·显卡驱动
老黄编程1 天前
增强版 bash “zsh“
ubuntu
为何创造硅基生物1 天前
C语言结构体
c语言·windows·microsoft
宝桥南山1 天前
Azure - Azure需要MFA login了(2025-09-30之后)
microsoft·微软·azure
snpgroupcn1 天前
SAP升级后如何进行系统测试和验证?
运维·云计算
snpgroupcn1 天前
SAP S/4HANA迁移方法选哪种?选择性数据转换是否合适?企业需要考虑哪些关键因素!
运维·数据库·云计算
空荡forevere1 天前
《操作系统真象还原》 第九章 第二部分
ubuntu·云计算