Как передать дополнительные параметры вместе с командлетом New-AzureRmResourceGroupDeployment - PullRequest
0 голосов
/ 28 августа 2018

Я пишу сценарий 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.

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

1 Ответ

0 голосов
/ 28 августа 2018

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

  1. Передать встроенные параметры . В документации Azure PowerShell для шаблонов говорится, что вы можете использовать встроенные параметры с локальным файлом параметров, а встроенные параметры имеют приоритет. Соответствующий абзац:

    Вы можете использовать встроенные параметры и локальный файл параметров в одной и той же операции развертывания. Например, вы можете указать некоторые значения в локальном файле параметров и добавить другие значения в процессе развертывания. Если вы предоставляете значения для параметра как в локальном файле параметров, так и во встроенном, то встроенное значение имеет приоритет.

    Это ценно, потому что предоставляет вам явный контроль над параметром имени виртуальной машины, но только вызывающий (в данном случае вы) должен передать встроенный параметр. Обратите внимание, что это работает только с локальными файлами параметров, а не с удаленными файлами (т.е. -TemplateParameterFile, а не -TemplateParameterUri). Результирующая команда будет выглядеть примерно так:

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...