Ansible Azure动态库存返回空主机列表问题求助
Ansible Azure动态库存返回空主机列表(无错误提示)
问题场景
搭建基于Ansible的多云环境,新增Azure作为管理平台,但Azure动态库存始终返回空主机列表,无任何错误提示,仅输出空清单结构。
执行命令及输出
$> ansible-inventory -vvv --list -i europe.azure_rm.yml ansible-inventory [core 2.15.0] config file = /home/tony/projects/pool/ansible.cfg configured module search path = ['/home/tony/projects/pool/library'] ansible python module location = /home/tony/projects/ansible2.15/lib/python3.10/site-packages/ansible ansible collection location = /usr/local/share/ansible/ansible_collections:/home/tony/.ansible/collections/ansible_collections executable location = /home/tony/projects/ansible2.15/bin/ansible-inventory python version = 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] (/home/tony/projects/ansible2.15/bin/python3) jinja version = 3.1.2 libyaml = True Using /home/tony/projects/pool/ansible.cfg as config file redirecting (type: inventory) ansible.builtin.azure_rm to azure.azcollection.azure_rm Parsed /home/tony/europe.azure_rm.yml inventory source with ansible_collections.azure.azcollection.plugins.inventory.azure_rm plugin { "_meta": { "hostvars": {} }, "all": { "children": [ "ungrouped" ] } }
环境配置
- Azure collection版本:v1.18.1
- 已安装集合依赖的
requirements-azure.txt - ansible.cfg配置:
[inventory] enable_plugins = ini, yaml, azure_rm
- 库存文件
europe.azure_rm.yml:
--- plugin: azure.azcollection.azure_rm include_vm_resource_groups: - '*' auth_source: auto
已知条件与已尝试操作
- Azure环境存在包含VM的资源组,服务主体权限覆盖目标订阅/资源组,Azure CLI可正常获取VM列表,排除Azure端权限问题
- 已尝试无效操作:
- 切换多种凭据提供方式(auth_source设为凭据文件、环境变量、"cli"、"auto")
- 明确指定资源组名称而非通配符
* - 显式设置
cloud_environment: AzureCloud - 定义主机名生成规则
- 确认资源组/VM名称为蛇形命名,无特殊字符
- 更换Python版本创建新虚拟环境
- 直接运行
azure_rm.py
排查与解决步骤
1. 强制指定订阅ID
若存在多个Azure订阅,插件可能自动选择错误订阅,需在库存文件中显式指定:
--- plugin: azure.azcollection.azure_rm include_vm_resource_groups: - '*' auth_source: cli subscription_id: "你的订阅UUID"
2. 检查VM状态过滤规则
Azure动态库存默认仅包含运行中的VM,若目标VM处于停止/已解除分配状态,需添加参数强制包含:
include_vm_powerstates: - 'running' - 'deallocated' - 'stopped'
3. 验证服务主体权限细节
确认服务主体拥有订阅级的Microsoft.Compute/virtualMachines/read权限,部分情况下资源组级权限可能因继承问题导致插件无法遍历订阅内资源组。
4. 启用插件调试日志
在库存文件中添加调试配置,获取插件执行的详细日志:
plugin: azure.azcollection.azure_rm include_vm_resource_groups: - '*' auth_source: cli log_path: /tmp/azure_inventory_debug.log log_level: debug
运行命令后查看日志,排查资源查询阶段的隐藏错误。
5. 重新安装集合与依赖
强制重新安装指定版本的Azure集合,并同步依赖:
ansible-galaxy collection install azure.azcollection:==1.18.1 --force pip install -r ~/.ansible/collections/ansible_collections/azure/azcollection/requirements-azure.txt
6. 确认插件加载状态
执行命令验证azure_rm插件是否被正确识别:
ansible-doc -t inventory -l | grep azure_rm
若输出为空,说明插件未正确安装,需检查集合安装路径与Ansible配置的匹配性。
内容的提问来源于stack exchange,提问作者TonyAngelino
相关产品推荐
相关产品推荐

