2016-12-09 3 views
1

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

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

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

Есть ли способ для этого?

+0

Ассаф, вы хотите, чтобы иметь возможность генерировать ту же строку за пределами шаблона ARM? Или В вашем сценарии вы можете сгенерировать строку в шаблоне ARM, вернуть ее в качестве вывода, а затем использовать ее в скрипте PowerShell или задаче VSTS? –

+0

Либо сделают. Моя цель - использовать его в задаче vsts. Либо сгенерируйте его таким же образом, либо выведите его. –

ответ

1

Ассаф,

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

В основном файле шаблон ARM, в конце концов, output переменных, как следующее:

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

После вашей задачи развертывания, установите переменный в VSTS task контексте выполнения этого 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) 
Смежные вопросы