DSC komponensek és alapfogalmak

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.



Word To HTML Converter