حل أخطاء اسم المورد ونوع عدم التطابق

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

Symptom

عند نشر قالب، تتلقى خطأ مع رمز InvalidTemplateالخطأ . تشير الرسالة إلى أن نوع المورد واسمه غير متطابقين. يقترح تحديد عدد الأجزاء في الاسم.

السبب

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

{resource-provider-namespace}/{type-segment-1}/{type-segment-2}

يحتوي اسم المورد على مقطع واحد أو أكثر مفصولة بشرطة مائلة. يجب أن يتطابق عدد الأجزاء مع الرقم الموجود في نوع المورد.

{name-segment-1}/{name-segment-2}

إذا كان نوع المورد واسمه يحتويان على عدد مختلف من الأجزاء، فستتلقى هذا الخطأ.

حل

تأكد من فهمك لمستوى نوع المورد. على سبيل المثال؛ يحتوي مورد المخزن الرئيسي على نوع مورد مؤهل بالكامل هو Microsoft.KeyVault/vaults. يمكنك تجاهل مساحة اسم موفر المورد (Microsoft.KeyVault) والتركيز على النوع (vaults). لها مقطع واحد.

سر المخزن الرئيسي هو مورد تابع للمخزن. لديها نوع مورد مؤهل بالكامل من Microsoft.KeyVault/vaults/secrets. يحتوي نوع المورد هذا على جزأين ().

لتحديد اسم لمخزن المفاتيح، قم بتوفير جزء واحد فقط، مثل examplevault123. لتحديد اسم للسر، قدِّم جزأين، مثل examplevault123/examplesecret. يشير المقطع الأول إلى مخزن المفاتيح حيث يتم تخزين هذا السر.

يُظهر المثال التالي تنسيقاً صالحاً لاسم المورد.

resource kv 'Microsoft.KeyVault/vaults@2022-07-01' = {
  name: 'examplevault123'
  ...
}

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

resource kv 'Microsoft.KeyVault/vaults@2022-07-01' = {
  name: 'contoso/examplevault123'
  ...
}

عندما تقوم بتداخل مورد فرعي داخل المورد الأصلي، قم بتوفير المقطع الإضافي فقط. لا يزال نوع المورد الكامل واسمه يحتويان على القيم من المورد الأصلي ولكن تم إنشاؤها لك. في المثال التالي، النوع هو secrets والاسم هو examplesecret.

resource kv 'Microsoft.KeyVault/vaults@2022-07-01' = {
  name: 'examplevault123'
  ...
  resource kvsecret 'secrets' = {
    name: 'examplesecret'
    properties: {
     value: secretValue
    }
  }
}

عند تحديد المورد الفرعي خارج الأصل؛ قم بتوفير نوع المورد الكامل. بالنسبة إلى JSON؛ أدخل اسم المورد الكامل.

بالنسبة إلى Bicep؛ استخدم الخاصية parent وقم بتوفير الاسم الرمزي للمورد الأصلي. عند استخدام الخاصية الأصل؛ يتم إنشاء الاسم الكامل لك، لذلك تُقدِّم اسم المورد الفرعي كمقطع واحد.

resource kvsecret 'Microsoft.KeyVault/vaults/secrets@2022-07-01' = {
  name: 'examplesecret'
  parent: kv
  properties: {
     value: secretValue
  }
}

resource kv 'Microsoft.KeyVault/vaults@2022-07-01' = {
  name: 'examplevault123'
  ...
}

لمزيد من المعلومات؛ راجع تعيين الاسم والنوع للموارد الفرعية في Bicep أو تعيين الاسم والنوع للموارد الفرعية في قوالب ARM.