如何使用Powershell更新Azure资源模板部署的参数



我已经创建了一个模板,用于在Azure中创建新的SQL资源。

从中,我得到了两个标准文件:

  • template.json
  • parameters.json

我现在想使用Powershell创建一个部署。

我可以有不同的parameters.json文件,其中直接写入密码(这很有效(,但我想将密码排除在源代码管理之外。但是,如果不更新文件,我无法找到更新参数的方法。

以下是我的代码(使用Test-AzResourceGroupDeployment,目的是在新的AzResourceGroupDeployment工作后转到它(:

$templatePath = "./sqlserver/template/template.json"
$paramsPath = "./sqlserver/template/parameters.json"
$administratorLogin = "adminUserName"
$administratorLoginPassword = "ARealPasswordHere!!!"
$databaseName = "MyDatabaseName"
$serverName = "serverforthedatabase"

$paramsFileText = [System.IO.File]::ReadAllText($paramsPath)
$params = ConvertFrom-Json $paramsFileText -AsHashtable
$params.parameters.administratorLogin = $administratorLogin
$params.parameters.administratorLoginPassword = ConvertTo-SecureString $administratorLoginPassword -AsPlainText -Force 
$params.parameters.databaseName = $databaseName
$params.parameters.serverName = $serverName
# Run New-AzResourceGroupDeployment when working
Test-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName `
-TemplateFile $templatePath `
-TemplateParameterObject $params

如果我运行上面的程序,我会得到params文件中每个参数的提示。

如果我将-TemplateParameterObject $params更改为-TemplateParameterObject $params.parameters,则会得到'Template parameter JToken type is not valid错误。

如果我尝试制作一个TemplateObject,使两个输入都是对象,这也会失败。

Test-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName `
-TemplateObject $templateObj `
-TemplateParameterObject $params.parameters

请问应该怎么做?

已经设法找到了答案。

作为脚本的一部分,您必须输入要覆盖的参数。已经用New-AzResourceGroupDeployment进行了测试,一切都很好。

这是我的工作代码:

$templatePath = "./sqlserver/template/template.json"
$paramsPath = "./sqlserver/template/parameters.json"
$administratorLogin = "adminUserName"
$administratorLoginPassword = ConvertTo-SecureString "ARealPasswordHere!!!" -AsPlainText -Force
$databaseName = "MyDatabaseName"
$serverName = "serverforthedatabase"

Test-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName `
-TemplateFile $templatePath `
-TemplateParameterFile $paramsPath `
-administratorLogin $administratorLogin `
-administratorLoginPassword $administratorLoginPassword `
-databaseName $databaseName `
-serverName $serverName
and just for added clarity for searchers, here is part of the `parameters.json` file, so you can see some of the parameters I'm overriding here.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"administratorLogin": {
"value": ""
},
"administratorLoginPassword": {
"value": ""
},
"collation": {
"value": "SQL_Latin1_General_CP1_CI_AS"
},
"databaseName": {
"value": ""
},
"tier": {
"value": "Basic"
},
...

最新更新