Réglage de l'état souhaité (ASN): C'est plus facile que vous ne le pensez

Contenu

Logo Powershell

Avez-vous déjà pensé à essayer DSC, mais vous avez estimé que la courbe d'apprentissage est trop raide? Ou peut-être que vous ne vous êtes jamais vu l'utiliser en production, donc il n'a pas pris la peine?

L'utilisation de DSC ne doit pas être difficile ou complexe, et vous n'avez pas besoin d'une infrastructure gigantesque pour que cela en vaille la peine. Cet article parlera de DSC et comment commencer, et comprend des exemples de la façon dont vous pouvez commencer en l'appliquant à petite échelle en production.

Qu'est-ce que le DSC?

Les paramètres d'état souhaités (ASN) est un système de gestion de configuration qui est intégré à Windows et vous permet de configurer votre système en tant que code. Utilise une configuration écrite en PowerShell qui est ensuite convertie en un format d'objet géré (MOF).

Le fichier MOF est ensuite lu et appliqué par le service Local Configuration Manager sur le nœud cible (l'ordinateur).

La configuration qui est créée et exécutée utilise différents DSC moyens de Modules DSC. Les modules DSC sont comme un module PowerShell normal et les ressources sont leurs fonctions. Par exemple, vous pouvez les installer en utilisant Install-Module, et sont stockés ci-dessous dans le PSModuleChemin.

Pour quoi puis-je utiliser DSC?

La partie la plus difficile de DSC pour beaucoup est de trouver des cas d'utilisation. Les gens ont tendance à parler et à écrire sur DSC uniquement lorsqu'il s'agit d'orchestrer et de faire tourner de grandes salles, ou test et QA pour différentes applications, qui est un sujet lointain pour de nombreux administrateurs.

Nous pouvons utiliser DSC pour nos routines quotidiennes et bien plus encore, sans avoir à restructurer toute notre organisation. J'ai compilé une liste de certains domaines que vous pouvez automatiser entièrement ou partiellement avec DSC:

Exemple: lecture et écriture d'une configuration DSC

Quelques lignes de DSC peuvent égaler des centaines de lignes avec PowerShell brut, c'est pourquoi il peut être si incroyablement puissant.

Une configuration DSC se compose principalement de 2 les pièces: Configuration DSC et données de configuration.

Données de configuration (qui sont expliqués ci-dessous) peut être inclus en externe, généralement à partir d'un fichier PSD, ou être inclus dans le fichier de configuration. L'approche recommandée et la plus simple à maintenir consiste à l'inclure à partir d'un fichier séparé.

Ensuite, montre un exemple de création d'un MOF DSC qui télécharge et installe un MSI générique lorsqu'il est appliqué:

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

        }

    }
}

Après avoir exécuté ce code, créer une fonction de configuration dans la session PowerShell actuelle qui peut être utilisée. Créez un sous-dossier avec le même nom que la configuration où vous enregistrez les fichiers MOF générés:

PS51> MyDSCConfiguration

    Directory: C:TutorialsDSCMyDSCConfiguration


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

Vous pouvez appliquer tous les paramètres DSC du dossier MyDSCConfiguration à votre hôte en exécutant:

PS51> Start-DscConfiguration -Path .MyDSCConfiguration -Wait

Utilisation de DSC avec ConfigurationData

Les données de configuration contiennent des données de configuration pour la configuration DSC. Les informations incluent un nom de nœud (Nom de l'ordinateur) et peut contenir d'autres données telles que des informations sur la façon d'installer un package MSI ou des valeurs de clé de registre, etc. Cela nous donne une approche dynamique et plus polyvalente de la DSC., afin qu'il puisse être réutilisé. et facilement modifiable.

Disons que vous avez ces trois serveurs et que chacun a besoin d'une combinaison unique de packages:

  • serveur de fichiers-1
  • base de données-1
    • Besoins: Agent de sauvegarde, BackupAgent-DatabaseAddon
  • serveur d'applications-1
    • Besoins: Agent de sauvegarde, Agent de surveillance

La meilleure approche consiste à créer un fichier avec les données de configuration dont vous avez besoin, ne pas simplement spécifier les nœuds (les serveurs), mais aussi en y ajoutant une liste de packages:

# 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"    
        }
    )
}

Vous pouvez désormais utiliser ce fichier de données de configuration pour générer dynamiquement des configurations DSC pour vos serveurs.:

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
            }
        }
    }
}

Si vous exécutez ceci, la fonction DSC génère un fichier MOF pour chacun de vos serveurs qui peut être utilisé pour installer les packages que vous avez définis dans le Données de configuration.psd1 Record:

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

Si vous souhaitez ajouter de nouveaux packages, modifier votre Données de configuration.psd1 fichier et exécutez le code ci-dessus une fois de plus.

conclusion

Démarrer avec DSC peut être une courbe d'apprentissage assez courte et raide. Mais le plus difficile pour beaucoup est de trouver des cas d'utilisation où ils peuvent l'utiliser.

En utilisant la méthode ci-dessus qui utilise HTTP (HTTPS) La recherche de packages vous offre un moyen polyvalent de fournir des logiciels à vos serveurs. Et parce que c'est HTTPS, De plus, il est plus facile à exposer et vous pouvez l'utiliser pour gérer des logiciels sur DMZ et d'autres réseaux moins fiables.

En même temps, l'utilisation des données de configuration au lieu de tout coder en dur dans vos configurations DSC vous offre une approche beaucoup plus facile à maintenir. Vous pouvez même générer ces données de configuration à partir de sources externes telles que CSV, SQL, Sharepoint et tout ce qui peut être lu avec PowerShell.

J'espère que vous avez quelques idées pour votre environnement pour commencer à faciliter vos tâches quotidiennes avec DSC..

Abonnez-vous à notre newsletter

Nous ne vous enverrons pas de courrier SPAM. Nous le détestons autant que vous.