从C#调用ARM模板



我正在处理一个需求,我想从代码传递参数(如资源名称、资源位置等(动态调用ARM模板,

我能够创建ARM模板。例如,为存储帐户创建了ARM模板,我有一个参数文件,其中包含要传递给模板的值。然而,我想动态地从c#代码传递这些值,并在Azure中提供资源
在Powershell中,我可以实现这一点,但我希望在c#中也能实现。

我可以探索的任何建议/技术链接。

我使用以下函数使用c#部署ARM模板

private async Task DeployTemplate(string resourceGroupName, string deploymentName, JObject templateFileContents, JObject parameters)
{
var deployment = new Deployment
{
Properties = new DeploymentProperties
{
Mode = DeploymentMode.Incremental,
Template = templateFileContents,
Parameters = parameters
}
};
var serviceCredentials = await ApplicationTokenProvider.LoginSilentAsync(_tenantId, _clientId, _clientSecret);
var resourceManagementClient = new ResourceManagementClient(serviceCredentials)
{
SubscriptionId = _subscriptionId
};
await resourceManagementClient.Deployments.CreateOrUpdateAsync(resourceGroupName, deploymentName, deployment);
}

templateFileContents由以下函数填充:

private static JObject GetJsonFileContents(string pathToJson)
{
var path = Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location), pathToJson);
using (var file = File.OpenText(path))
{
using (var reader = new JsonTextReader(file))
{
return (JObject)JToken.ReadFrom(reader);
}
}
}

这就是我创建动态参数对象的方式:

var parameters = JObject.FromObject(
new DbCloneArmParameters
{
databaseName = new ArmParameterValue { Value = databaseName },
serverName = new ArmParameterValue { Value = servername },
location = new ArmParameterValue { Value = "westeurope" } }
});

助手类:

public class DbCloneArmParameters
{
public ArmParameterValue databaseName { get; set; }
public ArmParameterValue serverName { get; set; }
public ArmParameterValue location { get; set; }
}
public class ArmParameterValue
{
public string Value { get; set; }
}

我认为Microsoft.Azure.Management.Fluent可以解决您的问题。

如果您查看Microsoft文档";使用C#和资源管理器模板部署Azure虚拟机";,它将引导您使用C#中的模板文件部署VM。该文档可以作为将任何ARM模板部署到Azure的起点。

最新更新