Skip to content

Commit d3c8f93

Browse files
committed
New-AzureResourceGroupDeployment with KeyVault reference parameter
1 parent 954ac93 commit d3c8f93

File tree

7 files changed

+65
-4
lines changed

7 files changed

+65
-4
lines changed

src/ResourceManager/Resources/Commands.Resources.Test/Commands.Resources.Test.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,9 @@
245245
</ProjectReference>
246246
</ItemGroup>
247247
<ItemGroup>
248+
<None Include="keyVaultTemplateParams.json">
249+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
250+
</None>
248251
<None Include="SamplePolicyDefinition.json">
249252
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
250253
</None>

src/ResourceManager/Resources/Commands.Resources.Test/ScenarioTests/DeploymentTests.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,11 @@ public void TestNewDeploymentFromTemplateFile()
2929
{
3030
ResourcesController.NewInstance.RunPsTest("Test-NewDeploymentFromTemplateFile");
3131
}
32+
33+
[Fact]
34+
public void TestNewDeploymentWithKeyVaultReference()
35+
{
36+
ResourcesController.NewInstance.RunPsTest("Test-NewDeploymentWithKeyVaultReference");
37+
}
3238
}
3339
}

src/ResourceManager/Resources/Commands.Resources.Test/ScenarioTests/DeploymentTests.ps1

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,3 +67,48 @@ function Test-NewDeploymentFromTemplateFile
6767
Clean-ResourceGroup $rgname
6868
}
6969
}
70+
71+
<#
72+
.SYNOPSIS
73+
Tests deployment via template file and parameter object.
74+
#>
75+
function Test-NewDeploymentWithKeyVaultReference
76+
{
77+
# Setup
78+
$rgname = Get-ResourceGroupName
79+
$rname = Get-ResourceName
80+
$keyVaultResourceName = Get-ResourceName
81+
$secretName = Get-ResourceName
82+
$rglocation = Get-ProviderLocation ResourceManagement
83+
$location = Get-ProviderLocation "Microsoft.Web/sites"
84+
$hostplanName = "xDeploymentTestHost26668"
85+
86+
try
87+
{
88+
# Test
89+
New-AzureRmResourceGroup -Name $rgname -Location $rglocation
90+
91+
$keyVault = $keyVault = new-azurermkeyvault -VaultName $keyVaultResourceName -ResourceGroupName $rgname -Location $location -EnabledForTemplateDeployment
92+
Set-AzureKeyVaultSecret -VaultName $keyVaultResourceName -SecretName $secretName -SecretValue $hostplanName
93+
$content = (Get-Content keyVaultTemplateParams.json) -join '' | ConvertFrom-Json
94+
$content.hostingPlanName.reference.KeyVault.id = $keyVault.resourceid
95+
$content.hostingPlanName.reference.SecretName = $secretName
96+
$content | ConvertTo-Json -depth 999 | Out-File keyVaultTemplateParams.json
97+
98+
$deployment = New-AzureRmResourceGroupDeployment -Name $rname -ResourceGroupName $rgname -TemplateFile sampleTemplate.json -TemplateParameterFile keyVaultTemplateParams.json
99+
100+
# Assert
101+
Assert-AreEqual Succeeded $deployment.ProvisioningState
102+
103+
$subId = (Get-AzureRmContext).Subscription.SubscriptionId
104+
$deploymentId = "/subscriptions/$subId/resourcegroups/$rgname/providers/Microsoft.Resources/deployments/$rname"
105+
$getById = Get-AzureRmResourceGroupDeployment -Id $deploymentId
106+
Assert-AreEqual $getById.DeploymentName $deployment.DeploymentName
107+
}
108+
109+
finally
110+
{
111+
# Cleanup
112+
Clean-ResourceGroup $rgname
113+
}
114+
}
Binary file not shown.

src/ResourceManager/Resources/Commands.Resources/Models.ResourceGroups/ResourceClient.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ private string GetDeploymentParameters(Hashtable templateParameterObject)
107107
{
108108
if (templateParameterObject != null)
109109
{
110-
return SerializeHashtable(templateParameterObject, addValueLayer: true);
110+
return SerializeHashtable(templateParameterObject, addValueLayer: false);
111111
}
112112
else
113113
{

src/ResourceManager/Resources/Commands.Resources/Models.ResourceGroups/ResourceWithParameterBaseCmdlet.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ public abstract class ResourceWithParameterBaseCmdlet : ResourcesBaseCmdlet
3939
protected const string ParameterlessTemplateFileParameterSetName = "Deployment via template file without parameters";
4040
protected const string ParameterlessGalleryTemplateParameterSetName = "Deployment via Gallery without parameters";
4141
protected const string ParameterlessTemplateUriParameterSetName = "Deployment via template uri without parameters";
42-
42+
4343
protected RuntimeDefinedParameterDictionary dynamicParameters;
4444

4545
private string templateFile;
@@ -144,20 +144,24 @@ public object GetDynamicParameters()
144144
protected Hashtable GetTemplateParameterObject(Hashtable templateParameterObject)
145145
{
146146
templateParameterObject = templateParameterObject ?? new Hashtable();
147+
foreach (var parameterKey in templateParameterObject.Keys)
148+
{
149+
templateParameterObject[parameterKey] = new Hashtable { { "value", templateParameterObject[parameterKey] } };
150+
}
147151

148152
// Load parameters from the file
149153
string templateParameterFilePath = this.TryResolvePath(TemplateParameterFile);
150154
if (templateParameterFilePath != null && FileUtilities.DataStore.FileExists(templateParameterFilePath))
151155
{
152156
var parametersFromFile = GalleryTemplatesClient.ParseTemplateParameterFileContents(templateParameterFilePath);
153-
parametersFromFile.ForEach(dp => templateParameterObject[dp.Key] = dp.Value.Value);
157+
parametersFromFile.ForEach(dp => templateParameterObject[dp.Key] = new Hashtable { { "value", dp.Value.Value }, { "reference", dp.Value.Reference } });
154158
}
155159

156160
// Load dynamic parameters
157161
IEnumerable<RuntimeDefinedParameter> parameters = PowerShellUtilities.GetUsedDynamicParameters(dynamicParameters, MyInvocation);
158162
if (parameters.Any())
159163
{
160-
parameters.ForEach(dp => templateParameterObject[((ParameterAttribute)dp.Attributes[0]).HelpMessage] = dp.Value);
164+
parameters.ForEach(dp => templateParameterObject[((ParameterAttribute)dp.Attributes[0]).HelpMessage] = new Hashtable { { "value", dp.Value } });
161165
}
162166

163167
return templateParameterObject;

src/ResourceManager/Resources/Commands.Resources/Models.ResourceGroups/TemplateFileParameterV1.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ public class TemplateFileParameterV1
2525
[JsonProperty("value")]
2626
public object Value { get; set; }
2727

28+
[JsonProperty("reference")]
29+
public object Reference { get; set; }
30+
2831
[JsonProperty("defaultValue")]
2932
public object DefaultValue { get; set; }
3033

0 commit comments

Comments
 (0)