قاعدة Linter - لا توجد مواقع مشفرة

تبحث هذه القاعدة عن استخدامات قيم موقع Azure التي لم تُحدد معلمات لها.

التعليمة البرمجية لقاعدة Linter

استخدم القيمة التالية في ملف تكوين Bicep لتخصيص إعدادات القاعدة:

no-hardcoded-location

حل

قد يكون لمستخدمي القالب وصول محدود إلى المناطق حيث يمكنهم إنشاء الموارد. قد يمنع موقع المورد الذي تم ترميزه الثابت المستخدمين من إنشاء مورد، وبالتالي منعهم من استخدام القالب. من خلال توفير معلمة الموقع بأن تكون افتراضية لموقع مجموعة الموارد، يمكن للمستخدمين استخدام القيمة الافتراضية عندما يكون ذلك مناسباً ولكن يمكنهم أيضاً تحديد موقع آخر.

بدلا من استخدام سلسلة مشفرة أو قيمة متغيرة، استخدم معلمة أو السلسلة "العمومية" أو تعبيرا (ولكن ليس resourceGroup().location أو ، راجع no-loc-expr-outside-paramsdeployment().location). تقترح أفضل الممارسات أنه لتعيين مواقع الموارد، يجب أن يكون للقالب معلمة سلسلة تسمى location. قد تكون هذه المعلمة افتراضية إلى مجموعة الموارد أو موقع التوزيع (resourceGroup().location أو deployment().location).

يفشل المثال التالي في هذا الاختبار لأن خاصية location للمورد تستخدم سلسلة حرفية:

  resource stg 'Microsoft.Storage/storageAccounts@2021-02-01' = {
      location: 'westus'
  }

يمكنك إصلاحه عن طريق إنشاء معلمة سلسلة location جديدة (والتي قد يكون لها قيمة افتراضية اختياريًا - resourceGroup().location يستخدم بشكل متكرر كإعداد افتراضي):

  param location string = resourceGroup().location
  resource stg 'Microsoft.Storage/storageAccounts@2021-02-01' = {
      location: location
  }

استخدم Quick Fix لإنشاء معلمة موقع واستبدال السلسلة الحرفية باسم المعلمة. انظر لقطات الشاشة التالية:

لقطة شاشة لتحذير قاعدة أداة تحليل الموقع بدون ترميز ثابت باستخدام quickfix.

يفشل المثال التالي في هذا الاختبار لأن خاصية location للمورد تستخدم متغير مع سلسلة حرفية.

  var location = 'westus'
  resource stg 'Microsoft.Storage/storageAccounts@2021-02-01' = {
      location: location
  }

يمكنك إصلاحه عن طريق تحويل المتغير إلى معلمة:

  param location string = 'westus'
  resource stg 'Microsoft.Storage/storageAccounts@2021-02-01' = {
      location: location
  }

يفشل المثال التالي في هذا الاختبار لأنه تم تمرير سلسلة حرفية إلى معلمة وحدة نمطية التي بدورها تُستخدم لخاصية location للمورد:

module m1 'module1.bicep' = {
  name: 'module1'
  params: {
    location: 'westus'
  }
}

حيث module1.bicep هو:

param location string

resource storageaccount 'Microsoft.Storage/storageAccounts@2021-02-01' = {
  name: 'storageaccount'
  location: location
  kind: 'StorageV2'
  sku: {
    name: 'Premium_LRS'
  }
}

يمكنك إصلاح الفشل عن طريق إنشاء معلمة جديدة للقيمة:

param location string // optionally with a default value
module m1 'module1.bicep' = {
  name: 'module1'
  params: {
    location: location
  }
}

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

لمزيد من المعلومات حول linter، راجعاستخدام Bicep linter.