Через графический интерфейс не всегда есть возможность удалить сервер из HPE OneView. Например, если сервер сейчас недоступен - физически убран, сломан и т.д. - через "графику" он может не удаляться. Выдается ошибка:
Можно использовать команды PowerShell:
Connect-HPOVMgmt -Hostname <OV Appliance IP> -UserName <Username> -Password <Password>
Get-HPOVServer -Name "<Server Hardware Name>" | Remove-HPOVServer -Force
Напомню, что должна быть установлена библиотека командлетов для HPE OneView
Теперь рассмотрим его более подробно. Сразу сделаю несколько замечаний:
Я использовал сервер Proliant DL360 Gen9. Но подойдет любой Proliant DL или BL, начиная с 8-го поколения.
Я использую старую объектную модель REST API. Сейчас также в серверах Proliant реализована модель Redfish API, являющаяся индустриальным стандартом. Если использовать ее, то созданный скрипт будет работать и на серверах других производителей в части работы с процессором управления, если они поддерживают Redfish API. Подробнее о стандарте и тех, кто его поддерживает можно прочитать на сайте проекта http://redfish.dmtf.org/
В моем примере команды вводятся в интерактивном режиме в командной строке PowerShell. При применении этого кода на практике его, конечно же, надо преобразовать в скрипт с такими входными параметрами, как IP-адрес HPE OneView, имя и пароль администратора, название шаблона профиля, который должен быть использован для подготовки сервера к работе
Я не делал автоматическую установку ОС (unattended setup). Для полной автоматизации процесса, конечно, это стоит сделать
нужен подготовленный сервер HTTP (в моем случае, это MS IIS), на котором выложены установочные образы ОС. Провьте заранее браузером, что образы доступны для просмотра и загрузки.
2. Выводим список доступных шаблонов профилей серверов: Get-HPOVServerProfileTemplate
3. Выбираем приглянувшийся нам шаблон. В моем случае, это шаблон для серверного ресурса DL360 Gen9. Паттерн имени"*DL360 Gen9*". Шаблон с таким именем у меня один. Но для унификации выбираю первый из возможного списка: $DLGen9Template = Get-HPOVServerProfileTemplate -Name | select -First 1
4. После того, как мы выбрали шаблон, ищем свободный "-NoProfile" серверный ресурс, подходящий данному шаблону $DLGen9Server = Get-HPOVServer -NoProfile -InputObject $DLGen9Template
5. Проверяем, что ресурс нашелся, выводя списко серверных ресурсов на экран. Если переводить данный листинг в скрипт, вместо вывода списка на экран нужно будет проверять, не равен ли объект/список $null. Теоретически, подходящих ресурсов может быть несколько. В этом случае можно применить фильтр " | select -First 1": $DLGen9Server
6. На основе шаблона профиля и свободного серверного ресурса создаем серверный профиль с именем "CentOS DL Gen9 Server". В скрипте можно использовать конвейер и команду ожидания выполнения процесса " | Wait-HPOVTaskComplete". Появится симпатичный текстовый прогрессбар: $DLGen9ServerProfile
= New-HPOVServerProfile -Name "CentOS DL Gen9 Server" -AssignmentType
"Server" -Server $DLGen9Server -Async -ServerProfileTemplate
$DLGen9Template
7. Создаем токен безопасности для аутентификации на iLO сервера (SSO - Single Sign-on). По опыту, токен безопасности достаточно быстро протухает. Если вдруг обращения по REST к iLO вдруг выдает ошибку, перезапросите токен. Прямой вызов команды "Get-HPOVIloSso" у меня не сработал, поэтому использовал конвейер: $DLGen9SSOToken = $DLGen9Server |Get-HPOVIloSso -IloRestSession
8. Отключаем проверку SSL-сертификата. Скорее всего, подписанного у вас нет. Без отключения сервер будет выдавать ошибку авторизации: Disable-HPRESTCertificateAuthentication
9. Получаем головной объект "Managers" в iLO REST: $ManagerObjectsSSO = Get-HPRESTDataRaw -Href "/rest/v1/Managers" -Session $DLGen9SSOToken
10. Проверяем, что объект получен: $ManagerObjectsSSO
11. Теоретически у сервера может быть несколько процессоров управления и, соответсвенно, под "Managers" может скрываться несколько объектов. Ищем тот, у которого есть дочерний объект "VirtualMedia". Здесь и далее примеры с циклом сделаны для универсальности. Процедуру поиска и настройки объектов можно упростить, если использовать прямые ссылки на объекты. Но в этом случае теряется универсальность команд: foreach
($ManagerObjectSSO in $ManagerObjectsSSO.links.Member.href)
{$ManagerObjectData = Get-HPRESTDataRaw -Href $ManagerObjectSSO -Session
$DLGen9SSOToken; if ($ManagerObjectData.links.PSObject.Properties.name
-Contains 'VirtualMedia') {break}}
12. Проверяем, что объект получен: $ManagerObjectData
13. Получаем ссылку на головной объект VirtualMedia. Этот объект имеет несколько дочерних объектов: $VMData = Get-HPRESTDataRaw -Href $ManagerObjectData.links.VirtualMedia.href -Session $DLGen9SSOToken
14. Среди дочерних объектов VirtualMedia находим тот, что соответсвует типу носителя CD/DVD Virtual Media. Обычно дочерних объектов два: Floppy-привод (рудимент) и CD/DVD: foreach
($VMLink in $VMData.links.Member.href) {$VMObject = Get-HPRESTDataRaw
-Href $VMLink -Session $DLGen9SSOToken; if ($VMObject.MediaTypes
-contains 'DVD'){break}}
15. Проверяем, что объект получен: $VMObject
16. Необязательный шаг. Отмонтирует образ VirtualMedia, если какой-то уже смонтирован. Для этого вначале готовим переменну в виде массива с именованным индексом: $mountSetting = @{'Image' = $null}
17. Записываем новое значение в iLO. В скрипте можно проверить, чему равно свойство "Image" и вызвать следующую команду только, если свойство не равно Null. В моем примере я поступаю подругому - я просто указываю игнорировать ошибку "-ErrorAction SilentlyContinue", которая возникает, если 'Image' уже Null: $result = Set-HPRESTData -Href $VMLink -Setting $mountSetting -Session $DLGen9SSOToken -ErrorAction SilentlyContinue
18. Аналогично пункту 16 готовим переменную для внесения изменений в настройки VirtualMedia. Объектная модель есть по ссылкам выше (пункт 6 замечаний). Нужно изменить два параметра: путь к образу и выполнение единоразовой загрузки сервера с VirtualMedia. Итак, готовим переменные: $mountSetting = @{'Image' = ‘ http://<HTTP Server IP>/isoboot/CentOS-6.7-x86_64-bin-DVD1.iso’} $oem = @{'Hp' = @{'BootOnNextServerReset' =$true}} $mountSetting.Add('Oem',$oem)
19. Проверяем: $mountSetting
20. Записываем изменения в iLO: $result = Set-HPRESTData -Href $VMLink -Setting $mountSetting -Session $DLGen9SSOToken
21. Перезачитываем объект VirtualMedia для проверки, что изменения внесены. Тут стоит обратить внимание на следующее. Если присвоить новое значение какому-нибудь свойству объекта VirtualMedia, например, $VMObject.Image, то эти изменения не будут автоматически записаны в iLO. Для записи изменений надо использовать команду Set-HPRESTData с соответствующими параметрами, как мы сделали в пункте 20. А после того, как изменения были записаны в iLO, они не будут автоматически обновлены в объекте PowerShell. То есть объект надо перезачитать: $VMObject = Get-HPRESTDataRaw -Href $VMLink -Session $DLGen9SSOToken
22. Проверяем, что изменения внесены в настройки iLO: $VMObject $VMObject.Oem.Hp.BootOnNextServerReset $VMObject.Image
23. запускаем сервер с использованием командлета для HPE OneView: Start-HPOVServer -InputObject $DLGen9Server
На этом всё. Если статья понравилась, жду ваших комментариев и замечаний. Если не понравилось, пишите, что не так :). Какие еще примеры работы с PowerShell, HPE OneView и REST API вам были бы интересны?
Short listing description in English:
Here is my demo command listing based on the page mentioned above and script “Mount-VirtualMedia.ps1”. I used DL360 Gen9 in my lab to demonstrate IP script boot:
1. Connecting to OV $HPOVSession = connect-HPOVMgmt -Hostname <OV IP> -UserName <username> -Password <password>
2. Looking for Templates Get-HPOVServerProfileTemplate
3. Choosing the right Template $DLGen9Template = Get-HPOVServerProfileTemplate -Name "*DL360 Gen9*" | select -First 1
4. Selecting the free server resourse corresponding to our Template $DLGen9Server = Get-HPOVServer -NoProfile -InputObject $DLGen9Template
5. Verifying that the server was selected correctly $DLGen9Server
6. Creating server profile. You need to wait the end of profile creation $DLGen9ServerProfile = New-HPOVServerProfile -Name "CentOS DL Gen9 Server" -AssignmentType "Server" -Server $DLGen9Server -Async -ServerProfileTemplate $DLGen9Template
7. Getting the iLO security token for our server $DLGen9SSOToken = $DLGen9Server |Get-HPOVIloSso -IloRestSession
8. Disabling SSL certificate verification. The next steps will not work without this action Disable-HPRESTCertificateAuthentication
14. Looking for CD/DVD media Virtual Media. Usually there are two leafs: Floppy and CD/DVD foreach ($VMLink in $VMData.links.Member.href) {$VMObject = Get-HPRESTDataRaw -Href $VMLink -Session $DLGen9SSOToken; if ($VMObject.MediaTypes -contains 'DVD'){break}}
20. Re-reading VM spine for verification $VMObject = Get-HPRESTDataRaw -Href $VMLink -Session $DLGen9SSOToken
21. Verifiyng that boot setting were changed correctly $VMObject $VMObject.Oem.Hp.BootOnNextServerReset $VMObject.Image
22. Starting server via OV Start-HPOVServer -InputObject $DLGen9Server
“Verifiyng” steps are just for visualization during demo and debugging. Of course this commands can be written as a PS script. Cycles can be replaced with direct REST links.
If you like the post, or if ou have any questions or suggestions please leave comment:) If you are interested in English subtitles, please give me to know.