You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Ansible为Azure VNET创建诊断设置遇UnsupportedRequestContent错误求助

解决Ansible创建Azure VNET诊断设置的问题

一、修复azure_rm_resource模块的UnsupportedRequestContent错误

你的错误核心是请求体格式不符合Azure API要求,metrics和logs字段需要是数组类型(列表),而非单个字典。Azure诊断设置API要求这两个字段包含多个诊断类别对象,即使只配置一个类别,也要用数组包裹。

修正后的任务代码:

- name: Create Log diagnostics Setting with storage account
  azure_rm_resource:
    url: https://management.azure.com/subscriptions/sub_id/resourceGroups/rg/providers/Microsoft.Network/virtualNetworks/vnet1/providers/Microsoft.Insights/diagnosticSettings/test?api-version=2021-05-01-preview
    method: PUT
    client_id: "{{ client_id }}"
    secret: "{{ secret_val }}"
    tenant: "{{ tenant }}"
    subscription_id: "{{ subscription }}"
    body:
      properties:
        storageAccountId: /subscriptions/sub_id/resourceGroups/rg/providers/Microsoft.Storage/storageAccounts/staccount 
        metrics:
          - category: AllMetrics
            enabled: true
            retentionPolicy:  # 可选,需配置保留策略时添加
              days: 30
              enabled: true
        logs:
          - categoryGroup: allLogs
            enabled: true
            retentionPolicy:  # 可选
              days: 30
              enabled: true
        # 不需要Log Analytics时直接删除此字段,不要设为null

关键修正点:

  • 用-将metrics和logs的字典转为列表,匹配API格式要求
  • 若无需保留策略,可直接省略retentionPolicy字段
  • 不使用Log Analytics时,删除logAnalyticsDestinationType字段,避免格式冲突

二、解决azure_rm_monitordiagnosticsetting模块未被识别的问题

如果优先使用专用模块而非直接调用API,按以下步骤排查:

  1. 确认collection安装状态
    执行命令检查azure.azcollection是否正确安装:

    ansible-galaxy collection list | grep azure.azcollection
    

    未安装则重新执行安装命令:

    ansible-galaxy collection install azure.azcollection
    
  2. 在playbook中指定collection
    在playbook开头添加collection引用,确保Ansible能定位到模块:

    - name: Azure diagnostic settings playbook
      hosts: localhost
      collections:
        - azure.azcollection
      tasks:
        - name: Create diagnostic setting for VNET
          azure_rm_monitordiagnosticsetting:
            name: test
            resource_group: rg
            resource_name: vnet1
            resource_type: Microsoft.Network/virtualNetworks
            storage_account_name: staccount
            metrics:
              - category: AllMetrics
                enabled: true
            logs:
              - category_group: allLogs
                enabled: true
            client_id: "{{ client_id }}"
            secret: "{{ secret_val }}"
            tenant: "{{ tenant }}"
            subscription_id: "{{ subscription }}"
    
  3. 检查Ansible配置
    确认ansible.cfg中的collections_path包含collection安装路径,默认路径为~/.ansible/collections或/usr/share/ansible/collections。

三、验证诊断设置

任务执行成功后,可通过Azure CLI验证配置:

az monitor diagnostic-settings show --name test --resource /subscriptions/sub_id/resourceGroups/rg/providers/Microsoft.Network/virtualNetworks/vnet1

内容的提问来源于stack exchange,提问作者Susmita Ghosh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 11:17:19