Bicep 中的变量迭代
本文展示了如何为 Bicep 文件中的变量创建多个值。 可以在 variables
声明中添加循环,并动态设置变量的项数。 避免在 Bicep 文件中重复使用语法。
还可以将复制与 modules、resources、资源中的 properties 和 outputs 配合使用。
语法
可通过以下方式使用循环来声明多个变量:
使用循环索引。
var <variable-name> = [for <index> in range(<start>, <stop>): { <properties> }]
有关详细信息,请参阅循环索引。
循环访问数组。
var <variable-name> = [for <item> in <collection>: { <properties> }]
有关详细信息,请参阅循环数组。
循环访问数组和索引。
var <variable-name> = [for <item>, <index> in <collection>: { <properties> }]
循环限制
Bicep 文件的循环迭代不能为负数,也不能超过 800 次。
循环索引
以下示例展示了如何创建字符串值的数组:
param itemCount int = 5
var stringArray = [for i in range(0, itemCount): 'item${(i + 1)}']
output arrayResult array = stringArray
输出返回具有以下值的数组:
[
"item1",
"item2",
"item3",
"item4",
"item5"
]
下一个示例演示如何创建具有三个属性(name
、diskSizeGB
和 diskIndex
)的对象的数组。
param itemCount int = 5
var objectArray = [for i in range(0, itemCount): {
name: 'myDataDisk${(i + 1)}'
diskSizeGB: '1'
diskIndex: i
}]
output arrayResult array = objectArray
输出返回具有以下值的数组:
[
{
"name": "myDataDisk1",
"diskSizeGB": "1",
"diskIndex": 0
},
{
"name": "myDataDisk2",
"diskSizeGB": "1",
"diskIndex": 1
},
{
"name": "myDataDisk3",
"diskSizeGB": "1",
"diskIndex": 2
},
{
"name": "myDataDisk4",
"diskSizeGB": "1",
"diskIndex": 3
},
{
"name": "myDataDisk5",
"diskSizeGB": "1",
"diskIndex": 4
}
]
循环数组
以下示例循环访问以参数形式传入的数组。 变量根据参数以所需格式构造对象。
@description('An array that contains objects with properties for the security rules.')
param securityRules array = [
{
name: 'RDPAllow'
description: 'allow RDP connections'
direction: 'Inbound'
priority: 100
sourceAddressPrefix: '*'
destinationAddressPrefix: '10.0.0.0/24'
sourcePortRange: '*'
destinationPortRange: '3389'
access: 'Allow'
protocol: 'Tcp'
}
{
name: 'HTTPAllow'
description: 'allow HTTP connections'
direction: 'Inbound'
priority: 200
sourceAddressPrefix: '*'
destinationAddressPrefix: '10.0.1.0/24'
sourcePortRange: '*'
destinationPortRange: '80'
access: 'Allow'
protocol: 'Tcp'
}
]
var securityRulesVar = [for rule in securityRules: {
name: rule.name
properties: {
description: rule.description
priority: rule.priority
protocol: rule.protocol
sourcePortRange: rule.sourcePortRange
destinationPortRange: rule.destinationPortRange
sourceAddressPrefix: rule.sourceAddressPrefix
destinationAddressPrefix: rule.destinationAddressPrefix
access: rule.access
direction: rule.direction
}
}]
resource netSG 'Microsoft.Network/networkSecurityGroups@2020-11-01' = {
name: 'NSG1'
location: resourceGroup().location
properties: {
securityRules: securityRulesVar
}
}
后续步骤
- 对于循环的其他使用,请参阅:
- 若要设置对循环中创建的资源的依赖关系,请参阅设置资源依赖关系。