Azure Bicep - VM 属性的条件部署
Azure Bicep - Conditional Deployment of VM Properties
我正在尝试创建一个 bicep 模板,以根据条件部署具有 1 个或 2 个 NIC 的 VM。
有人知道是否可以使用 属性 定义中的条件语句来部署 VM NIC 吗?似乎在资源定义中不允许使用 if 函数,并且由于 ID 无效而出现三元错误。
只是试图避免使用 resource = if (bool) {}
有 2 个重复的 VM 资源定义
networkProfile: {
networkInterfaces: [
{
id: nic_wan.id
properties: {
primary: true
}
}
{
id: bool ? nic_lan.id : '' #Trying to deploy this as a conditional if bool = true.
properties: {
primary: false
}
}
]
}
上面的代码出错了,因为一旦你定义了一个 NIC,它就需要一个有效的 ID。
'properties.networkProfile.networkInterfaces[1].id' 无效。期望以 '/subscriptions/{subscriptionId}' 或开头的完全限定资源 ID
'/providers/{resourceProviderNamespace}/'。 (代码:LinkedInvalidPropertyId)
您可以创建一些变量来处理:
// Define the default nic
var defaultNic = [
{
id: nic_wan.id
properties: {
primary: true
}
}
]
// Add second nic if required
var nics = concat(defaultNic, bool ? [
{
id: nic_lan.id
properties: {
primary: false
}
}
] : [])
// Deploy the VM
resource vm 'Microsoft.Compute/virtualMachines@2020-12-01' = {
...
properties: {
...
networkProfile: {
networkInterfaces: nics
}
}
}
我正在尝试创建一个 bicep 模板,以根据条件部署具有 1 个或 2 个 NIC 的 VM。
有人知道是否可以使用 属性 定义中的条件语句来部署 VM NIC 吗?似乎在资源定义中不允许使用 if 函数,并且由于 ID 无效而出现三元错误。
只是试图避免使用 resource = if (bool) {}
有 2 个重复的 VM 资源定义networkProfile: {
networkInterfaces: [
{
id: nic_wan.id
properties: {
primary: true
}
}
{
id: bool ? nic_lan.id : '' #Trying to deploy this as a conditional if bool = true.
properties: {
primary: false
}
}
]
}
上面的代码出错了,因为一旦你定义了一个 NIC,它就需要一个有效的 ID。
'properties.networkProfile.networkInterfaces[1].id' 无效。期望以 '/subscriptions/{subscriptionId}' 或开头的完全限定资源 ID '/providers/{resourceProviderNamespace}/'。 (代码:LinkedInvalidPropertyId)
您可以创建一些变量来处理:
// Define the default nic
var defaultNic = [
{
id: nic_wan.id
properties: {
primary: true
}
}
]
// Add second nic if required
var nics = concat(defaultNic, bool ? [
{
id: nic_lan.id
properties: {
primary: false
}
}
] : [])
// Deploy the VM
resource vm 'Microsoft.Compute/virtualMachines@2020-12-01' = {
...
properties: {
...
networkProfile: {
networkInterfaces: nics
}
}
}