Definice typů v šablonách ARM
Tento článek popisuje, jak vytvářet a používat definice v šabloně Azure Resource Manager (šablona ARM). Definováním vlastních typů můžete tyto typy znovu použít. Definice typů lze použít pouze s languageVersion 2.0.
Poznámka
Aktuální verze rozšíření Azure Resource Manager Tools pro Visual Studio Code nerozpoznává vylepšení vytvořená v languageVersion 2.0.
Tip
Doporučujeme Bicep , protože nabízí stejné funkce jako šablony ARM a syntaxe se snadněji používá. Další informace najdete v tématu Uživatelem definované datové typy v bicepu.
Minimální deklarace
Každá definice typu potřebuje minimálně název a buď a type
nebo $ref
.
"definitions": {
"demoStringType": {
"type": "string"
},
"demoIntType": {
"type": "int"
},
"demoBoolType": {
"type": "bool"
},
"demoObjectType": {
"type": "object"
},
"demoArrayType": {
"type": "array"
}
}
Povolené hodnoty
Povolené hodnoty můžete definovat pro definici typu. V poli zadáte povolené hodnoty. Nasazení během ověřování selže, pokud je předána hodnota pro definici typu, která není jednou z povolených hodnot.
"definitions": {
"demoEnumType": {
"type": "string",
"allowedValues": [
"one",
"two"
]
}
}
Omezení délky
Můžete zadat minimální a maximální délku pro definice typu řetězce a pole. Můžete nastavit jedno nebo obě omezení. U řetězců délka označuje počet znaků. U polí určuje délka počet položek v poli.
Následující příklad deklaruje dvě definice typů. Jedna definice typu je pro název účtu úložiště, který musí mít 3 až 24 znaků. Druhou definicí typu je pole, které musí obsahovat 1 až 5 položek.
"definitions": {
"storageAccountNameType": {
"type": "string",
"minLength": 3,
"maxLength": 24
},
"appNameType": {
"type": "array",
"minLength": 1,
"maxLength": 5
}
}
Omezení celého čísla
Pro definice celočíselného typu můžete nastavit minimální a maximální hodnoty. Můžete nastavit jedno nebo obě omezení.
"definitions": {
"monthType": {
"type": "int",
"minValue": 1,
"maxValue": 12
}
}
Omezení objektu
Vlastnosti
Hodnota properties
je mapa názvu vlastnosti => definice typu.
Následující příklad by přijal {"foo": "string", "bar": 1}
, ale odmítl {"foo": "string", "bar": -1}
, {"foo": "", "bar": 1}
nebo jakýkoli objekt bez foo
vlastnosti nebo bar
.
"definitions": {
"objectDefinition": {
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3
},
"bar": {
"type": "int",
"minValue": 0
}
}
}
},
"parameters": {
"objectParameter": {
"$ref": "#/definitions/objectDefinition",
}
}
Všechny vlastnosti jsou povinné, pokud definice typu vlastnosti nemá hodnotu nullable: true constraint. Aby byly obě vlastnosti v předchozím příkladu volitelné, vypadaly by takto:
"definitions": {
"objectDefinition": {
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3,
"nullable": true
},
"bar": {
"type": "int",
"minValue": 0,
"nullable": true
}
}
}
}
další Vlastnosti
Hodnota additionalProperties
je definice typu nebo logická hodnota. Pokud není definováno žádné additionalProperties
omezení, výchozí hodnota je true
.
Pokud je hodnota definicí typu, tato hodnota popisuje schéma, které se použije u všech vlastností, které nejsou uvedené v properties
omezení. Následující příklad by přijal, {"fizz": "buzz", "foo": "bar"}
ale odmítl {"property": 1}
.
"definitions": {
"dictionaryDefinition": {
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3,
"nullable": true
},
"bar": {
"type": "int",
"minValue": 0,
"nullable": true
}
},
"additionalProperties": {
"type": "string"
}
}
}
Pokud je false
hodnota , nesmí být zadány žádné vlastnosti nad rámec těch, které jsou definovány properties
v omezení. Následující příklad by přijal {"foo": "string", "bar": 1}
, ale odmítl {"foo": "string", "bar": 1, "fizz": "buzz"}
.
"definitions": {
"dictionaryDefinition": {
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3
},
"bar": {
"type": "int",
"minValue": 0
}
},
"additionalProperties": false
}
}
Pokud je true
hodnota , jakákoli vlastnost, která není definována properties
v omezení, přijímá jakoukoli hodnotu. Následující příklad by přijal {"foo": "string", "bar": 1, "fizz": "buzz"}
.
"definitions": {
"dictionaryDefinition": {
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3
},
"bar": {
"type": "int",
"minValue": 0
}
},
"additionalProperties": true
}
}
Diskriminátor
Hodnota discriminator
definuje, jaké schéma se má použít na základě diskriminující vlastnosti. Následující příklad by přijal buď {"type": "ints", "foo": 1, "bar": 2}
nebo , {"type": "strings", "fizz": "buzz", "pop": "goes", "the": "weasel"}
ale odmítl {"type": "ints", "fizz": "buzz"}
.
"definitions": {
"taggedUnionDefinition": {
"type": "object",
"discriminator": {
"propertyName": "type",
"mapping": {
"ints": {
"type": "object",
"additionalProperties": {"type": "int"}
},
"strings": {
"type": "object",
"additionalProperties": {"type": "string"}
}
}
}
}
}
Omezení pole
prefixItems
Hodnota je prefixItems
pole definic typů. Každá definice typu v hodnotě je schéma, které se má použít k ověření prvku pole ve stejném indexu. Následující příklad by přijal, [1, true]
ale odmítl [1, "string"]
nebo [1]
:
"definitions": {
"tupleDefinition": {
"type": "array",
"prefixItems": [
{ "type": "int" },
{ "type": "bool" }
]
}
},
"parameters": {
"tupleParameter": {
"$ref": "#/definitions/tupleDefinition"
}
}
položky
Hodnota items
je definice typu nebo logická hodnota. Pokud není definováno žádné items
omezení, výchozí hodnota je true
.
Pokud je hodnota definice typu, tato hodnota popisuje schéma, které se použije na všechny prvky pole, jejichž index je větší než největší index prefixItems
omezení. Následující příklad by přijal [1, true, 1]
nebo [1, true, 1, 1]
odmítl [1, true, "foo"]
:
"definitions": {
"tupleDefinition": {
"type": "array",
"prefixItems": [
{ "type": "int" },
{ "type": "bool" }
],
"items": { "type": "int" }
}
},
"parameters": {
"tupleParameter": {
"$ref": "#/definitions/tupleDefinition"
}
}
Můžete použít items
bez použití prefixItems
. Následující příklad by přijal [1, 2]
nebo [1]
odmítl ["foo"]
:
"definitions": {
"intArrayDefinition": {
"type": "array",
"items": { "type": "int" }
}
},
"parameters": {
"intArrayParameter": {
"$ref": "#/definitions/intArrayDefinition"
}
}
Pokud je false
hodnota , musí být ověřená matice přesně stejná jako prefixItems
omezení. Následující příklad by přijal [1, true]
, ale odmítl [1, true, 1]
a [1, true, false, "foo", "bar"]
.
"definitions": {
"tupleDefinition": {
"type": "array",
"prefixItems": [
{"type": "int"},
{"type": "bool"}
]
},
"items": false
}
Pokud je hodnota true, prvky pole, jejichž index je větší než největší index omezení, přijímají libovolnou prefixItems
hodnotu. Následující příklady by akceptovaly [1, true]
, [1, true, 1]
a [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
}
Omezení s možnou hodnotou null
Omezení s možnou hodnotou null označuje, že hodnota může být null
nebo vynechána. Příklad najdete v tématu Vlastnosti .
Description
K definici typu můžete přidat popis, který uživatelům šablony pomůže pochopit hodnotu, kterou mají poskytnout.
"definitions": {
"virtualMachineSize": {
"type": "string",
"metadata": {
"description": "Must be at least Standard_A3 to support 2 NICs."
},
"defaultValue": "Standard_DS1_v2"
}
}
Použití definice
Pokud chcete odkazovat na definici typu, použijte následující syntaxi:
"$ref": "#/definitions/<definition-name>"
Následující příklad ukazuje, jak odkazovat na definici typu z parametrů a výstupů:
{
"$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')]"
}
}
}
Další kroky
- Informace o dostupných vlastnostech definic typů najdete v tématu Vysvětlení struktury a syntaxe šablon ARM.