无法将JSON数组反序列化为类型'Microsoft.WindowsAzure.ResourceStack.Frontdoor.Templates.Schema.TemplateResourceCopy'

时间:2018-03-15 14:32:02

标签: json azure-powershell subnet arm-template vnet

该模板的目的是将子网添加到现有Vnet,但在使用powershell命令执行时

   New-AzureRmResourceGroupDeployment -Name testing -ResourceGroupName rgname -TemplateFile C:\Test\deploy.json -TemplateParameterFile C:\Test\parameterfile.json

显示以下错误,我真的无法理解它的含义。这是错误 * “错误:Code = InvalidRequestContent; Message =请求内容无效且无法反序列化:'无法填充JSON array ontotype'Microsoft.WindowsAzure.ResourceStack.Frontdoor.Templates.Schema.TemplateResourceCopy'。路径'properties.template.resources [0] .copy'“*

以下是我的输入文件(parameter.json)

    {
     "VNetSettings":{
     "value":{
        "name":"VNet2",
        "addressPrefixes":"10.0.0.0/16",
        "subnets":[
            {
                "name": "sub5",
                "addressPrefix": "10.0.5.0/24"
            },
            {
                "name":"sub6",
                "addressPrefix":"10.0.6.0/24"
            }
        ]
    }
  }
}

以下是我的模板(deploy.json)

   {
    "contentversion":"1.0.0.0",
    "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "parameters":{
        "VNetSettings":
                   {"type":"object"},
        "noofsubnets":
          {
            "type":"int"
          }
    },
"resources":
[
{
    "type":"Microsoft.Network/virtualNetworks/subnets",
    "apiVersion": "2015-06-15",
    "location":"[resourceGroup().location]",
    "copy": [
      {
        "name":"subnets",
        "count":"[parameters('noofsubnets')]",
        "input": {
             "name": "[concat(parameters('VNetSettings').name, '/',parameters('VNetSettings').subnets[copyIndex('subnets')].name)]",                
             "properties":{
                 "addressPrefix": "[parameters('VNetSettings').subnets[copyIndex('subnets')].addressPrefix]"
                }
             }
          }
       ]
      }
   ]
}

我猜错误应该在复制语句中及其周围。

2 个答案:

答案 0 :(得分:0)

如果您创建子网资源,则需要将json构建为完整的资源:

"name": "[concat('bla/bla-', copyIndex())]",
"type": xxx,
"apiVersion": xxx,
"location": xxx,
"copy": {
    "name": xxx,
    "count": xxx
},
"properties": {
    "addressPrefix": xxx
}

并使用copyIndex()功能。没有'subnets'

答案 1 :(得分:0)

这是解决方案。感谢@ 4c74356b41获取您的潜在客户。

    {
     "contentversion":"1.0.0.0",
     "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
     "parameters":{
        "VNetSettings":{"type":"object"},
        "noofsubnets":
          {
            "type":"int"
          }
       },
     "variables":
      {
        "vnetname":"[parameters('VNetSettings').name]"
      },
    "resources":
    [
    {
    "type":"Microsoft.Network/virtualNetworks/subnets",
    "name": "[concat(variables('vnetname'), '/',parameters('VNetSettings').subnets[copyIndex()].name)]",
    "apiVersion": "2015-06-15",
    "location":"[resourceGroup().location]",
    "properties":{
       "addressPrefix": "[parameters('VNetSettings').subnets[copyIndex()].addressPrefix]"
      },
    "copy":{
        "name":"subnetcopy",
        "count":"[parameters('noofsubnets')]"
        }
     }
  ]
}