Skip to content

Commit c973ace

Browse files
authored
Support reference expressions and endpoint references in WithParameter (#5491)
1 parent 3b87964 commit c973ace

File tree

3 files changed

+47
-2
lines changed

3 files changed

+47
-2
lines changed

src/Aspire.Hosting.Azure/AzureBicepResourceExtensions.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -242,4 +242,36 @@ public static IResourceBuilder<T> WithParameter<T>(this IResourceBuilder<T> buil
242242
builder.Resource.Parameters[name] = value;
243243
return builder;
244244
}
245+
246+
/// <summary>
247+
/// Adds a parameter to the bicep template.
248+
/// </summary>
249+
/// <typeparam name="T">The <see cref="AzureBicepResource"/></typeparam>
250+
/// <param name="builder">The resource builder.</param>
251+
/// <param name="name">The name of the input.</param>
252+
/// <param name="value">The value of the parameter.</param>
253+
/// <returns>An <see cref="IResourceBuilder{T}"/>.</returns>
254+
public static IResourceBuilder<T> WithParameter<T>(this IResourceBuilder<T> builder, string name, ReferenceExpression value)
255+
where T : AzureBicepResource
256+
{
257+
BicepParameterNameValidator.ThrowIfInvalid(name);
258+
builder.Resource.Parameters[name] = value;
259+
return builder;
260+
}
261+
262+
/// <summary>
263+
/// Adds a parameter to the bicep template.
264+
/// </summary>
265+
/// <typeparam name="T">The <see cref="AzureBicepResource"/></typeparam>
266+
/// <param name="builder">The resource builder.</param>
267+
/// <param name="name">The name of the input.</param>
268+
/// <param name="value">The value of the parameter.</param>
269+
/// <returns>An <see cref="IResourceBuilder{T}"/>.</returns>
270+
public static IResourceBuilder<T> WithParameter<T>(this IResourceBuilder<T> builder, string name, EndpointReference value)
271+
where T : AzureBicepResource
272+
{
273+
BicepParameterNameValidator.ThrowIfInvalid(name);
274+
builder.Resource.Parameters[name] = value;
275+
return builder;
276+
}
245277
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
#nullable enable
2+
static Aspire.Hosting.AzureBicepResourceExtensions.WithParameter<T>(this Aspire.Hosting.ApplicationModel.IResourceBuilder<T!>! builder, string! name, Aspire.Hosting.ApplicationModel.EndpointReference! value) -> Aspire.Hosting.ApplicationModel.IResourceBuilder<T!>!
3+
static Aspire.Hosting.AzureBicepResourceExtensions.WithParameter<T>(this Aspire.Hosting.ApplicationModel.IResourceBuilder<T!>! builder, string! name, Aspire.Hosting.ApplicationModel.ReferenceExpression! value) -> Aspire.Hosting.ApplicationModel.IResourceBuilder<T!>!
24
static Aspire.Hosting.AzureConstructResourceExtensions.ConfigureConstruct<T>(this Aspire.Hosting.ApplicationModel.IResourceBuilder<T!>! builder, System.Action<Aspire.Hosting.ResourceModuleConstruct!>! configure) -> Aspire.Hosting.ApplicationModel.IResourceBuilder<T!>!

tests/Aspire.Hosting.Azure.Tests/AzureBicepProvisionerTests.cs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,13 @@ public async Task SetParametersTranslatesCompatibleParameterTypes()
3232
{
3333
using var builder = TestDistributedApplicationBuilder.Create();
3434

35+
var container = builder.AddContainer("foo", "image")
36+
.WithHttpEndpoint()
37+
.WithEndpoint("http", e =>
38+
{
39+
e.AllocatedEndpoint = new(e, "localhost", 1023);
40+
});
41+
3542
builder.Configuration["Parameters:param"] = "paramValue";
3643

3744
var connectionStringResource = builder.CreateResourceBuilder(
@@ -45,18 +52,22 @@ public async Task SetParametersTranslatesCompatibleParameterTypes()
4552
.WithParameter("values", ["a", "b", "c"])
4653
.WithParameter("conn", connectionStringResource)
4754
.WithParameter("jsonObj", new JsonObject { ["key"] = "value" })
48-
.WithParameter("param", param);
55+
.WithParameter("param", param)
56+
.WithParameter("expr", ReferenceExpression.Create($"{param.Resource}/1"))
57+
.WithParameter("endpoint", container.GetEndpoint("http"));
4958

5059
var parameters = new JsonObject();
5160
await BicepProvisioner.SetParametersAsync(parameters, bicep0.Resource);
5261

53-
Assert.Equal(6, parameters.Count);
62+
Assert.Equal(8, parameters.Count);
5463
Assert.Equal("john", parameters["name"]?["value"]?.ToString());
5564
Assert.Equal(20, parameters["age"]?["value"]?.GetValue<int>());
5665
Assert.Equal(["a", "b", "c"], parameters["values"]?["value"]?.AsArray()?.Select(v => v?.ToString()) ?? []);
5766
Assert.Equal("connection string", parameters["conn"]?["value"]?.ToString());
5867
Assert.Equal("value", parameters["jsonObj"]?["value"]?["key"]?.ToString());
5968
Assert.Equal("paramValue", parameters["param"]?["value"]?.ToString());
69+
Assert.Equal("paramValue/1", parameters["expr"]?["value"]?.ToString());
70+
Assert.Equal("http://localhost:1023", parameters["endpoint"]?["value"]?.ToString());
6071
}
6172

6273
[Fact]

0 commit comments

Comments
 (0)