gpt4 book ai didi

azure - 如何使用 Bicep 引用对象数组中的对象

转载 作者:行者123 更新时间:2023-12-02 06:02:35 24 4
gpt4 key购买 nike

我试图在创建具有 4 个子网的虚拟网络的模块中输出每个子网的引用 ID。我可以获得第一个 [0],但是当我尝试输出其他 [1], [2], [3] 时,部署失败并抛出错误:

语言表达式属性数组索引“1”超出范围

下面是创建 virtualNetwork 和子网的代码:

resource virtualNetwork 'Microsoft.Network/virtualNetworks@2018-11-01' = {
name: vNetName
location: location
tags: tags
properties: {
addressSpace: {
addressPrefixes: [
addressPrefix
]
}
subnets: subnets
}
}

subnets 是数组类型的变量:

var subnets = [
{
name: mgmtSubnetName
properties: {
addressPrefix: mgmtSubnetAddressPrefix
}
}
{
name: intSubnetName
properties: {
addressPrefix: intSubnetAddressPrefix
}
}
{
name: extSubnetName
properties: {
addressPrefix: extSubnetAddressPrefix
}
}
{
name: vdmsSubnetName
properties: {
addressPrefix: vdmsSubnetAddressPrefix
}
}
]

当我使用下面的输出行时,它返回一个包含 4 个对象的数组...每个创建的子网一个:

输出子网数组 = virtualNetwork.properties.subnets

每个对象都具有以下格式:

{
"name":"<value>",
"id":"<value>",
"etag":"<value>",
"properties":{
"provisioningState":"Succeeded",
"addressPrefix":"<value>",
"ipConfigurations":[
{
"id":"<value>"
}
],
"delegations":[]
},
"type":"Microsoft.Network/virtualNetworks/subnets"
}

当我使用下面的输出行时,它返回子网数组中的第一个对象:

输出subnet1对象= virtualNetwork.properties.subnets[0]

当我使用下面的输出行时,它返回第一个子网的resourceId:

输出subnet1字符串= virtualNetwork.properties.subnets[0].id

我无法使用索引 1、2、3 检索数组中的其他对象。

我还尝试了 resourceId 函数(下面的示例),但索引 1、2、3 的行为完全相同:

输出subnet1Id字符串=resourceId('Microsoft.Network/VirtualNetworks/subnets',name,subnets[0].name)

最佳答案

您可以使用下面的 bicep 模板部署 vnet 和子网并输出子网和子网 ID,如下所示:

var subnets = [
{
name: 'vm-subnet'
properties: {
addressPrefix:'10.0.0.0/24'
}
}
{
name: 'webapp-subnet'
properties: {
addressPrefix:'10.0.1.0/24'
}
}
{
name: 'appgw-subnet'
properties: {
addressPrefix:'10.0.2.0/24'
}
}
{
name: 'bastion-subnet'
properties: {
addressPrefix:'10.0.3.0/24'
}
}
]
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2018-11-01' = {
name: 'ansuman-vnet'
location: 'east us'
properties: {
addressSpace: {
addressPrefixes: [
'10.0.0.0/16'
]
}
subnets: subnets
}
}

output subnets array = [for (name, i) in subnets :{
subnets : virtualNetwork.properties.subnets[i]
}]

output subnetids array = [for (name, i) in subnets :{
subnets : virtualNetwork.properties.subnets[i].id
}]

output subnetappgw string = virtualNetwork.properties.subnets[2].id

output webappsubnet object = virtualNetwork.properties.subnets[1]

输出:

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

注意:我使用的是最新的 Bicep 版本,即 Bicep CLI 版本 0.4.1124

关于azure - 如何使用 Bicep 引用对象数组中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70815460/

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