Skip to content

Azure CLI Bug Report: ArrayAccessSyntax Error with replace() Function in Bicep #31860

@GardloSE

Description

@GardloSE

Describe the bug

Azure CLI version 2.75 introduced a regression that causes "ArrayAccessSyntax" errors when using the replace() function within array indexing in Bicep templates. This worked correctly in Azure CLI 2.72 but fails in 2.75.

Root Cause:
The error occurs when using the replace() function within array indexing operations in Bicep templates, specifically when the array is loaded from JSON using loadJsonContent(). This suggests the issue is related to how the Bicep parser handles array access syntax for dynamically loaded JSON arrays.

Failing Code (Azure CLI 2.75):

// Load configuration from JSON file
var configs = {
myapp: loadJsonContent('./config/apps/myapp.json')[stage]
}
var config = configs[app]

// This fails when config array comes from JSON
resource originGroup 'Microsoft.Cdn/profiles/originGroups@2022-05-01-preview' = [for (endp, i) in config: {
parent: profile
name: replace(endp.originGroupNames[i], '.', '-') // ❌ FAILS in 2.75 with JSON arrays
// ...
}]
Working Code (Azure CLI 2.72 and workaround for 2.75):

// Same JSON loading
var configs = {
myapp: loadJsonContent('./config/apps/myapp.json')[stage]
}
var config = configs[app]

// This works without replace()
resource originGroup 'Microsoft.Cdn/profiles/originGroups@2022-05-01-preview' = [for (endp, i) in config: {
parent: profile
name: endp.originGroupNames[i] // ✅ WORKS
// ...
}]

Related command

az deployment group what-if

Errors

ERROR: Unhandled exception. System.ArgumentException: Unable to determine parent of specified node of type 'ArrayAccessSyntax' at span '[360:379]' because it has not been indexed.
at Bicep.Core.Syntax.SyntaxHierarchy.GetParent(SyntaxBase node)

Issue script & Debug output

at Bicep.Core.Emit.ExpressionConverter.GetFullyQualifiedResourceName(DeclaredResourceMetadata resource)
at Bicep.Core.Emit.ExpressionEmitter.GetFullyQualifiedResourceName(DeclaredResourceMetadata resource)
at Bicep.Core.Emit.TemplateWriter.<>c__DisplayClass69_0.b__0()
at Bicep.Core.Emit.PositionTrackingJsonTextWriter.WriteObjectWithPosition(IPositionable sourcePosition, Action propertiesFunc)
at Bicep.Core.Emit.ExpressionEmitter.EmitObject(Action writePropertiesFunc, IPositionable position)
at Bicep.Core.Emit.TemplateWriter.EmitResource(ExpressionEmitter emitter, ImmutableArray1 extensions, DeclaredResourceExpression resource) at Bicep.Core.Emit.TemplateWriter.<>c__DisplayClass67_0.<EmitResources>b__0() at Bicep.Core.Emit.PositionTrackingJsonTextWriter.WriteArrayWithPosition(IPositionable sourcePosition, Action itemsFunc) at Bicep.Core.Emit.ExpressionEmitter.EmitArray(Action writeItemsFunc, IPositionable position) at Bicep.Core.Emit.ExpressionEmitter.<>c__DisplayClass35_0.<EmitArrayProperty>b__0() at Bicep.Core.Emit.PositionTrackingJsonTextWriter.WritePropertyWithPosition(IPositionable keyPosition, String name, Action valueFunc) at Bicep.Core.Emit.ExpressionEmitter.EmitProperty(String propertyName, Action writeValueFunc, IPositionable position) at Bicep.Core.Emit.ExpressionEmitter.EmitArrayProperty(String propertyName, Action writeItemsFunc, IPositionable position) at Bicep.Core.Emit.TemplateWriter.EmitResources(PositionTrackingJsonTextWriter jsonWriter, ExpressionEmitter emitter, ImmutableArray1 extensions, ImmutableArray1 resources, ImmutableArray1 modules)
at Bicep.Core.Emit.TemplateWriter.GenerateTemplateWithoutHash(PositionTrackingJsonTextWriter jsonWriter)
at Bicep.Core.Emit.TemplateWriter.Write(SourceAwareJsonTextWriter writer)
at Bicep.Core.Emit.TemplateWriter.<>c__DisplayClass74_0.b__2()
at Bicep.Core.Emit.PositionTrackingJsonTextWriter.WriteObjectWithPosition(IPositionable sourcePosition, Action propertiesFunc)
at Bicep.Core.Emit.ExpressionEmitter.EmitObject(Action writePropertiesFunc, IPositionable position)
at Bicep.Core.Emit.ExpressionEmitter.<>c__DisplayClass34_0.b__0()
at Bicep.Core.Emit.PositionTrackingJsonTextWriter.WritePropertyWithPosition(IPositionable keyPosition, String name, Action valueFunc)
at Bicep.Core.Emit.ExpressionEmitter.EmitProperty(String propertyName, Action writeValueFunc, IPositionable position)
at Bicep.Core.Emit.ExpressionEmitter.EmitObjectProperty(String propertyName, Action writePropertiesFunc, IPositionable position)
at Bicep.Core.Emit.TemplateWriter.<>c__DisplayClass74_0.b__0()
at Bicep.Core.Emit.PositionTrackingJsonTextWriter.WriteObjectWithPosition(IPositionable sourcePosition, Action propertiesFunc)
at Bicep.Core.Emit.ExpressionEmitter.EmitObject(Action writePropertiesFunc, IPositionable position)
at Bicep.Core.Emit.TemplateWriter.EmitModule(PositionTrackingJsonTextWriter jsonWriter, DeclaredModuleExpression module, ExpressionEmitter emitter)
at Bicep.Core.Emit.TemplateWriter.<>c__DisplayClass67_0.b__0()
at Bicep.Core.Emit.PositionTrackingJsonTextWriter.WriteArrayWithPosition(IPositionable sourcePosition, Action itemsFunc)
at Bicep.Core.Emit.ExpressionEmitter.EmitArray(Action writeItemsFunc, IPositionable position)
at Bicep.Core.Emit.ExpressionEmitter.<>c__DisplayClass35_0.b__0()
at Bicep.Core.Emit.PositionTrackingJsonTextWriter.WritePropertyWithPosition(IPositionable keyPosition, String name, Action valueFunc)
at Bicep.Core.Emit.ExpressionEmitter.EmitProperty(String propertyName, Action writeValueFunc, IPositionable position)
at Bicep.Core.Emit.ExpressionEmitter.EmitArrayProperty(String propertyName, Action writeItemsFunc, IPositionable position)
at Bicep.Core.Emit.TemplateWriter.EmitResources(PositionTrackingJsonTextWriter jsonWriter, ExpressionEmitter emitter, ImmutableArray1 extensions, ImmutableArray1 resources, ImmutableArray1 modules) at Bicep.Core.Emit.TemplateWriter.GenerateTemplateWithoutHash(PositionTrackingJsonTextWriter jsonWriter) at Bicep.Core.Emit.TemplateWriter.Write(SourceAwareJsonTextWriter writer) at Bicep.Core.Emit.TemplateEmitter.<>c__DisplayClass8_0.<Emit>b__0() at Bicep.Core.Emit.TemplateEmitter.EmitOrFail(Func1 write)
at Bicep.Core.Emit.TemplateEmitter.Emit(TextWriter textWriter)
at Bicep.Core.Emit.CompilationEmitter.Template(SemanticModel model)
at Bicep.Core.Emit.CompilationEmitter.Template()
at Bicep.Cli.Services.OutputWriter.TemplateToStdout(Compilation compilation)
at Bicep.Cli.Commands.BuildCommand.Compile(Uri inputUri, Uri outputUri, Boolean noRestore, Nullable1 diagnosticsFormat, Boolean outputToStdOut) at Bicep.Cli.Commands.BuildCommand.RunAsync(BuildArguments args) at Bicep.Cli.Program.RunAsync(String[] args, CancellationToken cancellationToken) at Bicep.Cli.Program.<>c__DisplayClass3_0.<<Main>b__0>d.MoveNext() --- End of stack trace from previous location --- at Bicep.Cli.Program.RunWithCancellationAsync(Func2 runFunc)
at Bicep.Cli.Program.Main(String[] args)
at Bicep.Cli.Program.

(String[] args)

Expected behavior

The replace() function should work with array indexing on JSON-loaded arrays as it did in Azure CLI 2.72
No ArrayAccessSyntax errors should occur when combining loadJsonContent(), array iteration, and replace()

Environment Summary

Azure CLI Version (Working): 2.72
Azure CLI Version (Failing): 2.75
Operating System: Mac + Windows
Template Engine: Bicep
Command: az deployment group what-if

Additional context

This regression affects Azure Front Door deployment templates where resource names need character replacement for compliance with Azure naming restrictions. The issue specifically occurs when combining loadJsonContent() with array operations, suggesting a parsing problem with dynamically loaded JSON arrays. The issue specifically manifests when:

Loading configuration from JSON files using loadJsonContent()
Using array iteration with [for (item, i) in jsonArray: {...}] on the loaded data
Accessing array elements with index notation jsonArray[i]
Applying the replace() function to the indexed array element
The error occurs during Bicep syntax parsing, not during ARM template execution
This suggests the Bicep parser in Azure CLI 2.75 has issues with array access syntax specifically for JSON-loaded arrays, not statically defined arrays.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Auto-AssignAuto assign by botAzure Deploymentsaz deployment/bicep/stack/deployment-scripts/ts/group exportService AttentionThis issue is responsible by Azure service team.bugThis issue requires a change to an existing behavior in the product in order to be resolved.customer-reportedIssues that are reported by GitHub users external to the Azure organization.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions