Sdílet prostřednictvím


Definice typů v šablonách ARM

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.

Poznámka:

Aktuální vydání rozšíření nástrojů Azure Resource Manager pro Visual Studio Code nerozpozná vylepšení ve verzi 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