A Desired State Configuration több részből áll. Egyrészt tartalmaz egy PSDesiredStateConfiguration modult, mellyel létrehozhatjuk konfigurációinkat, felmérhetjük, hogy milyen konfiguráció van beállítva a gépünk számára és még sok egyebet, melyekről részletesebben később:
PS C:\> Get-Command -Module PSDesiredStateConfiguration
CommandType Name Version
----------- ---- -------
Function Configuration 1.1
Function Disable-DscDebug 1.1
Function Enable-DscDebug 1.1
Function Find-DscResource 1.1
Function Get-DscConfiguration 1.1
Function Get-DscConfigurationStatus 1.1
Function Get-DscLocalConfigurationManager 1.1
Function Get-DscResource 1.1
Function New-DscChecksum 1.1
Function Remove-DscConfigurationDocument 1.1
Function Restore-DscConfiguration 1.1
Function Stop-DscConfiguration 1.1
Cmdlet Invoke-DscResource 1.1
Cmdlet Publish-DscConfiguration 1.1
Cmdlet Set-DscLocalConfigurationManager 1.1
Cmdlet Start-DscConfiguration 1.1
Cmdlet Test-DscConfiguration 1.1
Cmdlet Update-DscConfiguration 1.1
Következő komponens a Local Configuration Manager, amely a konfigurációkat hajtja végre, azaz a gépet olyanná teszi, amit kijelentő módban megfogalmaztunk. Itt jön azonban egy kis csavar! Az LCM nem érti meg a PowerShell nyelvet, hanem csak a MOF (Management Object Format) szabványos fájl formájában megfogalmazott instrukciókat. Azaz le kell fordítanunk először a konfigurációt MOF nyelvre és azt fogja tudni használni az LCM. Ezt egyszer elég elvégezni, utána már csak a megfelelő MOF fájlt kell eljuttatni a gépekre és az ottani LCM-ek elvégzik a rájuk bízott konfigurációs feladatokat.
De hogyan jut el a MOF fájl a gépekre? Ezt valamilyen erre alkalmas telepítő (deployment) rendszer végezheti. A „gyári” megoldás a DSC-Service Windows szerver képesség, mellyel a gépek beállíthatók u.n. „pull” üzemmódra, azaz bizonyos rendszerességgel ránéznek erre a szerverre és lehúzzák magukra a nekik szóló konfigurációt majd alkalmazzák:
PS C:\> Get-WindowsFeature dsc* | ft -Wrap
Display Name Name
------------ ----
[X] Windows PowerShell Desired State Configuration DSC-Service
Service
Lehet ilyen telepítő rendszer a Chef
Server (https://learn.chef.io) is, mint az egyik legnépszerűbb “infrastructure
policy as a code”
rendszer.
A következő komponensfajta a DSC bővítményben az erőforrás (resource). A konfigurációkban erőforrásokat definiálunk és állítjuk be a paramétereiket. Az erőforrások PowerShell modulok, melyek lehetnek binárisak vagy szkript alapúak, és a „hogyan”-t definiálják. Van néhány gyári erőforrás, de a PowerShell közösség által közkinccsé bocsátott erőforrásokat is telepíthetünk és használhatunk vagy mi magunk is készíthetünk erőforrásokat a saját céljainkra.
A telepített erőforrásokat a Get-DSCResource cmdlettel kérdezhetjük le. Mivel én még nem telepítettem semmilyen egyedi erőforrást, így ez a lista most a gyári erőforrásokat tartalmazza:
PS C:\> Get-DscResource
ImplementedAs Name ModuleName Versi
on
------------- ---- ---------- -----
Binary File
PowerShell Archive PSDesiredStateConfiguration 1.1
PowerShell Environment PSDesiredStateConfiguration 1.1
PowerShell Group PSDesiredStateConfiguration 1.1
Binary Log PSDesiredStateConfiguration 1.1
PowerShell Package PSDesiredStateConfiguration 1.1
PowerShell Registry PSDesiredStateConfiguration 1.1
PowerShell Script PSDesiredStateConfiguration 1.1
PowerShell Service PSDesiredStateConfiguration 1.1
PowerShell User PSDesiredStateConfiguration 1.1
PowerShell WaitForAll PSDesiredStateConfiguration 1.1
PowerShell WaitForAny PSDesiredStateConfiguration 1.1
PowerShell WaitForSome PSDesiredStateConfiguration 1.1
PowerShell WindowsFeature PSDesiredStateConfiguration 1.1
PowerShell WindowsOptionalFeature PSDesiredStateConfiguration 1.1
PowerShell WindowsProcess PSDesiredStateConfiguration 1.1
Nézzük meg példaként a legegyszerűbbeket! A File erőforrás segítségével írhatjuk elő a konfigurációban, hogy bizonyos könyvtár legyen egy adott helyen, vagy hogy egy fájl (meghatározva annak forrását) legyen egy adott célkönyvtárban. Maga az erőforrás definíciója tartalmazza, hogyan kell egy könyvtár meglétét ellenőrizni, ha szükséges, hogyan kell létrehozni. Szintén ez az erőforrás tudja, hogyan kell ellenőrizni, hogy egy fájl megtalálható-e egy célkönyvtárban, ugyanaz a fájl található-e meg, és ha nem, akkor hogyan kell azt a kívánt helyre másolni.
A Registry erőforrás segítségével registry értékeket lehet létrehozatni, hasonlóan, ahogy a fájlerőforrás működik. A WindowsFeature erőforrás segítségével pedig Windows képességeket lehet telepíteni.
Természetesen egy erőforrás telepítése vagy beállítása nem olyan, mint a csoportos házirendek abban az értelemben, hogy ha elvesszük a konfigurációt, akkor nem áll vissza az eredeti állapot. Ezért az erőforrások általában kétfajta módon konfigurálhatók: legyen vagy épp fordítva, ne legyen.
Nézzünk konkrétan egy DSC konfigurációt, ami egy fájlt másol egyik helyről a másikra és egy registry értéket hoz létre:
configuration FajlRegLegyenOtt {
Node localhost {
File Fájl {
Ensure = 'Present'
Type = 'File'
SourcePath = 'C:\PowerShell\Default.txt'
DestinationPath = 'c:\FolderByDSC\Default.txt'
MatchSource = $true
}
Registry Reg {
Key = "HKLM:\SOFTWARE\SoosTibor"
ValueName = "AzEnErtekem"
Ensure = 'Present'
ValueData = "DSC-vel létrehozva"
ValueType = "String"
}
}
}
A DSC konfigurációt a configuration kulcsszóval kezdjük (ami igazából nem is kulcsszó, hanem egy függvény, de az egyszerűség kedvéért kezeljük úgy, mint a function kulcsszót). A konfigurációnak – hasonlóan a függvényeknek – nevet kell adni, ez itt a FajlRegLegyenOtt lett. Ezután következik a Node kulcsszó, ami után megadjuk, hogy melyik gépre hasson a konfiguráció. Itt most egyszerűségképpen a localhost szerepel.