Azure / Azure/template-analyzer
An exception occurred: Error while processing template. - An item with the same key has already been added.
- Dominant language
- C#
- Stars
- 143
- Forks
- 47
- PR merge metrics
- No merged PRs in 30d
Description
Hi,
I have the following bicep code:
```bicep
targetScope = 'resourceGroup'
// Parameters
param location string
param tags object
param storagesetting object = {
kind: 'StorageV2'
sku: 'Standard_LRS'
}
param accessTier string
param allowkeyaccess bool
param allowblobaccess bool
param storageNames array
param storecount int = 4
resource storage 'Microsoft.Storage/storageAccounts@2021-06-01' = [for name in storageNames: {
name: '${name}'
location: location
tags: tags
identity: {
type: 'SystemAssigned'
}
sku: {
name: storagesetting.sku
}
kind: storagesetting.kind
properties: {
accessTier: accessTier
allowBlobPublicAccess: allowblobaccess
allowSharedKeyAccess: allowkeyaccess
encryption: {
keySource: 'Microsoft.Storage'
requireInfrastructureEncryption: false
services: {
blob: {
enabled: true
keyType: 'Account'
}
file: {
enabled: true
keyType: 'Account'
}
queue: {
enabled: true
keyType: 'Service'
}
table: {
enabled: true
keyType: 'Service'
}
}
}
isHnsEnabled: true
isNfsV3Enabled: false
largeFileSharesState: 'Disabled'
minimumTlsVersion: 'TLS1_2'
supportsHttpsTrafficOnly: true
}
}]
resource storageBlobServices 'Microsoft.Storage/storageAccounts/blobServices@2021-02-01' = [for i in range(0, storecount): {
name: 'default${storage[i]}'
parent: storage[i]
properties: {
containerDeleteRetentionPolicy: {
enabled: true
days: 7
}
cors: {
corsRules: []
}
}
}]
```
This compiles into:
```json
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"_generator": {
"name": "bicep",
"version": "0.4.1124.51302",
"templateHash": "9507466772563057339"
}
},
"parameters": {
"location": {
"type": "string"
},
"tags": {
"type": "object"
},
"storagesetting": {
"type": "object",
"defaultValue": {
"kind": "StorageV2",
"sku": "Standard_LRS"
}
},
"accessTier": {
"type": "string"
},
"allowkeyaccess": {
"type": "bool"
},
"allowblobaccess": {
"type": "bool"
},
"storageNames": {
"type": "array"
},
"storecount": {
"type": "int",
"defaultValue": 4
}
},
"resources": [
{
"copy": {
"name": "storage",
"count": "[length(parameters('storageNames'))]"
},
"type": "Microsoft.Storage/storageAccounts",
"apiVersion": "2021-06-01",
"name": "[format('{0}', parameters('storageNames')[copyIndex()])]",
"location": "[parameters('location')]",
"tags": "[parameters('tags')]",
"identity": {
"type": "SystemAssigned"
},
"sku": {
"name": "[parameters('storagesetting').sku]"
},
"kind": "[parameters('storagesetting').kind]",
"properties": {
"accessTier": "[parameters('accessTier')]",
"allowBlobPublicAccess": "[parameters('allowblobaccess')]",
"allowSharedKeyAccess": "[parameters('allowkeyaccess')]",
"encryption": {
"keySource": "Microsoft.Storage",
"requireInfrastructureEncryption": false,
"services": {
"blob": {
"enabled": true,
"keyType": "Account"
},
"file": {
"enabled": true,
"keyType": "Account"
},
"queue": {
"enabled": true,
"keyType": "Service"
},
"table": {
"enabled": true,
"keyType": "Service"
}
}
},
"isHnsEnabled": true,
"isNfsV3Enabled": false,
"largeFileSharesState": "Disabled",
"minimumTlsVersion": "TLS1_2",
"supportsHttpsTrafficOnly": true
}
},
{
"copy": {
"name": "storageBlobServices",
"count": "[length(range(0, parameters('storecount')))]"
},
"type": "Microsoft.Storage/storageAccounts/blobServices",
"apiVersion": "2021-02-01",
"name": "[format('{0}/{1}', format('{0}', parameters('storageNames')[range(0, parameters('storecount'))[copyIndex()]]), format('default{0}', reference(resourceId('Microsoft.Storage/storageAccounts', format('{0}', parameters('storageNames')[range(0, parameters('storecount'))[copyIndex()]])), '2021-06-01', 'full')))]",
"properties": {
"containerDeleteRetentionPolicy": {
"enabled": true,
"days": 7
},
"cors": {
"corsRules": []
}
},
"dependsOn": [
"[resourceId('Microsoft.Storage/storageAccounts', format('{0}', parameters('storageNames')[range(0, parameters('storecount'))[copyIndex()]]))]",
"[resourceId('Microsoft.Storage/storageAccounts', format('{0}', parameters('storageNames')[range(0, parameters('storecount'))[copyIndex()]]))]"
]
}
]
}
```
This creates the following error when executing the template analyzer:
```
PS C:\Users\f.moeller\Desktop\repos\pdemoplatform\infra\modules\services> C:\Users\f.moeller\Downloads\TemplateAnalyzer\TemplateAnalyzer.exe analyze-template .\storage.json
An exception occurred: Error while processing template. - An item with the same key has already been added. Key: [format('{0}/{1}', format('{0}', parameters('storageNames')[range(0, parameters('storecount'))[copyIndex()]]), format('default{0}', reference(resourceId('Microsoft.Storage/storageAccounts', format('{0}', parameters('storageNames')[range(0, parameters('storecount'))[copyIndex()]])), '2021-06-01', 'full')))] Microsoft.Storage/storageAccounts/blobServices
```
It seems that the template-analyzer has an issue with dynamically set names that will have different values during execution.
Please fix.
Thanks
Contributor guide
Assessment
This issue has not been assessed yet.