Ansible 2.10升级后调用azure_rm_networkinterface_facts提示变量未定义
报错排查与解决方案
核心原因
Ansible 2.10版本对Azure官方集合的模块做了不兼容更新:
- 原
azure_rm_networkinterface_facts模块已被废弃,官方替换为azure_rm_networkinterface_info - 旧模块在新版本中不会返回
azure_networkinterfaces字段,直接调用就会触发变量未定义错误
排查步骤
- 先在获取网卡信息的任务后添加debug任务,确认返回的facts结构:
- name: 打印返回的所有facts字段 debug: var: ansible_facts
执行后即可确认是否存在azure_networkinterfaces字段,验证模块返回值变更的问题。
修复方案
方案一:适配新版本模块(推荐,长期可用)
将旧模块替换为官方推荐的azure_rm_networkinterface_info,同时调整变量引用路径,新模块返回的网卡列表字段为networkinterfaces,修改后的完整任务代码如下:
- name: "Get facts for network interface by it's name" azure_rm_networkinterface_info: resource_group: "{{ target_resourcegroup }}" name: "{{ target_nic_name }}" register: nic_result - name: "Define private IP address" set_fact: private_ip_address: "{{ nic_result | json_query(query) }}" vars: query: "networkinterfaces[0].properties.ipConfigurations[0].properties.privateIPAddress" when: nic_result.networkinterfaces | length > 0
方案二:降级Azure集合版本(仅临时过渡用)
如果暂时无法批量修改所有旧任务代码,可安装支持旧facts模块的Azure集合版本:
执行命令:ansible-galaxy collection install azure.azcollection:==1.4.0
该版本仍保留azure_rm_networkinterface_facts模块的完整支持,无需修改原有任务代码即可正常运行。
同类问题适配指引
所有Azure的facts类模块在Ansible 2.10之后都统一重命名为_info结尾,比如azure_rm_virtualmachine_facts更名为azure_rm_virtualmachine_info,返回字段的azure_前缀也同步移除,遇到同类报错可按相同逻辑调整。
内容的提问来源于stack exchange,提问作者WhoAmI
相关产品推荐
相关产品推荐

