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 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í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 truehodnota , 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 falsehodnota , 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