使用C#和StorageManagementClient / ComputeManagementClient对VM进行Azure磁盘附件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用C#和StorageManagementClient / ComputeManagementClient对VM进行Azure磁盘附件相关的知识,希望对你有一定的参考价值。
我已经有了一个可以成功将磁盘连接到虚拟机的C#ResourceManager应用程序。但是我用nuget包Microsoft.Azure.Management.Compute
解决了这个问题。但是,由于这个包在其他开发中引起了问题,因此决定不再使用它。为此,我们使用Microsoft.Azure.Management.Compute.Fluent
。
到目前为止,我有以下代码(简短版):
var computeClient = new ComputeManagementClient(credentials) {
SubscriptionId = credentials.DefaultSubscriptionId };
var ObjVirtualMachines = computeClient.VirtualMachines.Get(resourcegroup, vmname);
ObjVirtualMachines.StorageProfile.DataDisks.Add(
new DataDisk(ObjVirtualMachines.StorageProfile.DataDisks.Count + 1,
"Attach", name, null, null, null, null, null,
new ManagedDiskParameters(resourceid, acctype)));
var newUpdatesVM = computeClient.VirtualMachines.CreateOrUpdate(
resourcegroup, ObjVirtualMachines.Name, ObjVirtualMachines);
这很有效,但正如我所说,我必须转换到另一个包。
首先,我认为我可以用StorageManagementClient
解决这些问题。
但由于参数类型不匹配,我没有获得更新虚拟机的任何选项。
有任何想法吗?
答案
好的,这是答案......
var ObjVirtualMachines = computeClient.VirtualMachines.GetAsync(ressgroup, virtualmname, null, new System.Threading.CancellationToken()).Result;
var storagemanagementclient = new StorageManagementClient(credentials) { SubscriptionId = credentials.DefaultSubscriptionId };
ObjVirtualMachines.StorageProfile.DataDisks.Add(new DataDisk(
ObjVirtualMachines.StorageProfile.DataDisks.Count + 1,
DiskCreateOptionTypes.Attach,
name,
null,
null,
null,
null,
new ManagedDiskParametersInner(resourceid, acctype)));
var newUpdateVM = computeClient.VirtualMachines.CreateOrUpdateAsync(ressgroup, virtualmname, ObjVirtualMachines);
而对于acctype使用这个。
var computeClient = new ComputeManagementClient(credentials) { SubscriptionId = credentials.DefaultSubscriptionId };
var disk = computeClient.Disks.ListAsync().Result.FirstOrDefault(p => p.Name == name);
var content = azure.Disks.GetById(disk.Id);
var resourceid = disk.Id;
var ressgroup = Resourcegroup.Get(context);
var virtualmname = VirtualMachineName.Get(context);
var acctype = getAccType(content.Sku.AccountType.ToString());
getAccType函数是这个......
public StorageAccountTypes getAccType(string input)
{
switch (input)
{
case "StandardLRS": return StorageAccountTypes.StandardLRS;
case "PremiumLRS": return StorageAccountTypes.PremiumLRS;
// case "StandardSSDLRS":return "StandardSSD_LRS";
// case "UltraSSDLRS":return "UltraSSD_LRS";
default: return StorageAccountTypes.StandardLRS;
}
}
问题是此命名空间中的AccType版本限制为2(StandardLRS和PremiumLRS)。在旧版本中,您有4个不同版本。
以上是关于使用C#和StorageManagementClient / ComputeManagementClient对VM进行Azure磁盘附件的主要内容,如果未能解决你的问题,请参考以下文章
使用 Eclipse:如何为所有 C/C++ 项目添加包含路径和库