Ansible azure_rm_resource_info查询Data Factory报找不到API版本错误
报错原因
这个报错的核心是azure.azcollection.azure_rm_resource_info模块的参数解析逻辑和原生Azure REST API的传参规则不匹配:
- 原生Azure REST API要求
api-version作为URL查询参数传递,直接调用时可以正常返回结果 - 但该Ansible模块不会解析
url参数里的查询字符串,把?api-version=2018-06-01拼在资源路径后面时,模块会将Microsoft.DataFactory/factories?api-version=2018-06-01整体识别为目标资源类型,在内置的资源类型与API版本映射表中无法找到匹配项,最终抛出对应错误。
修复方案
调整模块参数配置,遵循模块的参数传参规则:
- 移除
url参数末尾拼接的?api-version=2018-06-01查询字符串 - 新增独立的
api_version模块参数,显式指定要使用的API版本为2018-06-01
修正后的任务配置如下:
- name: Check if Data Factory ({{ az_datafactory_name }}) already exists azure.azcollection.azure_rm_resource_info: auth_source: auto client_id: "{{ az_client_id }}" secret: "{{ az_secret }}" tenant: "{{ az_tenant_id }}" subscription_id: "{{ az_subscription_id }}" url: "https://management.azure.com/subscriptions/{{ az_subscription_id }}/resourceGroups/{{ az_resource_group_name }}/providers/Microsoft.DataFactory/factories" api_version: "2018-06-01" register: az_datafactory
如果要避免手动拼接完整URL出错,也可以使用模块提供的结构化资源参数替代完整URL传参,写法更简洁:
- name: Check if Data Factory ({{ az_datafactory_name }}) already exists azure.azcollection.azure_rm_resource_info: auth_source: auto client_id: "{{ az_client_id }}" secret: "{{ az_secret }}" tenant: "{{ az_tenant_id }}" subscription_id: "{{ az_subscription_id }}" resource_group: "{{ az_resource_group_name }}" resource_type: "Microsoft.DataFactory/factories" api_version: "2018-06-01" register: az_datafactory
注意:如果需要查询指定名称的单个Data Factory资源而非资源组下所有Data Factory,只需要额外增加
resource_name: "{{ az_datafactory_name }}"参数即可,无需手动拼接完整资源URL。
内容的提问来源于stack exchange,提问作者Rustan Rodriguez
相关产品推荐
相关产品推荐

