Skip to content

Commit f892277

Browse files
davidfowleerhardt
andauthored
This change pushes container registry details to the outputs (#8839)
* This change pushes container registry details to the outputs - The assumption is that these are going to be needed to push the container image so they are made available as outputs in main.bicep. * Trim whitespace * Update src/Aspire.Hosting.Azure/AzurePublishingContext.cs --------- Co-authored-by: Eric Erhardt <[email protected]>
1 parent d65926c commit f892277

File tree

2 files changed

+27
-14
lines changed

2 files changed

+27
-14
lines changed

src/Aspire.Hosting.Azure/AzurePublishingContext.cs

+20-9
Original file line numberDiff line numberDiff line change
@@ -217,9 +217,17 @@ static BicepValue<string> ResolveValue(object val)
217217

218218
var outputs = new Dictionary<string, BicepOutputReference>();
219219

220+
void CaptureBicepOutputs(object value)
221+
{
222+
if (value is BicepOutputReference bo)
223+
{
224+
outputs[bo.ValueExpression] = bo;
225+
}
226+
}
227+
220228
foreach (var resource in model.Resources)
221229
{
222-
if (resource.GetDeploymentTargetAnnotation()?.DeploymentTarget is AzureBicepResource br)
230+
if (resource.GetDeploymentTargetAnnotation() is { } annotation && annotation.DeploymentTarget is AzureBicepResource br)
223231
{
224232
var moduleDirectory = outputDirectory.CreateSubdirectory(resource.Name);
225233

@@ -229,15 +237,18 @@ static BicepValue<string> ResolveValue(object val)
229237

230238
File.Copy(file.Path, modulePath, true);
231239

240+
// Capture any bicep outputs from the registry info as it may be needed
241+
Visit(annotation.ContainerRegistryInfo?.Name, CaptureBicepOutputs);
242+
Visit(annotation.ContainerRegistryInfo?.Endpoint, CaptureBicepOutputs);
243+
244+
if (annotation.ContainerRegistryInfo is IAzureContainerRegistry acr)
245+
{
246+
Visit(acr.ManagedIdentityId, CaptureBicepOutputs);
247+
}
248+
232249
foreach (var parameter in br.Parameters)
233250
{
234-
Visit(parameter.Value, v =>
235-
{
236-
if (v is BicepOutputReference bo)
237-
{
238-
outputs[bo.ValueExpression] = bo;
239-
}
240-
});
251+
Visit(parameter.Value, CaptureBicepOutputs);
241252
}
242253
}
243254
}
@@ -273,7 +284,7 @@ static BicepValue<string> ResolveValue(object val)
273284
}
274285

275286
private static void Visit(object? value, Action<object> visitor) =>
276-
Visit(value, visitor, new HashSet<object>());
287+
Visit(value, visitor, []);
277288

278289
private static void Visit(object? value, Action<object> visitor, HashSet<object> visited)
279290
{

tests/Aspire.Hosting.Azure.Tests/AzurePublisherTests.cs

+7-5
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public async Task PublishAsync_GeneratesMainBicep(bool useContext)
3030

3131
var builder = TestDistributedApplicationBuilder.Create(DistributedApplicationOperation.Publish);
3232

33-
// The azure publisher is not tied to azure container apps but this is
33+
// The azure publisher is not tied to azure container apps but this is
3434
// a good way to test the end to end scenario
3535
builder.AddAzureContainerAppEnvironment("acaEnv");
3636

@@ -230,6 +230,12 @@ param kvName string
230230
}
231231
}
232232
233+
output acaEnv_AZURE_CONTAINER_REGISTRY_NAME string = acaEnv.outputs.AZURE_CONTAINER_REGISTRY_NAME
234+
235+
output acaEnv_AZURE_CONTAINER_REGISTRY_ENDPOINT string = acaEnv.outputs.AZURE_CONTAINER_REGISTRY_ENDPOINT
236+
237+
output acaEnv_AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_ID string = acaEnv.outputs.AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_ID
238+
233239
output myapp_identity_id string = myapp_identity.outputs.id
234240
235241
output myapp_identity_clientId string = myapp_identity.outputs.clientId
@@ -245,10 +251,6 @@ param kvName string
245251
output fe_identity_clientId string = fe_identity.outputs.clientId
246252
247253
output storage_blobEndpoint string = storage.outputs.blobEndpoint
248-
249-
output acaEnv_AZURE_CONTAINER_REGISTRY_ENDPOINT string = acaEnv.outputs.AZURE_CONTAINER_REGISTRY_ENDPOINT
250-
251-
output acaEnv_AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_ID string = acaEnv.outputs.AZURE_CONTAINER_REGISTRY_MANAGED_IDENTITY_ID
252254
""";
253255
output.WriteLine(content);
254256
Assert.Equal(expectedBicep, content, ignoreAllWhiteSpace: true, ignoreLineEndingDifferences: true);

0 commit comments

Comments
 (0)