Bicep-accessoroperatorer

Accessoroperatorerna används för att komma åt underordnade resurser, egenskaper för objekt och element i en matris. Du kan också använda egenskapsåtkomstorn för att använda vissa funktioner.

Operator Name
[] Indexåtkomst
. Funktionsåtkomst
:: Kapslad resursåtkomstor
. Egenskapsåtkomst

Indexåtkomst

array[integerIndex]

object['stringIndex']

Använd indexåtkomstorn för att hämta antingen ett element från en matris eller en egenskap från ett objekt.

För en matris anger du indexet som ett heltal. Heltalet matchar den nollbaserade positionen för elementet som ska hämtas.

För ett objekt anger du indexet som en sträng. Strängen matchar namnet på det objekt som ska hämtas.

I följande exempel hämtas ett element i en matris.

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

output accessorResult string = arrayVar[1]

Utdata från exemplet:

Namn Typ Värde
accessorResult sträng "Contoso"

I nästa exempel hämtas en egenskap för ett objekt.

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

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

Utdata från exemplet:

Namn Typ Värde
accessorResult sträng "Utveckling"

Funktionsåtkomst

resourceName.functionName()

Två funktioner – getSecret och list* – stöder accessoroperatorn för att anropa funktionen. Dessa två funktioner är de enda funktioner som stöder accessoroperatorn.

Exempel

Följande exempel refererar till ett befintligt nyckelvalv och använder getSecret sedan för att skicka en hemlighet till en modul.

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

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

Kapslad resursåtkomstor

parentResource::nestedResource

En kapslad resurs är en resurs som deklareras inom en annan resurs. Använd den kapslade resursåtkomstorn :: för att komma åt kapslade resurser utanför den överordnade resursen.

I den överordnade resursen refererar du till den kapslade resursen med bara det symboliska namnet. Du behöver bara använda den kapslade resursåtkomstorn när du refererar till den kapslade resursen utanför den överordnade resursen.

Exempel

I följande exempel visas hur du refererar till en kapslad resurs från den överordnade resursen och utanför den överordnade resursen.

resource demoParent 'demo.Rp/parentType@2024-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

Egenskapsåtkomst

objectName.propertyName

Använd egenskapsåtkomster för att komma åt egenskaper för ett objekt. Egenskapsåtkomster kan användas med valfritt objekt, inklusive parametrar och variabler som är objekt. Du får ett fel när du använder egenskapsåtkomsten för ett uttryck som inte är ett objekt.

Exempel

I följande exempel visas en objektvariabel och hur du kommer åt egenskaperna.

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

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

Utdata från exemplet:

Namn Typ Värde
outputZ sträng "Hej"
outputQ integer 42

Vanligtvis använder du egenskapsåtkomstorn med en resurs som distribueras i Bicep-filen. I följande exempel skapas en offentlig IP-adress och egenskapsåtkomster används för att returnera ett värde från den distribuerade resursen.

resource publicIp 'Microsoft.Network/publicIPAddresses@2023-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

Nästa steg