Udostępnij przez


Kod diagnostyczny Bicep — BCP144

Ta diagnostyka występuje podczas próby odwołania się do kolekcji zasobów lub modułów (na przykład jednej zdefiniowanej forprzy użyciu pętli -) bez określania indeksu. Bicep wymaga jawnego wskazania, który zasób lub moduł w kolekcji, do której odwołujesz się przy użyciu indeksu tablicy.

Description

Bezpośrednie odwoływanie się do kolekcji zasobów lub modułów nie jest obecnie obsługiwane w tym miejscu. Zastosuj indeksator tablicy do wyrażenia.

Level

Error

Solutions

Aby rozwiązać problem BCP144, użyj indeksu tablicy, aby uzyskać dostęp do poszczególnych zasobów lub modułów w kolekcji. Zamiast bezpośrednio pętli na kolekcji, przejmij pętlę na tablicy wejściowej i użyj indeksu, aby odwołać się do odpowiedniego elementu.

Examples

Poniższy przykład zgłasza diagnostykę, ponieważ odwołuje się do kolekcji zasobów bez określania indeksu.

param names array = [
  'one'
  'two'
]

resource demo 'Microsoft.Storage/storageAccounts@2022-09-01' = [for name in names: {
  name: 'demo${name}'
  location: resourceGroup().location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {}
}]

// ❌ This line triggers BCP144.
output storageNames array = [for r in demo: r.name]

Aby rozwiązać problem BCP144, użyj indeksu tablicy, aby uzyskać dostęp do poszczególnych zasobów w kolekcji.

param names array = [
  'one'
  'two'
]

resource demo 'Microsoft.Storage/storageAccounts@2022-09-01' = [for name in names: {
  name: 'demo${name}'
  location: resourceGroup().location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {}
}]

// ✅ Correct usage with indexing.
output storageNames array = [for (name, i) in names: demo[i].name]

Poniższy przykład przedstawia kod błędu z kolekcją modułów.

param locations array = [
  'eastus'
  'westus'
]

module storageModule 'storage.bicep' = [for loc in locations: {
  name: 'storage-${loc}'
  params: {
    location: loc
  }
}]

// ❌ This line triggers BCP144.
output moduleOutputs array = [for m in storageModule: m.outputs.storageAccountName]

Aby rozwiązać problem BCP144, użyj indeksu tablicy, aby uzyskać dostęp do poszczególnych modułów w kolekcji.

param locations array = [
  'eastus'
  'westus'
]

module storageModule 'storage.bicep' = [for loc in locations: {
  name: 'storage-${loc}'
  params: {
    location: loc
  }
}]

// ✅ Correct usage with indexing.
output moduleOutputs array = [for (loc, i) in locations: storageModule[i].outputs.storageAccountName]

Next steps

Aby uzyskać więcej informacji na temat diagnostyki Bicep, zobacz Diagnostyka rdzenia Bicep.