16
16
using Microsoft . Azure . Commands . Common . Authentication . Abstractions ;
17
17
using Microsoft . Azure . Commands . ResourceManager . Cmdlets . Components ;
18
18
using Microsoft . Azure . Commands . ResourceManager . Cmdlets . Utilities ;
19
+ using Microsoft . Azure . Commands . ResourceManager . Cmdlets . SdkModels ;
19
20
using Microsoft . Azure . Management . Resources ;
20
21
using Microsoft . Azure . Management . Resources . Models ;
21
22
using Microsoft . WindowsAzure . Commands . Utilities . Common ;
@@ -72,6 +73,8 @@ public abstract class DeploymentCmdletBase : ResourceManagerCmdletBase
72
73
73
74
protected string protectedTemplateUri ;
74
75
76
+ protected IReadOnlyDictionary < string , TemplateFileParameterV1 > bicepparamFileParameters ;
77
+
75
78
private ITemplateSpecsClient templateSpecsClient ;
76
79
77
80
protected DeploymentCmdletBase ( )
@@ -229,6 +232,7 @@ protected override void OnBeginProcessing()
229
232
{
230
233
// Resolve the static parameter names for this cmdlet:
231
234
string [ ] staticParameterNames = this . GetStaticParameterNames ( ) ;
235
+ var combinedParameterObject = GetCombinedTemplateParameterObject ( ) ;
232
236
233
237
if ( TemplateObject != null && TemplateObject != templateObject )
234
238
{
@@ -237,15 +241,15 @@ protected override void OnBeginProcessing()
237
241
{
238
242
dynamicParameters = TemplateUtility . GetTemplateParametersFromFile (
239
243
TemplateObject ,
240
- TemplateParameterObject ,
244
+ combinedParameterObject ,
241
245
this . ResolvePath ( TemplateParameterFile ) ,
242
246
staticParameterNames ) ;
243
247
}
244
248
else
245
249
{
246
250
dynamicParameters = TemplateUtility . GetTemplateParametersFromFile (
247
251
TemplateObject ,
248
- TemplateParameterObject ,
252
+ combinedParameterObject ,
249
253
TemplateParameterUri ,
250
254
staticParameterNames ) ;
251
255
}
@@ -258,15 +262,15 @@ protected override void OnBeginProcessing()
258
262
{
259
263
dynamicParameters = TemplateUtility . GetTemplateParametersFromFile (
260
264
this . ResolvePath ( TemplateFile ) ,
261
- TemplateParameterObject ,
265
+ combinedParameterObject ,
262
266
this . ResolvePath ( TemplateParameterFile ) ,
263
267
staticParameterNames ) ;
264
268
}
265
269
else
266
270
{
267
271
dynamicParameters = TemplateUtility . GetTemplateParametersFromFile (
268
272
this . ResolvePath ( TemplateFile ) ,
269
- TemplateParameterObject ,
273
+ combinedParameterObject ,
270
274
TemplateParameterUri ,
271
275
staticParameterNames ) ;
272
276
}
@@ -286,15 +290,15 @@ protected override void OnBeginProcessing()
286
290
{
287
291
dynamicParameters = TemplateUtility . GetTemplateParametersFromFile (
288
292
templateUri ,
289
- TemplateParameterObject ,
293
+ combinedParameterObject ,
290
294
this . ResolvePath ( TemplateParameterFile ) ,
291
295
staticParameterNames ) ;
292
296
}
293
297
else
294
298
{
295
299
dynamicParameters = TemplateUtility . GetTemplateParametersFromFile (
296
300
templateUri ,
297
- TemplateParameterObject ,
301
+ combinedParameterObject ,
298
302
TemplateParameterUri ,
299
303
staticParameterNames ) ;
300
304
}
@@ -346,15 +350,15 @@ protected override void OnBeginProcessing()
346
350
{
347
351
dynamicParameters = TemplateUtility . GetTemplateParametersFromFile (
348
352
templateObj ,
349
- TemplateParameterObject ,
353
+ combinedParameterObject ,
350
354
this . ResolvePath ( TemplateParameterFile ) ,
351
355
staticParameterNames ) ;
352
356
}
353
357
else
354
358
{
355
359
dynamicParameters = TemplateUtility . GetTemplateParametersFromFile (
356
360
templateObj ,
357
- TemplateParameterObject ,
361
+ combinedParameterObject ,
358
362
TemplateParameterUri ,
359
363
staticParameterNames ) ;
360
364
}
@@ -366,23 +370,44 @@ protected override void OnBeginProcessing()
366
370
return dynamicParameters ;
367
371
}
368
372
369
- protected Hashtable GetTemplateParameterObject ( Hashtable templateParameterObject )
373
+ private static void AddToParametersHashtable ( IReadOnlyDictionary < string , TemplateFileParameterV1 > parameters , Hashtable parameterObject )
374
+ {
375
+ parameters . ForEach ( dp =>
376
+ {
377
+ var parameter = new Hashtable ( ) ;
378
+ if ( dp . Value . Value != null )
379
+ {
380
+ parameter . Add ( "value" , dp . Value . Value ) ;
381
+ }
382
+ if ( dp . Value . Reference != null )
383
+ {
384
+ parameter . Add ( "reference" , dp . Value . Reference ) ;
385
+ }
386
+
387
+ parameterObject [ dp . Key ] = parameter ;
388
+ } ) ;
389
+ }
390
+
391
+ protected Hashtable GetTemplateParameterObject ( )
370
392
{
371
- // NOTE(jogao): create a new Hashtable so that user can re-use the templateParameterObject.
372
393
var parameterObject = new Hashtable ( ) ;
373
- if ( templateParameterObject != null )
394
+ if ( bicepparamFileParameters != null )
374
395
{
375
- foreach ( var parameterKey in templateParameterObject . Keys )
396
+ AddToParametersHashtable ( bicepparamFileParameters , parameterObject ) ;
397
+ }
398
+ else if ( TemplateParameterObject != null )
399
+ {
400
+ foreach ( var parameterKey in TemplateParameterObject . Keys )
376
401
{
377
402
// Let default behavior of a value parameter if not a KeyVault reference Hashtable
378
- var hashtableParameter = templateParameterObject [ parameterKey ] as Hashtable ;
403
+ var hashtableParameter = TemplateParameterObject [ parameterKey ] as Hashtable ;
379
404
if ( hashtableParameter != null && hashtableParameter . ContainsKey ( "reference" ) )
380
405
{
381
- parameterObject [ parameterKey ] = templateParameterObject [ parameterKey ] ;
406
+ parameterObject [ parameterKey ] = TemplateParameterObject [ parameterKey ] ;
382
407
}
383
408
else
384
409
{
385
- parameterObject [ parameterKey ] = new Hashtable { { "value" , templateParameterObject [ parameterKey ] } } ;
410
+ parameterObject [ parameterKey ] = new Hashtable { { "value" , TemplateParameterObject [ parameterKey ] } } ;
386
411
}
387
412
}
388
413
}
@@ -395,21 +420,7 @@ protected Hashtable GetTemplateParameterObject(Hashtable templateParameterObject
395
420
if ( FileUtilities . DataStore . FileExists ( templateParameterFilePath ) )
396
421
{
397
422
var parametersFromFile = TemplateUtility . ParseTemplateParameterFileContents ( templateParameterFilePath ) ;
398
- parametersFromFile . ForEach ( dp =>
399
- {
400
- var parameter = new Hashtable ( ) ;
401
- if ( dp . Value . Value != null )
402
- {
403
- parameter . Add ( "value" , dp . Value . Value ) ;
404
- }
405
- if ( dp . Value . Reference != null )
406
- {
407
- parameter . Add ( "reference" , dp . Value . Reference ) ;
408
- }
409
-
410
- parameterObject [ dp . Key ] = parameter ;
411
- } ) ;
412
-
423
+ AddToParametersHashtable ( parametersFromFile , parameterObject ) ;
413
424
}
414
425
else
415
426
{
@@ -497,7 +508,8 @@ protected void BuildAndUseBicepParameters()
497
508
var output = BicepUtility . BuildParams ( this . ResolvePath ( TemplateParameterFile ) , this . WriteVerbose , this . WriteWarning ) ;
498
509
499
510
TemplateParameterFile = null ;
500
- TemplateParameterObject = GetParametersFromJson ( output . parametersJson ) ;
511
+ TemplateParameterObject = null ;
512
+ bicepparamFileParameters = GetParametersFromJson ( output . parametersJson ) ;
501
513
502
514
if ( TemplateObject == null &&
503
515
string . IsNullOrEmpty ( TemplateFile ) &&
@@ -523,34 +535,40 @@ protected void BuildAndUseBicepParameters()
523
535
}
524
536
}
525
537
526
- private Hashtable GetParametersFromJsonStream ( Stream parametersJson )
538
+ private Hashtable GetCombinedTemplateParameterObject ( )
527
539
{
528
- var parameters = new Hashtable ( ) ;
529
- var parametersFromJson = TemplateUtility . ParseTemplateParameterJson ( parametersJson ) ;
530
-
531
- parametersFromJson . ForEach ( dp =>
540
+ if ( bicepparamFileParameters != null )
532
541
{
533
- var parameter = new Hashtable ( ) ;
534
- if ( dp . Value . Value != null )
535
- {
536
- parameter . Add ( "value" , dp . Value . Value ) ;
537
- }
538
- if ( dp . Value . Reference != null )
542
+ // The TemplateParameterObject property expects parameters to be in a different format to the parameters file JSON.
543
+ // Here we convert from { "foo": { "value": "blah" } } to { "foo": "blah" }
544
+ // with the exception of KV secret references which are left as { "foo": { "reference": ... } }
545
+ var parameters = new Hashtable ( ) ;
546
+ foreach ( var paramName in bicepparamFileParameters . Keys )
539
547
{
540
- parameter . Add ( "reference" , dp . Value . Reference ) ;
548
+ var param = bicepparamFileParameters [ paramName ] ;
549
+ if ( param . Value != null )
550
+ {
551
+ parameters [ paramName ] = param . Value ;
552
+ }
553
+ if ( param . Reference != null )
554
+ {
555
+ var parameter = new Hashtable ( ) ;
556
+ parameter . Add ( "reference" , param . Reference ) ;
557
+ parameters [ paramName ] = parameter ;
558
+ }
541
559
}
542
560
543
- parameters [ dp . Key ] = parameter ;
544
- } ) ;
561
+ return parameters ;
562
+ }
545
563
546
- return parameters ;
564
+ return TemplateParameterObject ;
547
565
}
548
566
549
- private Hashtable GetParametersFromJson ( string parametersJson )
567
+ private IReadOnlyDictionary < string , TemplateFileParameterV1 > GetParametersFromJson ( string parametersJson )
550
568
{
551
- using ( var stream = new MemoryStream ( Encoding . UTF8 . GetBytes ( parametersJson ) ) )
569
+ using ( var reader = new StringReader ( parametersJson ) )
552
570
{
553
- return GetParametersFromJsonStream ( stream ) ;
571
+ return TemplateUtility . ParseTemplateParameterJson ( reader ) ;
554
572
}
555
573
}
556
574
}
0 commit comments