عمليات التوزيع الشرطية في 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')
الخطوات التالية
- راجع وحدة Learn إنشاء قوالب Bicep مرنة باستخدام الشروط والحلقات.
- للحصول على توصيات حول إنشاء ملفات Bicep، راجع أفضل الممارسات لـ Bicep.
- لإنشاء مثيلات متعددة من المورد، راجع الحلقات المتكررة في Bicep.