Azure / Azure/template-analyzer

An exception occurred: Error while processing template. - An item with the same key has already been added.

Open
#215 2 comments 0 reactions 0 assignees View on GitHub
bug
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.