Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
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
xSqlPssurxWebAdministrationle 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
}
}
}