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