0

Websitepanel vhdx

На момент написания статьи Websitepanel не умеет работать с дисками vhdx

При анализе исходников выяснилось, что в сырцах жестко прописано расширение .vhd у файлов.
По логике нужно было добавить возможность определять тип диска vhd или vhdx, что я и начал реализовывать.

Что необходимо:

Панель версии 2.0 (я делал под нее, но возможно в 2.1 код не сильно отличается).

Желательно скачать исходники именно по ваш билд панели.

Из инструментов понадобится минимум Visual Studio 2012

Открываем «WebsitePanel.Server.sln»

Переходим в WebsitePanel.Providers.Base->Virtualization->LibraryItem.cs

после строки

public string Path { get; set; }

добавляем

public bool Vhdx { get; set; }

Переходим в WebsitePanel.Providers.Virtualization.HyperV->HyperV.cs
Находим строки

// optional attributes

if (nodeItem.Attributes["diskSize"] != null)
item.DiskSize = Int32.Parse(nodeItem.Attributes["diskSize"].Value);

после добавляем

if (nodeItem.Attributes["Vhdx"] != null)
item.Vhdx = Boolean.Parse(nodeItem.Attributes["Vhdx"].Value);

 

Открываем проект WebsitePanel.EnterpriseServer.sln

Переходим к Code->Virtualization->VirtualizationServerController.cs

заменяем строки

vm.OperatingSystemTemplatePath = Path.Combine(templatesPath, osTemplateFile + ".vhd");
vm.VirtualHardDrivePath = Path.Combine(vm.RootFolderPath, hostname + ".vhd");

на

if (osTemplate.Vhdx)
{
vm.OperatingSystemTemplatePath = Path.Combine(templatesPath, osTemplateFile + ".vhdx");
vm.VirtualHardDrivePath = Path.Combine(vm.RootFolderPath, hostname + ".vhdx");
}
else
{
vm.OperatingSystemTemplatePath = Path.Combine(templatesPath, osTemplateFile + ".vhd");
vm.VirtualHardDrivePath = Path.Combine(vm.RootFolderPath, hostname + ".vhd");
}

после этого собираем наши проекты и копируем их содержимое *.dll  из папок bin в рабочую среду(не забудьте сделать бекапы! )

Чтобы добавить шаблон в формате vhdx нужно добавить в index.xml в секцию item параметр 

Vhdx="true"

, т.е например так:

<item path="win2008"
diskSize="20"
Vhdx="true"
legacyNetworkAdapter="false"
remoteDesktop="true"
processVolume="1">

Может решение не самое красивое, но программирование — не мой профиль, пишите замечания, вопросы, помогу чем смогу

XpycT

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *