عمليات التوزيع الشرطية في Bicep مع التعبير if

لنشر مورد أو وحدة نمطية اختياريا في Bicep، استخدم if التعبير . if يتضمن التعبير شرطا يحل إلى صواب أو خطأ. if عندما يكون الشرط صحيحا، يتم نشر المورد. عندما تكون القيمة خطأ، لا يتم إنشاء المورد. لا يمكن تطبيق القيمة إلا على المورد أو الوحدة بأكملها.

إشعار

لا يتعاقب التوزيع الشرطي إلى الموارد التابعة. إذا كنت تريد توزيع مورد وموارده التابعة بشكل مشروط، يجب تطبيق نفس الشرط على كل نوع مورد.

موارد التدريب

إذا كنت تفضل التعرف على الشروط من خلال إرشادات خطوة بخطوة، فشاهد إنشاء قوالب Bicep مرنة باستخدام الشروط والحلقات.

تعريف شرط النشر

في Bicep، يمكنك نشر مورد بشكل مشروط عن طريق تمرير معلمة تحدد ما إذا كان المورد قد تم نشره أم لا. يمكنك اختبار الشرط باستخدام تعبير if في إعلان المورد. يوضح المثال التالي بناء جملة تعبير if في ملف Bicep. يقوم بنشر منطقة DNS بشكل مشروط. عندما deployZone يكون ، trueفإنه ينشر منطقة DNS. عندما deployZone يكون ، falseفإنه يتخطى نشر منطقة DNS.

param deployZone bool

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

المثال التالي ينشر وحدة نمطية بشكل مشروط.

param deployZone bool

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

يمكن استخدام الشروط مع إقرارات التبعية. بالنسبة إلى التبعيات الصريحة، يقوم Azure Resource Manager بإزالتها تلقائياً من التبعيات المطلوبة عندما لا يتم نشر المورد. بالنسبة إلى التبعيات الضمنية، يُسمح بالإشارة إلى خاصية مورد شرطي ولكن قد ينتج عنها خطأ في التوزيع.

مورد جديد أو موجود

يمكنك استخدام النشر الشرطي لإنشاء مورد جديد أو استخدام مورد موجود. يوضح المثال التالي كيفية نشر حساب تخزين جديد أو استخدام حساب تخزين موجود.

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)

عندما يتم تعيين المعلمة newOrExisting على جديد، يتم تقييم الشرط على "صواب". يتم توزيع حساب التخزين. وإلا يتم استخدام حساب التخزين الحالي.

التحذير

إذا قمت بالإشارة إلى مورد تم نشره بشكل مشروط ولم يتم نشره. ستحصل على خطأ يفيد بعدم تعريف المورد في القالب.

وظائف وقت التشغيل

إذا كنت تستخدم وظيفة مرجع أو قائمة مع مورد تم نشره بشكل شرطي، فسيتم تقييم الوظيفة حتى إذا لم يتم نشر المورد. تحصل على خطأ إذا كانت الدالة تشير إلى مورد غير موجود.

استخدم التعبير الشرطي؟: عامل التشغيل للتأكد من أن الوظيفة يتم تقييمها فقط للشروط عند نشر المورد. يوضح نموذج المثال التالي كيفية استخدام هذه الوظيفة مع التعبيرات الصالحة شرطياً فقط.

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')

الخطوات التالية