【问题标题】:How to pass extra parameters along with New-AzureRmResourceGroupDeployment cmdlet如何与 New-AzureRmResourceGroupDeployment cmdlet 一起传递额外参数
【发布时间】:2018-08-28 16:37:44
【问题描述】:

我正在编写一个 powershell 脚本来使用 New-AzureRmResourceGroupDeployment cmdlet 创建 VM,如下所示。

New-AzureRmResourceGroupDeployment -Name VmDeployment  `
  -TemplateFile C:\template\template.json `
  -TemplateParameterFile C:\template\parameters.json

这用于创建虚拟机。在 parameters.json 中,有一些参数,如 virtualMachineNamenetworkInterfaceName 等是硬编码的。
现在我正在尝试自动化这些脚本,即当满足某些条件时,它们可以通过工具自行运行。

我的要求是,每当这个脚本运行时,它必须增加 VMName 中的数字。假设 VM 名称现在是 VMName1,下次运行脚本时它必须是 VMName2。同样VMName3 脚​​本下次运行时。由于virtualMachineName 参数是硬编码的,因此现在不会发生这种情况。无论如何我可以将virtualMachineName 作为脚本本身的参数传递,而不是从json文件中获取它。

非常感谢任何指导。谢谢!

【问题讨论】:

    标签: azure azure-virtual-machine azure-resource-group azure-template


    【解决方案1】:

    你绝对可以做到这一点,幸运的是也有几种方法。

    1. 传递内联参数。它在Azure PowerShell docs for Templates 中说您可以将内联参数与本地参数文件一起使用,并且内联参数优先。相关段落:

    您可以在同一部署操作中使用内联参数和本地参数文件。例如,您可以在本地参数文件中指定一些值,并在部署期间内联添加其他值。如果您同时在本地参数文件和内联中为参数提供值,则内联值优先。

    这很有价值,因为它为您提供了对 VM 名称参数的显式控制,但由调用者(在本例中为您)来传递内联参数。请注意,这只适用于本地参数文件,不适用于远程文件(即-TemplateParameterFile 而不是-TemplateParameterUri)。生成的命令如下所示:

        New-AzureRmResourceGroupDeployment -Name VmDeployment `
          -TemplateFile C:\template\template.json `
          -TemplateParameterFile C:\template\parameters.json `
          -virtualMachineName VMName42
    
    1. 修改原parameters.json。您可以编写一些 PowerShell/Python/Favorite-scripting-language 来解析 paramters.json,找到 VM Name 参数,找到整数后缀,将其递增,然后用新版本覆盖文件。这样做的好处是不必记住传递内联参数,并且您不必在任何地方跟踪版本号,因为它已经存储在 parameters.json 中。这有一个主要缺点:它修改了可能很危险的原始 JSON。

    2. 复制parameters.json并修改临时副本。您可以编写脚本将 parameters.json 复制到另一个临时 JSON 文件,然后在复制期间增加 VM Name 参数,就像在选项 2 中一样。将此临时文件传递给 New-AzureRmResourceGroupDeployment。这样做的好处是不修改原始 parameters.json 文件,但需要您在某处跟踪版本号(例如,另一个本地文件、命令行参数、环境变量等)。

    为简单起见,我推荐选项 1。它已经开箱即用,不需要任何外部脚本。

    【讨论】:

    • 这是错误的。您可以使用templateparameteruri 传递内联参数,只是没有智能感知。总体而言,临时参数文件是最好的方法。如果你在做任何严肃的事情,内联参数是没用的
    • 我不同意,docs 也不同意:“当您在 TemplateParameterUri 参数中指定参数文件时,所有内联参数都将被忽略。”
    • @4c74356b41 您评论中的示例没有 TemplateParameterUri 。
    • 所以...您的后续评论对您最初的索赔没有帮助。
    • @KarloMedallo 指出您的示例不适用;它不包括-TemplateParameterUri 参数,因此不会忽略内联参数。不,我没有测试它;自从您提出反诉但未能实际证明您的主张后,举证责任不在我身上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 2022-07-06
    • 2018-01-15
    • 1970-01-01
    相关资源
    最近更新 更多