簡體   English   中英

使用C#和StorageManagementClient / ComputeManagementClient將Azure磁盤附加到VM

[英]Azure Disk Attachment to VM using C# and StorageManagementClient/ComputeManagementClient

我已經有一個可以正常工作的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個不同的版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM