تعريفات النوع في قوالب 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
قيد، فإن القيمة الافتراضية هي 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"}
}
}
}
}
}
قيمة 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.