Entonces, tengo esta plantilla ARM para implementar una máquina virtual en Azure. Para crear un nombre de cuenta de almacenamiento único pero determinista, utilizo uniqueString (). Se parece a algo como:

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

Quiero poder crear esa misma cadena fuera de la plantilla de implementación, por ejemplo, en un script de PowerShell, o usarla como entrada en un tarea VSTS.

¿Hay alguna manera de hacer esto?

1
Assaf Stone 9 dic. 2016 a las 19:33
Assaf, ¿quieres poder generar la misma cadena fuera de una plantilla ARM? O en su escenario, ¿puede generar la cadena en su plantilla ARM, devolverla como salida y luego usarla en un script de PowerShell o tarea VSTS?
 – 
Vivien Chevallier
9 dic. 2016 a las 20:30
Cualquiera de los dos servirá. Mi objetivo es usarlo en una tarea de vsts. Generelo de la misma manera o déle salida.
 – 
Assaf Stone
10 dic. 2016 a las 21:08

1 respuesta

La mejor respuesta

Assaf,

Esto no es posible, pero suponiendo que desee utilizar su variable en una tarea VSTS posterior, estos son los pasos para lograrlo.

En su archivo de plantilla ARM principal, al final, generar su variable de la siguiente manera:

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

Después de su tarea de implementación, configure su variable en la tarea VSTS contexto ejecutando este script de 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) }

Para este script, debe proporcionar el nombre del grupo de recursos de Azure donde se realizará la implementación. El script obtiene la última implementación en el grupo de recursos y establece cada salida como una variable en el contexto de la tarea VSTS.


Acceda a su variable y utilícela como parámetro como con cualquier otra variable VSTS:

-myparameter $(vhdStorageName)
1
Vivien Chevallier 11 dic. 2016 a las 03:00