2016-01-27 1 views
1

Je tente d'automatiser la création de certaines ressources dans Azure à l'aide des bibliothèques Azure Resource Manager .NET. Je suis capable de créer le groupe de ressources et j'ai placé mon modèle ARM dans un emplacement accessible sur le stockage BLOB; cependant, je voudrais pouvoir passer les paramètres à la demande dans le code au lieu de mettre en scène un fichier JSON quelque part dans le stockage.Comment puis-je transmettre des paramètres de modèle ARM via l'API au lieu d'un fichier de paramètres?

Il semble que cela devrait être possible. Par exemple, sur l'objet Deployment.Properties, il a à la fois Parameters et ParametersLink, mais je ne peux pas trouver toute la documentation sur son utilisation par ce qui suit lancer une exception en disant qu'aucune valeur n'a été spécifiée pour les paramètres du modèle:

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" 
    } 
}; 

Cela génère l'erreur suivante:

An unhandled exception of type 'Microsoft.Rest.Azure.CloudException' occurred in mscorlib.dll

Additional information: Deployment template validation failed: 'The value for the template parameter 'diskStorageAccountName' at line '5' and column '32' is not provided. Please see http://aka.ms/arm-deploy/#parameter-file for usage details.'.

Est-ce que je fais quelque chose de mal? DeploymentProperties.Parameters est juste un Object donc j'avais supposé qu'il serait sérialisé et transmis correctement - cette hypothèse est-elle incorrecte?

Editer: Le MSDN article n'est pas très utile non plus.

Édition 2: Je me demande s'il s'agit d'un bug dans le code générée automatiquement. Voir la ligne 700 ici:

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

On dirait qu'il essaie de JObject.Parse

Edit 3: a ouvert un issue on GitHub.

+0

Quel est le paquet et la version de nuget spécifique que vous utilisez? Je vais essayer de reproduire et de résoudre votre problème. – juvchan

+0

Microsoft.Azure.Management.Resources 3.3.1-preview – wgraham

+0

@juvchan: Des mises à jour? –

Répondre

2

Pour la Deployment Properties Parameters, vous devez utiliser le JObject le type de l'espace de noms Newtonsoft.Json.Linq.

E.g.

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

Note: Le Microsoft.Azure.Management.Resources package NuGet sera dépréciée.

Strongly recommend to use Microsoft.Azure.ResourceManager 1.0.0-previewMicrosoft.Azure.ResourceManager for your development related to Azure Resource Manager.

enter image description here

Hope this helps!

0

Selon le source code testing, il a quelque chose d'une disposition bizarre ...

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

Il y a aussi un issue soulevé des problèmes similaires

J'ai pas eu le temps de le tester! donc si ça ne marche pas, faites le moi savoir et je supprimerai cette réponse.

+0

J'ai aussi essayé de sérialiser l'objet; ça finit ...La définition de 'parameters' dans la requête à une chaîne JSON échoue également. – wgraham