Blog: Wirtualizacja | Vmware

Jak automatyzować codzienne czynności w Vmware Horizon View 7

Jak automatyzować codzienne czynności w Vmware Horizon View 7
  • 1 625 views

Szybki start z PowerCLI i API

Udostępnij!

VMware Horizon™ , znany też jako VMware View™ to wiodące na rynku oprogramowanie do wirtualizacji desktopów i aplikacji. Choć wirtualizacja desktopów nie jest tak szeroko stosowana jak wirtualizacja serwerów, z roku na rok coraz więcej firm decyduje się na wykorzystanie tej technologii. Scentralizowane i zautomatyzowane przygotowanie środowiska pracy ma tym większe znaczenie im więcej jest „końcówek” i im ważniejsze jest bezpieczeństwo, zwłaszcza ograniczenia fizycznego dostępu do danych.

Administratorzy VMware Horizon mają do dyspozycji narzędzie, za pomocą którego można łatwo i szybko przeprowadzić provisioning setek czy nawet tysięcy desktopów. Użycie Linked Clones albo Instant Clones pozwala także zminimalizować czas potrzebny na aktualizację systemu czy zabezpieczeń. Administracja przy pomocy tradycyjnego, webowego „View Administrator’a” (dostępnego w wersji HTML oraz Flash) nie należy do trudnych i nieprzyjemnych, warto zatem poznać możliwości wykonywania wielu czynności przy użyciu linii komend. Pozwoli to szybciej przeprowadzać powtarzalne operacje, co może mieć szczególne znaczenie, jeśli chcemy coś wykonać na kilkuset maszynach wirtualnych w krótkim czasie. Poniżej postaram się opisać w jaki sposób przygotować sobie środowisko, wykonać pierwsze komendy przy pomocy PowerCLI dla Horizon View oraz dostać się do API i przykładów jego użycia.

Uruchomienie PowerCLI w MS Windows

PowerCLI – czyli bogaty zestaw comandletów do administracji produktami VMware – był niegdyś dostarczany jako instalator przynoszący dodatkowe snap-in do Powershella. Od jakiegoś czasu jednak (konkretnie od wersji 6.0), zamiast snap-in dostarczane są moduły, których ściągnięcie (od wersji 6.5.1 z roku 2017) nie wymaga nawet logowania się na konto klienckie w vmware.com. W przypadku systemów z dostępem do Internetu, instalacja jest banalnie prosta. Wystarczy interfejs Windows PowerShell uruchomiony z uprawnieniami administratora i polecenie:

Install-Module VMware.PowerCLI

albo w skrócie

inmo vmware.powercli


Instalacja PowerCLI to często tylko jedno polecenie.

Przy pomocy mechanizmu zależności polecenie zainstaluje potrzebne nam dodatki, czyli przede wszystkim dedykowany moduł VMware.VimAutomation.HorizonView. Informacje o nim można znaleźć pod adresem:
https://www.powershellgallery.com/packages/VMware.VimAutomation.HorizonView/

Jak można się tam przekonać, będą w nim tylko dwa comandlety (Connect-HVServer oraz Disconnect-HVServer). Jest nam zatem potrzebny dodatkowy moduł od VMware, zawierający wiele użytecznych skryptów.
Jeśli polecenie Install-module nie istnieje w systemie (błąd: The term ‚Install-Module’ is not recognized as the name of a cmdlet, function, script file), oznacza to konieczność instalacji Microsoft Management Framework 5.1. Uwaga: na systemie 2012 R2 właściwy plik to nie W2K12-KB3191565-x64.msu a Win8.1AndW2K12R2-KB3191564-x64.msu.

Horizon View PowerCLI Helper

Dodatkowy moduł należy ściągnąć wraz z całym zestawem przykładowych skryptów PowerCLI (https://github.com/vmware/PowerCLI-Example-Scripts/). Po rozpakowaniu ZIPa (zielona ikona clone or download) kopiujemy zawartość podkatalogu Modules/Vmware.Hv.Helper do któregoś z katalogów, gdzie PowerShell poszukuje swoich modułów. Listę tych katalogów można uzyskać wyświetlając $env:psmodulepath. Można użyć globalnego C:\Program Files\WindowsPowerShell\Modules
Po tej operacji powinny nam zadziałać polecenia.

Get-Module -ListAvailable 'Vmware.Hv.Helper' | Import-Module
Get-Command -Module 'VMware.Hv.Helper'

Pierwsze z nich importuje moduł, drugie natomiast wyświetla długą listę wszystkich dostępnych w nim funkcji.
Osobną kwestią do rozwiązania jest wybór programu, w którym chcemy pracować. Ja sam w przypadku serwerowych wersji systemu używam dostępnego w nim PowerShelI ISE, a przy wersjach desktopowych (jak Windows 10) dostępnego od stosunkowo niedawna Windows Terminal (https://aka.ms/terminal-video). Można go zainstalować przez Microsoft Store albo z adresu https://github.com/Microsoft/Terminal.

Windows Terminal w klienckich wersjach MS Windows da się zainstalować przez Microsoft Store

Weryfikacja, konfiguracja i pierwsze połączenie

Jak zapewne wiedzą wszystkie osoby pracujące w środowiskach bez prawidłowo podpisanych certyfikatów, pracę najwygodniej rozpocząć od wyłączenia ich weryfikacji. Dodatkowo jeszcze w MS Windows – jeśli wcześniej nie używaliśmy PowerShella – potrzebna jest komenda odblokowująca uruchamianie dowolnych skryptów:

Set-ExecutionPolicy -ExecutionPolicy Unrestricted
Set-PowerCLIConfiguration -InvalidCertificateAction Ignore

Instalację modułu od VMware możemy zweryfikować dzięki poleceniu:

Get-Module VMware.PowerCLI -ListAvailable

W kolejnym kroku warto testowo połączyć się z serwerem. Sprawdzając listę komandletów z nazwą zaczynającą się od Connect-… możemy zorientować się jak wiele produktów VMware jest administrowanych w ten sposób.

Dla nas interesujące będą polecenia:

Connect-VIServer

– połączenie do vCenter

Connect-HVServer

– połączenie do Connection Server Horizon View

W przypadku nadal występującego błędu SSL (Could not establish trust relationship for the SSL/TLS secure channel with authority) pomocne może być dodanie np. przy pomocy przeglądarki IE certyfikatu naszego serwera do „trusted root”.

Przykładowe polecenia

Jak łatwo się domyślić, naszym pierwszym merytorycznym poleceniem będzie połączenie się z Connection Server. Przykładowa składnia może wyglądać następująco:

Connect-HVServer -Server conserver.testy.local -User viewadmin@testy.local -Password 'VMware1!'Oczywiście w środowiskach produkcyjnych nie podajemy danych logowania - zostaniemy o nie zapytani interaktywnie.

Przy pomocy dostępnych funkcji możemy przeprowadzić praktycznie całą konfigurację serwera, wraz z budowaniem pul desktopów. Wydaje mi się jednak, że ważniejsze będą komendy wyświetlające stan obiektów (przy dużych instalacjach w View Administrator aby znaleźć potrzebne informacje i tak potrzebne jest filtrowanie).

Listę wszystkich pull można uzyskać przy pomocy:

Get-HVPoolSummary

Lista wszystkich desktopów w danej puli (iclone to nazwa puli)

Get-HVMachineSummary -PoolName iclone

Bardzo użyteczne jest listowanie maszyn według ich stanu (inne możliwe stany w ramce), aby na przykład odnaleźć wszystkie z błędami albo wszystkie dostępne.

Get-HVMachineSummary -State AVAILABLE

Lista wszystkich sesji:

(get-hvlocalsession).namesdata
(get-hvlocalsession).sessiondata

I kolejne przykłady. Czy dana grupa lub użytkownik mają przypisane jakieś pule?

Get-HVEntitlement -user viewusers@vclass.local
(Get-HVEntitlement -user viewusers@vclass.local).base

Czy użytkownik jest w w AD? – po podłączeniu do serwera vCenter:

Get-VIAccount -domain vclass.local -user viewusera

Lista wszystkich aplikacji (RHDS):

(Get-HVApplication).data

Lista wszystkich obrazów nadrzędnych (parent):

Get-HVBaseImageVM

Lista Connection Servers ze statusem:

Get-HVHealth

Lista serwerów vCenter ze statusem:

Get-HVvCenterServer
Get-HVvCenterServerHealth

Wszystkie te elementy można łączyć w skrypty czy nawet „jednolinikowce” nie posiadając dużej wiedzy programistycznej. Poniżej znajduje się przykład, jak uzyskać listę maszyn, które posiadają agenta Horizon w stanie rozłączonym i wykonać restart systemu operacyjnego od razu dla wszystkich takich urządzeń:

$problems=Get-HVMachineSummary -state DISCONNECTED; foreach ($problem in $problems) {get-vm -name $problem.base.name | Restart-VMGuest}

Praca z API

Od wielu wersji Horizon View dostarcza API, którego pełną dokumentację można znaleźć pod adresem https://code.vmware.com/apis/405/view. Wszystkie jego polecenia są dostępne z poziomu PowerCli; REST API niestety nie. Takowe posiada Horizon Server, jest to jednak inny produkt.
Aby korzystać bezpośrednio z funkcjonalności View API, wymagana będzie pewna wiedza programistyczna i sporo czasu poświęconego na analizę struktury obiektów. Jest to niewątpliwie znacznie większe wyzwanie niż codzienne używanie PowerCLI.
Na szczęście mamy jednak sporo przykładów, zarówno tych zawartych w Horizon View PowerCLI Helper, jak i rozmaitych artykułach dostępnych w Internecie. Można w nich znaleźć różne rozwiązania codziennych problemów w dużej skali.
Warto zwrócić uwagę na omawianą wersję produktu. Nowe API wraz z omawianą tu funkcjonalnością PowerCLI Helper działa w Horizon od wersji 7.0.2 wzwyż. Duża część – jeżeli nie większość – materiałów dostępnych on-line dotyczy starszego interfejsu, który już nie działa.

Stany, w których może się znajdować wirtualny desktop użyteczne w funkcji

Get-HVMachineSummary

AGENT_CONFIG_ERROR
AGENT_ERR_DISABLED
AGENT_ERR_DOMAIN_FAILURE
AGENT_ERR_INVALID_IP
AGENT_ERR_NEED_REBOOT
AGENT_ERR_PROTOCOL_FAILURE
AGENT_ERR_STARTUP_IN_PROGRESS
AGENT_UNREACHABLE
ALREADY_USED
AVAILABLE
CONNECTED CUSTOMIZING DELETING
DISABLE_IN_PROGRESS
DISCONNECTED DISABLED
ERROR IN_PROGRESS
MAINTENANCE
PROVISIONED
PROVISIONING
PROVISIONING_ERROR
UNASSIGNED_USER_CONNECTED
UNASSIGNED_USER_DISCONNECTED
UNKNOWN
VALIDATING
WAIT_FOR_AGENT