gpt4 book ai didi

azure - ARM模板部署: DeploymentNotFound Error When Using reference() function for Conditional Deployment

转载 作者:行者123 更新时间:2023-12-03 01:24:43 25 4
gpt4 key购买 nike

我有一个主 ARM 模板(我们将其命名为 azuredeploy.json),以及一个链接模板(我们将其命名为 privateEndpoint.json)。我有一个参数决定是否部署资源,我们将其称为 enablePrivateEndpoints。它当前设置为“false”,因此不会发生此资源的部署。

在相反的情况下,应读取“privateEndpoint.json”的输出以获取专用端点的网络接口(interface) ID。

azuredeploy.json

{
"condition": "[not(equals(parameters('enablePrivateEndpoints'), 'false'))]",
"name": "keyvault-privateendpoint",
"type": "Microsoft.Resources/deployments",
"apiVersion": "2019-10-01",
"dependsOn": [
"keyvault"
],
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "[concat(variables('templateFolderUrl'), '/', variables('privateEndpointTemplateFileName'), parameters('_artifactsLocationSasToken'))]"
},
"parameters": {
...
...
"enablePrivateEndpoints": "[parameters('enablePrivateEndpoints')]"
}
}
},
},
{
"condition": "[not(equals(parameters('enablePrivateEndpoints'), 'false'))]",
"name": "networkInterface-kv",
"type": "Microsoft.Resources/deployments",
"apiVersion": "2019-10-01",
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "[concat(variables('templateFolderUrl'), '/', variables('networkInterfaceTemplateFileName'), parameters('_artifactsLocationSasToken'))]"
},
"parameters": {
"networkInterfaceId": {
"value": "[reference('keyvault-privateendpoint', '2021-04-01').outputs.networkInterfaceId.value]"
}
}
}
}

privateEndpoint.json

...
"enablePrivateEndpoints": {
"type": "string"
}
},
"variables": {},
"resources": [
{
"name": "[parameters('privateEndpointName')]",
"type": "Microsoft.Network/privateEndpoints",
"apiVersion": "2021-04-01",
"location": "[resourceGroup().location]",
"dependsOn": [],
"properties": "[parameters('privateEndpointProperties')]"
}
],
"outputs": {
"networkInterfaceId": {
"condition": "[not(equals(parameters('enablePrivateEndpoints'), 'false'))]",
"type": "string",
"value": "[reference(resourceId('Microsoft.Network/privateEndpoints', parameters('privateEndpointName'))).networkInterfaces[0].id]"
}
}

问题出在这段代码上:

"networkInterfaceId": {
"value": "[reference('keyvault-privateendpoint', '2021-04-01').outputs.networkInterfaceId.value]"
}

尽管条件停止了引用资源的部署,但仍在评估引用函数。部署失败,并显示“DeploymentNotFound:找不到部署‘keyvault-privateendpoint’”

以下是我尝试解决此问题的一些方法:

尝试#1

您已经可以看到我已经尝试向输出本身添加条件

"outputs": {
"networkInterfaceId": {
"condition": "[not(equals(parameters('enablePrivateEndpoints'), 'false'))]",
"type": "string",
"value": "[reference(resourceId('Microsoft.Network/privateEndpoints', parameters('privateEndpointName'))).networkInterfaces[0].id]"
}
}

这并没有解决问题

尝试#2

我尝试向查看输出本身的值添加 if,仅在 enablePrivateEndpoints 参数为 true 时评估引用函数。

"networkInterfaceId": {
"value": "[if(parameters(enablePrivateEndpoints), reference('keyvault-privateendpoint', '2021-04-01').outputs.networkInterfaceId.value, '')]"
}

这也没有解决问题。

我不明白为什么仍然试图引用不存在的部署。

我的意思是,即使是执行引用的部署资源本身也是以相同参数为条件的。

注意:这些资源尚未成功部署,因此它们是新资源。

最佳答案

尝试使用

"networkInterfaceId": 
{

"value": "[if(not(equals(parameters('enablePrivateEndpoints'), 'false')), reference('keyvault-privateendpoint', '2021-04-01').outputs.networkInterfaceId.value , '')]"
}

在资源参数中“type”:“Microsoft.Resources/deployments”

关于azure - ARM模板部署: DeploymentNotFound Error When Using reference() function for Conditional Deployment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67098298/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com