- PVSM.RU - https://www.pvsm.ru -
Доброго времени суток, уважаемые читатели!
Мне бы хотелось поделиться с вами простым, и на мой взгляд, удобным способом управления виртуальными коммутаторами в инфраструктуре VMWare vSphere, не используя
Кто-то не использует
Мы тоже пока используем обычные vSwitch, не смотря на наличие более 70 ESXi гипервизоров в инфраструктуре. И так получилось, что за время работы с ними, у меня скопилось множество PowerCLI скриптов [2] для автоматической настройки тех или иных функций. И захотелось их объединить в нечто большее, сделав удобный инструмент для других администраторов. Через некоторое время я наткнулся на пакет Primal Forms (сейчас он называется PowerShell studio, есть урезанный Community Edition) и понял, что следующим шагом будет GUI. Primal Forms позволяет создавать GUI средствами самого PowerShell, однако существенно упрощая этот процесс — достаточно нарисовать GUI в редакторе, а потом простым щелчком по кнопке или другим управляющим элементам дописать код.
В итоге получилась скрипт-утилита позволяющая:
Плюс некоторые дополнительные плюшки:
Делать все это вручную на каждом хосте не только утомительно, но и довольно бестолково. Конечно, можно использовать host profiles, но для этого нужно переводить каждый хост в maintance mode. Да и те кто работали с host profiles могут подтвердить, что процесс применения профиля совсем не быстрый.
Примеры кода, и сама утилита под катом.
Через Primal Forms набросал интерфейс, c кнопками под каждое действие. Хотелось бы добавить управление фаерволлом и, например, просмотр снапшотов у всех хостов разом, поэтому с табами — задел на будущее. Заранее забиты дефолтные значения в поля, внизу — статус бар показывающий инфо о соединении с vCenter и завершении задачи.
Прикрутим код для соединения с виртуальной ифнраструктурой:
$buttonConnectToVcenter_Click={
If ($vcenter_address.Text -eq "") {[System.Windows.Forms.MessageBox]::Show("Please specify a VC Server")}
Else
{
$app_statusbar.Text="Connecting" //обновляем статусбар
[System.Windows.Forms.Application]::DoEvents() //чтобы форма не теряла отзывчивость
//загружаем нужные для работы с VMWare Snapin'ы.
Add-PSSnapin VMware.VimAutomation.Core -ErrorAction SilentlyContinue
Add-PSSnapin VMware.VumAutomation -ErrorAction SilentlyContinue
$VC = Connect-VIServer $vcenter_address.Text
If ($VC.IsConnected -eq $true)
{
$vc_connected=$TRUE
$app_statusbar.Text="Connected"
[System.Windows.Forms.MessageBox]::Show("Connected to "+$vcenter_address.Text)
}
else
{
[System.Windows.Forms.MessageBox]::Show("Connection FAILED - Please try again.")
$vc_connected=$FALSE //соединение провалилось. В дальнейшем будем использовать $vc_connected, чтобы не разрешать выполнения скриптов при не подключенном vcenter.
$app_statusbar.Text="Connection failed"
}
}
}
Дальше все по аналогии. Кнопка — реакция на событие. Например, добавим портовую группу.
$port_group_add_Click={
if ($vc_connected -eq $FALSE)
{
[System.Windows.Forms.MessageBox]::Show("I am not connected to vCenter") //проверяем, а соединение есть?
}
if ($vc_connected -eq $TRUE)
{
//проверяем, нет ли пустых полей в запросе?
If (($switch_name.Text -eq "") -or ($port_group_name_add.Text -eq "") -or ($port_group_vlan_id_add.Text -eq "")) {[System.Windows.Forms.MessageBox]::Show("Parameters missing")}
Else
{
$app_statusbar.Text="Adding port group..."
$esxhosts= Get-VMHost *
$progress.Value=0
$progress_tick=((1/$esxhosts.Count)*100)
foreach ($esxhost in $esxhosts)
{
[System.Windows.Forms.Application]::DoEvents()
$hypervisor = Get-VMHost $esxhost | Get-VirtualSwitch -Name $switch_name.Text
$hypervisor | New-VirtualPortGroup -Name $port_group_name_add.Text -VLanId $port_group_vlan_id_add.Text
$progress.Value=$progress_tick
$progress_tick=$progress_tick+((1/$esxhosts.Count)*100) //обновляем progress bar
}
$progress.Value=100
$app_statusbar.Text="Done!"
}
}
}
Мне бы не хотелось превращать пост в тупую распечатку кода, поэтому приведены лишь пара функций. Если вам интересно посмотреть его целиком — скольте сразу вниз, там ссылка на pastebin. К сожалению, я не программист, работает и ладно. Может быть, кто-нибудь подхватит пару идей из него, или сможет сделать гораздо лучше.
После установки VMWare PowerCLI [3] администратору доступны сmdlet'ы для работы с vSphere. При наличии работающего PowerShell и установленного PowerCLI — скрипт уже должен работать (кстати, еще Primal Forms позволяет создать exe'шник). Дальше уже PowerCLI позаботится об авторизации и взаимодействии с vSphere.
При запуске должно появиться окно:
Авторизируемся на vCenter.
Создадим пробную портгруппу «test».
И удалим ее
По аналогии и с остальными функциями.
Исходный код лежит на pastebin [4].
А собранный в Primal Forms exe'шник на depositfiles [5].
Вообще — PowerCLI в связке с PowerShell представляют потрясающие возможности для автоматизации, управления и мониторинга. Например, к vCenter можно прикрутить plug-in отображающий в отдельной вкладке html-отчет о состоянии виртуальной инфраструктуры, который создается каждое утро средствами PowerCLI и отображает информацию о:
Напоследок, хотелось бы поблагодарить форумы vmware communities за ценные подсказки и советы, а так же Михаила Михеева (michigun [6]), благодаря книге которого я начал изучение такой популярной платформы виртуализации как VMWare vSphere, и Максима Мошкова — отличного преподавателя из HP Training Center за познавательные курсы по VMWare, благодаря которым удалось таки сдать на VCP410 и VCP510, да и вообще, узнать много новых вещей.
Автор: Evilence
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/virtualizatsiya/11658
Ссылки в тексте:
[1] vDS: https://www.reg.ru/?rlink=reflink-717
[2] PowerCLI скриптов: http://habrahabr.ru/post/143753/
[3] VMWare PowerCLI: http://communities.vmware.com/community/vmtn/server/vsphere/automationtools/powercli?rct=j&q=vmware%2520powercli&source=web&cd=1&ved=0CFcQFjAA&url=http://www.vmware.com/go/PowerCLI&ei=RRoFUICyNsiYhQeanYDXBw&usg=AFQjCNHixkgPGjBKVx5ZnJKrGXx0ba-y_g&sig2=TvXLgLDQJ4feA5WIYidrtg
[4] лежит на pastebin: http://pastebin.com/3yMdAQgJ
[5] на depositfiles: http://depositfiles.com/files/ima10mf4j
[6] michigun: http://habrahabr.ru/users/michigun/
Нажмите здесь для печати.