- Infrastrukturní DevOps s HPE OneView (1) – Infrastructure as Code
- Infrastrukturní DevOps s HPE OneView (2) – API
- Infrastrukturní DevOps s HPE OneView (3) – Message bus
- Infrastrukturní DevOps s HPE OneView (4) – PowerShell
- Infrastrukturní DevOps s HPE OneView (5) – PowerShell skripty
- Infrastrukturní DevOps s HPE OneView (6) – Python
- Infrastrukturní DevOps s HPE OneView (7) – Python skripty
- Infrastrukturní DevOps s HPE OneView (8) – vaše vlastní aplikace s Grommet
- Infrastrukturní DevOps s HPE OneView (9) – Ansible a infrastruktura
- Infrastrukturní DevOps s HPE OneView (10) – Ansible a Blade networking
- Infrastrukturní DevOps s HPE OneView (11) – Ansible a síťový fabric
- Infrastrukturní DevOps s HPE OneView (12) – Ansible a servery
V minulém díle se nám podařilo vyzkoušet si PowerShell knihovny pro práci s infrastrukturou zastřešenou HPE OneView. Dnes si v PowerShell napíšeme pár skriptů, které už budou dělat něco užitečnějšího.
Všechny skripty najdete na GitHub:
https://github.com/tkubica12/oneview-demo/tree/master/powershell
Skripty na práci s Volume
Ukažme si dva jednoduché skripty pro vytváření a mazání Volume ve storage ovládané z OneView. Nejprve se podívejme na příslušný kód a následně ho okomentuji a vyzkoušíme si.
# PowerShell script to demonstrate OneView interaction
# Creating volumes
# Tomas Kubica
param([String[]] $Volumes, [Int64] $Size)
Import-Module HPOneView.200
# Connect, if not connected already
if (-not($global:ConnectedSessions))
{
Connect-HPOVMgmt -Hostname 192.168.89.100 -UserName Administrator -Password HPEnet123
}
# Get Storage pool
$pool = Get-HPOVStoragePool CPG-SSD
# Create volumes for each name in input
foreach ($volume in $Volumes) {
New-HPOVStorageVolume -Name $volume -StoragePool $pool -Capacity $Size -Description "Created with PowerShell"
}
Co se tedy ve skriptu děje? Nejprve definujeme, že chceme přijímat nějaké vstupní parametry, konkrétně parametr Volumes (ten očekáváme jako list řetězců, tedy akceptujeme více hodnot pro vytvoření několika disků najednou) a hodnotu Size, velikost disku. Následně importujeme OneView moduly a připojíme se do Oneview, pokud už není v této session spojení sestaveno (údaje pro připojení jsou přímo v kódu, což není ideální, ale začínáme z jednoduchého – upravte si pro vaší OneView appliance).
Následně si uložíme objekt představující storage pool s názvem CPG-SSD. Název je rovněž přímo v kódu, lepší by bylo ho posílat také jako parametr. V GUI jde o tento údaj:
Pak už jen vezmeme výčet názvů Volume ze vstupu a pro každý zavoláme příkaz pro jeho vytvoření.
Takhle to vypadá, když to spustíme:
PS C:\git\oneview-demo\powershell> .\createVolume.ps1 -Volumes vol1,vol2,vol3 -Size 1
Appliance : 192.168.89.100
Name : Create
Owner : Administrator
Created : 2016-08-11T11:42:53.708Z
Duratuon : 00:00:00
TaskState : New
Complete : 0
ProgressUpdates : {}
TaskErrors : {}
ParentTaskUri :
Appliance : 192.168.89.100
Name : Create
Owner : Administrator
Created : 2016-08-11T11:42:53.792Z
Duratuon : 00:00:00
TaskState : New
Complete : 0
ProgressUpdates : {}
TaskErrors : {}
ParentTaskUri :
Appliance : 192.168.89.100
Name : Create
Owner : Administrator
Created : 2016-08-11T11:42:53.901Z
Duratuon : 00:00:00
TaskState : New
Complete : 0
ProgressUpdates : {}
TaskErrors : {}
ParentTaskUri :
Podívejte se do GUI – jsou tam?
Jak se jich zbavit? Jak jednoduše a rychle smazat seznam Volumů? Klikání v GUI trvá dlouho, udělejme si na to PowerShell skript:
# PowerShell script to demonstrate OneView interaction
# Deleting volumes
# Tomas Kubica
param([String[]] $Volumes, [Int64] $Size)
Import-Module HPOneView.200
# Connect, if not connected already
if (-not($global:ConnectedSessions))
{
Connect-HPOVMgmt -Hostname 192.168.89.100 -UserName Administrator -Password HPEnet123
}
# Get Storage pool
$pool = Get-HPOVStoragePool CPG-SSD
# Delete volume for each name in input
foreach ($volume in $Volumes) {
Get-HPOVStorageVolume $volume | Remove-HPOVStorageVolume -Confirm
}
Komentář už asi není potřeba, ukažme si použití skriptu.
PS C:\git\oneview-demo\powershell> .\deleteVolume.ps1 -Volumes vol1,vol2,vol3
Confirm
Are you sure you want to perform this action?
Performing the operation "Remove Storage Volume from appliance '192.168.89.100'?'" on target "vol1".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): a
Appliance : 192.168.89.100
Name : Delete
Owner : Administrator
Created : 2016-08-11T11:45:38.544Z
Duratuon : 00:00:00
TaskState : New
Complete : 0
ProgressUpdates : {}
TaskErrors : {}
ParentTaskUri :
Confirm
Are you sure you want to perform this action?
Performing the operation "Remove Storage Volume from appliance '192.168.89.100'?'" on target "vol2".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): a
Appliance : 192.168.89.100
Name : Delete
Owner : Administrator
Created : 2016-08-11T11:45:41.181Z
Duratuon : 00:00:00
TaskState : New
Complete : 0
ProgressUpdates : {}
TaskErrors : {}
ParentTaskUri :
Confirm
Are you sure you want to perform this action?
Performing the operation "Remove Storage Volume from appliance '192.168.89.100'?'" on target "vol3".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"): a
Appliance : 192.168.89.100
Name : Delete
Owner : Administrator
Created : 2016-08-11T11:45:42.061Z
Duratuon : 00:00:00
TaskState : New
Complete : 0
ProgressUpdates : {}
TaskErrors : {}
ParentTaskUri :
A je to, jsou pryč.
Server s připojením a lokálními disky
Ukažme si teď něco ještě užitečnějšího. Dejme tomu, že potřebujeme skriptem nabootovat hned několik fyzických serverů určitého typu, například blade žiletku BL 460c Gen9. Chceme tedy, aby skript našel nějakou, která není používána (nemá přiřazený profil) a na tu nám profil vytvořil. Aby to mohl udělat, musí být ovšem server vypnutý, takže pokud to tak není, nechť ho skript vypne. Server ale také chceme nějak připojený ven, takže skriptu potřebujeme jako parametr předat jméno připraveného napojení směrem ven. Budeme chtít lokální storage a tak by se nám hodilo, abychom mohli skriptu říct, jak má řadič nastavit – zda bez raidu, nebo v raidu 0 či 1. Výsledek bude vypadat nějak takhle:
# PowerShell script to demonstrate OneView interaction
# Creating and booting one or more servers
# Tomas Kubica
param(
[String[]] $Servers,
[String] $Hardware = "BL460c Gen9 1",
[String] $Connection,
[ValidateSet('NONE','RAID0','RAID1')]
[String] $Raid,
[Int32] $Drives = 2
)
Import-Module HPOneView.200
# Connect, if not connected already
if (-not($global:ConnectedSessions))
{
Connect-HPOVMgmt -Hostname 192.168.89.100 -UserName Administrator -Password HPEnet123
}
# Create connection profile
if ($Connection) {
$connectivity = Get-HPOVNetwork $Connection | New-HPOVServerProfileConnection -Name My_connection -ConnectionID 1
}
# Create logical disk
if ($Raid) {
$logicalDisk = New-HPOVServerProfileLogicalDisk -RAID $Raid -NumberofDrives $Drives -Name My_drive -Bootable $True
}
foreach ($Server in $Servers) {
Write-Host "Creating server $Server"
# Get list of unassigned servers and select first available
$selectedServer = ""
$unassignedServers = Get-HPOVServer -NoProfile
foreach ($unassignedServer in $unassignedServers) {
$hardwareUri = Get-HPOVServerHardwareType -Name $Hardware
if ($unassignedServer.serverHardwareTypeUri -eq $hardwareUri.uri) {
$selectedServer = $unassignedServer
break
}
}
# Check whether server is power on and if yes, power off
if ($selectedServer -ne "Off") {
Write-Host "Turning server power off"
Stop-HPOVServer -Server $selectedServer -Force -Confirm
}
# Create server profile
if ($Raid -And $Connection) {
New-HPOVServerProfile -Name $Server -Server $selectedServer -AssignmentType server -LocalStorage -LogicalDisk $logicalDisk -Initialize -ManageBoot -Connections @($connectivity)
}
elseif ($Connection) {
New-HPOVServerProfile -Name $Server -Server $selectedServer -AssignmentType server -Connections @($connectivity)
}
elseif ($Raid) {
New-HPOVServerProfile -Name $Server -Server $selectedServer -AssignmentType server -LocalStorage -LogicalDisk $logicalDisk -Initialize -ManageBoot
}
else {
New-HPOVServerProfile -Name $Server -Server $selectedServer -AssignmentType server
}
# Power server on
Start-HPOVServer -Server $selectedServer
}
Co se tam tedy děje? Nejprve definujeme vstupní parametry (u některých jsem dal výchozí hodnotu, ať ji nemusím pokaždé psát) a připojíme se do OneView. Pak začneme procházet požadovaný seznam serverů a dělat následující operace.
- Pokud je specifikováno připojení do LAN, vytvoříme si Connection.
- Pokud je specifikována lokální storage, vytvoříme si příslušný objekt.
- Vypíšeme si seznam volných serverů a najdeme takový, který odpovídá požadovanému modelu. První co najdeme, použijeme.
- Pokud je zapnutý, musíme ho vypnout.
- Vytvoříme server na základě předchozích parametrů.
- Server nabootujeme.
Zkusme si to.
PS C:\git\oneview-demo\powershell> .\createServer.ps1 -Servers srv1,srv2,srv3 -Connection PROD_10 -Raid RAID1 -Drives 2
Creating server srv1
Turning server power off
Appliance : 192.168.89.100
Name : Create
Owner : Administrator
Created : 2016-08-11T12:17:38.380Z
Duratuon : 00:00:00
TaskState : New
Complete : 0
ProgressUpdates : {}
TaskErrors : {}
ParentTaskUri :
Appliance : 192.168.89.100
Name : Power on
Owner : Administrator
Created : 2016-08-11T12:17:38.509Z
Duratuon : 00:00:05
TaskState : Completed
Complete : 100
ProgressUpdates : {}
TaskErrors : {}
ParentTaskUri :
Creating server srv2
Turning server power off
Appliance : 192.168.89.100
Name : Create
Owner : Administrator
Created : 2016-08-11T12:17:44.915Z
Duratuon : 00:00:00
TaskState : New
Complete : 0
ProgressUpdates : {}
TaskErrors : {}
ParentTaskUri :
Appliance : 192.168.89.100
Name : Power on
Owner : Administrator
Created : 2016-08-11T12:17:45.098Z
Duratuon : 00:00:05
TaskState : Completed
Complete : 100
ProgressUpdates : {}
TaskErrors : {}
ParentTaskUri :
Creating server srv3
Turning server power off
Appliance : 192.168.89.100
Name : Create
Owner : Administrator
Created : 2016-08-11T12:17:51.290Z
Duratuon : 00:00:00
TaskState : New
Complete : 0
ProgressUpdates : {}
TaskErrors : {}
ParentTaskUri :
Appliance : 192.168.89.100
Name : Power on
Owner : Administrator
Created : 2016-08-11T12:17:51.466Z
Duratuon : 00:00:05
TaskState : Completed
Complete : 100
ProgressUpdates : {}
TaskErrors : {}
ParentTaskUri :
Podívejte se do GUI.
Pokud k OneView pořídíte ještě Insight Control Server Provisioning nebo využijete nové generace serverů HPE Synergy s komponentou Image Streamer, můžete v tomto skriptu zařídit i nabootování do nějaké image a mít tak fyzický server ihned připraven pro virtualizaci, kontejnery nebo aplikaci.


