- 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.