Bicep erişimci işleçleri

Erişimci işleçleri alt kaynaklara, nesnelerdeki özelliklere ve dizideki öğelere erişmek için kullanılır. Bazı işlevleri kullanmak için özellik erişimcisini de kullanabilirsiniz.

Operatör Name
[] Dizin erişimcisi
. İşlev erişimcisi
:: İç içe kaynak erişimcisi
. Özellik erişimcisi

Dizin erişimcisi

array[integerIndex]

object['stringIndex']

Dizin erişimcisini kullanarak dizideki bir öğeyi veya nesneden bir özelliği alın.

Dizi için dizini tamsayı olarak sağlayın. Tamsayı, alınacak öğenin sıfır tabanlı konumuyla eşleşir.

Bir nesne için dizini dize olarak sağlayın. Dize, alınacak nesnenin adıyla eşleşir.

Aşağıdaki örnek bir dizideki bir öğeyi alır.

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

output accessorResult string = arrayVar[1]

Örnekten çıktı:

Ad Tür Değer
accessorResult string 'Contoso'

Sonraki örnek bir nesne üzerinde bir özellik alır.

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

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

Örnekten çıktı:

Ad Tür Değer
accessorResult string 'Geliştirme'

İşlev erişimcisi

resourceName.functionName()

İki işlev - getSecret ve list* - işlevi çağırmak için erişimci işlecini destekler. Bu iki işlev, erişimci işlecini destekleyen tek işlevlerdir.

Örnek

Aşağıdaki örnek mevcut bir anahtar kasasına başvurur ve ardından bir modüle gizli dizi geçirmek için kullanır 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')
  }
}

İç içe kaynak erişimcisi

parentResource::nestedResource

İç içe yerleştirilmiş kaynak, başka bir kaynak içinde bildirilen bir kaynaktır. İç içe yerleştirilmiş kaynaklara üst kaynağın dışından erişmek için iç içe kaynak erişimcisini :: kullanın.

Üst kaynakta iç içe kaynağa yalnızca sembolik adla başvurursunuz. İç içe kaynak erişimcisini yalnızca üst kaynağın dışından iç içe kaynağa başvururken kullanmanız gerekir.

Örnek

Aşağıdaki örnekte, üst kaynağın içinden ve üst kaynağın dışından iç içe bir kaynağa başvurma gösterilmektedir.

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

Özellik erişimcisi

objectName.propertyName

Bir nesnenin özelliklerine erişmek için özellik erişimcilerini kullanın. Özellik erişimcileri, nesneler olan parametreler ve değişkenler de dahil olmak üzere herhangi bir nesneyle kullanılabilir. Nesne olmayan bir ifadede özellik erişimini kullandığınızda hata alırsınız.

Örnek

Aşağıdaki örnekte bir nesne değişkeni ve özelliklere nasıl erişildi gösterilmektedir.

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

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

Örnekten çıktı:

Ad Tür Değer
outputZ string 'Hello'
outputQ tamsayı 42

Genellikle özellik erişimcisini Bicep dosyasında dağıtılan bir kaynakla kullanırsınız. Aşağıdaki örnek bir genel IP adresi oluşturur ve dağıtılan kaynaktan bir değer döndürmek için özellik erişimcilerini kullanır.

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

Sonraki adımlar