我正在尝试使用带有多个子网的ARM模板部署虚拟网络。我有一个链接模板,它创建NSG,路由表并将其分配给特定的子网。我正在使用copy来创建多个子网。路由表应仅分配给一个特定的子网。我使用If条件控制它。这里的问题是我无法在If条件中使用链接模板输出。它失败并出现以下错误。
“{ “错误”:{ “code”:“InvalidTemplate”, “message”:“无法处理资源的模板语言表达式 '/subscriptions//resourceGroups//providers/Microsoft.Network/virtualNetworks/'在'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,则它可以工作,如下所示: -
"routeTableId": {
"id": "[resourceId('Microsoft.Network/routeTables', 'routeTableName')]"
}
"routeTable": "[if(bool(parameters('subnetList')[copyIndex('subnets')].useRouteTable), variables('routeTableId'), json('null'))]"