Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op: Windows PowerShell 4.0, Windows PowerShell 5.0
Het kan nuttig zijn om de gegevens die in een DSC-configuratie worden gebruikt, te scheiden van de configuratie zelf door gebruik te maken van configuratiegegevens. Door dit te doen, kunt u een enkele configuratie gebruiken voor meerdere omgevingen.
Als u bijvoorbeeld een toepassing ontwikkelt, kunt u één configuratie gebruiken voor zowel ontwikkelings- als productieomgevingen en configuratiegegevens gebruiken om gegevens voor elke omgeving op te geven.
Wat zijn configuratiegegevens?
Configuratiegegevens zijn gegevens die zijn gedefinieerd in een hashtabel en worden doorgegeven aan een DSC-configuratie wanneer u die configuratie compileert.
Zie Configuratiegegevens gebruiken voor een gedetailleerde beschrijving van de hashtabel ConfigurationData.
Een eenvoudig voorbeeld
Laten we eens kijken naar een heel eenvoudig voorbeeld om te zien hoe dit werkt. We maken één configuratie die ervoor zorgt dat IIS aanwezig is op sommige knooppunten en dat Hyper-V aanwezig is op andere:
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
De laatste regel in dit script compileert de configuratie en geeft $MyData door als de waarde ConfigurationData parameter.
Het resultaat is dat er twee MOF-bestanden worden gemaakt:
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
$MyDataSpecificeert twee verschillende knooppunten, elk met zijn eigen NodeName en .Role De configuratie maakt dynamisch knooppuntblokken door de verzameling knooppunten te nemen waar het vandaan komt (specifiek $MyData , $AllNodes) en filtert die verzameling op de Role eigenschap.
Configuratiegegevens gebruiken om ontwikkelings- en productieomgevingen te definiëren
Laten we eens kijken naar een compleet voorbeeld dat een enkele configuratie gebruikt om zowel de ontwikkelings- als de productieomgeving van een website op te zetten. In de ontwikkelomgeving worden zowel IIS als SQL Server op één knooppunt geïnstalleerd. In de productieomgeving worden IIS en SQL Server op afzonderlijke nodes geïnstalleerd. We gebruiken een .psd1-bestand met configuratiegegevens om de gegevens voor de twee verschillende omgevingen op te geven.
Gegevensbestand configuratie
We definiëren de gegevens van de ontwikkelings- en productieomgeving in een bestand met de volgende naam DevProdEnvData.psd1 :
@{
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\"
}
)
}
Configuratie script bestand
Nu, in de configuratie, die is gedefinieerd in een .ps1 bestand, filteren we de knooppunten waarin DevProdEnvData.psd1 we hebben gedefinieerd op hun rol (MSSQL, Dev, of beide) en configureren we ze dienovereenkomstig. De ontwikkelomgeving heeft zowel de SQL Server als IIS op één knooppunt, terwijl de productieomgeving ze op twee verschillende knooppunten heeft. De inhoud van de site is ook anders, zoals aangegeven door de SiteContents eigenschappen.
Aan het einde van het configuratiescript roepen we de configuratie aan (compileer het in een MOF-document), waarbij DevProdEnvData.psd1 we doorgaan als de $ConfigurationData parameter.
Notitie: Deze configuratie vereist dat de modules
xSqlPsxWebAdministrationworden geïnstalleerd op het doelknooppunt.
Laten we de configuratie definiëren in een bestand met de naam 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
Wanneer u deze configuratie uitvoert, worden er drie MOF-bestanden gemaakt (één voor elke benoemde vermelding in de AllNodes-array ):
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
Gegevens zonder knooppunt gebruiken
U kunt extra sleutels toevoegen aan de hashtabel ConfigurationData voor gegevens die niet specifiek zijn voor een knooppunt. De volgende configuratie zorgt voor de aanwezigheid van twee websites. Gegevens voor elke website worden gedefinieerd in de AllNodes-array . Het bestand Config.xml wordt voor beide websites gebruikt, dus we definiëren het in een extra sleutel met de naam NonNodeData. Houd er rekening mee dat u zoveel extra sleutels kunt hebben als u wilt, en dat u ze elke naam kunt geven die u wilt.
NonNodeData is geen gereserveerd woord, het is gewoon wat we hebben besloten om de extra sleutel te noemen.
U krijgt toegang tot extra toetsen met behulp van de speciale variabele $ConfigurationData. In dit voorbeeld ConfigFileContents wordt benaderd met de regel:
Contents = $ConfigurationData.NonNodeData.ConfigFileContents
in het File resourceblok.
$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
}
}
}