Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek popisuje, jak vytvořit 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 verzí jazyka 2.0.
Návod
Doporučujeme Bicep, protože nabízí stejné možnosti jako šablony ARM a syntaxe se snadněji používá. Další informace najdete v tématu Uživatelsky definované datové typy v aplikaci Bicep.
Minimální deklarace
Minimálně každá definice typu potřebuje název a buď a type nebo a $ref.
"definitions": {
"demoStringType": {
"type": "string"
},
"demoIntType": {
"type": "int"
},
"demoBoolType": {
"type": "bool"
},
"demoObjectType": {
"type": "object"
},
"demoArrayType": {
"type": "array"
}
}
Povolené hodnoty
Můžete definovat povolené hodnoty pro definici typu. Do pole zadáte povolené hodnoty. Nasazení se během ověřování nezdaří, pokud je pro definici typu předána hodnota, která není jednou z povolených hodnot.
"definitions": {
"demoEnumType": {
"type": "string",
"allowedValues": [
"one",
"two"
]
}
}
Omezení délky
Můžete určit minimální a maximální délku pro definice typů řetězců a polí. 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 matici.
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í mít 1 až 5 položek.
"definitions": {
"storageAccountNameType": {
"type": "string",
"minLength": 3,
"maxLength": 24
},
"appNameType": {
"type": "array",
"minLength": 1,
"maxLength": 5
}
}
Celočíselná omezení
Můžete nastavit minimální a maximální hodnoty pro definice celočíselných typů. Můžete nastavit jedno nebo obě omezení.
"definitions": {
"monthType": {
"type": "int",
"minValue": 1,
"maxValue": 12
}
}
Omezení objektu
Vlastnosti
Hodnota je properties mapa názvu vlastnosti => definice typu.
Následující příklad by přijal {"foo": "string", "bar": 1}, ale odmítnout {"foo": "string", "bar": -1}, {"foo": "", "bar": 1}nebo jakýkoli objekt bez foo nebo bar vlastnost.
"definitions": {
"objectDefinition": {
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3
},
"bar": {
"type": "int",
"minValue": 0
}
}
}
},
"parameters": {
"objectParameter": {
"$ref": "#/definitions/objectDefinition",
}
}
Všechny vlastnosti jsou vyžadovány, pokud definice typu vlastnosti nemá omezení "nullable": true. Pokud chcete, aby obě vlastnosti v předchozím příkladu byly volitelné, vypadaly by takto:
"definitions": {
"objectDefinition": {
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3,
"nullable": true
},
"bar": {
"type": "int",
"minValue": 0,
"nullable": true
}
}
}
}
dodatečné vlastnosti
Hodnota je additionalProperties definice typu nebo logická hodnota. Pokud není definováno žádné additionalProperties omezení, výchozí hodnota je true.
Pokud je hodnota definice typu, hodnota popisuje schéma, které je použito na všechny vlastnosti, které nejsou uvedeny 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 falsehodnota , 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ítnout {"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 truehodnota , jakákoli vlastnost, která není definována properties v omezení přijímá libovolnou 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ě nediskriminační 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ítnout {"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 je items definice typu nebo logická hodnota. Pokud není definováno žádné items omezení, výchozí hodnota je true.
Pokud je hodnota definice typu, hodnota popisuje schéma použité pro 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 se jedná falseo hodnotu, musí být ověřená matice přesně stejná jako prefixItems omezení. Následující příklad by přijal [1, true], ale odmítnout [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 prefixItems omezení, přijímají libovolnou hodnotu. Následující příklady by přijímaly [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 části Vlastnosti .
Popis
Do definice 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"
}
}
Definice použití
Chcete-li 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
- Další informace o dostupných vlastnostech pro definice typů najdete v tématu Principy struktury a syntaxe šablon ARM.