diff --git a/src/Aspire.Hosting.Azure/AzureBicepResourceExtensions.cs b/src/Aspire.Hosting.Azure/AzureBicepResourceExtensions.cs index 098abfa6076..489d4b10b73 100644 --- a/src/Aspire.Hosting.Azure/AzureBicepResourceExtensions.cs +++ b/src/Aspire.Hosting.Azure/AzureBicepResourceExtensions.cs @@ -242,4 +242,36 @@ public static IResourceBuilder WithParameter(this IResourceBuilder buil builder.Resource.Parameters[name] = value; return builder; } + + /// + /// Adds a parameter to the bicep template. + /// + /// The + /// The resource builder. + /// The name of the input. + /// The value of the parameter. + /// An . + public static IResourceBuilder WithParameter(this IResourceBuilder builder, string name, ReferenceExpression value) + where T : AzureBicepResource + { + BicepParameterNameValidator.ThrowIfInvalid(name); + builder.Resource.Parameters[name] = value; + return builder; + } + + /// + /// Adds a parameter to the bicep template. + /// + /// The + /// The resource builder. + /// The name of the input. + /// The value of the parameter. + /// An . + public static IResourceBuilder WithParameter(this IResourceBuilder builder, string name, EndpointReference value) + where T : AzureBicepResource + { + BicepParameterNameValidator.ThrowIfInvalid(name); + builder.Resource.Parameters[name] = value; + return builder; + } } diff --git a/src/Aspire.Hosting.Azure/PublicAPI.Unshipped.txt b/src/Aspire.Hosting.Azure/PublicAPI.Unshipped.txt index d066d01e6e4..245ea64008f 100644 --- a/src/Aspire.Hosting.Azure/PublicAPI.Unshipped.txt +++ b/src/Aspire.Hosting.Azure/PublicAPI.Unshipped.txt @@ -1,2 +1,4 @@ #nullable enable +static Aspire.Hosting.AzureBicepResourceExtensions.WithParameter(this Aspire.Hosting.ApplicationModel.IResourceBuilder! builder, string! name, Aspire.Hosting.ApplicationModel.EndpointReference! value) -> Aspire.Hosting.ApplicationModel.IResourceBuilder! +static Aspire.Hosting.AzureBicepResourceExtensions.WithParameter(this Aspire.Hosting.ApplicationModel.IResourceBuilder! builder, string! name, Aspire.Hosting.ApplicationModel.ReferenceExpression! value) -> Aspire.Hosting.ApplicationModel.IResourceBuilder! static Aspire.Hosting.AzureConstructResourceExtensions.ConfigureConstruct(this Aspire.Hosting.ApplicationModel.IResourceBuilder! builder, System.Action! configure) -> Aspire.Hosting.ApplicationModel.IResourceBuilder! diff --git a/tests/Aspire.Hosting.Azure.Tests/AzureBicepProvisionerTests.cs b/tests/Aspire.Hosting.Azure.Tests/AzureBicepProvisionerTests.cs index 3fb1204e1aa..39de7ac644b 100644 --- a/tests/Aspire.Hosting.Azure.Tests/AzureBicepProvisionerTests.cs +++ b/tests/Aspire.Hosting.Azure.Tests/AzureBicepProvisionerTests.cs @@ -32,6 +32,13 @@ public async Task SetParametersTranslatesCompatibleParameterTypes() { using var builder = TestDistributedApplicationBuilder.Create(); + var container = builder.AddContainer("foo", "image") + .WithHttpEndpoint() + .WithEndpoint("http", e => + { + e.AllocatedEndpoint = new(e, "localhost", 1023); + }); + builder.Configuration["Parameters:param"] = "paramValue"; var connectionStringResource = builder.CreateResourceBuilder( @@ -45,18 +52,22 @@ public async Task SetParametersTranslatesCompatibleParameterTypes() .WithParameter("values", ["a", "b", "c"]) .WithParameter("conn", connectionStringResource) .WithParameter("jsonObj", new JsonObject { ["key"] = "value" }) - .WithParameter("param", param); + .WithParameter("param", param) + .WithParameter("expr", ReferenceExpression.Create($"{param.Resource}/1")) + .WithParameter("endpoint", container.GetEndpoint("http")); var parameters = new JsonObject(); await BicepProvisioner.SetParametersAsync(parameters, bicep0.Resource); - Assert.Equal(6, parameters.Count); + Assert.Equal(8, parameters.Count); Assert.Equal("john", parameters["name"]?["value"]?.ToString()); Assert.Equal(20, parameters["age"]?["value"]?.GetValue()); Assert.Equal(["a", "b", "c"], parameters["values"]?["value"]?.AsArray()?.Select(v => v?.ToString()) ?? []); Assert.Equal("connection string", parameters["conn"]?["value"]?.ToString()); Assert.Equal("value", parameters["jsonObj"]?["value"]?["key"]?.ToString()); Assert.Equal("paramValue", parameters["param"]?["value"]?.ToString()); + Assert.Equal("paramValue/1", parameters["expr"]?["value"]?.ToString()); + Assert.Equal("http://localhost:1023", parameters["endpoint"]?["value"]?.ToString()); } [Fact]