Skip to content

Commit c7ffa2c

Browse files
authored
Azure.Provisioning: Unify resolvers and newslot Literal expressions (Azure#46718)
1 parent 7c7f12b commit c7ffa2c

File tree

13 files changed

+79
-96
lines changed

13 files changed

+79
-96
lines changed

sdk/provisioning/Azure.Provisioning.Deployment/src/ProvisioningPlan.Deploy.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ private static ProvisioningDeployment ProcessDeploymentInternal(ProvisioningPlan
222222
}
223223

224224
// Patch up output references
225-
foreach (ProvisioningOutput output in plan.Infrastructure.GetResources().OfType<ProvisioningOutput>())
225+
foreach (ProvisioningOutput output in plan.Infrastructure.GetProvisionableResources().OfType<ProvisioningOutput>())
226226
{
227227
if (outputs.TryGetValue(output.BicepIdentifier, out object? value) &&
228228
value is not null)

sdk/provisioning/Azure.Provisioning/api/Azure.Provisioning.netstandard2.0.cs

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ public virtual void Add(Azure.Provisioning.Primitives.Provisionable resource) {
9797
public virtual Azure.Provisioning.ProvisioningPlan Build(Azure.Provisioning.ProvisioningBuildOptions? options = null) { throw null; }
9898
protected internal override System.Collections.Generic.IEnumerable<Azure.Provisioning.Expressions.BicepStatement> Compile() { throw null; }
9999
protected internal System.Collections.Generic.IDictionary<string, System.Collections.Generic.IEnumerable<Azure.Provisioning.Expressions.BicepStatement>> CompileModules(Azure.Provisioning.ProvisioningBuildOptions? options = null) { throw null; }
100-
public override System.Collections.Generic.IEnumerable<Azure.Provisioning.Primitives.Provisionable> GetResources() { throw null; }
100+
public override System.Collections.Generic.IEnumerable<Azure.Provisioning.Primitives.Provisionable> GetProvisionableResources() { throw null; }
101101
public static bool IsValidBicepIdentifier(string? bicepIdentifier) { throw null; }
102102
public static string NormalizeBicepIdentifier(string? bicepIdentifier) { throw null; }
103103
public virtual void Remove(Azure.Provisioning.Primitives.Provisionable resource) { }
@@ -108,8 +108,7 @@ public static void ValidateBicepIdentifier(string? bicepIdentifier, string? para
108108
public partial class ProvisioningBuildOptions
109109
{
110110
public ProvisioningBuildOptions() { }
111-
public System.Collections.Generic.IList<Azure.Provisioning.Primitives.InfrastructureResolver> InfrastructureResolvers { get { throw null; } set { } }
112-
public System.Collections.Generic.IList<Azure.Provisioning.Primitives.PropertyResolver> PropertyResolvers { get { throw null; } set { } }
111+
public System.Collections.Generic.IList<Azure.Provisioning.Primitives.InfrastructureResolver> InfrastructureResolvers { get { throw null; } }
113112
public System.Random Random { get { throw null; } set { } }
114113
}
115114
public partial class ProvisioningOutput : Azure.Provisioning.ProvisioningVariable
@@ -597,7 +596,7 @@ public BinaryExpression(Azure.Provisioning.Expressions.BicepExpression left, Azu
597596
public partial class BoolLiteralExpression : Azure.Provisioning.Expressions.LiteralExpression
598597
{
599598
public BoolLiteralExpression(bool value) : base (default(object)) { }
600-
public bool Value { get { throw null; } }
599+
public new bool Value { get { throw null; } }
601600
}
602601
public partial class CommentStatement : Azure.Provisioning.Expressions.BicepStatement
603602
{
@@ -647,12 +646,12 @@ public InterpolatedStringExpression(string format, Azure.Provisioning.Expression
647646
public partial class IntLiteralExpression : Azure.Provisioning.Expressions.LiteralExpression
648647
{
649648
public IntLiteralExpression(int value) : base (default(object)) { }
650-
public int Value { get { throw null; } }
649+
public new int Value { get { throw null; } }
651650
}
652651
public abstract partial class LiteralExpression : Azure.Provisioning.Expressions.BicepExpression
653652
{
654-
protected LiteralExpression(object? literalValue = null) { }
655-
public object? LiteralValue { get { throw null; } }
653+
protected LiteralExpression(object? value = null) { }
654+
public object? Value { get { throw null; } }
656655
}
657656
public partial class MemberExpression : Azure.Provisioning.Expressions.BicepExpression
658657
{
@@ -729,7 +728,7 @@ public SafeMemberExpression(Azure.Provisioning.Expressions.BicepExpression value
729728
public partial class StringLiteralExpression : Azure.Provisioning.Expressions.LiteralExpression
730729
{
731730
public StringLiteralExpression(string value) : base (default(object)) { }
732-
public string Value { get { throw null; } }
731+
public new string Value { get { throw null; } }
733732
}
734733
public partial class TargetScopeStatement : Azure.Provisioning.Expressions.BicepStatement
735734
{
@@ -780,7 +779,7 @@ public BicepValueReference(Azure.Provisioning.Primitives.ProvisionableConstruct
780779
public partial class ClientCreatorOutputResolver : Azure.Provisioning.Primitives.InfrastructureResolver
781780
{
782781
public ClientCreatorOutputResolver() { }
783-
public override System.Collections.Generic.IEnumerable<Azure.Provisioning.Primitives.Provisionable> ResolveResources(Azure.Provisioning.ProvisioningBuildOptions options, System.Collections.Generic.IEnumerable<Azure.Provisioning.Primitives.Provisionable> resources) { throw null; }
782+
public override System.Collections.Generic.IEnumerable<Azure.Provisioning.Primitives.Provisionable> ResolveResources(System.Collections.Generic.IEnumerable<Azure.Provisioning.Primitives.Provisionable> resources, Azure.Provisioning.ProvisioningBuildOptions options) { throw null; }
784783
}
785784
public partial class DynamicResourceNamePropertyResolver : Azure.Provisioning.Primitives.ResourceNamePropertyResolver
786785
{
@@ -799,15 +798,16 @@ public partial interface IClientCreator<TClient, TOptions> : Azure.Provisioning.
799798
public abstract partial class InfrastructureResolver
800799
{
801800
protected InfrastructureResolver() { }
802-
public System.Collections.Generic.IEnumerable<Azure.Provisioning.Infrastructure> GetNestedInfrastructure(Azure.Provisioning.ProvisioningBuildOptions options, Azure.Provisioning.Infrastructure infrastructure) { throw null; }
803-
public virtual void ResolveInfrastructure(Azure.Provisioning.ProvisioningBuildOptions options, Azure.Provisioning.Infrastructure infrastructure) { }
804-
public virtual System.Collections.Generic.IEnumerable<Azure.Provisioning.Primitives.Provisionable> ResolveResources(Azure.Provisioning.ProvisioningBuildOptions options, System.Collections.Generic.IEnumerable<Azure.Provisioning.Primitives.Provisionable> resources) { throw null; }
801+
public virtual System.Collections.Generic.IEnumerable<Azure.Provisioning.Infrastructure> GetNestedInfrastructure(Azure.Provisioning.Infrastructure infrastructure, Azure.Provisioning.ProvisioningBuildOptions options) { throw null; }
802+
public virtual void ResolveInfrastructure(Azure.Provisioning.Infrastructure infrastructure, Azure.Provisioning.ProvisioningBuildOptions options) { }
803+
public virtual void ResolveProperties(Azure.Provisioning.Primitives.ProvisionableConstruct construct, Azure.Provisioning.ProvisioningBuildOptions options) { }
804+
public virtual System.Collections.Generic.IEnumerable<Azure.Provisioning.Primitives.Provisionable> ResolveResources(System.Collections.Generic.IEnumerable<Azure.Provisioning.Primitives.Provisionable> resources, Azure.Provisioning.ProvisioningBuildOptions options) { throw null; }
805805
}
806-
public partial class LocationPropertyResolver : Azure.Provisioning.Primitives.PropertyResolver
806+
public partial class LocationPropertyResolver : Azure.Provisioning.Primitives.InfrastructureResolver
807807
{
808808
public LocationPropertyResolver() { }
809809
protected virtual Azure.Provisioning.BicepValue<Azure.Core.AzureLocation> GetDefaultLocation(Azure.Provisioning.ProvisioningBuildOptions options, Azure.Provisioning.Primitives.ProvisionableConstruct construct) { throw null; }
810-
public override void ResolveProperties(Azure.Provisioning.ProvisioningBuildOptions options, Azure.Provisioning.Primitives.ProvisionableConstruct construct) { }
810+
public override void ResolveProperties(Azure.Provisioning.Primitives.ProvisionableConstruct construct, Azure.Provisioning.ProvisioningBuildOptions options) { }
811811
}
812812
public partial class ModuleImport : Azure.Provisioning.Primitives.NamedProvisionableConstruct
813813
{
@@ -827,18 +827,13 @@ protected NamedProvisionableConstruct(string bicepIdentifier) { }
827827
public partial class OrderingInfrastructureResolver : Azure.Provisioning.Primitives.InfrastructureResolver
828828
{
829829
public OrderingInfrastructureResolver() { }
830-
public override System.Collections.Generic.IEnumerable<Azure.Provisioning.Primitives.Provisionable> ResolveResources(Azure.Provisioning.ProvisioningBuildOptions options, System.Collections.Generic.IEnumerable<Azure.Provisioning.Primitives.Provisionable> resources) { throw null; }
831-
}
832-
public abstract partial class PropertyResolver
833-
{
834-
protected PropertyResolver() { }
835-
public abstract void ResolveProperties(Azure.Provisioning.ProvisioningBuildOptions options, Azure.Provisioning.Primitives.ProvisionableConstruct construct);
830+
public override System.Collections.Generic.IEnumerable<Azure.Provisioning.Primitives.Provisionable> ResolveResources(System.Collections.Generic.IEnumerable<Azure.Provisioning.Primitives.Provisionable> resources, Azure.Provisioning.ProvisioningBuildOptions options) { throw null; }
836831
}
837832
public abstract partial class Provisionable
838833
{
839834
internal Provisionable() { }
840835
protected internal abstract System.Collections.Generic.IEnumerable<Azure.Provisioning.Expressions.BicepStatement> Compile();
841-
public virtual System.Collections.Generic.IEnumerable<Azure.Provisioning.Primitives.Provisionable> GetResources() { throw null; }
836+
public virtual System.Collections.Generic.IEnumerable<Azure.Provisioning.Primitives.Provisionable> GetProvisionableResources() { throw null; }
842837
protected internal virtual void Resolve(Azure.Provisioning.ProvisioningBuildOptions? options = null) { }
843838
protected internal virtual void Validate(Azure.Provisioning.ProvisioningBuildOptions? options = null) { }
844839
}
@@ -849,7 +844,7 @@ protected ProvisionableConstruct() { }
849844
public Azure.Provisioning.Infrastructure? ParentInfrastructure { get { throw null; } }
850845
protected internal override System.Collections.Generic.IEnumerable<Azure.Provisioning.Expressions.BicepStatement> Compile() { throw null; }
851846
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
852-
public override System.Collections.Generic.IEnumerable<Azure.Provisioning.Primitives.Provisionable> GetResources() { throw null; }
847+
public override System.Collections.Generic.IEnumerable<Azure.Provisioning.Primitives.Provisionable> GetProvisionableResources() { throw null; }
853848
protected internal void OverrideWithExpression(Azure.Provisioning.Expressions.BicepExpression reference) { }
854849
protected internal override void Resolve(Azure.Provisioning.ProvisioningBuildOptions? options = null) { }
855850
[System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Never)]
@@ -882,11 +877,11 @@ public enum ResourceNameCharacters
882877
Period = 32,
883878
Parentheses = 64,
884879
}
885-
public abstract partial class ResourceNamePropertyResolver : Azure.Provisioning.Primitives.PropertyResolver
880+
public abstract partial class ResourceNamePropertyResolver : Azure.Provisioning.Primitives.InfrastructureResolver
886881
{
887882
protected ResourceNamePropertyResolver() { }
888883
public abstract Azure.Provisioning.BicepValue<string>? ResolveName(Azure.Provisioning.ProvisioningBuildOptions options, Azure.Provisioning.Primitives.ProvisionableResource resource, Azure.Provisioning.Primitives.ResourceNameRequirements requirements);
889-
public override void ResolveProperties(Azure.Provisioning.ProvisioningBuildOptions options, Azure.Provisioning.Primitives.ProvisionableConstruct construct) { }
884+
public override void ResolveProperties(Azure.Provisioning.Primitives.ProvisionableConstruct construct, Azure.Provisioning.ProvisioningBuildOptions options) { }
890885
protected static string SanitizeText(string text, Azure.Provisioning.Primitives.ResourceNameCharacters validCharacters) { throw null; }
891886
}
892887
[System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)]

sdk/provisioning/Azure.Provisioning/src/Expressions/AST.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ public class IdentifierExpression(string name) : BicepExpression
3030
internal override BicepWriter Write(BicepWriter writer) => writer.Append(Name);
3131
}
3232

33-
public abstract class LiteralExpression(object? literalValue = null) : BicepExpression
33+
public abstract class LiteralExpression(object? value = null) : BicepExpression
3434
{
35-
public object? LiteralValue { get; } = literalValue;
35+
public object? Value { get; } = value;
3636
}
3737

3838
public class NullLiteralExpression() : LiteralExpression()
@@ -42,19 +42,19 @@ public class NullLiteralExpression() : LiteralExpression()
4242

4343
public class BoolLiteralExpression(bool value) : LiteralExpression(value)
4444
{
45-
public bool Value { get; } = value;
45+
public new bool Value { get => (bool)base.Value!; }
4646
internal override BicepWriter Write(BicepWriter writer) => writer.Append(Value ? "true" : "false");
4747
}
4848

4949
public class IntLiteralExpression(int value) : LiteralExpression(value)
5050
{
51-
public int Value { get; } = value;
51+
public new int Value { get => (int)base.Value!; }
5252
internal override BicepWriter Write(BicepWriter writer) => writer.Append(Value.ToString());
5353
}
5454

5555
public class StringLiteralExpression(string value) : LiteralExpression(value)
5656
{
57-
public string Value { get; } = value;
57+
public new string Value { get => (string)base.Value!; }
5858
internal override BicepWriter Write(BicepWriter writer) =>
5959
(Value == null) ?
6060
writer.Append("null") :

sdk/provisioning/Azure.Provisioning/src/Infrastructure.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public class Infrastructure(string bicepName = "main") : Provisionable
3535
private Infrastructure? _parent = null;
3636

3737
/// <inheritdoc/>
38-
public override IEnumerable<Provisionable> GetResources() => _resources;
38+
public override IEnumerable<Provisionable> GetProvisionableResources() => _resources;
3939
private readonly List<Provisionable> _resources = [];
4040

4141
/// <summary>
@@ -206,7 +206,7 @@ protected internal override void Validate(ProvisioningBuildOptions? options = nu
206206
{
207207
options ??= new();
208208
base.Validate(options);
209-
foreach (Provisionable resource in GetResources()) { resource.Validate(options); }
209+
foreach (Provisionable resource in GetProvisionableResources()) { resource.Validate(options); }
210210
}
211211

212212
/// <inheritdoc/>
@@ -215,12 +215,12 @@ protected internal override void Resolve(ProvisioningBuildOptions? options = def
215215
options ??= new();
216216
base.Resolve(options);
217217

218-
Provisionable[] cached = [.. GetResources()]; // Copy so Resolve can mutate
218+
Provisionable[] cached = [.. GetProvisionableResources()]; // Copy so Resolve can mutate
219219
foreach (Provisionable resource in cached) { resource.Resolve(options); }
220220

221221
foreach (InfrastructureResolver resolver in options.InfrastructureResolvers)
222222
{
223-
resolver.ResolveInfrastructure(options, this);
223+
resolver.ResolveInfrastructure(this, options);
224224
}
225225
}
226226

@@ -248,7 +248,7 @@ protected internal IDictionary<string, IEnumerable<BicepStatement>> CompileModul
248248
List<Infrastructure> nested = [];
249249
foreach (InfrastructureResolver resolver in options.InfrastructureResolvers)
250250
{
251-
nested.AddRange(resolver.GetNestedInfrastructure(options, this));
251+
nested.AddRange(resolver.GetNestedInfrastructure(this, options));
252252
}
253253
foreach (Infrastructure infra in nested)
254254
{
@@ -267,15 +267,15 @@ private List<BicepStatement> CompileInternal(ProvisioningBuildOptions? options)
267267
statements.Add(new TargetScopeStatement(TargetScope));
268268
}
269269

270-
IEnumerable<Provisionable> resources = GetResources();
270+
IEnumerable<Provisionable> resources = GetProvisionableResources();
271271

272272
// Optionally customize the resources with the extensibility hooks on
273273
// ProvisioningBuildOptions.
274274
if (options is not null)
275275
{
276276
foreach (InfrastructureResolver resolver in options.InfrastructureResolvers)
277277
{
278-
resources = resolver.ResolveResources(options, resources);
278+
resources = resolver.ResolveResources(resources, options);
279279
}
280280
}
281281

sdk/provisioning/Azure.Provisioning/src/Primitives/IClientCreator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public TClient CreateClient(
7171
public class ClientCreatorOutputResolver : InfrastructureResolver
7272
{
7373
/// <inheritdoc/>
74-
public override IEnumerable<Provisionable> ResolveResources(ProvisioningBuildOptions options, IEnumerable<Provisionable> resources)
74+
public override IEnumerable<Provisionable> ResolveResources(IEnumerable<Provisionable> resources, ProvisioningBuildOptions options)
7575
{
7676
foreach (Provisionable resource in resources)
7777
{

sdk/provisioning/Azure.Provisioning/src/Primitives/InfrastructureResolver.cs

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,36 +15,47 @@ namespace Azure.Provisioning.Primitives;
1515
public abstract class InfrastructureResolver
1616
{
1717
/// <summary>
18-
/// Resolve any properties of the infrastructure.
18+
/// Try to resolve the values of any unset properties in the given construct.
1919
/// </summary>
20+
/// <param name="construct">The construct with properties to resolve.</param>
2021
/// <param name="options">The current build options.</param>
22+
public virtual void ResolveProperties(
23+
ProvisionableConstruct construct,
24+
ProvisioningBuildOptions options)
25+
{
26+
}
27+
28+
/// <summary>
29+
/// Resolve any properties of the infrastructure.
30+
/// </summary>
2131
/// <param name="infrastructure">The infrastructure to resolve properties of.</param>
32+
/// <param name="options">The current build options.</param>
2233
public virtual void ResolveInfrastructure(
23-
ProvisioningBuildOptions options,
24-
Infrastructure infrastructure)
34+
Infrastructure infrastructure,
35+
ProvisioningBuildOptions options)
2536
{
2637
}
2738

2839
/// <summary>
2940
/// Process the collection of resources in the infrastructure.
3041
/// </summary>
31-
/// <param name="options">The current build options.</param>
3242
/// <param name="resources">The existing resources to resolve.</param>
43+
/// <param name="options">The current build options.</param>
3344
public virtual IEnumerable<Provisionable> ResolveResources(
34-
ProvisioningBuildOptions options,
35-
IEnumerable<Provisionable> resources) =>
45+
IEnumerable<Provisionable> resources,
46+
ProvisioningBuildOptions options) =>
3647
resources;
3748

3849
/// <summary>
3950
/// Gets any nested infrastructure that should be composed separately.
4051
/// </summary>
41-
/// <param name="options">The current build options.</param>
4252
/// <param name="infrastructure">
4353
/// The infrastructure to inspect for any nested infrastructure.
4454
/// </param>
45-
/// <returns></returns>
46-
public IEnumerable<Infrastructure> GetNestedInfrastructure(
47-
ProvisioningBuildOptions options,
48-
Infrastructure infrastructure) =>
55+
/// <param name="options">The current build options.</param>
56+
/// <returns>Nested infrastructure.</returns>
57+
public virtual IEnumerable<Infrastructure> GetNestedInfrastructure(
58+
Infrastructure infrastructure,
59+
ProvisioningBuildOptions options) =>
4960
[];
5061
}

0 commit comments

Comments
 (0)