Bicep erişimci işleçleri

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

Operatör Veri Akışı Adı
[] Dizin erişimcisi
. İşlev erişimcisi
:: İç içe kaynak erişimcisi
. Özellik erişimcisi

Dizin erişimcisi

array[integerIndex]

object['stringIndex']

Diziden öğe veya nesneden bir özellik almak için dizin erişimcisini kullanı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 Dize '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 Dize 'Geliştirme'

İşlev erişimcisi

resourceName.functionName()

getSecret ve list* olmak üzere iki işlev, 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 gizli diziyi modüle geçirmek için kullanır getSecret .

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

İç 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 kaynak içinde 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, iç içe bir kaynağa üst kaynağın içinden ve üst kaynağın dışından nasıl başvuracakları gösterilmektedir.

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

Ö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 örnek bir nesne değişkenini ve özelliklere nasıl erişeceklerini gösterir.

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 Dize 'Hello'
outputQ integer 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@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

Sonraki adımlar