Оператор распространения Bicep

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

Распространение

...

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

Примеры

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

var objA = { color: 'white' }
output objB object = { shape: 'circle', ...objA } 

Выходные данные примера

Имя. Тип значение
objB объект { фигура: "круг", цвет: "белый" }

В следующем примере показан оператор распространения, используемый в массиве:

var arrA = [ 2, 3 ]
output arrB array = [ 1, ...arrA, 4 ] 

Выходные данные примера

Имя. Тип значение
arrB array [ 1, 2, 3, 4 ]

В следующем примере показано несколько раз, используемых в одной операции:

var arrA = [ 2, 3 ]
output arrC array = [ 1, ...arrA, 4, ...arrA ] 

Выходные данные примера

Имя. Тип значение
arrC array [ 1, 2, 3, 4, 2, 3 ]

В следующем примере показано распространение, используемое в многострочный операции:

var objA = { color: 'white' }
var objB = { shape: 'circle'}
output objCombined object = { 
  ...objA 
  ...objB
} 

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

Имя. Тип значение
objCombined объект { цвет: "белый", фигура: "круг" }

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

param location string = resourceGroup().location
param tier string = 'Hot'

var storageAccountName = uniqueString(resourceGroup().id)
var accessTier = tier != '' ? {accessTier: tier} : {}

resource mystorage 'Microsoft.Storage/storageAccounts@2023-05-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    ...accessTier
  } 
}

Предыдущий пример также можно записать следующим образом:

param location string = resourceGroup().location
param tier string = 'Hot'

var storageAccountName = uniqueString(resourceGroup().id)

resource mystorage 'Microsoft.Storage/storageAccounts@2023-05-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    ...(tier != '' ? {accesssTier: tier} : {})
  } 
}

Оператор распространения можно использовать для переопределения существующих свойств.

param location string = resourceGroup().location
param storageProperties {
  accessTier: string?
}

resource mystorage 'Microsoft.Storage/storageAccounts@2023-05-01' = {
  name: uniqueString(resourceGroup().id)
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Cold'
    ...storageProperties
  }
}

Следующие шаги