تعريفات النوع في قوالب ARM
توضح هذه المقالة كيفية إنشاء التعريفات واستخدامها في قالب Azure Resource Manager (قالب ARM). من خلال تعريف الأنواع الخاصة بك، يمكنك إعادة استخدام هذه الأنواع. يمكن استخدام تعريفات النوع فقط مع languageVersion 2.0.
ملاحظة
لا يتعرف الإصدار الحالي من ملحق Azure Resource Manager Tools ل Visual Studio Code على التحسينات التي تم إجراؤها في languageVersion 2.0.
تلميح
نوصي باستخدام Bicep لأنها تقدم نفس الإمكانات التي توفرها قوالب ARM ولأن بناء الجملة أسهل في الاستخدام. لمعرفة المزيد، راجع أنواع البيانات المعرفة من قبل المستخدم في Bicep.
الحد الأدنى من الإعلان بالربط
كحد أدنى، يحتاج كل تعريف نوع إلى اسم وإما type
أو $ref
.
"definitions": {
"demoStringType": {
"type": "string"
},
"demoIntType": {
"type": "int"
},
"demoBoolType": {
"type": "bool"
},
"demoObjectType": {
"type": "object"
},
"demoArrayType": {
"type": "array"
}
}
القيم المسموح بها
يمكنك تعريف القيم المسموح بها لتعريف نوع. قم بتوفير القيم المسموح بها في صفيف. يفشل التوزيع أثناء التحقق من الصحة إذا تم تمرير قيمة لتعريف النوع الذي ليس من القيم المسموح بها.
"definitions": {
"demoEnumType": {
"type": "string",
"allowedValues": [
"one",
"two"
]
}
}
قيود الطول
يمكنك تحديد الحد الأدنى والحد الأقصى لأطوال تعريفات نوع السلسلة والصفيف. يمكنك تعيين قيد أو كليهما. بالنسبة للسلاسل، يشير الطول إلى عدد الأحرف. بالنسبة للصفائف، يشير الطول إلى عدد العناصر الموجودة في الصفيف.
يوضح المثال التالي تعريفين للنوع. تعريف نوع واحد هو لاسم حساب التخزين الذي يجب أن يحتوي على 3-24 حرفا. تعريف النوع الآخر هو صفيف يجب أن يحتوي على من 1-5 عناصر.
"definitions": {
"storageAccountNameType": {
"type": "string",
"minLength": 3,
"maxLength": 24
},
"appNameType": {
"type": "array",
"minLength": 1,
"maxLength": 5
}
}
قيود العدد الصحيح
يمكنك تعيين القيم الدنيا والحد الأقصى لتعريفات نوع العدد الصحيح. يمكنك تعيين قيد أو كليهما.
"definitions": {
"monthType": {
"type": "int",
"minValue": 1,
"maxValue": 12
}
}
قيود الكائن
الخصائص
قيمة properties
هي خريطة لاسم الخاصية => تعريف النوع.
سيقبل {"foo": "string", "bar": 1}
المثال التالي ، ولكنه يرفض {"foo": "string", "bar": -1}
أو {"foo": "", "bar": 1}
أو أو أي كائن بدون خاصية foo
أو bar
.
"definitions": {
"objectDefinition": {
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3
},
"bar": {
"type": "int",
"minValue": 0
}
}
}
},
"parameters": {
"objectParameter": {
"$ref": "#/definitions/objectDefinition",
}
}
جميع الخصائص مطلوبة ما لم يكن تعريف نوع الخاصية يحتوي على القيد "nullable": true . لجعل كلتا الخاصيتين في المثال السابق اختيارية، ستبدو كما يلي:
"definitions": {
"objectDefinition": {
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3,
"nullable": true
},
"bar": {
"type": "int",
"minValue": 0,
"nullable": true
}
}
}
}
additionalProperties
قيمة additionalProperties
هي تعريف نوع أو قيمة منطقية. إذا لم يتم تعريف أي additionalProperties
قيد، فإن القيمة الافتراضية هي true
.
إذا كانت القيمة تعريف نوع، فإن القيمة تصف المخطط الذي يتم تطبيقه على جميع الخصائص غير المذكورة في القيد properties
. سيقبل {"fizz": "buzz", "foo": "bar"}
المثال التالي ولكن يرفض {"property": 1}
.
"definitions": {
"dictionaryDefinition": {
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3,
"nullable": true
},
"bar": {
"type": "int",
"minValue": 0,
"nullable": true
}
},
"additionalProperties": {
"type": "string"
}
}
}
إذا كانت القيمة هي false
، فقد لا يتم توفير أي خصائص تتجاوز تلك المحددة في القيد properties
. سيقبل {"foo": "string", "bar": 1}
المثال التالي ، ولكنه يرفض {"foo": "string", "bar": 1, "fizz": "buzz"}
.
"definitions": {
"dictionaryDefinition": {
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3
},
"bar": {
"type": "int",
"minValue": 0
}
},
"additionalProperties": false
}
}
إذا كانت القيمة هي true
، فإن أي خاصية لم يتم تعريفها في القيد properties
تقبل أي قيمة. سيقبل {"foo": "string", "bar": 1, "fizz": "buzz"}
المثال التالي .
"definitions": {
"dictionaryDefinition": {
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3
},
"bar": {
"type": "int",
"minValue": 0
}
},
"additionalProperties": true
}
}
مميز
تحدد القيمة discriminator
المخطط الذي يجب تطبيقه استنادا إلى خاصية تمييزية. سيقبل المثال التالي إما {"type": "ints", "foo": 1, "bar": 2}
أو {"type": "strings", "fizz": "buzz", "pop": "goes", "the": "weasel"}
، ولكنه يرفض {"type": "ints", "fizz": "buzz"}
.
"definitions": {
"taggedUnionDefinition": {
"type": "object",
"discriminator": {
"propertyName": "type",
"mapping": {
"ints": {
"type": "object",
"additionalProperties": {"type": "int"}
},
"strings": {
"type": "object",
"additionalProperties": {"type": "string"}
}
}
}
}
}
قيود الصفيف
بادئةItems
قيمة prefixItems
هي صفيف من تعريفات النوع. كل تعريف نوع في القيمة هو المخطط الذي سيتم استخدامه للتحقق من صحة عنصر صفيف في نفس الفهرس. سيقبل [1, true]
المثال التالي ولكن يرفض [1, "string"]
أو [1]
:
"definitions": {
"tupleDefinition": {
"type": "array",
"prefixItems": [
{ "type": "int" },
{ "type": "bool" }
]
}
},
"parameters": {
"tupleParameter": {
"$ref": "#/definitions/tupleDefinition"
}
}
العناصر
قيمة items
هي تعريف نوع أو قيمة منطقية. إذا لم يتم تعريف أي items
قيد، فإن القيمة الافتراضية هي true
.
إذا كانت القيمة تعريف نوع، فإن القيمة تصف المخطط الذي يتم تطبيقه على جميع عناصر الصفيف الذي يكون فهرسه أكبر من أكبر فهرس للقيد prefixItems
. سيقبل [1, true, 1]
المثال التالي أو [1, true, 1, 1]
ولكنه يرفض [1, true, "foo"]
:
"definitions": {
"tupleDefinition": {
"type": "array",
"prefixItems": [
{ "type": "int" },
{ "type": "bool" }
],
"items": { "type": "int" }
}
},
"parameters": {
"tupleParameter": {
"$ref": "#/definitions/tupleDefinition"
}
}
يمكنك استخدام items
دون استخدام prefixItems
. سيقبل [1, 2]
المثال التالي أو [1]
ولكنه يرفض ["foo"]
:
"definitions": {
"intArrayDefinition": {
"type": "array",
"items": { "type": "int" }
}
},
"parameters": {
"intArrayParameter": {
"$ref": "#/definitions/intArrayDefinition"
}
}
إذا كانت القيمة هي false
، يجب أن يكون الصفيف الذي تم التحقق من صحته بنفس طول القيد prefixItems
بالضبط. سيقبل [1, true]
المثال التالي ، ولكنه يرفض [1, true, 1]
و.[1, true, false, "foo", "bar"]
"definitions": {
"tupleDefinition": {
"type": "array",
"prefixItems": [
{"type": "int"},
{"type": "bool"}
]
},
"items": false
}
إذا كانت القيمة صحيحة، فإن عناصر الصفيف الذي يكون فهرسه أكبر من أكبر فهرس للقيد prefixItems
تقبل أي قيمة. تقبل [1, true]
الأمثلة التالية و [1, true, 1]
و [1, true, false, "foo", "bar"]
.
"definitions": {
"tupleDefinition": {
"type": "array",
"prefixItems": [
{"type": "int"},
{"type": "bool"}
]
}
}
"definitions": {
"tupleDefinition": {
"type": "array",
"prefixItems": [
{"type": "int"},
{"type": "bool"}
]
},
"items": true
}
قيد يقبل القيم الخالية
يشير القيد القابل للقيمة الخالية إلى أن القيمة قد تكون null
أو محذفة. راجع الخصائص للحصول على مثال.
الوصف
يمكنك إضافة وصف إلى تعريف نوع لمساعدة مستخدمي القالب على فهم القيمة التي يجب توفيرها.
"definitions": {
"virtualMachineSize": {
"type": "string",
"metadata": {
"description": "Must be at least Standard_A3 to support 2 NICs."
},
"defaultValue": "Standard_DS1_v2"
}
}
استخدام التعريف
للإشارة إلى تعريف نوع، استخدم بناء الجملة التالي:
"$ref": "#/definitions/<definition-name>"
يوضح المثال التالي كيفية الرجوع إلى تعريف نوع من المعلمات والمخرجات:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"languageVersion": "2.0",
"definitions": {
"naturalNumber": {
"type": "int",
"minValue": 1
}
},
"parameters": {
"numberParam": {
"$ref": "#/definitions/naturalNumber",
"defaultValue": 0
}
},
"resources": {},
"outputs": {
"output1": {
"$ref": "#/definitions/naturalNumber",
"value": "[parameters('numberParam')]"
}
}
}
الخطوات التالية
- للتعرف على الخصائص المتوفرة لتعريفات النوع، راجع فهم بنية وبناء جملة قوالب ARM.