2016-12-09 98 views
1

所以,我已經有了用於將虛擬機部署到Azure的ARM模板。爲了創建一個唯一但確定的存儲帳戶名稱,我使用uniqueString()函數。它看起來是這樣的:我可以在JSON部署模板之外調用ARM模板函數嗎?

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

我希望能夠創建部署模板之外的相同的字符串,例如在PowerShell腳本,或使用它作爲一個VSTS task的輸入。

有沒有什麼辦法可以做到這一點?

+0

阿薩夫,你要能夠產生一個ARM模板之外相同的字符串? 或 在您的方案中,您是否可以在ARM模板中生成字符串,將其作爲輸出返回,然後在PowerShell腳本或VSTS任務中使用它? –

+0

要麼。我的目標是在vsts任務中使用它。以相同的方式生成它或輸出它。 –

回答

1

阿薩夫,

這是不可能的,但假設你想用你的變量在隨後的VSTS的任務,這裏有實現它的步驟。

在你的主臂的模板文件,在年底,output您變量就像下面:

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

部署任務後,通過執行這個PowerShell腳本設置你的變量在VSTS task方面:

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) 
相關問題