Partager via


Séparation des données de configuration et d’environnement

S’applique à : Windows PowerShell 4.0, Windows PowerShell 5.0

Il peut être utile de séparer les données utilisées dans une configuration DSC de la configuration elle-même à l’aide des données de configuration. Ce faisant, vous pouvez utiliser une seule configuration pour plusieurs environnements.

Par exemple, si vous développez une application, vous pouvez utiliser une configuration pour les environnements de développement et de production, et utiliser les données de configuration pour spécifier les données de chaque environnement.

Qu’est-ce qu’une donnée de configuration ?

Les données de configuration sont des données définies dans une table de hachage et transmises à une configuration DSC lorsque vous compilez cette configuration.

Pour obtenir une description détaillée de la table de hachage ConfigurationData , consultez Utilisation des données de configuration.

Un exemple simple

Regardons un exemple très simple pour voir comment cela fonctionne. Nous allons créer une configuration unique qui garantit qu’IIS est présent sur certains nœuds et qu’Hyper-V est présent sur d’autres :

Configuration MyDscConfiguration {

  Node $AllNodes.Where{$_.Role -eq "WebServer"}.NodeName
    {
  WindowsFeature IISInstall {
    Ensure = 'Present'
    Name   = 'Web-Server'
  }

 }
    Node $AllNodes.Where{$_.Role -eq "VMHost"}.NodeName
    {
        WindowsFeature HyperVInstall {
            Ensure = 'Present'
            Name   = 'Hyper-V'
        }
    }
}

$MyData =
@{
    AllNodes =
    @(
        @{
            NodeName    = 'VM-1'
            Role = 'WebServer'
        },

        @{
            NodeName    = 'VM-2'
            Role = 'VMHost'
        }
    )
}

MyDscConfiguration -ConfigurationData $MyData

La dernière ligne de ce script compile la configuration, en transmettant $MyData comme valeur le paramètre ConfigurationData .

Le résultat est que deux fichiers MOF sont créés :

    Directory: C:\DscTests\MyDscConfiguration


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        3/31/2017   5:09 PM           1968 VM-1.mof
-a----        3/31/2017   5:09 PM           1970 VM-2.mof

$MyData spécifie deux nœuds différents, chacun avec son propre NodeName et Role. La configuration crée dynamiquement des blocs de nœuds en prenant la collection de nœuds dont elle provient ( $MyData plus précisément, $AllNodes) et filtre cette collection en fonction de la Role propriété.

Utilisation des données de configuration pour définir les environnements de développement et de production

Prenons un exemple complet qui utilise une seule configuration pour mettre en place à la fois les environnements de développement et de production d’un site web. Dans l’environnement de développement, IIS et SQL Server sont installés sur un seul nœud. Dans l’environnement de production, IIS et SQL Server sont installés sur des nœuds distincts. Nous allons utiliser un fichier de données de configuration .psd1 pour spécifier les données des deux environnements différents.

Fichier de données de configuration

Nous allons définir les données de l’environnement de développement et de production dans un fichier nommé DevProdEnvData.psd1 comme suit :

@{

    AllNodes = @(

        @{
            NodeName        = "*"
            SQLServerName   = "MySQLServer"
            SqlSource       = "C:\Software\Sql"
            DotNetSrc       = "C:\Software\sxs"
            WebSiteName     = "New website"
        },

        @{
            NodeName        = "Prod-SQL"
            Role            = "MSSQL"
        },

        @{
            NodeName        = "Prod-IIS"
            Role            = "Web"
            SiteContents    = "C:\Website\Prod\SiteContents\"
            SitePath        = "\\Prod-IIS\Website\"
        },

        @{
            NodeName         = "Dev"
            Role             = "MSSQL", "Web"
            SiteContents     = "C:\Website\Dev\SiteContents\"
            SitePath         = "\\Dev\Website\"
        }
    )
}

Fichier de script de configuration

Maintenant, dans la configuration, qui est définie dans un .ps1 fichier, nous filtrons les nœuds que nous avons définis en DevProdEnvData.psd1 fonction de leur rôle (MSSQL, Dev, ou les deux) et les configurons en conséquence. L’environnement de développement dispose de SQL Server et d’IIS sur un nœud, tandis que l’environnement de production les a sur deux nœuds différents. Le contenu du site est également différent, comme spécifié par les SiteContents propriétés.

À la fin du script de configuration, nous appelons la configuration (nous la compilons dans un document MOF), en la passant DevProdEnvData.psd1 en $ConfigurationData paramètre.

Note: Cette configuration nécessite l’installation des modules xSqlPs sur xWebAdministration le nœud cible.

Définissons la configuration dans un fichier nommé MyWebApp.ps1:

Configuration MyWebApp
{
    Import-DSCResource -ModuleName PSDesiredStateConfiguration
    Import-DSCResource -ModuleName xSqlPs
    Import-DSCResource -ModuleName xWebAdministration

    Node $AllNodes.Where{$_.Role -contains "MSSQL"}.NodeName
   {
        # Install prerequisites
        WindowsFeature installdotNet35
        {
            Ensure      = "Present"
            Name        = "Net-Framework-Core"
            Source      = "c:\software\sxs"
        }

        # Install SQL Server
        xSqlServerInstall InstallSqlServer
        {
            InstanceName = $Node.SQLServerName
            SourcePath   = $Node.SqlSource
            Features     = "SQLEngine,SSMS"
            DependsOn    = "[WindowsFeature]installdotNet35"

        }
   }

   Node $AllNodes.Where{$_.Role -contains "Web"}.NodeName
   {
        # Install the IIS role
        WindowsFeature IIS
        {
            Ensure       = 'Present'
            Name         = 'Web-Server'
        }

        # Install the ASP .NET 4.5 role
        WindowsFeature AspNet45
        {
            Ensure       = 'Present'
            Name         = 'Web-Asp-Net45'

        }

        # Stop the default website
        xWebsite DefaultSite
        {
            Ensure       = 'Present'
            Name         = 'Default Web Site'
            State        = 'Stopped'
            PhysicalPath = 'C:\inetpub\wwwroot'
            DependsOn    = '[WindowsFeature]IIS'

        }

        # Copy the website content
        File WebContent

        {
            Ensure          = 'Present'
            SourcePath      = $Node.SiteContents
            DestinationPath = $Node.SitePath
            Recurse         = $true
            Type            = 'Directory'
            DependsOn       = '[WindowsFeature]AspNet45'

        }


        # Create the new Website

        xWebsite NewWebsite

        {

            Ensure          = 'Present'
            Name            = $Node.WebSiteName
            State           = 'Started'
            PhysicalPath    = $Node.SitePath
            DependsOn       = '[File]WebContent'
        }

    }

}

MyWebApp -ConfigurationData DevProdEnvData.psd1

Lorsque vous exécutez cette configuration, trois fichiers MOF sont créés (un pour chaque entrée nommée dans le tableau AllNodes ) :

    Directory: C:\DscTests\MyWebApp


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        3/31/2017   5:47 PM           2944 Prod-SQL.mof
-a----        3/31/2017   5:47 PM           6994 Dev.mof
-a----        3/31/2017   5:47 PM           5338 Prod-IIS.mof

Utilisation de données non noeudiques

Vous pouvez ajouter des clés supplémentaires à la table de hachage ConfigurationData pour les données qui ne sont pas spécifiques à un nœud. La configuration suivante assure la présence de deux sites web. Les données de chaque site Web sont définies dans le tableau AllNodes . Le fichier Config.xml est utilisé pour les deux sites web, nous le définissons donc dans une clé supplémentaire avec le nom NonNodeData. Notez que vous pouvez avoir autant de clés supplémentaires que vous le souhaitez et que vous pouvez les nommer comme vous le souhaitez. NonNodeData n’est pas un mot réservé, c’est juste le nom que nous avons décidé de donner à la clé supplémentaire.

Vous pouvez accéder à des clés supplémentaires à l’aide de la variable spéciale $ConfigurationData. Dans cet exemple, ConfigFileContents on y accède par la ligne :

 Contents = $ConfigurationData.NonNodeData.ConfigFileContents

dans le bloc de File ressources.

$MyData =
@{
    AllNodes =
    @(
        @{
            NodeName           = "*"
            LogPath            = "C:\Logs"
        },

        @{
            NodeName = "VM-1"
            SiteContents = "C:\Site1"
            SiteName = "Website1"
        },


        @{
            NodeName = "VM-2"
            SiteContents = "C:\Site2"
            SiteName = "Website2"
        }
    );

    NonNodeData =
    @{
        ConfigFileContents = (Get-Content C:\Template\Config.xml)
     }
}

configuration WebsiteConfig
{
    Import-DscResource -ModuleName xWebAdministration -Name MSFT_xWebsite

    node $AllNodes.NodeName
    {
        xWebsite Site
        {
            Name         = $Node.SiteName
            PhysicalPath = $Node.SiteContents
            Ensure       = "Present"
        }

        File ConfigFile
        {
            DestinationPath = $Node.SiteContents + "\\config.xml"
            Contents = $ConfigurationData.NonNodeData.ConfigFileContents
        }
    }
}

Voir aussi