Definicje typów w szablonach usługi ARM
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.
Uwaga
Bieżąca wersja rozszerzenia Azure Resource Manager Tools dla Visual Studio Code nie rozpoznaje ulepszeń w wersji languageVersion 2.0.
Porada
Zalecamy użycie aplikacji Bicep , ponieważ oferuje te same możliwości co szablony usługi ARM, a składnia jest łatwiejsza. Aby dowiedzieć się więcej, zobacz Typy danych zdefiniowane przez użytkownika w aplikacji Bicep.
Minimalna deklaracja
Co najmniej każda definicja typu wymaga nazwy i lub type
$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żna określić minimalną i maksymalną długość definicji typu ciągu i 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.
W poniższym przykładzie zadeklarowane są dwie definicje typów. Jedną z definicji typów jest nazwa konta magazynu, która musi zawierać od 3 do 24 znaków. Druga 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
to mapa nazwy właściwości => definicja typu.
W poniższym przykładzie akceptowana {"foo": "string", "bar": 1}
jest wartość , 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 wartość "nullable": ograniczenie 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
}
}
}
}
additionalProperties
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
. W poniższym przykładzie zostanie zaakceptowana{"fizz": "buzz", "foo": "bar"}
, ale odrzucona .{"property": 1}
"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 zostanie odrzucona {"foo": "string", "bar": 1, "fizz": "buzz"}
wartość .
"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ść, która nie została zdefiniowana w ograniczeniu properties
, akceptuje dowolną wartość. W poniższym przykładzie zostanie zaakceptowana opcja {"foo": "string", "bar": 1, "fizz": "buzz"}
.
"definitions": {
"dictionaryDefinition": {
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3
},
"bar": {
"type": "int",
"minValue": 0
}
},
"additionalProperties": true
}
}
Rozróżniacza
Wartość discriminator
określa schemat do zastosowania 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 zostanie odrzucona {"type": "ints", "fizz": "buzz"}
wartość .
"definitions": {
"taggedUnionDefinition": {
"type": "object",
"discriminator": {
"propertyName": "type",
"mapping": {
"ints": {
"type": "object",
"additionalProperties": {"type": "int"}
},
"strings": {
"type": "object",
"additionalProperties": {"type": "string"}
}
}
}
}
}
Ograniczenia tablicy
prefixItems
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, ale odrzuca [1, true]
[1, "string"]
lub [1]
:
"definitions": {
"tupleDefinition": {
"type": "array",
"prefixItems": [
{ "type": "int" },
{ "type": "bool" }
]
}
},
"parameters": {
"tupleParameter": {
"$ref": "#/definitions/tupleDefinition"
}
}
elementy
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, który jest 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żesz użyć polecenia 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 mieć dokładnie taką samą długość, jak prefixItems
ograniczenie. Poniższy przykład będzie akceptował [1, true]
element , ale odrzucał [1, true, 1]
elementy i [1, true, false, "foo", "bar"]
.
"definitions": {
"tupleDefinition": {
"type": "array",
"prefixItems": [
{"type": "int"},
{"type": "bool"}
]
},
"items": false
}
Jeśli wartość jest prawdziwa, elementy tablicy, których indeks jest większy niż największy indeks prefixItems
ograniczenia akceptują dowolną wartość. Poniższe przykłady akceptują elementy [1, true]
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')]"
}
}
}
Następne 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.