Присоединение диска Azure к виртуальной машине с использованием C # и StorageManagementClient / ComputeManagementClient - PullRequest
0 голосов
/ 21 ноября 2018

У меня уже было работающее приложение 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.

Но я не получил никаких опций для обновления виртуальной машины из-за несоответствия типов параметров.

Есть идеи?

1 Ответ

0 голосов
/ 23 ноября 2018

хорошо, вот ответ ...

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 разные версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...