Search code examples
azureazure-resource-managerazure-data-lake-gen2azure-bicep

Bicep isHnsEnabled Cannot be updated


We are in the process of upgrading our ARM Templates to Bicep, one of which is for storage. In the initially ported Bicep file, everything worked fine and then as part of my PR, it was highlighted that I'd left out isHnsEnabled.

I then adjusted my bicep script to include that property setting with a parameter as we are creating module libraries:

param saName string
param storageSku string
param tags object
param isHnsEnabled bool

resource storageaccount 'Microsoft.Storage/storageAccounts@2021-04-01' = {
  name: saName
  location: resourceGroup().location
  tags: tags
  sku: {
    name: storageSku
  }
  kind: 'StorageV2'
  identity: {
    type: 'SystemAssigned'
  }
  properties: {
    minimumTlsVersion: 'TLS1_2'
    allowBlobPublicAccess: false
    allowCrossTenantReplication: false  
    allowSharedKeyAccess: true
    isHnsEnabled: isHnsEnabled
    networkAcls: {
      virtualNetworkRules: []
      defaultAction: 'Deny'
      }
      encryption: {
        keySource: 'Microsoft.Storage'
        services: {
          file: {
            keyType: 'Account'
            enabled: true 
          }
        }
      }
        }
}

output name string = storageaccount.name
output id string = storageaccount.id
output identity string = storageaccount.identity.principalId

This yields the following error:

The property 'isHnsEnabled' was specified in the input, but it cannot be updated as it is read-only

I'm not sure if I need to set other properties in combination with this one, but nothing in the Microsoft Docs suggest that.I would have assumed if the resource was already created and the properties matched that Bicep would not try to change the resource via CICD.

Any suggestions would be much appreciated.


Solution

  • The isHnsEnabled property (to enable hierarchical namespace) can only be set when creating new resource.

    You can check this article to know when to enable this feature: Deciding whether to enable a hierarchical namespace.

    To upgrade your storage, you can follow this article: Upgrade Azure Blob Storage with Azure Data Lake Storage Gen2 capabilities.

    Otherwise you could delete and recreate the storage account.