3

我正在尝试使用具有多个子网的 ARM 模板部署虚拟网络。我有一个链接模板,它创建 NSG、路由表并将其分配给特定的子网。我正在使用副本创建多个子网。路由表应该只分配给一个特定的子网。我使用 If 条件控制它。这里的问题是我无法在 If 条件中使用链接的模板输出。它失败并出现以下错误。

'{ "error": { "code": "InvalidTemplate", "message": "Unable to process template language expressions for resource '/subscriptions//resourceGroups//providers/Microsoft.Network/virtualNetworks/' at line '143'和列'9'。'为模板语言函数'if'提供的参数无效:所有参数都应为'boolean'类型。有关用法,请参阅https://aka.ms/arm-template-expressions#if细节。'” } }'

主模板(子网创建片段):-

"copy": [
      {
        "name": "subnets",
        "count": "[length(parameters('subnetList'))]",
        "input": {
          "name": "[parameters('subnetList')[copyIndex('subnets')].name]",
          "properties": {
            "addressPrefix": "[parameters('subnetList')[copyIndex('subnets')].addressprefix]",
            "networkSecurityGroup": "[if(equals(parameters('subnetList')[copyIndex('subnets')].name, 'GatewaySubnet'), json('null'), variables('nsgId'))]",
            "routeTable": "[if(bool(parameters('subnetList')[copyIndex('subnets')].useRouteTable), reference('routeTableDeployment').outputs.resourceID.value, json('null'))]"
          }
        }
      }
    ]

路由表(输出片段): -

 "outputs": {
    "resourceID": {
        "type": "object",
        "value": {
            "id": "[resourceId('Microsoft.Network/routeTables', variables('routeTableName')]"
        }
    }
}

如果我定义一个变量并将其传递给类似于 nsg 的 if 条件,它会起作用,如下所示:-

"routeTableId": {
  "id": "[resourceId('Microsoft.Network/routeTables', 'routeTableName')]"
}

"routeTable": "[if(bool(parameters('subnetList')[copyIndex('subnets')].useRouteTable), variables('routeTableId'), json('null'))]"
4

0 回答 0