Datové typy v Bicep

Tento článek popisuje datové typy podporované v Bicep.

Podporované typy

V rámci bicep můžete použít tyto datové typy:

Pole

Pole začínají levou závorkou ([) a končí pravou závorkou (]). V nástroji Bicep může být pole deklarováno v jednom řádku nebo ve více řádcích. Čárky (,) se používají mezi hodnotami v jednořádkových deklaracích, ale nepoužívají se u víceřádkových deklarací. Můžete kombinovat a shodovat jednořádkovou a víceřádkovou deklaraci. Víceřádková deklarace vyžaduje bicep verze 0.7.4 nebo novější.

var multiLineArray = [
  'abc'
  'def'
  'ghi'
]

var singleLineArray = ['abc', 'def', 'ghi']

var mixedArray = ['abc', 'def'
    'ghi']

V poli je každá položka reprezentována libovolným typem. Můžete mít pole, kde každá položka má stejný datový typ, nebo pole, které obsahuje různé datové typy.

Následující příklad ukazuje pole celých čísel a pole různých typů.

var integerArray = [
  1
  2
  3
]

var mixedArray = [
  resourceGroup().name
  1
  true
  'example string'
]

Pole v nástroji Bicep jsou založená na nule. V následujícím příkladu se výraz exampleArray[0] vyhodnotí jako 1 a exampleArray[2] 3. Index indexeru může být sám o sobě jiným výrazem. Výraz exampleArray[index] se vyhodnotí jako 2. Celočíselné indexery jsou povoleny pouze u výrazů typů polí.

var index = 1

var exampleArray = [
  1
  2
  3
]

Pokud je index mimo hranice, zobrazí se následující chyba:

The language expression property array index 'x' is out of bounds

Pokud se chcete této výjimce vyhnout, můžete použít logický operátor Or , jak je znázorněno v následujícím příkladu:

param emptyArray array = []
param numberArray array = [1, 2, 3]

output foo bool = empty(emptyArray) || emptyArray[0] == 'bar'
output bar bool = length(numberArray) >= 3 || numberArray[3] == 4

Logické hodnoty

Při zadávání logických hodnot použijte true nebo false. Neohraničujte hodnotu do uvozovek.

param exampleBool bool = true

Celá čísla

Při zadávání celočíselných hodnot nepoužívejte uvozovky.

param exampleInt int = 1

V nástroji Bicep jsou celá čísla 64bitová celá čísla. Při předání jako vložené parametry může být rozsah hodnot omezen sadou SDK nebo nástrojem příkazového řádku, který používáte k nasazení. Pokud například použijete PowerShell k nasazení bicepu, můžou se celočíselné typy pohybovat od -2147483648 až po 2147483647. Chcete-li se tomuto omezení vyhnout, zadejte v souboru parametrů velké celočíselné hodnoty. Typy prostředků uplatňují vlastní omezení pro celočíselné vlastnosti.

Formáty s plovoucí desetinnou čárkou, desetinné čárky ani binární formáty se v současné době nepodporují.

Objekty

Objekty začínají levou složenou závorkou ({) a končí pravou složenou závorkou (}). V nástroji Bicep může být objekt deklarován na jednom řádku nebo na více řádcích. Každá vlastnost v objektu se skládá z klíče a hodnoty. Klíč a hodnota jsou oddělené dvojtečkami (:). Objekt umožňuje libovolnou vlastnost libovolného typu. Čárky (,) se používají mezi vlastnostmi pro jednořádkovou deklaraci, ale nepoužívají se mezi vlastnostmi pro víceřádkovou deklaraci. Jednořádkovou a víceřádkovou deklaraci můžete kombinovat a shodovat. Víceřádková deklarace vyžaduje bicep verze 0.7.4 nebo novější.

param singleLineObject object = {name: 'test name', id: '123-abc', isCurrent: true, tier: 1}

param multiLineObject object = {
  name: 'test name'
  id: '123-abc'
  isCurrent: true
  tier: 1
}

param mixedObject object = {name: 'test name', id: '123-abc', isCurrent: true
    tier: 1}

V nástroji Bicep jsou u klíčů vlastností objektu volitelně povoleny uvozovky:

var test = {
  'my - special. key': 'value'
}

V předchozím příkladu se uvozovky používají, když klíče vlastností objektu obsahují speciální znaky. Například mezera, "-" nebo ".". Následující příklad ukazuje, jak použít interpolaci v klíčích vlastností objektu.

var stringVar = 'example value'
var objectVar = {
  '${stringVar}': 'this value'
}

Přístupové objekty vlastností se používají pro přístup k vlastnostem objektu. Jsou vytvořené pomocí operátoru . .

var a = {
  b: 'Dev'
  c: 42
  d: {
    e: true
  }
}

output result1 string = a.b // returns 'Dev'
output result2 int = a.c // returns 42
output result3 bool = a.d.e // returns true

Přístupové objekty vlastností lze použít s libovolným objektem, včetně parametrů a proměnných typů objektů a literálů objektů. Použití přístupového objektu vlastnosti u výrazu jiného než objektového typu je chyba.

Syntaxi [] můžete použít také pro přístup k vlastnosti. Následující příklad vrátí Development.

var environmentSettings = {
  dev: {
    name: 'Development'
  }
  prod: {
    name: 'Production'
  }
}

output accessorResult string = environmentSettings['dev'].name

Ve formátu JSON je objekt neuspořádanou kolekcí nulových nebo více párů klíč/hodnota. Řazení se může lišit v závislosti na implementacích. Například funkce Bicep items() seřadí objekty v abecedním pořadí. Na jiných místech je možné zachovat původní řazení. Vzhledem k tomuto ne determinismu se při psaní kódu, který komunikuje s výstupy parametrů & nasazení, vyhněte se jakýmkoli předpokladům o řazení klíčů objektů.

Při přístupu k neexistující vlastnosti objektu se zobrazí následující chyba:

The language expression property 'foo' doesn't exist

Pokud se chcete výjimce vyhnout, můžete použít logický operátor And , jak je znázorněno v následujícím příkladu:

param objectToTest object = {
  one: 1
  two: 2
  three: 3
}

output bar bool = contains(objectToTest, 'four') && objectToTest.four == 4

Řetězce

V nástroji Bicep jsou řetězce označeny jednoduchými uvozovkami a musí být deklarovány na jednom řádku. Všechny znaky Unicode s body kódu mezi 0 a 10FFFF jsou povoleny.

param exampleString string = 'test value'

Následující tabulka uvádí sadu vyhrazených znaků, které musí být uváděné znakem zpětného lomítka (\):

Řídicí sekvence Reprezentovaná hodnota Poznámky
\\ \
\' '
\n vedení (LF)
\r návrat na začátek řádku (CR)
\t znak tabulátoru
\u{x} Bod kódu Unicode x x představuje šestnáctkovou hodnotu bodu kódu mezi 0 a 10FFFF (oba včetně). Úvodní nuly jsou povolené. Body kódu nad FFFF se generují jako náhradní pár.
\$ $ Únik pouze v případech, kdy za ním následuje {.
// evaluates to "what's up?"
var myVar = 'what\'s up?'

Interpolaci podporují všechny řetězce v nástroji Bicep. Pokud chcete vložit výraz, obklopte ho a ${}. Výrazy, na které se odkazuje, nemohou přesahovat více řádků.

var storageName = 'storage${uniqueString(resourceGroup().id)}'

Víceřádkové řetězce

V nástroji Bicep jsou víceřádkové řetězce definovány mezi třemi znaky jednoduchých uvozovek ('''), po nichž volitelně následuje nový řádek (úvodní sekvence) a tři znaky jednoduchých uvozovek (''' - koncová sekvence). Znaky, které se zadávají mezi úvodní a koncovou sekvencí, se čtou doslovně a není nutné ani možné žádné uvozování.

Poznámka

Vzhledem k tomu, že analyzátor Bicep čte všechny znaky tak, jak jsou, v závislosti na zakončení řádků souboru Bicep mohou být nové řádky interpretovány jako nebo \r\n\n. Interpolace se v současné době nepodporuje ve víceřádkových řetězcích. Víceřádkové řetězce, které obsahují ''' , nejsou podporovány.

// evaluates to "hello!"
var myVar = '''hello!'''

// evaluates to "hello!" because the first newline is skipped
var myVar2 = '''
hello!'''

// evaluates to "hello!\n" because the final newline is included
var myVar3 = '''
hello!
'''

// evaluates to "  this\n    is\n      indented\n"
var myVar4 = '''
  this
    is
      indented
'''

// evaluates to "comments // are included\n/* because everything is read as-is */\n"
var myVar5 = '''
comments // are included
/* because everything is read as-is */
'''

// evaluates to "interpolation\nis ${blocked}"
// note ${blocked} is part of the string, and is not evaluated as an expression
myVar6 = '''interpolation
is ${blocked}'''

Zabezpečení řetězců a objektů

Zabezpečený řetězec používá stejný formát jako řetězec a zabezpečený objekt používá stejný formát jako objekt . Pomocí Nástroje Bicep přidáte @secure()dekorátor do řetězce nebo objektu.

Když nastavíte parametr na zabezpečený řetězec nebo zabezpečený objekt, hodnota parametru se neuloží do historie nasazení a neprotokoluje se. Pokud ale tuto zabezpečenou hodnotu nastavíte na vlastnost, která neočekává zabezpečenou hodnotu, nebude tato hodnota chráněná. Pokud například nastavíte zabezpečený řetězec na značku, uloží se tato hodnota jako prostý text. Pro hesla a tajné kódy používejte zabezpečené řetězce.

Následující příklad ukazuje dva zabezpečené parametry:

@secure()
param password string

@secure()
param configValues object

Přiřaditelnost datového typu

V nástroji Bicep lze hodnotu jednoho typu (typ zdroje) přiřadit jinému typu (cílovému typu). Následující tabulka ukazuje, který typ zdroje (uvedený vodorovně) může nebo nemůže být přiřazen ke kterému cílovému typu (uvedený svisle). V tabulce X znamená přiřaditelné místo, prázdné místo znamená nepřiřazovatelné a ? znamená to pouze v případě, že jsou jejich typy kompatibilní.

Typy any error string number int bool null object array pojmenovaný prostředek pojmenovaný modul scope
any × × × × × × × × × × ×
error
string × ×
number × × ×
int × ×
bool × ×
null × ×
object × ×
array × ×
resource × ×
module × ×
scope ?
pojmenovaný prostředek × ? ?
pojmenovaný modul × ? ?

Další kroky

Informace o struktuře a syntaxi bicepu najdete v tématu Struktura souborů Bicep.