Skip to content

Commit 9286aa1

Browse files
committed
Allow only single AzureBlobStorageResource in AzureStorageResource
Resolves #6875
1 parent 5adbb78 commit 9286aa1

File tree

2 files changed

+12
-6
lines changed

2 files changed

+12
-6
lines changed

src/Aspire.Hosting.Azure.Storage/AzureStorageExtensions.cs

+10-5
Original file line numberDiff line numberDiff line change
@@ -83,9 +83,9 @@ public static IResourceBuilder<AzureStorageResource> AddAzureStorage(this IDistr
8383

8484
var azureResource = (AzureStorageResource)infrastructure.AspireResource;
8585

86-
foreach (var blobStorageResources in azureResource.Blobs)
86+
if (azureResource.BlobsResource is not null)
8787
{
88-
foreach (var blobContainer in blobStorageResources.BlobContainers)
88+
foreach (var blobContainer in azureResource.BlobsResource.BlobContainers)
8989
{
9090
var cdkBlobContainer = blobContainer.ToProvisioningEntity();
9191
cdkBlobContainer.Parent = blobs;
@@ -159,9 +159,9 @@ public static IResourceBuilder<AzureStorageResource> RunAsEmulator(this IResourc
159159
throw new DistributedApplicationException($"ResourceReadyEvent was published for the '{builder.Resource.Name}' resource but the connection string was null.");
160160
}
161161

162-
foreach (var blobStorageResources in builder.Resource.Blobs)
162+
if (builder.Resource.BlobsResource is not null)
163163
{
164-
foreach (var blobContainer in blobStorageResources.BlobContainers)
164+
foreach (var blobContainer in builder.Resource.BlobsResource.BlobContainers)
165165
{
166166
await blobServiceClient.GetBlobContainerClient(blobContainer.BlobContainerName).CreateIfNotExistsAsync(cancellationToken: ct).ConfigureAwait(false);
167167
}
@@ -313,8 +313,13 @@ public static IResourceBuilder<AzureBlobStorageResource> AddBlobs(this IResource
313313
ArgumentNullException.ThrowIfNull(builder);
314314
ArgumentException.ThrowIfNullOrEmpty(name);
315315

316+
if (builder.Resource.BlobsResource is not null)
317+
{
318+
throw new InvalidOperationException("The Azure Storage resource already has a blob endpoint.");
319+
}
320+
316321
var resource = new AzureBlobStorageResource(name, builder.Resource);
317-
builder.Resource.Blobs.Add(resource);
322+
builder.Resource.BlobsResource = resource;
318323

319324
return builder.ApplicationBuilder.AddResource(resource);
320325
}

src/Aspire.Hosting.Azure.Storage/AzureStorageResource.cs

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ public class AzureStorageResource(string name, Action<AzureResourceInfrastructur
2323
private EndpointReference EmulatorQueueEndpoint => new(this, "queue");
2424
private EndpointReference EmulatorTableEndpoint => new(this, "table");
2525

26-
internal List<AzureBlobStorageResource> Blobs { get; } = [];
26+
// This is, essentially, a reference to the Azure "Blob containers" node, represented by BlobServiceClient.
27+
internal AzureBlobStorageResource? BlobsResource { get; set; }
2728

2829
/// <summary>
2930
/// Gets the "blobEndpoint" output reference from the bicep template for the Azure Storage resource.

0 commit comments

Comments
 (0)