Freigeben über


Bicep-Accessoroperatoren

Die Accessoroperatoren werden verwendet, um auf untergeordnete Ressourcen, Eigenschaften für Objekte und Elemente in einem Array zuzugreifen. Sie können auch den Eigenschaftenaccessor verwenden, um einige Funktionen zu verwenden.

Bediener Name
[] Indexaccessor
[^index] Umgekehrter Index-Accessor
. Funktionsaccessor
:: Geschachtelter Ressourcenaccessor
. Eigenschaftenaccessor

Indexaccessor

array[integerIndex]

object['stringIndex']

Verwenden Sie den Indexaccessor, um entweder ein Element aus einem Array oder eine Eigenschaft aus einem Objekt abzurufen.

Geben Sie für ein Array den Index als ganze Zahl an. Die ganze Zahl entspricht der nullbasierten Position des abzurufenden Elements.

Geben Sie für ein Objekt den Index als Zeichenfolge an. Die Zeichenfolge entspricht dem Namen des abzurufenden Objekts.

Im folgenden Beispiel wird ein Element in einem Array abgerufen.

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

output accessorResult string = arrayVar[1]

Ausgabe des Beispiels:

Name Typ Wert
accessorResult Schnur "Contoso"

Das nächste Beispiel ruft eine Eigenschaft für ein Objekt ab.

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

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

Ausgabe des Beispiels:

Name Typ Wert
accessorResult Schnur "Entwicklung"

Umgekehrter Index-Accessor

Ab Bicep CLI, Version 0.34.x, können Sie mit dem Reverseindex-Accessoroperator (^) ein Element aus einem Array abrufen, indem Sie vom Ende zählen. Dieser 1-basierte Index bedeutet ^1 , dass das letzte Element, ^2 das letzte Element usw. zurückgegeben wird. Der Index muss eine positive ganze Zahl größer als Null sein und kann als Literal oder als Ausdruck angegeben werden, der als ganze Zahl ausgewertet wird.

array[^index]

Wenn der Index die Länge des Arrays überschreitet, tritt bei statischen Indizes ein Kompilierungsfehler auf, oder für dynamische Indizes tritt ein Laufzeitfehler auf.

Bei Konstantenarrays wird der Operator zur Kompilierungszeit ausgewertet. Bei dynamischen Eingaben, z. B. Parametern, erfolgt die Auswertung zur Bereitstellungszeit.

Beispiel

var items = [
  'apple'
  'banana'
  'orange'
  'grape'
]

output secondToLast string = items[^2]

Ausgabe des Beispiels:

Name Typ Wert
secondToLast Schnur "Orange"

Funktionsaccessor

resourceName.functionName()

Zwei Funktionen – getSecret und list* – unterstützen den Accessoroperator zum Aufrufen der Funktion. Diese beiden Funktionen sind die einzigen Funktionen, die den Accessoroperator unterstützen.

Beispiel

Im folgenden Beispiel wird auf einen vorhandenen Schlüsseltresor verwiesen. Anschließend wird getSecret ein Geheimschlüssel an ein Modul übergeben.

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

Geschachtelter Ressourcenaccessor

parentResource::nestedResource

Eine geschachtelte Ressource ist eine Ressource, die innerhalb einer anderen Ressource deklariert wird. Verwenden Sie den geschachtelten Ressourcenaccessor :: , um von außerhalb der übergeordneten Ressource auf diese geschachtelten Ressourcen zuzugreifen.

Innerhalb der übergeordneten Ressource verweisen Sie auf die geschachtelte Ressource mit nur dem symbolischen Namen. Sie müssen nur den geschachtelten Ressourcenaccessor verwenden, wenn Sie auf die geschachtelte Ressource von außerhalb der übergeordneten Ressource verweisen.

Beispiel

Das folgende Beispiel zeigt, wie Sie von der übergeordneten Ressource und von außerhalb der übergeordneten Ressource auf eine geschachtelte Ressource verweisen.

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

Eigenschaftenaccessor

objectName.propertyName

Verwenden Sie Eigenschaftsaccessoren, um auf Eigenschaften eines Objekts zuzugreifen. Eigenschaftenaccessoren können mit jedem Objekt verwendet werden, einschließlich Parametern und Variablen, die Objekte sind. Sie erhalten einen Fehler, wenn Sie den Eigenschaftenzugriff für einen Ausdruck verwenden, der kein Objekt ist.

Beispiel

Das folgende Beispiel zeigt eine Objektvariable und den Zugriff auf die Eigenschaften.

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

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

Ausgabe des Beispiels:

Name Typ Wert
outputZ Schnur "Hallo"
outputQ Integer 42

In der Regel verwenden Sie den Eigenschaftenaccessor mit einer Ressource, die in der Bicep-Datei bereitgestellt wird. Im folgenden Beispiel wird eine öffentliche IP-Adresse erstellt und Eigenschaftenaccessoren verwendet, um einen Wert aus der bereitgestellten Ressource zurückzugeben.

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ächste Schritte