Gewünschte Zustandseinstellung (DSC): es ist einfacher als du denkst

Inhalt

Powershell-Logo

Schon mal darüber nachgedacht, DSC auszuprobieren, aber die Lernkurve war zu steil? Oder vielleicht haben Sie es nie in der Produktion gesehen, deshalb hat er sich nicht darum gekümmert?

Die Verwendung von DSC muss nicht schwierig oder komplex sein, und du brauchst keine gigantische Infrastruktur, damit es sich lohnt. In diesem Beitrag wird über DSC und die ersten Schritte gesprochen, und enthält Beispiele, wie Sie mit der Anwendung in kleinem Maßstab in der Produktion beginnen können.

Was ist DSC?

Die gewünschten Zustandseinstellungen (DSC) ist ein in Windows integriertes Konfigurationsverwaltungssystem, mit dem Sie Ihr System als Code konfigurieren können. Verwendet eine in PowerShell geschriebene Konfiguration, die dann in ein verwaltetes Objektformat konvertiert wird (MOF).

Die MOF-Datei wird dann vom Local Configuration Manager Service auf dem Zielknoten gelesen und angewendet (Computer).

Die erstellte und ausgeführte Konfiguration verwendet verschiedene DSCs meint von Módulos DSC. DSC-Module sind wie ein normales PowerShell-Modul und Ressourcen sind ihre Funktionen. Als Beispiel, Sie können sie installieren mit Install-Module, und werden unten im PSModulePath.

Wofür kann ich DSC verwenden??

Der schwierigste Teil von DSC ist für viele das Finden von Anwendungsfällen. Die Leute neigen dazu, nur dann über DSC zu sprechen und zu schreiben, wenn es darum geht, große Veranstaltungsorte zu orchestrieren und zu drehen, oder Test und QA für verschiedene Anwendungen, was für viele Administratoren ein fernes Thema ist.

Wir können DSC für unsere täglichen Routinen und vieles mehr nutzen, ohne unsere gesamte Organisation umstrukturieren zu müssen. Ich habe eine Liste mit einigen Bereichen zusammengestellt, die Sie mit DSC . ganz oder teilweise automatisieren können:

Beispiel: Lesen und Schreiben einer DSC-Konfiguration

Ein paar Zeilen von DSC können Hunderten von Zeilen mit roher PowerShell entsprechen, Deshalb kann es so unglaublich mächtig sein.

Eine DSC-Konfiguration besteht hauptsächlich aus 2 Teile: DSC-Konfiguration und Konfigurationsdaten.

Konfigurationsdaten (die werden unten erklärt) kann extern eingebunden werden, in der Regel aus einer PSD-Datei, oder in die Konfigurationsdatei aufgenommen werden. Der empfohlene und am einfachsten zu wartende Ansatz besteht darin, dies aus einer separaten Datei aufzunehmen.

Nächste, zeigt ein Beispiel für die Erstellung eines DSC-MOF, das bei Anwendung eine generische MSI herunterlädt und installiert:

Configuration MyDSCConfiguration {
    # Import DSC modules with resources to use in the configuration
    Import-DscResource -ModuleName PSDesiredStateConfiguration
    Import-DscResource -ModuleName xPSDesiredStateConfiguration -ModuleVersion "8.10.0.0"

    ##############################################
    # Creates configuration for the server fileserver-1
    ##############################################
    Node "fileserver-1" {
       
        # Create C:ProgramDataSoftwarePackages to download files to on all nodes 
        File SoftwarePackagesDirectory { 
            # Identifier "SoftwarePackagesDirectory" using the DSC resource "File" from DSC module "PSDesiredStateConfiguration"

            DestinationPath = "C:ProgramDataSoftwarePackages"
            Type = "Directory" # Is a directory
            Ensure = "Present" # Ensure that it exists

        }

                # Download MSI
        xRemoteFile DownloadBackupAgent {
            # The xRemoteFile resource from xPSDesiredStateConfiguration DSC module used to download an MSI through HTTP
    
            DependsOn = "[File]SoftwarePackagesDirectory" # Tells DSC to not run this if the previous step hasn't completed successfully
            Uri = "http://web.contoso.com/packages/backupagent.msi" # Where to download the remote file from
            DestinationPath = "C:ProgramDataSoftwarePackagesBackupAgent.msi" # Where to save the downloaded file
    
        }
                
                # Install MSI
        xMsiPackage InstallBackupAgent {
            # The xMsiPackage resource from xPSDesiredStateConfiguration DSC module used to install the MSI we just downloaded
            
            DependsOn = "[xRemoteFile]DownloadBackupAgent" # Depends on previous step being completed before starting
            ProductId = "d29c3fa9-e03e-40e0-a6ed-556c6f05476a" # The MSI package ProductID
            Path = "C:ProgramDataSoftwarePackagesBackupAgent.msi" # Path to the MSI file we just downloaded
            Ensure = "Present" # Ensure that it's present (install the MSI), 'Ensure = "Absent"' would uninstall the MSI

        }

    }
}

Nach dem Ausführen dieses Codes, Erstellen Sie eine Konfigurationsfunktion in der aktuellen PowerShell-Sitzung, die verwendet werden kann. Erstellen Sie einen Unterordner mit demselben Namen wie die Konfiguration, in der Sie die generierten MOF-Dateien speichern:

PS51> MyDSCConfiguration

    Directory: C:TutorialsDSCMyDSCConfiguration


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2019-10-28     16:38           3952 fileserver-1.mof

Sie können alle DSC-Einstellungen im Ordner MyDSCConfiguration auf Ihren Host anwenden, indem Sie:

PS51> Start-DscConfiguration -Path .MyDSCConfiguration -Wait

Verwenden von DSC mit ConfigurationData

Konfigurationsdaten enthalten Konfigurationsdaten für die DSC-Konfiguration. Die Informationen umfassen einen Knotennamen (Computername) und kann andere Daten enthalten, z. B. Informationen zur Installation eines MSI-Pakets oder Registrierungsschlüsselwerte, usw. Dies gibt uns einen dynamischen und vielseitigeren Ansatz für DSC., damit es wiederverwendet werden kann. und leicht veränderbar.

Nehmen wir an, Sie haben diese drei Server und jeder benötigt eine einzigartige Kombination von Paketen:

  • Dateiserver-1
  • Datenbank-1
    • Bedürfnisse: BackupAgent, BackupAgent-DatenbankAddon
  • Anwendungsserver-1
    • Bedürfnisse: BackupAgent, MonitoringAgent

Am besten erstellen Sie eine Datei mit den benötigten Konfigurationsdaten, nicht nur die Knoten angeben (Server), aber auch eine Liste von Paketen darin hinzufügen:

# Save as ConfigurationData.psd1

@{
        #############################
        # Specify server nodes
    #############################
    AllNodes = @(
        @{
            NodeName = "*"
        }

        # File server node
        @{
            NodeName = "fileserver-1"
            Role = "Fileserver"

            # Selects what packages to install
            Packages = @(
                'BackupAgent'
            )
        },

        # Database server node
        @{
            NodeName = "database-1"
            Role = "Database"

            # Selects what packages to install
            Packages = @(
                'BackupAgent',
                'BackupAgent-DataBaseAddon'
            )
        },

        # Appserver node
        @{
            NodeName = "appserver-1"
            Role = "Appserver"

            # Selects what packages to install
            Packages = @(
                'BackupAgent',
                'MonitoringAgent'
            )
        }
    )

        #############################
    # Establece each package
        #############################
    Packages = @(
        @{
            Name = "BackupAgent"
            ProductId = "3c4e21b5-8de2-408e-84e0-a42b0507b8b1"
            FileName = "BackupAgent.msi"
            Ensure = "Present"    
        },
        @{
            Name = "BackupAgent-DataBaseAddon"
            ProductId = "97f860f6-0a58-4bf3-aef8-abc0f796e9df"
            FileName = "BackupAgent-DataBaseAddon.msi"
            Ensure = "Present"
        },
        @{
            Name = "MonitoringAgent"
            ProductId = "77b29b12-c222-4d85-b812-bbd4136ad0ff"
            FileName = "MonitoringAgent.msi"
            Ensure = "Present"    
        }
    )
}

Sie können nun diese Konfigurationsdatendatei verwenden, um dynamisch DSC-Konfigurationen für Ihre Server zu generieren.:

Configuration MyDSCConfiguration {
    # Import DSC modules with resources to use in the configuration
    Import-DscResource -ModuleName PSDesiredStateConfiguration
    Import-DscResource -ModuleName xPSDesiredStateConfiguration -ModuleVersion "8.10.0.0"

    # Get Packages from the ConfigurationData
    $Packages = $ConfigurationData.Packages

    ##############################################
    # Applies to all nodes
    ##############################################
    Node $AllNodes.NodeName {
        
        # Create C:ProgramDataSoftwarePackages to download files to on all nodes
        File SoftwarePackagesDirectory { 
            DestinationPath = "C:ProgramDataSoftwarePackages"
            Type = "Directory" # Is a directory
            Ensure = "Present" # Ensure that it exists
        }

        # Start dynamically generating DSC configuration by running through all the package names in Node.Packages
        Foreach($PackageName in $Node.Packages){

            $Package = $Packages.Where{$_.Name -eq $PackageName}

            xRemoteFile "PackageDownload-$($Package.Name)" {
                DependsOn = "[File]SoftwarePackagesDirectory"
                DestinationPath = "C:SoftwarePackages$($Package.FileName)"
                Uri = "http://web.contso.com/packages/$($Package.FileName)"
            }

            xMsiPackage "Install$($Package.Name)" {
                DependsOn = "[xRemoteFile]PackageDownload-$($Package.Name)"
                ProductId = $Package.ProductId
                Path = "C:ProgramDataSoftwarePackages$($Package.FileName)"
                Ensure = $Package.Ensure
            }
        }
    }
}

Wenn du das ausführst, die DSC-Funktion generiert für jeden Ihrer Server eine MOF-Datei, die verwendet werden kann, um die Pakete zu installieren, die Sie im Konfigurationsdaten.psd1 Verfahren:

PS51> MyDSCConfiguration -ConfigurationData .ConfigurationData.psd1


    Directory: C:TutorialsDSCMyDSCConfiguration


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2019-10-28     17:25           3962 fileserver-1.mof
-a----       2019-10-28     17:25           6012 database-1.mof
-a----       2019-10-28     17:25           5894 appserver-1.mof

# Applies the configuration to the servers
PS51> Start-DscConfiguration -Path .MyDSCConfiguration -Wait

Wenn Sie neue Pakete hinzufügen möchten, ändere deine Konfigurationsdaten.psd1 Datei und führen Sie den obigen Code noch einmal aus.

Fazit

Der Einstieg in DSC kann eine ziemlich kurze und steile Lernkurve sein. Aber das Schwierigste für viele ist es, Anwendungsfälle zu finden, in denen sie es verwenden können.

Verwenden der obigen Methode, die HTTP verwendet (o HTTPS) Die Suche nach Paketen bietet Ihnen eine vielseitige Möglichkeit, Ihren Servern Software bereitzustellen. Und weil es HTTPS ist, Außerdem ist es einfacher zu veröffentlichen und Sie können Software in DMZ und anderen weniger zuverlässigen Netzwerken verwalten.

Gleichzeitig, Die Verwendung von Setup-Daten, anstatt alles in Ihren DSC-Setups fest zu codieren, ermöglicht Ihnen einen viel einfacheren Ansatz für die Wartung. Sie können diese Konfigurationsdaten sogar aus externen Quellen wie CSV generieren, SQL, Sharepoint und alles andere was mit PowerShell gelesen werden kann.

Ich hoffe, Sie haben einige Ideen für Ihre Umgebung, um Ihre täglichen Aufgaben mit DSC zu erleichtern..

Abonnieren Sie unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.