gpt4 book ai didi

azure - 如何检查arm模板中是否存在资源

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

如何通过资源类型和标识符识别 ARM 模板中是否存在 azure 资源

最佳答案

这实际上是有可能的。您可以使用资源组标签来标记当前部署的版本,如果设置了标签,则跳过部署。所有这些都可以通过链接模板来实现。
请注意,我们本身不检查资源是否存在,但我们仍然允许编写可能包含一次性初始化模板的 ARM 模板。如果资源组被删除并且资源丢失(假设您再次创建了资源组),最后一个将恢复资源。您可以扩展它以支持每个资源标签,这在某些情况下会更有用。

启动部署的模板可能如下所示:

{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"DeploymentTemplateLink": {
"type": "string"
},
"DeploymentVersion": {
"defaultValue": 1,
"type": "int"
}
},
"variables": {
"rgWithDefaultVersion": {
"tags": {
"Version": "0"
}
}
},
"resources": [
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2017-05-10",
"name": "DeploymentTemplate",
"condition": "[less(int(union(variables('rgWithDefaultVersion'), resourceGroup()).tags['Version']), parameters('DeploymentVersion'))]",
"properties": {
"mode": "Incremental",
"templateLink": {
"uri": "[parameters('DeploymentTemplateLink')]",
"contentVersion": "1.0.0.0"
},
"parameters": {
"DeploymentVersion": {
"value": "[parameters('DeploymentVersion')]"
}
}
}
}
]
}

链接模板的条件会查看标签,并且仅当当前版本(存储在标签中)小于请求的版本时才返回 true。您实际上不必维护版本控制:只需不设置 DeploymentVersion 参数,它只会在第一次部署。如果您决定重新部署,您始终可以选择增加版本,这将导致链接模板的部署(也称为“主部署”)。

主部署模板已在您身上,但它应该包含标签资源以维护逻辑。

{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"DeploymentVersion": {
"defaultValue": 1,
"type": "int"
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.Resources/tags",
"name": "default",
"apiVersion": "2019-10-01",
"dependsOn": [],
"properties": {
"tags": {
"Version": "[string(parameters('DeploymentVersion'))]"
}
}
}
]
}

备注给那些不理解union()rgWithDefaultVersion的人。如果引用的对象不包含属性,ARM 模板部署将失败。在我们的例子中,我们有两个这样的属性:'tags''Version'仅当特定资源组具有或曾经具有标签时,“标签”才会存在。 “版本”只有在我们已经编写过一次(在主部署中)之后才会存在。因此,在访问它们之前,我们对返回的对象执行 union() 操作,并使用适当的默认值,确保我们可以安全地访问提到的属性。

关于azure - 如何检查arm模板中是否存在资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56931966/

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