我正在编写一个Powershell脚本,以使用New-AzureRmResourceGroupDeployment cmdlet创建VM,如下所示。
New-AzureRmResourceGroupDeployment -Name VmDeployment `
-TemplateFile C:\template\template.json `
-TemplateParameterFile C:\template\parameters.json
这用于创建VM。在parameters.json
中,有一些参数,例如virtualMachineName
,networkInterfaceName
等已被硬编码。
现在,我正在尝试使这些脚本自动化,即在满足某些条件时,它们可以通过工具自行运行。
我在这里的要求是,无论何时运行此脚本,都必须增加VMName中的数字。假设虚拟机名称现在为VMName1
,下一次运行脚本时必须为VMName2
。下一次运行脚本时,类似VMName3
。由于virtualMachineName
参数是硬编码的,因此现在没有发生。无论如何,我可以在脚本本身中将virtualMachineName
作为参数传递,而不是从json文件中获取。
高度赞赏任何指导。谢谢!
答案 0 :(得分:4)
您绝对可以做到这一点,幸运的是,还有几种方法。
传递内联参数。它在Azure PowerShell docs for Templates中表示可以将内联参数与本地参数文件一起使用,并且内联参数优先。相关段落:
您可以在同一部署操作中使用内联参数和本地参数文件。例如,您可以在本地参数文件中指定一些值,并在部署期间内联添加其他值。如果您同时在本地参数文件和内联中为参数提供值,则内联值优先。
这很有价值,因为它为您提供了对VM Name参数的显式控制,但是由调用者(在本例中为您)传递内联参数。请注意,这仅适用于 local 参数文件,不适用于远程文件(即-TemplateParameterFile
而非-TemplateParameterUri
)。结果命令如下所示:
New-AzureRmResoruceGroupDeployment -Name VmDeployment `
-TemplateFile C:\template\template.json `
-TemplateParameterFile C:\template\parameters.json `
-virtualMachineName VMName42
修改原始的 parameters.json 。您可以编写一些PowerShell / Python / Favorite-scripting-language来解析 paramters.json ,找到VM Name参数,找到整数后缀,对其进行递增,然后用新版本覆盖文件。这样的好处是不必记住传递内联参数,而且您不必在任何地方跟踪版本号,因为它已经存储在 parameters.json 中。这有一个主要缺点:它会修改原始的JSON,这很危险。
复制 parameters.json 并修改临时副本。您可以编写脚本以将 parameters.json 复制到另一个临时JSON文件,然后在复制期间像选项2中那样增加VM Name参数。将该临时文件传递到New-AzureRmResourceGroupDeployment
。这样做的好处是不修改原始的 parameters.json 文件,但需要您在某处跟踪版本号(例如,另一个本地文件,命令行参数,环境变量等)。
为简单起见,我建议使用选项1。它已经开箱即用,不需要任何外部脚本。
答案 1 :(得分:0)
我刚刚对其进行了测试,它的工作原理就是这样,现有答案是错误的
参数:
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"test": {
"value": "1"
}
}
}
模板:
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"test": {
"type": "string"
},
"testo": {
"type": "string"
}
},
"resources": []
}
powershell:
New-AzResourceGroupDeployment -ResourceGroupName NetworkWatcherRG -TemplateUri 'https://paste.ee/d/S2wJm/0' -TemplateParameterUri 'https://paste.ee/d/8rW6k/0'
它将提示您输入缺少的参数。如果使用TemplateParameterFile