diff --git a/src/Aspire.Hosting.Kubernetes/KubernetesPersistentVolumeExtensions.cs b/src/Aspire.Hosting.Kubernetes/KubernetesPersistentVolumeExtensions.cs index 1519a0529d3..a9031feb6f5 100644 --- a/src/Aspire.Hosting.Kubernetes/KubernetesPersistentVolumeExtensions.cs +++ b/src/Aspire.Hosting.Kubernetes/KubernetesPersistentVolumeExtensions.cs @@ -91,7 +91,7 @@ public static IResourceBuilder WithStorageCl /// A parameter resource builder for the storage /// class name. /// The same builder for chaining. - [AspireExport("withPvStorageClassParam")] + [AspireExport("withStorageClassParam")] public static IResourceBuilder WithStorageClass( this IResourceBuilder builder, IResourceBuilder storageClassName) @@ -132,7 +132,7 @@ public static IResourceBuilder WithCapacity( /// A parameter resource builder for the capacity quantity /// string. /// The same builder for chaining. - [AspireExport("withPvCapacityParam")] + [AspireExport("withCapacityParam")] public static IResourceBuilder WithCapacity( this IResourceBuilder builder, IResourceBuilder capacity) diff --git a/src/Aspire.Hosting.Kubernetes/KubernetesPersistentVolumeResource.cs b/src/Aspire.Hosting.Kubernetes/KubernetesPersistentVolumeResource.cs index 6e06453f499..643b8cdc5bf 100644 --- a/src/Aspire.Hosting.Kubernetes/KubernetesPersistentVolumeResource.cs +++ b/src/Aspire.Hosting.Kubernetes/KubernetesPersistentVolumeResource.cs @@ -61,6 +61,7 @@ namespace Aspire.Hosting.Kubernetes; /// /// [Experimental("ASPIRECOMPUTE002", UrlFormat = "https://aka.ms/aspire/diagnostics/{0}")] +[AspireExport] public sealed class KubernetesPersistentVolumeResource( string name, KubernetesEnvironmentResource environment) : Resource(name), IResourceWithParent diff --git a/tests/PolyglotAppHosts/Aspire.Hosting.Kubernetes/Go/apphost.go b/tests/PolyglotAppHosts/Aspire.Hosting.Kubernetes/Go/apphost.go index ab401d199f3..b554c1e8022 100644 --- a/tests/PolyglotAppHosts/Aspire.Hosting.Kubernetes/Go/apphost.go +++ b/tests/PolyglotAppHosts/Aspire.Hosting.Kubernetes/Go/apphost.go @@ -17,6 +17,8 @@ func main() { helmChartName := builder.AddParameter("helm-chart-name") helmChartVersion := builder.AddParameter("helm-chart-version") helmChartDescription := builder.AddParameter("helm-chart-description") + persistentVolumeStorageClass := builder.AddParameter("persistent-volume-storage-class") + persistentVolumeCapacity := builder.AddParameter("persistent-volume-capacity") kubernetes := builder.AddKubernetesEnvironment("kube") kubernetes.WithHelm(&aspire.WithHelmOptions{ @@ -61,6 +63,15 @@ func main() { ingress.WithHostname("ingress.example.com") ingress.WithTls("ingress-tls") + persistentVolume := kubernetes.AddPersistentVolume("data") + persistentVolume.WithStorageClass("fast-storage") + persistentVolume.WithCapacity("5Gi") + _, _ = persistentVolume.GetResourceName() + + parameterizedPersistentVolume := kubernetes.AddPersistentVolume("parameterized-data") + parameterizedPersistentVolume.WithStorageClassParam(persistentVolumeStorageClass) + parameterizedPersistentVolume.WithCapacityParam(persistentVolumeCapacity) + serviceContainer := builder.AddContainer("kube-service", "redis:alpine") serviceContainer.WithComputeEnvironment(kubernetes) _ = serviceContainer.PublishAsKubernetesService(func(service aspire.KubernetesResource) { diff --git a/tests/PolyglotAppHosts/Aspire.Hosting.Kubernetes/Java/AppHost.java b/tests/PolyglotAppHosts/Aspire.Hosting.Kubernetes/Java/AppHost.java index 86e322fd718..1d827e0ce5c 100644 --- a/tests/PolyglotAppHosts/Aspire.Hosting.Kubernetes/Java/AppHost.java +++ b/tests/PolyglotAppHosts/Aspire.Hosting.Kubernetes/Java/AppHost.java @@ -7,6 +7,8 @@ void main() throws Exception { var helmChartName = builder.addParameter("helm-chart-name"); var helmChartVersion = builder.addParameter("helm-chart-version"); var helmChartDescription = builder.addParameter("helm-chart-description"); + var persistentVolumeStorageClass = builder.addParameter("persistent-volume-storage-class"); + var persistentVolumeCapacity = builder.addParameter("persistent-volume-capacity"); var kubernetes = builder.addKubernetesEnvironment("kube"); kubernetes.withHelm((helm) -> { helm.withNamespace("validation-namespace"); @@ -42,6 +44,13 @@ void main() throws Exception { var ingress = kubernetes.addIngress("public-ingress"); ingress.withHostname("ingress.example.com"); ingress.withTls("ingress-tls"); + var persistentVolume = kubernetes.addPersistentVolume("data"); + persistentVolume.withStorageClass("fast-storage"); + persistentVolume.withCapacity("5Gi"); + var _persistentVolumeResourceName = persistentVolume.getResourceName(); + var parameterizedPersistentVolume = kubernetes.addPersistentVolume("parameterized-data"); + parameterizedPersistentVolume.withStorageClassParam(persistentVolumeStorageClass); + parameterizedPersistentVolume.withCapacityParam(persistentVolumeCapacity); var serviceContainer = builder.addContainer("kube-service", "redis:alpine"); serviceContainer.withComputeEnvironment(kubernetes); serviceContainer.publishAsKubernetesService((service) -> { diff --git a/tests/PolyglotAppHosts/Aspire.Hosting.Kubernetes/Python/apphost.py b/tests/PolyglotAppHosts/Aspire.Hosting.Kubernetes/Python/apphost.py index 78a8c1e2cdb..28cbccd30ec 100644 --- a/tests/PolyglotAppHosts/Aspire.Hosting.Kubernetes/Python/apphost.py +++ b/tests/PolyglotAppHosts/Aspire.Hosting.Kubernetes/Python/apphost.py @@ -10,6 +10,8 @@ helm_chart_name = builder.add_parameter("helm-chart-name") helm_chart_version = builder.add_parameter("helm-chart-version") helm_chart_description = builder.add_parameter("helm-chart-description") + persistent_volume_storage_class = builder.add_parameter("persistent-volume-storage-class") + persistent_volume_capacity = builder.add_parameter("persistent-volume-capacity") kubernetes = builder.add_kubernetes_environment("resource") def configure_helm(helm): @@ -34,6 +36,13 @@ def configure_helm(helm): ingress = kubernetes.add_ingress("public-ingress") ingress.with_hostname("ingress.example.com") ingress.with_tls("ingress-tls") + persistent_volume = kubernetes.add_persistent_volume("data") + persistent_volume.with_storage_class("fast-storage") + persistent_volume.with_capacity("5Gi") + _persistent_volume_resource_name = persistent_volume.get_resource_name() + parameterized_persistent_volume = kubernetes.add_persistent_volume("parameterized-data") + parameterized_persistent_volume.with_storage_class_param(persistent_volume_storage_class) + parameterized_persistent_volume.with_capacity_param(persistent_volume_capacity) service_container = builder.add_container("resource", "image") service_container.with_compute_environment(kubernetes) diff --git a/tests/PolyglotAppHosts/Aspire.Hosting.Kubernetes/TypeScript/apphost.mts b/tests/PolyglotAppHosts/Aspire.Hosting.Kubernetes/TypeScript/apphost.mts index addc3129608..f37765b5e2c 100644 --- a/tests/PolyglotAppHosts/Aspire.Hosting.Kubernetes/TypeScript/apphost.mts +++ b/tests/PolyglotAppHosts/Aspire.Hosting.Kubernetes/TypeScript/apphost.mts @@ -7,6 +7,8 @@ const helmReleaseName = await builder.addParameter('helm-release-name'); const helmChartName = await builder.addParameter('helm-chart-name'); const helmChartVersion = await builder.addParameter('helm-chart-version'); const helmChartDescription = await builder.addParameter('helm-chart-description'); +const persistentVolumeStorageClass = await builder.addParameter('persistent-volume-storage-class'); +const persistentVolumeCapacity = await builder.addParameter('persistent-volume-capacity'); const kubernetes = await builder.addKubernetesEnvironment('kube'); @@ -56,6 +58,15 @@ const ingress = await kubernetes.addIngress('public-ingress'); await ingress.withHostname('ingress.example.com'); await ingress.withTls('ingress-tls'); +const persistentVolume = await kubernetes.addPersistentVolume('data'); +await persistentVolume.withStorageClass('fast-storage'); +await persistentVolume.withCapacity('5Gi'); +const _persistentVolumeResourceName: string = await persistentVolume.getResourceName(); + +const parameterizedPersistentVolume = await kubernetes.addPersistentVolume('parameterized-data'); +await parameterizedPersistentVolume.withStorageClassParam(persistentVolumeStorageClass); +await parameterizedPersistentVolume.withCapacityParam(persistentVolumeCapacity); + // === cert-manager === // Validates the typed cert-manager API surface generated for TypeScript: // addCertManager / addIssuer / withLetsEncrypt* / withAcmeServer / withHttp01Solver /