Skip to content

Commit f3f66fd

Browse files
Support supplemental parameters when used with .bicepparam parameter file (#22904)
* Add support for supplemental parameters * Add changelog entry * Use precise minimal version # * Update ChangeLog.md --------- Co-authored-by: Yabo Hu <[email protected]>
1 parent 4b479c0 commit f3f66fd

17 files changed

+3280
-13903
lines changed

src/Resources/ResourceManager/Implementation/CmdletBase/DeploymentCmdletBase.cs

Lines changed: 55 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,21 @@ protected override void OnBeginProcessing()
195195
base.OnBeginProcessing();
196196
}
197197

198+
private string GetParameterJsonFilePath()
199+
{
200+
if (BicepUtility.IsBicepparamFile(TemplateParameterFile))
201+
{
202+
return null;
203+
}
204+
205+
if (!string.IsNullOrEmpty(TemplateParameterUri))
206+
{
207+
return TemplateParameterUri;
208+
}
209+
210+
return this.ResolvePath(TemplateParameterFile);
211+
}
212+
198213
public new virtual object GetDynamicParameters()
199214
{
200215
if (BicepUtility.IsBicepFile(TemplateUri))
@@ -233,47 +248,26 @@ protected override void OnBeginProcessing()
233248
// Resolve the static parameter names for this cmdlet:
234249
string[] staticParameterNames = this.GetStaticParameterNames();
235250
var combinedParameterObject = GetCombinedTemplateParameterObject();
251+
var jsonParamFilePath = BicepUtility.IsBicepparamFile(TemplateParameterFile) ? null : this.ResolvePath(TemplateParameterFile);
236252

237253
if (TemplateObject != null && TemplateObject != templateObject)
238254
{
239255
templateObject = TemplateObject;
240-
if (string.IsNullOrEmpty(TemplateParameterUri))
241-
{
242-
dynamicParameters = TemplateUtility.GetTemplateParametersFromFile(
243-
TemplateObject,
244-
combinedParameterObject,
245-
this.ResolvePath(TemplateParameterFile),
246-
staticParameterNames);
247-
}
248-
else
249-
{
250-
dynamicParameters = TemplateUtility.GetTemplateParametersFromFile(
251-
TemplateObject,
252-
combinedParameterObject,
253-
TemplateParameterUri,
254-
staticParameterNames);
255-
}
256+
dynamicParameters = TemplateUtility.GetTemplateParametersFromFile(
257+
TemplateObject,
258+
combinedParameterObject,
259+
GetParameterJsonFilePath(),
260+
staticParameterNames);
256261
}
257262
else if (!string.IsNullOrEmpty(TemplateFile) &&
258263
!TemplateFile.Equals(templateFile, StringComparison.OrdinalIgnoreCase))
259264
{
260265
templateFile = TemplateFile;
261-
if (string.IsNullOrEmpty(TemplateParameterUri))
262-
{
263-
dynamicParameters = TemplateUtility.GetTemplateParametersFromFile(
264-
this.ResolvePath(TemplateFile),
265-
combinedParameterObject,
266-
this.ResolvePath(TemplateParameterFile),
267-
staticParameterNames);
268-
}
269-
else
270-
{
271-
dynamicParameters = TemplateUtility.GetTemplateParametersFromFile(
272-
this.ResolvePath(TemplateFile),
273-
combinedParameterObject,
274-
TemplateParameterUri,
275-
staticParameterNames);
276-
}
266+
dynamicParameters = TemplateUtility.GetTemplateParametersFromFile(
267+
this.ResolvePath(TemplateFile),
268+
combinedParameterObject,
269+
GetParameterJsonFilePath(),
270+
staticParameterNames);
277271
}
278272
else if (!string.IsNullOrEmpty(TemplateUri) &&
279273
!TemplateUri.Equals(templateUri, StringComparison.OrdinalIgnoreCase))
@@ -286,22 +280,12 @@ protected override void OnBeginProcessing()
286280
{
287281
templateUri = protectedTemplateUri;
288282
}
289-
if (string.IsNullOrEmpty(TemplateParameterUri))
290-
{
291-
dynamicParameters = TemplateUtility.GetTemplateParametersFromFile(
292-
templateUri,
293-
combinedParameterObject,
294-
this.ResolvePath(TemplateParameterFile),
295-
staticParameterNames);
296-
}
297-
else
298-
{
299-
dynamicParameters = TemplateUtility.GetTemplateParametersFromFile(
300-
templateUri,
301-
combinedParameterObject,
302-
TemplateParameterUri,
303-
staticParameterNames);
304-
}
283+
284+
dynamicParameters = TemplateUtility.GetTemplateParametersFromFile(
285+
templateUri,
286+
combinedParameterObject,
287+
GetParameterJsonFilePath(),
288+
staticParameterNames);
305289
}
306290
else if (!string.IsNullOrEmpty(TemplateSpecId) &&
307291
!TemplateSpecId.Equals(templateSpecId, StringComparison.OrdinalIgnoreCase))
@@ -346,22 +330,11 @@ protected override void OnBeginProcessing()
346330
throw;
347331
}
348332

349-
if (string.IsNullOrEmpty(TemplateParameterUri))
350-
{
351-
dynamicParameters = TemplateUtility.GetTemplateParametersFromFile(
352-
templateObj,
353-
combinedParameterObject,
354-
this.ResolvePath(TemplateParameterFile),
355-
staticParameterNames);
356-
}
357-
else
358-
{
359-
dynamicParameters = TemplateUtility.GetTemplateParametersFromFile(
360-
templateObj,
361-
combinedParameterObject,
362-
TemplateParameterUri,
363-
staticParameterNames);
364-
}
333+
dynamicParameters = TemplateUtility.GetTemplateParametersFromFile(
334+
templateObj,
335+
combinedParameterObject,
336+
GetParameterJsonFilePath(),
337+
staticParameterNames);
365338
}
366339
}
367340

@@ -393,9 +366,12 @@ protected Hashtable GetTemplateParameterObject()
393366
var parameterObject = new Hashtable();
394367
if (bicepparamFileParameters != null)
395368
{
369+
BuildAndUseBicepParameters();
396370
AddToParametersHashtable(bicepparamFileParameters, parameterObject);
371+
return parameterObject;
397372
}
398-
else if (TemplateParameterObject != null)
373+
374+
if (TemplateParameterObject != null)
399375
{
400376
foreach (var parameterKey in TemplateParameterObject.Keys)
401377
{
@@ -428,12 +404,11 @@ protected Hashtable GetTemplateParameterObject()
428404
WriteWarning("${templateParameterFilePath} does not exist");
429405
}
430406
}
431-
432-
// Load dynamic parameters
433-
IEnumerable<RuntimeDefinedParameter> parameters = PowerShellUtilities.GetUsedDynamicParameters(this.AsJobDynamicParameters, MyInvocation);
434-
if (parameters.Any())
407+
408+
var dynamicParams = GetDynamicParametersDictionary();
409+
foreach (var param in dynamicParams)
435410
{
436-
parameters.ForEach(dp => parameterObject[((ParameterAttribute)dp.Attributes[0]).HelpMessage] = new Hashtable { { "value", dp.Value } });
411+
parameterObject[param.Key] = new Hashtable { { "value", param.Value } };
437412
}
438413

439414
return parameterObject;
@@ -503,12 +478,18 @@ protected void BuildAndUseBicepTemplate()
503478
TemplateFile = BicepUtility.BuildFile(this.ResolvePath(TemplateFile), this.WriteVerbose, this.WriteWarning);
504479
}
505480

506-
protected void BuildAndUseBicepParameters()
481+
private IReadOnlyDictionary<string, object> GetDynamicParametersDictionary()
507482
{
508-
var output = BicepUtility.BuildParams(this.ResolvePath(TemplateParameterFile), this.WriteVerbose, this.WriteWarning);
483+
var dynamicParams = PowerShellUtilities.GetUsedDynamicParameters(this.AsJobDynamicParameters, MyInvocation);
484+
485+
return dynamicParams.ToDictionary(
486+
x => ((ParameterAttribute)x.Attributes[0]).HelpMessage,
487+
x => x.Value);
488+
}
509489

510-
TemplateParameterFile = null;
511-
TemplateParameterObject = null;
490+
protected void BuildAndUseBicepParameters()
491+
{
492+
var output = BicepUtility.BuildParams(this.ResolvePath(TemplateParameterFile), GetDynamicParametersDictionary(), this.WriteVerbose, this.WriteWarning);
512493
bicepparamFileParameters = GetParametersFromJson(output.parametersJson);
513494

514495
if (TemplateObject == null &&

src/Resources/ResourceManager/Implementation/CmdletBase/DeploymentStacksCmdletBase.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
using Microsoft.Azure.Commands.ResourceManager.Cmdlets.Utilities;
1818
using Microsoft.WindowsAzure.Commands.Utilities.Common;
1919
using System.Collections;
20+
using System.Collections.Generic;
2021
using System.IO;
2122
using System.Text;
2223

@@ -70,7 +71,7 @@ protected BicepBuildParamsStdout ResolveBicepParameterFile(string TemplateParame
7071
{
7172
if (BicepUtility.IsBicepparamFile(TemplateParameterFile))
7273
{
73-
return BicepUtility.BuildParams(this.ResolvePath(TemplateParameterFile), this.WriteVerbose, this.WriteWarning);
74+
return BicepUtility.BuildParams(this.ResolvePath(TemplateParameterFile), new Dictionary<string, object>(), this.WriteVerbose, this.WriteWarning);
7475
}
7576

7677
return null;

0 commit comments

Comments
 (0)