تعريفات النوع في قوالب 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')]"
    }
  }
}

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