diff --git a/src/Aspire.Hosting.Azure/AzureResourcePreparer.cs b/src/Aspire.Hosting.Azure/AzureResourcePreparer.cs index a5db729828e..1a06b254155 100644 --- a/src/Aspire.Hosting.Azure/AzureResourcePreparer.cs +++ b/src/Aspire.Hosting.Azure/AzureResourcePreparer.cs @@ -143,6 +143,12 @@ private async Task BuildRoleAssignmentAnnotations(DistributedApplicationModel ap .ToLookup(a => a.Target); foreach (var azureReference in azureReferences.OfType()) { + if (azureReference.IsContainer()) + { + // Skip emulators + continue; + } + var roleAssignments = azureReferencesWithRoleAssignments[azureReference]; if (roleAssignments.Any()) { diff --git a/tests/Aspire.Hosting.Azure.Tests/AzureResourcePreparerTests.cs b/tests/Aspire.Hosting.Azure.Tests/AzureResourcePreparerTests.cs index 9c1e158d353..f2766206fef 100644 --- a/tests/Aspire.Hosting.Azure.Tests/AzureResourcePreparerTests.cs +++ b/tests/Aspire.Hosting.Azure.Tests/AzureResourcePreparerTests.cs @@ -133,6 +133,28 @@ await Verifier.Verify(storageRolesManifest.BicepText, extension: "bicep") } } + [Fact] + public async Task DoesNotApplyRoleAssignmentsInRunModeForEmulators() + { + using var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Run); + builder.AddAzureContainerAppEnvironment("env"); + + builder.AddBicepTemplateString("foo", ""); + + var dbsrv = builder.AddAzureSqlServer("dbsrv").RunAsContainer(); + var db = dbsrv.AddDatabase("db"); + + var api = builder.AddProject("api", launchProfileName: null) + .WithReference(db); + + using var app = builder.Build(); + var model = app.Services.GetRequiredService(); + await ExecuteBeforeStartHooksAsync(app, default); + + // in RunMode, we skip applying the role assignments to a new 'dbsrv-roles' resource, since the storage is running as emulator. + Assert.DoesNotContain(model.Resources.OfType(), r => r.Name == "dbsrv-roles"); + } + [Fact] public async Task FindsAzureReferencesFromArguments() {