Strona korzysta z plików cookies w celu realizacji usług i zgodnie z Polityką Plików Cookies.
Data publikacji: 29-12-2022 | Autor: | Bartosz Bielawski |
Po pierwszych dwóch częściach cyklu poświęconego VMware vSphere DSC wiemy już, jak przygotować środowisko do pracy i jakich narzędzi możemy użyć przy tworzeniu, testowaniu i aplikowaniu konfiguracji z wykorzystaniem tego narzędzia. W części trzeciej przyjrzymy się, jak podzielić konfigurację na mniejsze fragmenty oraz jak może wyglądać przykładowa konfiguracja dla pojedynczego hosta.
VMware DSC bazuje na skryptach – musimy zadbać o ich odpowiednią strukturę oraz o przekazywanie parametrów wewnątrz tych skryptów. Podobnie jak wszystkie skrypty, te wykorzystywane przez VMware DSC zaczynają się od bloku parametrów. Możemy je wykorzystać zarówno na początku skryptu, jak i wewnątrz konfiguracji, musimy jednak pamiętać, by parametry zdefiniować również wewnątrz konfiguracji:
[CmdletBinding()]
param (
[String]$VIServer
)
configuration Podstawowa {
param (
[String]$VIServer
)
Import-DscResource -ModuleName VMware.vSphereDSC
# ...
}
Skrypty mogą zawierać kilka konfiguracji, które możemy kompilować osobno i wybierać interesującą nas konfigurację, gdy uruchamiamy polecenie New-VmwDscConfiguration.
Skrypt z konfiguracjami
Gdy tworzymy poszczególne konfiguracje, mamy dwie możliwości – przekazywanie szczegółów połączenia w każdym z zasobów bądź skorzystanie z bloku vSphereNode. Z pierwszej opcji skorzystać musimy wtedy, gdy VMware DSC będziemy używać w ramach tradycyjnego DSC. Nie możemy w tym wypadku polegać na bieżącej sesji, gdyż silnik odpowiedzialny za DSC, Local Configuration Manager (LCM), uruchamiać będzie procesy w kontekście bieżącego systemu. Ponieważ zdecydowaliśmy na samym początku, że korzystać będziemy z PowerShell 7, możemy użyć nieco wygodniejszego rozwiązania, jakim jest blok vSphereNode. W bloku tym na początku definiujemy, jakie połączenie używane będzie przy konfigurowaniu systemu, dzięki czemu we wszystkich wykorzystanych zasobach informację o połączeniu możemy pominąć. Przykładowa prosta konfiguracja korzystająca z obu możliwości:
configuration Tradycyjna {
param(
[string]$VIServer,
[PSCredential]$Credential
)
Import-DscResource -ModuleName 'VMware.vSphereDSC'
node localhost {
Datacenter Serwerownia {
Server = $VIServer
Credential = $Credential
Name = 'Serwerownia'
Location = ''
Ensure = 'Present'
}
}
}
configuration vSphereNode {
param (
[String]$VIServer
)
Import-DscResource -ModuleName 'VMware.vSphereDSC'
vSphereNode $VIServer {
Datacenter Serwerownia {
Name = 'Serwerownia'
Location = ''
Ensure = 'Present'
}
}
}
Oczywiście tak jak wspomnieliśmy w poprzedniej części, taka konfiguracja zadziała jedynie wtedy, gdy uprzednio nawiążemy połączenie z serwerem w niej wykorzystywanym. Zdecydowanie upraszcza to konfigurowanie obszernych środowisk bez konieczności powtarzania w zasadzie niezmiennych parametrów połączenia. Ważne jednak, by pamiętać o tym udogodnieniu w trakcie tworzenia konfiguracji. Mimo że większość zasobów wymaga parametrów Server i Credential, to gdy korzystamy z nich w ramach bloku vSphereNode, możemy je pominąć.
Konfiguracja infrastruktury
Tworząc skrypt z konfiguracjami, powinniśmy też zadbać, by móc bez trudu wykorzystywać konfiguracje dla wielu podobnych elementów infrastruktury. Najlepszym sposobem, by to osiągnąć, jest skorzystanie ze znanego z tradycyjnego DSC parametru ConfigurationData. Jest to tablica skrótów, w której możemy przekazywać wszelkie dynamiczne elementy naszej konfiguracji – w przypadku tworzenia klastrów mogłaby to być ich nazwa, w przypadku hostów – nazwa, parametry związane z ustawieniami sieci czy dostępne wirtualne przełączniki i grupy portów. Tutaj również musimy pamiętać, by parametr ten umieścić na poziomie skryptu oraz na poziomie samej konfiguracji:
[CmdletBinding()]
param (
[HashTable]$ConfigurationData,
[String]$VIServer
)
configuration Podstawowa {
param (
[HashTable]$ConfigurationData,
[String]$VIServer
)
Import-DscResource -ModuleName VMware.vSphereDSC
vSphereNode $VIServer {
Datacenter Serwerownia {
Name = $ConfigurationData.Datacenter
Location = ''
Ensure = 'Present'
}
}
}
Oczywiście o obu parametrach (VIServer, ConfigurationData) musimy pamiętać w trakcie uruchamiania polecenia New-VmwDscConfiguration:
$parametry = @{
Path = ‘KonfiguracjePodstawowe.ps1’
ConfigurationName = ‘Podstawowa’
Parameters = @{
VIServer = ‘vcenter.contoso.com’
ConfigurationData = @{
Datacenter = ‘Serwerownia’
}
}
}
New-VMwDscConfiguration @parametry
Gdy tworzymy repozytorium konfiguracji, warto zadbać o pewną strukturę, dzięki której łatwiej będzie zarządzać konfiguracją na poziomie pojedynczego hosta wirtualizacji oddzielnie od ustawień na poziomie całego vCenter, klastra czy dystrybuowanego przełącznika wirtualnego. Warto też zadbać, by pewne parametry współdzielone pomiędzy węzłami klastra (jak choćby parametry dotyczące sieci służącej do zarządzania czy do vMotion) łatwo było definiować niezależnie od samego pliku konfiguracyjnego, oddzielając w ten sposób dane od kodu. Możemy więc rozważyć następującą strukturę:
Informacje usystematyzowane w ten sposób umożliwiają większą kontrolę nad ustawieniami bez konieczności powielania danych w kilku plikach i mieszania ustawień – tych, które umożliwiają dodawanie nowego hosta do klastra, z tymi, które ustawiłyby wszystkie sieci dostępne w ramach takiego klastra.
[...]
Autor zawodowo zajmuje się informatyką. Były Microsoft MVP w dziedzinie PowerShella. Bloger oraz jeden z moderatorów forum dotyczącego skryptów w serwisie TechNet. Autor książki „Windows PowerShell 5.1 Biblia”.
Pełna treść artykułu jest dostępna w papierowym wydaniu pisma.
Transmisje online zapewnia: StreamOnline