Типы данных в Bicep

В этой статье описаны типы данных, доступные в Bicep.

Поддерживаемые типы

В Bicep можно использовать следующие типы данных:

  • array
  • bool
  • INT
  • объект
  • secureObject — обозначается модификатором в Bicep
  • secureString — обозначается модификатором в Bicep
  • строка

Массивы

Массивы начинаются с левой квадратной скобки ([) и заканчиваются правой квадратной скобкой (]). В Bicep массив можно объявить в одной строке или нескольких строках. Запятые (,) используются между значениями в однострочных объявлениях, но не используются в многострочных объявлениях. Вы можете смешивать и сопоставлять однострочные и многострочные объявления. Для объявления с несколькими строками требуется Bicep версии 0.7.4 или более поздней.

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

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

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

В массиве каждый элемент представлен любым типом. Можно использовать массив, в котором каждый элемент относится к одному и тому же типу данных, или массив, содержащий различные типы данных.

В следующем примере показан массив целых чисел и массив различных типов.

var integerArray = [
  1
  2
  3
]

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

В Bicep используются массивы с нулевой базой. В следующем примере выражение exampleArray[0] принимает значение 1, а exampleArray[2] — 3. Индекс индексатора может быть другим выражением. Выражение exampleArray[index] принимает значение 2. Индексаторы целых чисел разрешены только для выражений типов массивов.

var index = 1

var exampleArray = [
  1
  2
  3
]

Boolean

При указании логических значений используйте true или false. Не заключайте значение в кавычки.

param exampleBool bool = true

Целые числа

При указании целочисленных значений не используйте кавычки.

param exampleInt int = 1

В Bicep используются 64-разрядные целые числа. Для целых чисел, переданных в качестве встроенных параметров, диапазон значений может быть ограничен пакетом SDK или средством командной строки, используемым для развертывания. Например, при использовании PowerShell для развертывания Bicep типы целых чисел могут находиться в диапазоне от –2147483648 до 2147483647. Чтобы избежать этого ограничения, укажите большие целочисленные значения в файле параметров. Типы ресурсов применяют собственные ограничения для свойств целочисленных значений.

Двоичный формат, а также форматы числа с плавающей запятой и десятичного числа сейчас не поддерживаются.

Объекты

Объекты начинаются с левой фигурной скобки ({) и заканчиваются правой фигурной скобкой (}). В Bicep объект можно объявить в одной строке или нескольких строках. Каждое свойство в объекте состоит из ключа и значения. Ключ и значение разделяются двоеточием (:). Объект разрешает любое свойство любого типа. Запятые (,) используются между свойствами для однострочных объявлений, но не используются между свойствами для многострочных объявлений. Вы можете смешивать и сопоставлять однострочные и многострочные объявления. Для объявления с несколькими строками требуется Bicep версии 0.7.4 или более поздней.

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}

В Bicep можно при желании использовать кавычки для ключей свойств объектов:

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

В предыдущем примере кавычки используются, когда ключи свойств объекта содержат специальные символы. Например, пробел, "-" или ".". В следующем примере показано, как использовать интерполяцию в ключах свойств объекта.

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

Для доступа к свойствам объекта используются методы доступа к свойствам. Они создаются с помощью оператора ..

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

Методы доступа к свойствам можно использовать с любым объектом, включая параметры и переменные типов и литералов объектов. Использование метода доступа к свойству для выражения типа, не являющегося объектом, является ошибкой.

Вы также можете использовать синтаксис [] для доступа к свойству. В приведенном ниже примере возвращается Development.

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

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

В JSON объект представляет собой неупорядоченную коллекцию из нуля или более пар "ключ-значение". Упорядочение может быть разным в зависимости от реализации. Например функция Bicep items() сортирует объекты в алфавитном порядке. В других местах можно сохранить исходное упорядочение. Из-за этой недетерминированности избегайте делать какие-либо предположения о порядке ключей объектов при создании кода, который взаимодействует с выходными данными параметров развертывания &.

Строки

В Bicep строки помечаются одинарными кавычками и должны быть объявлены в одной строке. Разрешены все символы Юникода с кодовыми точками, находящимися в диапазоне между 0 и 10FFFF.

param exampleString string = 'test value'

В следующей таблице приведен набор зарезервированных символов, которые должны быть экранированы символом обратной косой черты (\):

Escape-последовательность Представленное значение Примечания
\\ \
\' '
\n перевод строки
\r возврат каретки
\t знак табуляции
\u{x} кодовая точка Юникода x x представляет значение шестнадцатеричной кодовой точки в диапазоне от 0 до 10FFFF включительно. Нули в начале разрешены. Кодовые точки со значениями больше FFFF создаются в качестве суррогатной пары.
\$ $ Escape-последовательность выполняется, только если после нее стоит символ {.
// evaluates to "what's up?"
var myVar = 'what\'s up?'

Все строки в Bicep поддерживают интерполяцию. Чтобы внедрить выражение, перед ним введите ${, а после — }. Выражения, на которые указывают ссылки, не могут охватывать несколько строк.

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

Многострочные строки

В Bicep мультиломаные задаются между открывающей последовательностью в виде трех символов одинарной кавычки ('''), после которых при необходимости можно ввести символ новой строки, и закрывающей последовательностью в виде трех символов одинарной кавычки ('''). Символы, указанные между открывающей и закрывающей последовательностями, считываются буквально, а экранирование не нужно или невозможно.

Примечание

Так как средство синтаксического анализа Bicep считывает все символы так, как есть, в зависимости от окончаний строк в файле Bicep символы новой строки можно интерпретировать как \r\n или \n. Сейчас интерполяция не поддерживается в мультиломаных. Мультиломаные, содержащие ''', не поддерживаются.

// 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}'''

Защищенные строки и объекты

Защищенная строка использует тот же формат, что и строка, а защищенный объект использует тот же формат, что и объект. В Bicep в строку или объект добавляется модификатор @secure().

Если для параметра задана защищенная строка или защищенный объект, значение параметра не сохраняется в журнале развертывания и не регистрируется. Однако, если задать для свойства защищенное значение, которое не ожидается, это значение не будет защищено. Например, если для защищенной строки задан тег, это значение сохраняется как обычный текст. Используйте защищенные строки для паролей и секретов.

Ниже представлены примеры параметров.

@secure()
param password string

@secure()
param configValues object

Назначение типов данных

В Bicep значение одного (исходного) типа можно назначить для другого (целевого) типа. В следующей таблице показано, какой тип источника (значения по горизонтали) можно или нельзя назначить целевому типу (значения по вертикали). Символ X в таблице означает, что назначение возможно пустое пространство — что назначение невозможно, а ? — что назначение возможно, только если типы совместимы.

Типы any error string number int bool null object array именованный ресурс именованный модуль scope
any X X X X X X X X X X X
error
string X X
number X X X
int X X
bool X X
null X X
object X X
array X X
resource X X
module X X
scope ?
именованный ресурс X ? ?
именованный модуль X ? ?

Дальнейшие действия

Дополнительные сведения о структуре и синтаксисе Bicep см. в этом разделе.