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.
Комментариев нет:
Отправить комментарий