Операторы методов доступа Bicep

Операторы доступа используются для доступа к дочерним ресурсам, свойствам объектов и элементам в массиве. Для некоторых функций также можно использовать метод доступа к свойству.

Оператор Имя
[] Метод доступа к индексу
. Метод доступа к функции
:: Метод доступа к вложенному ресурсу
. Метод доступа к свойству

Метод доступа к индексу

array[integerIndex]

object['stringIndex']

Метод доступа по индексу применяется для получения элемента из массива или свойства из объекта.

Для массива индекс должен иметь тип integer. Это целочисленное значение обозначает позицию извлекаемого элемента в массиве, начиная с нуля.

Для объекта индекс должен иметь тип string. Это строковое значение обозначает имя извлекаемого объекта.

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

var arrayVar = [
  'Coho'
  'Contoso'
  'Fabrikan'
]

output accessorResult string = arrayVar[1]

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

Имя Тип Значение
accessorResult строка 'Contoso'

В следующем примере демонстрируется получение свойства объекта.

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

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

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

Имя Тип Значение
accessorResult строка 'Development'

Метод доступа к функции

resourceName.functionName()

Оператор доступа для вызова функции поддерживают две функции: getSecret и list*. Это единственные функции, поддерживающие оператор метода доступа.

Пример

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

resource kv 'Microsoft.KeyVault/vaults@2023-02-01' existing = {
  name: kvName
  scope: resourceGroup(subscriptionId, kvResourceGroup )
}

module sql './sql.bicep' = {
  name: 'deploySQL'
  params: {
    sqlServerName: sqlServerName
    adminLogin: adminLogin
    adminPassword: kv.getSecret('vmAdminPassword')
  }
}

Метод доступа к вложенному ресурсу

parentResource::nestedResource

Вложенный ресурс — это ресурс, объявленный в другом ресурсе. Метод доступа к вложенному ресурсу :: служит для доступа к этим вложенным ресурсам из-за пределов родительского.

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

Пример

В примере ниже показано, как сослаться на вложенный ресурс из родительского ресурса и из-за его пределов.

resource demoParent 'demo.Rp/parentType@2023-01-01' = {
  name: 'demoParent'
  location: 'West US'

  // Declare a nested resource within 'demoParent'
  resource demoNested 'childType' = {
    name: 'demoNested'
    properties: {
      displayName: 'The nested instance.'
    }
  }

  // Declare another nested resource
  resource demoSibling 'childType' = {
    name: 'demoSibling'
    properties: {
      // Use symbolic name to reference because this line is within demoParent
      displayName: 'Sibling of ${demoNested.properties.displayName}'
    }
  }
}

// Use nested accessor to reference because this line is outside of demoParent
output displayName string = demoParent::demoNested.properties.displayName

Метод доступа к свойству

objectName.propertyName

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

Пример

В примере ниже показана объектная переменная и доступ к свойствам.

var x = {
  y: {
    z: 'Hello'
    a: true
  }
  q: 42
}

output outputZ string = x.y.z
output outputQ int = x.q

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

Имя Тип Значение
outputZ строка 'Hello'
outputQ Целое число 42

Как правило, метод доступа к свойству используется с ресурсом, развернутым в файле Bicep. В примере ниже создается общедоступный IP-адрес и используются методы доступа к свойствам для возврата значения из развернутого ресурса.

resource publicIp 'Microsoft.Network/publicIPAddresses@2022-11-01' = {
  name: publicIpResourceName
  location: location
  properties: {
    publicIPAllocationMethod: dynamicAllocation ? 'Dynamic' : 'Static'
    dnsSettings: {
      domainNameLabel: publicIpDnsLabel
    }
  }
}

// Use property accessor to get value
output ipFqdn string = publicIp.properties.dnsSettings.fqdn

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