Sdílet prostřednictvím


Podmíněná nasazení v Bicep s výrazem if

Pokud chcete volitelně nasadit prostředek nebo modul v Bicep, použijte výraz if . Výraz if obsahuje podmínku, která se překládá na true nebo false. if Pokud je podmínka pravdivá, prostředek se nasadí. Pokud je hodnota false, prostředek se nevytvořil. Hodnotu lze použít pouze pro celý prostředek nebo modul.

Poznámka:

Podmíněné nasazení se kaskádově nespadá do podřízených prostředků. Pokud chcete podmíněně nasadit prostředek a jeho podřízené prostředky, musíte u každého typu prostředku použít stejnou podmínku.

Školicí materiály

Pokud byste se raději dozvěděli o podmínkách prostřednictvím podrobných pokynů, přečtěte si téma Vytváření flexibilních šablon Bicep pomocí podmínek a smyček.

Definování podmínky pro nasazení

V Bicep můžete podmíněně nasadit prostředek předáním parametru, který určuje, jestli je prostředek nasazený. Podmínku otestujete pomocí if výrazu v deklaraci prostředku. Následující příklad ukazuje syntaxi výrazu if v souboru Bicep. Podmíněně nasadí zónu DNS. Když deployZone je true, nasadí zónu DNS. Pokud deployZone je, falsepřeskočí nasazení zóny DNS.

param deployZone bool

resource dnsZone 'Microsoft.Network/dnsZones@2023-07-01-preview' = if (deployZone) {
  name: 'myZone'
  location: 'global'
}

Další příklad podmíněně nasadí modul.

param deployZone bool

module dnsZone 'dnszones.bicep' = if (deployZone) {
  name: 'myZoneModule'
}

Podmínky lze použít s deklaracemi závislostí. U explicitních závislostí ho Azure Resource Manager automaticky odebere z požadovaných závislostí, když prostředek není nasazený. U implicitních závislostí je odkazování na vlastnost podmíněného prostředku povolené, ale může způsobit chybu nasazení.

Nový nebo existující prostředek

Pomocí podmíněného nasazení můžete vytvořit nový prostředek nebo použít existující. Následující příklad ukazuje, jak nasadit nový účet úložiště nebo použít existující účet úložiště.

param storageAccountName string
param location string = resourceGroup().location

@allowed([
  'new'
  'existing'
])
param newOrExisting string = 'new'

resource saNew 'Microsoft.Storage/storageAccounts@2023-04-01' = if (newOrExisting == 'new') {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
}

resource saExisting 'Microsoft.Storage/storageAccounts@2023-04-01' existing = if (newOrExisting == 'existing') {
  name: storageAccountName
}

output storageAccountId string = ((newOrExisting == 'new') ? saNew.id : saExisting.id)

Pokud je parametr newOrExisting nastaven na nový, podmínka se vyhodnotí jako true. Účet úložiště se nasadí. V opačném případě se použije existující účet úložiště.

Upozorňující

Pokud odkazujete na podmíněně nasazený prostředek, který není nasazený. Zobrazí se chyba oznamující, že prostředek není v šabloně definován.

Funkce modulu runtime

Pokud použijete odkaz nebo funkci seznamu s prostředkem, který je podmíněně nasazený, funkce se vyhodnotí i v případě, že prostředek není nasazený. Pokud funkce odkazuje na prostředek, který neexistuje, zobrazí se chyba.

Pomocí podmíněného výrazu ?: operátor se ujistěte, že je funkce vyhodnocena pouze pro podmínky při nasazení prostředku. Následující příklad šablony ukazuje, jak používat tuto funkci s výrazy, které jsou pouze podmíněně platné.

param vmName string
param location string
param logAnalytics string = ''

resource vmName_omsOnboarding 'Microsoft.Compute/virtualMachines/extensions@2024-03-01' = if (!empty(logAnalytics)) {
  name: '${vmName}/omsOnboarding'
  location: location
  properties: {
    publisher: 'Microsoft.EnterpriseCloud.Monitoring'
    type: 'MicrosoftMonitoringAgent'
    typeHandlerVersion: '1.0'
    autoUpgradeMinorVersion: true
    settings: {
      workspaceId: ((!empty(logAnalytics)) ? reference(logAnalytics, '2022-10-01').customerId : null)
    }
    protectedSettings: {
      workspaceKey: ((!empty(logAnalytics)) ? listKeys(logAnalytics, '2022-10-01').primarySharedKey : null)
    }
  }
}

output mgmtStatus string = ((!empty(logAnalytics)) ? 'Enabled monitoring for VM!' : 'Nothing to enable')

Další kroky