Estoy intentando automatizar la creación de algunos recursos en Azure utilizando las bibliotecas .NET de Azure Resource Manager. Puedo crear el grupo de recursos y he colocado mi plantilla ARM en una ubicación accesible en el almacenamiento de blobs; sin embargo, me gustaría poder pasar los parámetros a la solicitud en el código en lugar de almacenar un archivo JSON en algún lugar del almacenamiento.

Parece que esto debería ser posible. Por ejemplo, en el objeto Deployment.Properties, tiene Parameters y ParametersLink, pero no puedo encontrar ninguna documentación sobre su uso y lo siguiente arroja una excepción que dice que no se especificó ningún valor para los parámetros en la plantilla:

deployment.Properties = new DeploymentProperties
{
    Mode = DeploymentMode.Incremental,
    TemplateLink = new TemplateLink("link-to-my-template-json-in-storage"),
    Parameters = new
    {
        diskStorageAccountName = "value",
        imageVhdPath = "value",
        virtualNetworkName = "value",
        virtualNetworkSubnetName = "value",
        vmName = value,
        vmAdminUserName = "value",
        vmAdminPassword = "value"
    }
};

Esto produce el siguiente error:

Se produjo una excepción no controlada del tipo 'Microsoft.Rest.Azure.CloudException' en mscorlib.dll

Información adicional: Error en la validación de la plantilla de implementación: 'No se proporciona el valor para el parámetro de plantilla' diskStorageAccountName 'en la línea' 5 'y la columna' 32 '. Consulte http://aka.ms/arm-deploy/#parameter-file para obtener detalles de uso. '.

¿Estoy haciendo algo mal? DeploymentProperties.Parameters es solo un Object, así que asumí que se serializaría y transmitiría correctamente. ¿Es esta suposición incorrecta?

Edición: artículo de MSDN tampoco es muy útil.

Edición 2: me pregunto si esto es un error en el código generado automáticamente. Vea la línea 700 aquí:

https://github.com/Azure/azure-sdk-for-net/blob/master/src/ResourceManagement/Resource/ResourceManagement/Generated/DeploymentOperations.cs

Parece que está intentando JObject.Parse

Edición 3: se abrió un problema en GitHub.

1
wgraham 27 ene. 2016 a las 21:16

2 respuestas

La mejor respuesta

Para Deployment Properties Parameters , debe utilizar el tipo JObject del espacio de nombres Newtonsoft.Json.Linq .

E.g.

using Newtonsoft.Json.Linq;
// paramJsonString is a string type object
Parameters = JObject.Parse(paramJsonString);

Nota: el paquete Microsoft.Azure.Management.Resources nuget quedará obsoleto.

Recomendamos encarecidamente utilizar Microsoft.Azure.ResourceManager 1.0.0-preview Microsoft.Azure.ResourceManager para su desarrollo relacionado con Azure Resource Manager.

enter image description here

¡Espero que esto ayude!

2
juvchan 3 mar. 2016 a las 01:58

De acuerdo con prueba de código fuente, tiene un diseño algo extraño ...

@ "{'siteName': {'value': 'mctest0101'}, 'hostingPlanName': {'value': 'mctest0101'}, 'siteMode': {'value': 'Limited'}, 'computeMode': { 'value': 'Shared'}, 'siteLocation': {'value': 'North Europe'}, 'sku': {'value': 'Free'}, 'workerSize': {'value': '0' }} ",

También hay un problema que surge con problemas similares.

¡Actualmente no tengo tiempo para probar esto! así que si no funciona, avíseme y eliminaré esta respuesta.

0
Michael B 28 ene. 2016 a las 08:14