Как передать дополнительные параметры вместе с командлетом New-AzureRmResourceGroupDeployment

Я пишу сценарий PowerShell для создания виртуальной машины с помощью командлета New-AzureRmResourceGroupDeployment, как показано ниже.

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

Это используется для создания виртуальной машины. В parameters.json есть некоторые параметры, такие как virtualMachineName, networkInterfaceName и т. Д., Которые жестко запрограммированы.
Теперь я пытаюсь автоматизировать эти сценарии, то есть они запускаются самостоятельно из инструмента, когда когда-либо выполняется какое-либо условие.

Мое требование здесь заключается в том, что всякий раз, когда этот скрипт запускается, он должен увеличивать число в VMName. Предположим, что имя виртуальной машины теперь VMName1, оно должно быть VMName2 при следующем запуске сценария. Аналогично VMName3 при следующем запуске сценария. Поскольку параметр virtualMachineName жестко запрограммирован, сейчас этого не происходит. Могу ли я передать virtualMachineName в качестве параметра в самом скрипте, а не брать его из файла json.

Любое руководство высоко ценится. Спасибо!


person CrazyCoder    schedule 28.08.2018    source источник


Ответы (1)


Вы определенно можете это сделать, и, к счастью, есть несколько способов.

  1. # P2 #
    # P3 #
    # P4 #
    New-AzureRmResoruceGroupDeployment -Name VmDeployment `
      -TemplateFile C:\template\template.json `
      -TemplateParameterFile C:\template\parameters.json `
      -virtualMachineName VMName42
    
  2. Измените исходный parameters.json. Вы можете написать какой-нибудь PowerShell / Python / Favorite-scripting-language для синтаксического анализа paramters.json, найти параметр имени виртуальной машины, найти целочисленный суффикс, увеличить его и перезаписать файл новой версией. Это дает преимущество в том, что вам не нужно помнить о передаче встроенного параметра, и вам не придется где-либо отслеживать номер версии, поскольку он уже хранится в parameters.json. У этого есть один серьезный недостаток: он изменяет исходный JSON, что может быть опасно.

  3. Скопируйте parameters.json и измените временную копию. Вы можете написать сценарий для копирования parameters.json в другой временный файл JSON, а затем увеличить параметр имени виртуальной машины во время копирования, как в варианте 2. Передайте этот временный файл в New-AzureRmResourceGroupDeployment. Это дает то преимущество, что не изменяет исходный файл parameters.json, но требует, чтобы вы где-нибудь отслеживали номер версии (например, другой локальный файл, параметр командной строки, переменные среды и т. Д.).

Для простоты я бы порекомендовал вариант 1. Он уже работает «из коробки» и не требует никаких внешних скриптов.

person Adam    schedule 28.08.2018
comment
это не правильно. вы можете передавать встроенные параметры с помощью templateparameteruri, здесь просто нет intellisense. в целом файл временных параметров - лучший подход. встроенные параметры бесполезны, если вы делаете что-то серьезное - person 4c74356b41; 28.08.2018
comment
Я не согласен, и docs: когда вы указываете файл параметров в параметре TemplateParameterUri, все встроенные параметры игнорируются. - person Adam; 29.08.2018
comment
Я ценю ваше несогласие, но факты не заботятся о ваших чувствах (c). New-AzureRmResourceGroupDeployment -ResourceGroupName xxx -TemplateUri 'https://raw.githubusercontent. com/Azure/azure-quickstart-templates/master/101-vm-simple-windows/azuredeploy.json' -adminusername xxx -adminpassw ord ( ConvertTo-SecureString -Force -AsPlainText '!Qasde32') -dnsLabelPrefix xxx - person 4c74356b41; 29.08.2018
comment
@ 4c74356b41 пример в вашем комментарии не имеет TemplateParameterUri. - person Karlo Medallo; 06.12.2018
comment
а? какие? это не так что? @KarloMedallo - person 4c74356b41; 06.12.2018
comment
Итак ... ваш последующий комментарий не поддерживает ваше первоначальное утверждение. - person Karlo Medallo; 06.12.2018
comment
ты вообще это тестировал или что @ Адам - person 4c74356b41; 30.01.2019
comment
@KarloMedallo указывает, что ваш пример неприменим; он не включает параметр -TemplateParameterUri, поэтому встроенные параметры не игнорируются. Нет, не тестировал; бремя доказывания лежит не на мне, поскольку вы подали встречный иск, но не смогли фактически доказать свое требование. - person Adam; 11.02.2019