Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym artykule opisano sposób tworzenia i używania definicji w szablonie usługi Azure Resource Manager (szablon usługi ARM). Definiując własne typy, można ponownie użyć tych typów. Definicje typów mogą być używane tylko z languageVersion 2.0.
Wskazówka
Zalecamy Bicep, ponieważ oferuje te same możliwości co szablony ARM, a składnia jest łatwiejsza do użycia. Aby dowiedzieć się więcej, zobacz Typy danych zdefiniowanych przez użytkownika w aplikacji Bicep.
Minimalna deklaracja
Co najmniej każda definicja typu wymaga nazwy oraz albo type, albo $ref.
"definitions": {
"demoStringType": {
"type": "string"
},
"demoIntType": {
"type": "int"
},
"demoBoolType": {
"type": "bool"
},
"demoObjectType": {
"type": "object"
},
"demoArrayType": {
"type": "array"
}
}
Dozwolone wartości
Dozwolone wartości można zdefiniować dla definicji typu. Dozwolone wartości są podane w tablicy. Wdrożenie kończy się niepowodzeniem podczas walidacji, jeśli wartość jest przekazywana dla definicji typu, która nie jest jedną z dozwolonych wartości.
"definitions": {
"demoEnumType": {
"type": "string",
"allowedValues": [
"one",
"two"
]
}
}
Ograniczenia długości
Możesz określić minimalną i maksymalną długość definicji ciągów i typów tablicy. Można ustawić jedno lub oba ograniczenia. W przypadku ciągów długość wskazuje liczbę znaków. W przypadku tablic długość wskazuje liczbę elementów w tablicy.
Poniższy przykład deklaruje dwie definicje typów. Jedna z definicji typu to nazwa konta magazynowego, która musi mieć od 3 do 24 znaków. Inna definicja typu to tablica, która musi zawierać od 1 do 5 elementów.
"definitions": {
"storageAccountNameType": {
"type": "string",
"minLength": 3,
"maxLength": 24
},
"appNameType": {
"type": "array",
"minLength": 1,
"maxLength": 5
}
}
Ograniczenia liczb całkowitych
Możesz ustawić wartości minimalne i maksymalne dla definicji typów liczb całkowitych. Można ustawić jedno lub oba ograniczenia.
"definitions": {
"monthType": {
"type": "int",
"minValue": 1,
"maxValue": 12
}
}
Ograniczenia obiektu
Właściwości
Wartość properties jest odwzorowaniem, w którym nazwa właściwości odpowiada definicji typu =>.
Poniższy przykład akceptuje {"foo": "string", "bar": 1}element , ale odrzuca {"foo": "string", "bar": -1}obiekt , {"foo": "", "bar": 1}lub dowolny obiekt bez foo właściwości lub bar .
"definitions": {
"objectDefinition": {
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3
},
"bar": {
"type": "int",
"minValue": 0
}
}
}
},
"parameters": {
"objectParameter": {
"$ref": "#/definitions/objectDefinition",
}
}
Wszystkie właściwości są wymagane, chyba że definicja typu właściwości ma ograniczenie "nullable": true. Aby ustawić obie właściwości w poprzednim przykładzie jako opcjonalne, wyglądałoby to następująco:
"definitions": {
"objectDefinition": {
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3,
"nullable": true
},
"bar": {
"type": "int",
"minValue": 0,
"nullable": true
}
}
}
}
dodatkowe właściwości
Wartość additionalProperties jest definicją typu lub wartością logiczną. Jeśli nie additionalProperties zdefiniowano żadnego ograniczenia, wartość domyślna to true.
Jeśli wartość jest definicją typu, wartość opisuje schemat, który jest stosowany do wszystkich właściwości, które nie zostały wymienione w ograniczeniu properties . Poniższy przykład akceptuje {"fizz": "buzz", "foo": "bar"} , ale odrzuca {"property": 1}element .
"definitions": {
"dictionaryDefinition": {
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3,
"nullable": true
},
"bar": {
"type": "int",
"minValue": 0,
"nullable": true
}
},
"additionalProperties": {
"type": "string"
}
}
}
Jeśli wartość to false, nie można podać żadnych właściwości poza tymi zdefiniowanymi w ograniczeniu properties . W poniższym przykładzie zostanie zaakceptowana {"foo": "string", "bar": 1}wartość , ale odrzucisz {"foo": "string", "bar": 1, "fizz": "buzz"}.
"definitions": {
"dictionaryDefinition": {
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3
},
"bar": {
"type": "int",
"minValue": 0
}
},
"additionalProperties": false
}
}
Jeśli wartość to true, każda właściwość nie zdefiniowana w ograniczeniu properties akceptuje dowolną wartość. Poniższy przykład będzie akceptował {"foo": "string", "bar": 1, "fizz": "buzz"}element .
"definitions": {
"dictionaryDefinition": {
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3
},
"bar": {
"type": "int",
"minValue": 0
}
},
"additionalProperties": true
}
}
Rozróżniacza
Wartość discriminator definiuje schemat, który ma być stosowany na podstawie właściwości dyskryminującej. W poniższym przykładzie zostanie zaakceptowana wartość {"type": "ints", "foo": 1, "bar": 2} lub {"type": "strings", "fizz": "buzz", "pop": "goes", "the": "weasel"}, ale odrzucisz {"type": "ints", "fizz": "buzz"}element .
"definitions": {
"taggedUnionDefinition": {
"type": "object",
"discriminator": {
"propertyName": "type",
"mapping": {
"ints": {
"type": "object",
"additionalProperties": {"type": "int"}
},
"strings": {
"type": "object",
"additionalProperties": {"type": "string"}
}
}
}
}
}
Ograniczenia tablicy
prefiksItems
Wartość prefixItems to tablica definicji typów. Każda definicja typu w wartości jest schematem używanym do sprawdzania poprawności elementu tablicy w tym samym indeksie. Poniższy przykład akceptuje [1, true] , ale odrzuca [1, "string"] lub [1]:
"definitions": {
"tupleDefinition": {
"type": "array",
"prefixItems": [
{ "type": "int" },
{ "type": "bool" }
]
}
},
"parameters": {
"tupleParameter": {
"$ref": "#/definitions/tupleDefinition"
}
}
przedmioty
Wartość items jest definicją typu lub wartością logiczną. Jeśli nie items zdefiniowano żadnego ograniczenia, wartość domyślna to true.
Jeśli wartość jest definicją typu, wartość opisuje schemat stosowany do wszystkich elementów tablicy, których indeks jest większy niż największy indeks prefixItems ograniczenia. W poniższym przykładzie zostanie zaakceptowana [1, true, 1] lub [1, true, 1, 1] odrzucona:[1, true, "foo"]
"definitions": {
"tupleDefinition": {
"type": "array",
"prefixItems": [
{ "type": "int" },
{ "type": "bool" }
],
"items": { "type": "int" }
}
},
"parameters": {
"tupleParameter": {
"$ref": "#/definitions/tupleDefinition"
}
}
Można użyć items bez użycia polecenia prefixItems. W poniższym przykładzie zostanie zaakceptowana [1, 2] lub [1] odrzucona:["foo"]
"definitions": {
"intArrayDefinition": {
"type": "array",
"items": { "type": "int" }
}
},
"parameters": {
"intArrayParameter": {
"$ref": "#/definitions/intArrayDefinition"
}
}
Jeśli wartość to false, zweryfikowana tablica musi być dokładnie taką samą długością jak prefixItems ograniczenie. W poniższym przykładzie zostanie zaakceptowana [1, true]wartość , ale odrzucona [1, true, 1]wartość i [1, true, false, "foo", "bar"].
"definitions": {
"tupleDefinition": {
"type": "array",
"prefixItems": [
{"type": "int"},
{"type": "bool"}
]
},
"items": false
}
Jeśli wartość ma wartość true, elementy tablicy, których indeks jest większy niż największy indeks prefixItems ograniczenia, akceptują dowolną wartość. Poniższe przykłady akceptują [1, true]wartości i [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
}
ograniczenie dopuszczane do wartości null
Ograniczenie dopuszczające wartość null wskazuje, że wartość może być null lub pominięta. Zobacz Właściwości , aby zapoznać się z przykładem.
Opis
Możesz dodać opis do definicji typu, aby ułatwić użytkownikom szablonu zrozumienie wartości, którą należy podać.
"definitions": {
"virtualMachineSize": {
"type": "string",
"metadata": {
"description": "Must be at least Standard_A3 to support 2 NICs."
},
"defaultValue": "Standard_DS1_v2"
}
}
Użyj definicji
Aby odwołać się do definicji typu, użyj następującej składni:
"$ref": "#/definitions/<definition-name>"
W poniższym przykładzie pokazano, jak odwołać się do definicji typu z parametrów i danych wyjściowych:
{
"$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')]"
}
}
}
Dalsze kroki
- Aby dowiedzieć się więcej o dostępnych właściwościach definicji typów, zobacz Omówienie struktury i składni szablonów usługi ARM.