Típusdefiníciók arm-sablonokban
Ez a cikk azt ismerteti, hogyan hozhat létre és használhat definíciókat az Azure Resource Manager-sablonban (ARM-sablon). A saját típusok definiálásával újra felhasználhatja ezeket a típusokat. A típusdefiníciók csak a languageVersion 2.0-val használhatók.
Megjegyzés
A Visual Studio Code-hoz készült Azure Resource Manager Tools bővítmény jelenlegi kiadása nem ismeri fel a languageVersion 2.0-ban végrehajtott fejlesztéseket.
Tipp
Azért javasoljuk a Bicep használatát, mert ugyanazokkal a képességekkel rendelkezik, mint az ARM-sablonok, és a szintaxis használata egyszerűbb. További információ: Felhasználó által definiált adattípusok a Bicepben.
Minimális deklaráció
Legalább minden típusdefiníciónak szüksége van egy névre és egy type
vagy egy névre $ref
.
"definitions": {
"demoStringType": {
"type": "string"
},
"demoIntType": {
"type": "int"
},
"demoBoolType": {
"type": "bool"
},
"demoObjectType": {
"type": "object"
},
"demoArrayType": {
"type": "array"
}
}
Megengedett értékek
A típusdefiníciókhoz megadhat engedélyezett értékeket. Az engedélyezett értékeket egy tömbben adja meg. Az üzembe helyezés sikertelen az ellenőrzés során, ha a típusdefiníció olyan értéket ad át, amely nem az engedélyezett értékek egyike.
"definitions": {
"demoEnumType": {
"type": "string",
"allowedValues": [
"one",
"two"
]
}
}
Hosszkorlátozások
A sztring- és tömbtípus-definíciók minimális és maximális hosszát megadhatja. Beállíthat egy vagy mindkét kényszert. Sztringek esetén a hossz a karakterek számát jelzi. Tömbök esetén a hossz a tömb elemeinek számát jelzi.
Az alábbi példa két típusdefiníciót deklarál. Az egyik típusdefiníció egy 3–24 karakter hosszúságú tárfióknév. A másik típusdefiníció egy tömb, amely 1–5 elemből állhat.
"definitions": {
"storageAccountNameType": {
"type": "string",
"minLength": 3,
"maxLength": 24
},
"appNameType": {
"type": "array",
"minLength": 1,
"maxLength": 5
}
}
Egész számra vonatkozó korlátozások
Az egész számtípus-definíciók minimális és maximális értékeit megadhatja. Beállíthat egy vagy mindkét kényszert.
"definitions": {
"monthType": {
"type": "int",
"minValue": 1,
"maxValue": 12
}
}
Objektumkorlátozások
Tulajdonságok
Az érték properties
a tulajdonságnév => típusdefiníció leképezése.
Az alábbi példa elfogadná {"foo": "string", "bar": 1}
, de elutasítja{"foo": "string", "bar": -1}
, {"foo": "", "bar": 1}
vagy bármilyen objektumot vagy bar
tulajdonságot nem.foo
"definitions": {
"objectDefinition": {
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3
},
"bar": {
"type": "int",
"minValue": 0
}
}
}
},
"parameters": {
"objectParameter": {
"$ref": "#/definitions/objectDefinition",
}
}
Minden tulajdonságra szükség van, kivéve, ha a tulajdonság típusdefiníciója "nullable": igaz kényszert tartalmaz. Ha az előző példában mindkét tulajdonságot választhatóvá szeretné tenni, a következőképpen nézne ki:
"definitions": {
"objectDefinition": {
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3,
"nullable": true
},
"bar": {
"type": "int",
"minValue": 0,
"nullable": true
}
}
}
}
továbbitulajdonságok
A értéke additionalProperties
típusdefiníció vagy logikai érték. Ha nincs additionalProperties
megkötés meghatározva, az alapértelmezett érték a .true
Ha az érték típusdefiníció, az érték a kényszerben nem említett összes tulajdonságra alkalmazott sémát properties
írja le. Az alábbi példa elfogadná {"fizz": "buzz", "foo": "bar"}
, de elutasítaná {"property": 1}
a következőt: .
"definitions": {
"dictionaryDefinition": {
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3,
"nullable": true
},
"bar": {
"type": "int",
"minValue": 0,
"nullable": true
}
},
"additionalProperties": {
"type": "string"
}
}
}
Ha az érték , false
a kényszerben properties
meghatározottakon túl nem adható meg tulajdonság. Az alábbi példa elfogadná {"foo": "string", "bar": 1}
, de elutasítja {"foo": "string", "bar": 1, "fizz": "buzz"}
a következőt: .
"definitions": {
"dictionaryDefinition": {
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3
},
"bar": {
"type": "int",
"minValue": 0
}
},
"additionalProperties": false
}
}
Ha az érték , true
a properties
kényszerben nem definiált bármely tulajdonság elfogad bármilyen értéket. Az alábbi példa elfogadná a következőt {"foo": "string", "bar": 1, "fizz": "buzz"}
: .
"definitions": {
"dictionaryDefinition": {
"type": "object",
"properties": {
"foo": {
"type": "string",
"minLength": 3
},
"bar": {
"type": "int",
"minValue": 0
}
},
"additionalProperties": true
}
}
diszkriminatív
Az érték discriminator
határozza meg, hogy milyen sémát kell alkalmazni egy diszkriminatív tulajdonság alapján. Az alábbi példa elfogadná a {"type": "ints", "foo": 1, "bar": 2}
vagy a értéket {"type": "strings", "fizz": "buzz", "pop": "goes", "the": "weasel"}
, de elutasítja a következőt {"type": "ints", "fizz": "buzz"}
: .
"definitions": {
"taggedUnionDefinition": {
"type": "object",
"discriminator": {
"propertyName": "type",
"mapping": {
"ints": {
"type": "object",
"additionalProperties": {"type": "int"}
},
"strings": {
"type": "object",
"additionalProperties": {"type": "string"}
}
}
}
}
}
Tömbkötések
prefixItems
Az érték prefixItems
típusdefiníciók tömbje. Az érték minden típusdefiníciója az a séma, amely egy tömb elemének ellenőrzésére szolgál ugyanabban az indexben. A következő példa elfogadná [1, true]
, de elutasítja [1, "string"]
vagy [1]
:
"definitions": {
"tupleDefinition": {
"type": "array",
"prefixItems": [
{ "type": "int" },
{ "type": "bool" }
]
}
},
"parameters": {
"tupleParameter": {
"$ref": "#/definitions/tupleDefinition"
}
}
elemek
A érték items
típusdefiníció vagy logikai érték. Ha nincs items
megkötés meghatározva, az alapértelmezett érték a .true
Ha az érték típusdefiníció, az érték azt a sémát írja le, amelyet a rendszer a tömb minden olyan elemére alkalmaz, amelynek indexe nagyobb, mint a prefixItems
kényszer legnagyobb indexe. Az alábbi példa elfogadná [1, true, 1]
vagy [1, true, 1, 1]
elutasítaná [1, true, "foo"]
a következőt:
"definitions": {
"tupleDefinition": {
"type": "array",
"prefixItems": [
{ "type": "int" },
{ "type": "bool" }
],
"items": { "type": "int" }
}
},
"parameters": {
"tupleParameter": {
"$ref": "#/definitions/tupleDefinition"
}
}
A használata prefixItems
nélkül is használhatóitems
. Az alábbi példa elfogadná [1, 2]
vagy [1]
elutasítaná ["foo"]
a következőt:
"definitions": {
"intArrayDefinition": {
"type": "array",
"items": { "type": "int" }
}
},
"parameters": {
"intArrayParameter": {
"$ref": "#/definitions/intArrayDefinition"
}
}
Ha az érték , false
az ellenőrzött tömbnek pontosan a kényszer hosszával prefixItems
megegyező hosszúságúnak kell lennie. Az alábbi példa elfogadná [1, true]
, de elutasítja [1, true, 1]
a és [1, true, false, "foo", "bar"]
a elemet.
"definitions": {
"tupleDefinition": {
"type": "array",
"prefixItems": [
{"type": "int"},
{"type": "bool"}
]
},
"items": false
}
Ha az érték igaz, a tömb azon elemei, amelyek indexe nagyobb, mint a prefixItems
kényszer legnagyobb indexe, bármilyen értéket elfogadnak. Az alábbi példák elfogadnák [1, true]
a és [1, true, 1]
[1, true, false, "foo", "bar"]
a elemet.
"definitions": {
"tupleDefinition": {
"type": "array",
"prefixItems": [
{"type": "int"},
{"type": "bool"}
]
}
}
"definitions": {
"tupleDefinition": {
"type": "array",
"prefixItems": [
{"type": "int"},
{"type": "bool"}
]
},
"items": true
}
nullable constraint
A null értékű kényszer azt jelzi, hogy az érték elhagyható vagy elhagyható null
. Példa: Tulajdonságok .
Description
Leírást adhat hozzá egy típusdefinícióhoz, hogy segítsen a sablon felhasználóinak megérteni a megadható értéket.
"definitions": {
"virtualMachineSize": {
"type": "string",
"metadata": {
"description": "Must be at least Standard_A3 to support 2 NICs."
},
"defaultValue": "Standard_DS1_v2"
}
}
Definíció használata
Típusdefinícióra a következő szintaxissal hivatkozhat:
"$ref": "#/definitions/<definition-name>"
Az alábbi példa bemutatja, hogyan hivatkozhat típusdefinícióra paraméterekből és kimenetekből:
{
"$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')]"
}
}
}
Következő lépések
- A típusdefiníciók elérhető tulajdonságairól az ARM-sablonok szerkezetének és szintaxisának ismertetése című témakörben olvashat.