вторник, 4 октября 2016 г.

Windows Azure Pack. Горячее подключение ISO, VHDX и расширение виртуальных жестких дисков.

С тех пор, как я начал работать с Windows Azure Pack, меня интересовал вопрос - почему инженеры, которые разрабатывали этот портал, не использовали некоторые возможности Hyper-V. Например - горячее подключение ISO и VHDX, а также увеличение размера виртуального жесткого диска без выключения сервера.


Сейчас мы будем устранять данное недоразумение. Если с аттачем ISO и VHDX проблем не возникнет - надо всего лишь поменять параметры проверок статуса ВМ в скриптах, то вот с увеличением размера дисков все немного сложнее, так как данная операция доступна только для виртуальных машин GEN2.

Мы уже вносили подобные правки в одной из предыдущих статей, поэтому, по аналогии, переходим к правке скрипта VM.Command.VirtualMachine.Attach.js:

notepad c:\inetpub\MgmtSvc-TenantSite\Content\VM\Scripts\Commands\VM.Command.VirtualMachine.Attach.js

В нем убираем проверку состояния виртуальной машины:

        enabled: function(dataContext, navigationContext) {
            
            return navigationContext.extension === global.VMExtension.name &&
                   navigationContext.viewName === constants.tabId.vmConfigTabId &&
                   dataContext.activeVM &&
                   dataContext.activeVM.status;
                   // ...
//                 utility.canAttach(dataContext.activeVM.status, dataContext.activeVM.generation, dataContext.activeVM.shielded);
        }

Выполняем iisreset и проверяем:








Отлично, доступно для добавления только то, что добавить нельзя. Ладно, идем дальше. Внесем правки в скрипты аттача ISO, диска и сети:

notepad c:\inetpub\MgmtSvc-TenantSite\Content\VM\Scripts\Commands\VM.Command.VirtualMachine.Attach.ISO.js

        visible: function(dataContext, navigationContext) {
//..
            return dataContext.activeVM &&
                   dataContext.activeVM.status;
//                 utility.canAttachISO(dataContext.activeVM.status);
        },

notepad c:\inetpub\MgmtSvc-TenantSite\Content\VM\Scripts\Commands\VM.Command.VirtualMachine.Attach.Disk.js

        visible: function(dataContext, navigationContext) {
          //...
            return dataContext.activeVM &&
                   dataContext.activeVM.status;
//                 utility.canAttachDisk(dataContext.activeVM.status);
        },

notepad c:\inetpub\MgmtSvc-TenantSite\Content\VM\Scripts\Commands\VM.Command.VirtualMachine.Attach.Network.js

        visible: function(dataContext, navigationContext) {
            return dataContext.activeVM &&
            dataContext.activeVM.status &&
            utility.canAttach(dataContext.activeVM.status);
//          return true;
        },

Кстати, очень интересный момент. Для аттача диска и ISO проверка статуса ВМ была, а вот для сети - наоборот. Наверное, что-то разработчики немного напутали :)

Теперь выполняем iisreset и проверяем:









Часть задачи по приведению Windows Azure Pack в съедобный вид выполнена. Но это еще не все, ведь присоединение нового диска без возможности изменить его размер практически бесполезна. Поэтому придется копать дальше:

notepad c:\inetpub\MgmtSvc-TenantSite\Content\VM\Scripts\Commands\VM.Command.VirtualMachine.ExpandDisk.js

Для ВМ GEN1 нельзя налету менять размер системного диска, поэтому к проверке статуса виртуальной машины мы добавим условие "ИЛИ GenerationVM = 2 ИЛИ Диск_с_данными ИЛИ ВМ_Выключена":

visible: function(dataContext, navigationContext) {
          var configViewModel = dataContext.activeViewModel;

     return navigationContext.extension === global.VMExtension.name &&
     navigationContext.viewName === constants.tabId.vmConfigTabId &&
     dataContext.activeVM &&
     dataContext.activeVM.status &&
     configViewModel &&
     configViewModel.selectedDevice &&
     (dataContext.activeVM.generation == 2 || 
     utility.canExpandDisk(dataContext.activeVM.status) ||
     configViewModel.selectedDevice.deviceTypeString === constants.vmDeviceType.DataDisk) &&
     (configViewModel.selectedDevice.deviceTypeString === constants.vmDeviceType.OSDisk ||
     configViewModel.selectedDevice.deviceTypeString === constants.vmDeviceType.DataDisk);
},

Осталось выполнить iisreset и проверить, что все работает корректно.

Теперь наш Windows Azure Pack по функционалу приблизился к старым версиям Apache CloudStack :) По крайней мере, теперь мы более полно используем возможности Hyper-V, жестко порезанные разработчиками портала.

UP. Спасибо Сергею Груздову (egel@egel.su), что указал мне на ошибку с условием для дисков машин GEN1.

UP. Спасибо Дмитрию Гридневу (dmitriy.gridnev@outlook.com) за сообщение об ошибке, из-за которой Azure Pack предлагал расширить сеть и ISO.

Комментариев нет:

Отправить комментарий