Можно ли вызывать функции шаблона ARM вне шаблона развертывания JSON?

Итак, у меня есть этот шаблон ARM для развертывания виртуальной машины в Azure. Чтобы создать уникальное, но детерминированное имя учетной записи хранения, я использую uniqueString(). Это выглядит примерно так:

"variables": {
    ...
    "vhdStorageName": "[concat('vhdstorage', uniqueString(resourceGroup().id))]",
    ...
}

Я хочу иметь возможность создать ту же строку вне шаблона развертывания, например, в сценарии PowerShell, или использовать ее в качестве входных данных в задача VSTS.

Есть ли способ сделать это?


person Assaf Stone    schedule 09.12.2016    source источник
comment
Ассаф, вы хотите иметь возможность генерировать ту же строку вне шаблона ARM? Или в вашем сценарии вы можете сгенерировать строку в своем шаблоне ARM, вернуть ее в качестве вывода, а затем использовать в сценарии PowerShell или задаче VSTS?   -  person Vivien Chevallier    schedule 09.12.2016
comment
Любой подойдет. Моя цель - использовать его в задаче vsts. Либо сгенерируйте его таким же образом, либо выведите его.   -  person Assaf Stone    schedule 10.12.2016


Ответы (1)


Ассаф,

Это невозможно, но если вы хотите использовать свою переменную в последующей задаче VSTS, вот шаги для ее достижения.

В конце основного файла шаблона ARM выведите вашу переменную следующим образом:

"outputs": {
  "vhdStorageName": {
    "type": "string",
    "value": "[variables('vhdStorageName')]"
  }
}

После задачи развертывания задайте переменную в задаче VSTS. контекст, выполнив этот скрипт PowerShell:

param ([string] $resourceGroupName)

#get the most recent deployment for the resource group
$lastRgDeployment = (Get-AzureRmResourceGroupDeployment -ResourceGroupName $resourceGroupName | Sort Timestamp -Descending | Select -First 1)

if(!$lastRgDeployment)
{
    throw "Resource Group Deployment could not be found for '$resourceGroupName'."
}

$deploymentOutputParameters = $lastRgDeployment.Outputs

if(!$deploymentOutputParameters)
{
    throw "No output parameters could be found for the last deployment of '$resourceGroupName'."
}

$deploymentOutputParameters.Keys | % { Write-Host ("##vso[task.setvariable variable="+$_+";]"+$deploymentOutputParameters[$_].Value) }

Для этого скрипта необходимо указать имя группы ресурсов Azure, в которой будет выполняться развертывание. Сценарий получает последнее развертывание в группе ресурсов и устанавливает каждый вывод как переменную в контексте задачи VSTS.


Получите доступ к своей переменной и используйте ее как параметр, как и любую другую переменную VSTS:

-myparameter $(vhdStorageName)
person Vivien Chevallier    schedule 11.12.2016