2016-01-27 3 views
1

Я пытаюсь автоматизировать создание некоторых ресурсов в Azure с использованием библиотек Azure Resource Manager .NET. Я могу создать группу ресурсов и разместил свой шаблон ARM в доступном месте на хранилище blob; однако я хотел бы иметь возможность передавать параметры в запрос в коде вместо того, чтобы размещать файл JSON где-то в хранилище.Как передать параметры шаблона ARM через API вместо файла параметров?

Кажется, что это должно быть возможно. Например, на Deployment.Properties объекта, он имеет как Parameters и ParametersLink, но я не могу найти любую документацию по его использованию, а следующее бросает исключение о том, что значение не было указано для параметров в шаблоне:

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

Это дает следующее сообщение об ошибке:

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.'.

я делаю что-то не так? DeploymentProperties.Parameters - всего лишь Object, поэтому я предположил, что он будет сериализован и передан правильно - это предположение неверно?

Редактировать: MSDN article также не очень полезен.

Редактировать 2: Интересно, является ли это ошибкой в ​​автогенерированном коде. Смотрите линии 700 здесь:

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

Выглядит, как он пытается JObject.Parse

Edit 3: Открылся issue on GitHub.

+0

Каков конкретный пакет и версия nuget, которые вы используете? Я попытаюсь воспроизвести и решить вашу проблему. – juvchan

+0

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

+0

@juvchan: Любые обновления, пожалуйста? –

ответ

2

Для Deployment Properties Parameters, вы должны использовать тип JObject из пространства имен Newtonsoft.Json.Linq.

E.g.

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

Примечание: Пакет NuGet Microsoft.Azure.Management.Resources устареет.

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

Надеется, что это помогает!

0

Согласно source code testing, он имеет что-то нечетным макет ...

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

Существует также issue поднятый с подобными проблемами

Я в настоящее время нет времени, чтобы проверить это! поэтому, если он не работает, дайте мне знать, и я удалю этот ответ.

+0

Я также попытался выполнить сериализацию объекта; это заканчивается ...установка 'параметров' в запросе на строку JSON также не выполняется. – wgraham