Вначале приведу листинг команд целиком:
$HPOVSession = connect-HPOVMgmt -Hostname <OneView IP> -UserName Administrator -Password <Admin password> Get-HPOVServerProfileTemplate
$DLGen9Template = Get-HPOVServerProfileTemplate -Name "*DL360 Gen9*" | select -First 1
$DLGen9Server = Get-HPOVServer -NoProfile -InputObject $DLGen9Template
$DLGen9Server
$DLGen9ServerProfile = New-HPOVServerProfile -Name "CentOS DL Gen9 Server" -AssignmentType "Server" -Server
$DLGen9Server -Async -ServerProfileTemplate $DLGen9Template
$DLGen9SSOToken = $DLGen9Server |Get-HPOVIloSso -IloRestSession
Disable-HPRESTCertificateAuthentication
$ManagerObjectsSSO = Get-HPRESTDataRaw -Href "/rest/v1/Managers" -Session $DLGen9SSOToken
$ManagerObjectsSSO
foreach ($ManagerObjectSSO in $ManagerObjectsSSO.links.Member.href) {$ManagerObjectData = Get-HPRESTDataRaw -Href $ManagerObjectSSO -Session $DLGen9SSOToken; if ($ManagerObjectData.links.PSObject.Properties.name -Contains 'VirtualMedia') {break}}
$ManagerObjectData
$VMData = Get-HPRESTDataRaw -Href $ManagerObjectData.links.VirtualMedia.href -Session $DLGen9SSOToken
foreach ($VMLink in $VMData.links.Member.href) {$VMObject = Get-HPRESTDataRaw -Href $VMLink -Session $DLGen9SSOToken; if ($VMObject.MediaTypes -contains 'DVD'){break}}
$VMObject
$mountSetting = @{'Image' = $null}
$result = Set-HPRESTData -Href $VMLink -Setting $mountSetting -Session $DLGen9SSOToken -ErrorAction SilentlyContinue
$mountSetting = @{'Image' = 'http://<HTTP Server IP>/isoboot/ubuntu-14.04.4-server-i386.iso'}
$mountSetting
$oem = @{'Hp' = @{'BootOnNextServerReset' =$true}}
$oem
$mountSetting.Add('Oem',$oem)
$mountSetting
$result = Set-HPRESTData -Href $VMLink -Setting
$mountSetting -Session $DLGen9SSOToken
$VMObject = Get-HPRESTDataRaw -Href $VMLink -Session $DLGen9SSOToken
$VMObject
$VMObject.Oem.Hp.BootOnNextServerReset
$VMObject.Image
Start-HPOVServer -InputObject $DLGen9Server
Теперь рассмотрим его более подробно. Сразу сделаю несколько замечаний:
- Я использовал сервер Proliant DL360 Gen9. Но подойдет любой Proliant DL или BL, начиная с 8-го поколения.
- Я использую старую объектную модель REST API. Сейчас также в серверах Proliant реализована модель Redfish API, являющаяся индустриальным стандартом. Если использовать ее, то созданный скрипт будет работать и на серверах других производителей в части работы с процессором управления, если они поддерживают Redfish API. Подробнее о стандарте и тех, кто его поддерживает можно прочитать на сайте проекта http://redfish.dmtf.org/
- В моем примере команды вводятся в интерактивном режиме в командной строке PowerShell. При применении этого кода на практике его, конечно же, надо преобразовать в скрипт с такими входными параметрами, как IP-адрес HPE OneView, имя и пароль администратора, название шаблона профиля, который должен быть использован для подготовки сервера к работе
- Я не делал автоматическую установку ОС (unattended setup). Для полной автоматизации процесса, конечно, это стоит сделать
- Для корректной работы приводимых команд нужно поставить 2 библиотеки PowerShell: а. Командлеты для HPE OneView:
на официальной странице Github https://github.com/HewlettPackard/POSH-HPOneView/
или на сайте PowerShell Library https://www.powershellgallery.com/packages/HPOneView.310/3.10.1471.1581
б. Командлеты для работы через REST c HPE iLO https://www.powershellgallery.com/packages/HPRESTCmdlets/1.2.0.0 - Объектная модель REST API для iLO описана на сайтах
https://hewlettpackard.github.io/ilo-rest-api-docs/ilo4/ (не очень удобная база знаний)
и
https://ilorestfulapiexplorer.ext.hpe.com/ - нужен подготовленный сервер HTTP (в моем случае, это MS IIS), на котором выложены установочные образы ОС. Провьте заранее браузером, что образы доступны для просмотра и загрузки.
- Идея создания этой демонстрации и часть кода взята (монтаж Virtual Media) со страницы Github https://github.com/HewlettPackard/oneview-osdeployment
1. Соединяемся с OneView:
$HPOVSession = connect-HPOVMgmt -Hostname <OV IP> -UserName <username> -Password <password>
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
9. Getting root Manager object from iLO REST
$ManagerObjectsSSO = Get-HPRESTDataRaw -Href "/rest/v1/Managers" -Session $DLGen9SSOToken
10. Verifiyng
$ManagerObjectsSSO
11. Looking for Manager spine
foreach ($ManagerObjectSSO in $ManagerObjectsSSO.links.Member.href) {$ManagerObjectData = Get-HPRESTDataRaw -Href $ManagerObjectSSO -Session $DLGen9SSOToken; if ($ManagerObjectData.links.PSObject.Properties.name -Contains 'VirtualMedia') {break}}
12. Verifiyng
$ManagerObjectData
13. Getting Virtual Media root object
$VMData = Get-HPRESTDataRaw -Href $ManagerObjectData.links.VirtualMedia.href -Session $DLGen9SSOToken
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}}
15. Verifiyng
$VMObject
16. Unmount Image. Optional step
$mountSetting = @{'Image' = $null}
$result = Set-HPRESTData -Href $VMLink -Setting $mountSetting -Session $DLGen9SSOToken -ErrorAction SilentlyContinue
17. Preparing variable to change the ISO path and One-Time Boot setting
$mountSetting = @{'Image' = ‘ http://<HTTP Server IP>/isoboot/CentOS-6.7-x86_64-bin-DVD1.iso’}
$oem = @{'Hp' = @{'BootOnNextServerReset' =$true}}
$mountSetting.Add('Oem',$oem)
18. Verifiyng
$mountSetting
19. Write changes to iLO
$result = Set-HPRESTData -Href $VMLink -Setting $mountSetting -Session $DLGen9SSOToken
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.
Idea for this demo and some code (Virtual Media Mount) has been taked from this Github page
https://github.com/HewlettPackard/oneview-osdeployment
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.
Комментариев нет:
Отправить комментарий