gpt4 book ai didi

azure - 循环访问 ARM 模板中的复杂 JSON 变量

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

在我的 ARM 模板中,我有一个名为“子网”的变量,它可以有 3 种类型。

如果是 A 类,那么我想要 4 个给定名称和地址的子网;如果是 B 型,则有 2 个子网,依此类推。

"variables": {
"subnets" : {
"typeA" : {
"network" : "3.0/24",
"directory" : "5.0/24",
"documents" : "8.0/24",
"security" : "10.0/24",
},
"typeB" : {
"directory" : "10.0/24",
"database" : "11.0/24",
},
"dmz" : {
"directory" : "12.0/24",
"database" : "15.0/24", }
}
}

在 ARM 模板中,我有一个参数告诉我要使用什么类型。因此,我有一个如下所示的段,它使用 condition 来匹配 subnetTypetypeA 并相应地创建虚拟网络。

{
"type": "Microsoft.Network/virtualNetworks",
"condition" : "[contains(parameters('subnetType'), 'typeA')]",
"apiVersion": "2018-10-01",
...

"copy" : [ {
"name" : "subnets",
"count" : "[length(array(variables('subnets').typeA))]",
"input": {
"name": "...",
"properties": {
"addressPrefix": "..."

}
}
} ]
}
}

正如您在上面看到的,我在此 VirtualNetwork 资源中有一个 copy block ,并且我想为 typeA 网络创建各种子网。我想我可以将 subnets.typeA 转换为数组并获取它的长度来循环(这就是想法,我不知道它是否真的有效)但是我不清楚如何从上面的变量中提取子网名称和地址前缀。

最佳答案

所以这里有两个问题:

  1. 无法在 Arm 模板中循环对象键
  2. 使用模板中的不同资源来创建子网

据我所知,没有办法解决第一个限制,而第二个限制主要是由于您试图解决第一个限制。我会采取完全不同的方法:

"networks": [
{
"name": "typeA",
"subnets": [
{
"name": "network",
"addressSpace": "3.0/24"
},
{
"name": "directory",
"addressSpace": "5.0/24"
},
{
"name": "documents",
"addressSpace": "8.0/24"
},
{
"name": "security",
"addressSpace": "10.0/24"
}
]
},
{
// second virtual network
},
{
// x virtual network
}
]

这里的主要缺点 - 您必须有一个嵌套部署,因为您实际上无法在数组内迭代数组,因此您必须将数组内的每个对象提供到一个部署中,该部署将创建一个虚拟网络,该虚拟网络可以包含各种子网。

您可以咨询this link有关此确切方法的示例或官方 Azure Building Blocks 事物 way of doing this (方法非常相似,但实现不同)。

您可以使用不同的资源而不是迭代,但这意味着您的灵 active 较差,每次对输入进行更改时,所有内容都会中断或无法像您想象的那样工作(您这样做的方式会如果该变量中不存在 dmz ,则会崩溃,您将收到编译错误,类似地,如果您向对象添加另一个键,例如 applicationgateway 它将起作用,但是虚拟网络不会被创建)

关于azure - 循环访问 ARM 模板中的复杂 JSON 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56714529/

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