diff --git a/Directory.Packages.props b/Directory.Packages.props index cf0c530eb2d..9d460430a16 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -48,7 +48,7 @@ - + diff --git a/src/Aspire.Hosting.Azure.Storage/AzureStorageExtensions.cs b/src/Aspire.Hosting.Azure.Storage/AzureStorageExtensions.cs index aae8fc8eaa5..97324fe3adb 100644 --- a/src/Aspire.Hosting.Azure.Storage/AzureStorageExtensions.cs +++ b/src/Aspire.Hosting.Azure.Storage/AzureStorageExtensions.cs @@ -102,6 +102,13 @@ public static IResourceBuilder AddAzureStorage(this IDistr } } + if (azureResource.TableStorageResource is not null) + { + var tableService = azureResource.TableStorageResource.ToProvisioningEntity(); + tableService.Parent = storageAccount; + infrastructure.Add(tableService); + } + infrastructure.Add(new ProvisioningOutput("blobEndpoint", typeof(string)) { Value = storageAccount.PrimaryEndpoints.BlobUri }); infrastructure.Add(new ProvisioningOutput("queueEndpoint", typeof(string)) { Value = storageAccount.PrimaryEndpoints.QueueUri }); infrastructure.Add(new ProvisioningOutput("tableEndpoint", typeof(string)) { Value = storageAccount.PrimaryEndpoints.TableUri }); @@ -466,6 +473,8 @@ public static IResourceBuilder AddTableService(this I name ??= builder.Resource.Name + "-tables"; var resource = new AzureTableStorageResource(name, builder.Resource); + builder.Resource.TableStorageResource = resource; + return builder.ApplicationBuilder.AddResource(resource); } diff --git a/src/Aspire.Hosting.Azure.Storage/AzureStorageResource.cs b/src/Aspire.Hosting.Azure.Storage/AzureStorageResource.cs index 5547ad00f69..05994fe2e80 100644 --- a/src/Aspire.Hosting.Azure.Storage/AzureStorageResource.cs +++ b/src/Aspire.Hosting.Azure.Storage/AzureStorageResource.cs @@ -25,6 +25,7 @@ public class AzureStorageResource(string name, Action BlobContainers { get; } = []; diff --git a/src/Aspire.Hosting.Azure.Storage/AzureTableStorageResource.cs b/src/Aspire.Hosting.Azure.Storage/AzureTableStorageResource.cs index f3269cd10dc..bf6fa5de553 100644 --- a/src/Aspire.Hosting.Azure.Storage/AzureTableStorageResource.cs +++ b/src/Aspire.Hosting.Azure.Storage/AzureTableStorageResource.cs @@ -2,6 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. using Aspire.Hosting.ApplicationModel; +using Azure.Provisioning; namespace Aspire.Hosting.Azure; @@ -40,4 +41,14 @@ void IResourceWithAzureFunctionsConfig.ApplyAzureFunctionsConfiguration(IDiction target[$"{AzureStorageResource.TablesConnectionKeyPrefix}__{connectionName}__ServiceUri"] = Parent.TableEndpoint; // Updated for consistency } } + + /// + /// Converts the current instance to a provisioning entity. + /// + /// A instance. + internal global::Azure.Provisioning.Storage.TableService ToProvisioningEntity() + { + global::Azure.Provisioning.Storage.TableService service = new(Infrastructure.NormalizeBicepIdentifier(Name)); + return service; + } } diff --git a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureStorageExtensionsTests.AddAzureStorageViaPublishMode.verified.bicep b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureStorageExtensionsTests.AddAzureStorageViaPublishMode.verified.bicep index 878750b2481..c8b8f5894c5 100644 --- a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureStorageExtensionsTests.AddAzureStorageViaPublishMode.verified.bicep +++ b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureStorageExtensionsTests.AddAzureStorageViaPublishMode.verified.bicep @@ -33,6 +33,11 @@ resource queue 'Microsoft.Storage/storageAccounts/queueServices@2024-01-01' = { parent: storage } +resource table 'Microsoft.Storage/storageAccounts/tableServices@2024-01-01' = { + name: 'default' + parent: storage +} + output blobEndpoint string = storage.properties.primaryEndpoints.blob output queueEndpoint string = storage.properties.primaryEndpoints.queue diff --git a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureStorageExtensionsTests.AddMultipleStorageServiceGeneratesSingleResource.verified.bicep b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureStorageExtensionsTests.AddMultipleStorageServiceGeneratesSingleResource.verified.bicep index 5ff63a3a1c2..f2fe894c954 100644 --- a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureStorageExtensionsTests.AddMultipleStorageServiceGeneratesSingleResource.verified.bicep +++ b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureStorageExtensionsTests.AddMultipleStorageServiceGeneratesSingleResource.verified.bicep @@ -51,6 +51,11 @@ resource queue2 'Microsoft.Storage/storageAccounts/queueServices/queues@2024-01- parent: queueService2 } +resource tableService2 'Microsoft.Storage/storageAccounts/tableServices@2024-01-01' = { + name: 'default' + parent: storage +} + output blobEndpoint string = storage.properties.primaryEndpoints.blob output queueEndpoint string = storage.properties.primaryEndpoints.queue diff --git a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureStorageExtensionsTests.ResourceNamesBicepValid.verified.bicep b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureStorageExtensionsTests.ResourceNamesBicepValid.verified.bicep index 576667929f8..b10f608b77c 100644 --- a/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureStorageExtensionsTests.ResourceNamesBicepValid.verified.bicep +++ b/tests/Aspire.Hosting.Azure.Tests/Snapshots/AzureStorageExtensionsTests.ResourceNamesBicepValid.verified.bicep @@ -41,6 +41,11 @@ resource myqueue 'Microsoft.Storage/storageAccounts/queueServices/queues@2024-01 parent: myqueues } +resource mytables 'Microsoft.Storage/storageAccounts/tableServices@2024-01-01' = { + name: 'default' + parent: storage +} + output blobEndpoint string = storage.properties.primaryEndpoints.blob output queueEndpoint string = storage.properties.primaryEndpoints.queue