Condividi tramite


Operatori di accesso Bicep

Gli operatori di accesso vengono usati per accedere alle risorse figlio, alle proprietà sugli oggetti e agli elementi in una matrice. È anche possibile usare la funzione di accesso alle proprietà per usare alcune funzioni.

Operatore Nome
[] Funzione di accesso Index
[^index] Funzione di accesso per l'indice inverso
. Funzione di accesso
:: Funzione di accesso alle risorse nidificata
. Funzione di accesso alle proprietà

Funzione di accesso Index

array[integerIndex]

object['stringIndex']

Utilizzare la funzione di accesso index per ottenere un elemento da una matrice o da una proprietà da un oggetto .

Per una matrice, specificare l'indice come numero intero. L'intero corrisponde alla posizione in base zero dell'elemento da recuperare.

Per un oggetto specificare l'indice come stringa. La stringa corrisponde al nome dell'oggetto da recuperare.

Nell'esempio seguente viene restituito un elemento in una matrice.

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

output accessorResult string = arrayVar[1]

Output dell'esempio:

Nome TIPO Valore
accessorResult corda 'Contoso'

Nell'esempio seguente viene recuperata una proprietà su un oggetto .

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

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

Output dell'esempio:

Nome TIPO Valore
accessorResult corda 'Sviluppo'

Funzione di accesso per l'indice inverso

A partire dalla versione 0.34.x dell'interfaccia della riga di comando di Bicep, l'operatore di accesso all'indice inverso (^) consente di recuperare un elemento da una matrice contando dalla fine. Questo indice in base uno indica ^1 che restituisce l'ultimo elemento, ^2 il secondo all'ultimo e così via. L'indice deve essere un numero intero positivo maggiore di zero e può essere specificato come valore letterale o espressione che restituisce un numero intero.

array[^index]

Se l'indice supera la lunghezza della matrice, si verifica un errore di compilazione per gli indici statici o si verifica un errore di runtime per gli indici dinamici.

Per le matrici costanti, l'operatore viene valutato in fase di compilazione. Per gli input dinamici, ad esempio i parametri, la valutazione avviene in fase di distribuzione.

Esempio

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

output secondToLast string = items[^2]

Output dell'esempio:

Nome TIPO Valore
secondToLast corda 'arancione'

Funzione di accesso

resourceName.functionName()

Due funzioni, getSecret ed list* , supportano l'operatore di accesso per chiamare la funzione. Queste due funzioni sono le uniche funzioni che supportano l'operatore di accesso.

Esempio

Nell'esempio seguente viene fatto riferimento a un insieme di credenziali delle chiavi esistente, quindi viene getSecret usato per passare un segreto a un modulo.

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

Funzione di accesso alle risorse nidificata

parentResource::nestedResource

Una risorsa nidificata è una risorsa dichiarata all'interno di un'altra risorsa. Usare la funzione :: di accesso alle risorse nidificate per accedere alle risorse annidate dall'esterno della risorsa padre.

All'interno della risorsa padre si fa riferimento alla risorsa annidata con solo il nome simbolico. È sufficiente usare la funzione di accesso alle risorse nidificata quando si fa riferimento alla risorsa nidificata dall'esterno della risorsa padre.

Esempio

Nell'esempio seguente viene illustrato come fare riferimento a una risorsa annidata dall'interno della risorsa padre e dall'esterno della risorsa padre.

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

Accesso alla proprietà

objectName.propertyName

Utilizzare le funzioni di accesso alle proprietà per accedere alle proprietà di un oggetto . Le funzioni di accesso alle proprietà possono essere usate con qualsiasi oggetto, inclusi parametri e variabili che sono oggetti . Viene visualizzato un errore quando si usa l'accesso alle proprietà in un'espressione che non è un oggetto .

Esempio

Nell'esempio seguente viene illustrata una variabile oggetto e come accedere alle proprietà.

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

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

Output dell'esempio:

Nome TIPO Valore
outputZ corda 'Hello'
outputQ numero intero 42

In genere, si usa la funzione di accesso alle proprietà con una risorsa distribuita nel file Bicep. L'esempio seguente crea un indirizzo IP pubblico e usa le funzioni di accesso alle proprietà per restituire un valore dalla risorsa distribuita.

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

Passaggi successivi