Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: Windows PowerShell 4.0, Windows PowerShell 5.0
Может быть полезно отделить данные, используемые в конфигурации DSC, от самой конфигурации с помощью конфигурационных данных. Таким образом, вы можете использовать одну конфигурацию для нескольких сред.
Например, при разработке приложения можно использовать одну конфигурацию как для среды разработки, так и для рабочей среды, а также использовать данные конфигурации для указания данных для каждой среды.
Что такое конфигурационные данные?
Данные конфигурации — это данные, которые определяются в хэш-таблице и передаются в конфигурацию DSC при компиляции этой конфигурации.
Подробное описание хэш-таблицы ConfigurationData см. в разделе Использование данных конфигурации.
Простой пример
Давайте рассмотрим очень простой пример, чтобы увидеть, как это работает. Мы создадим единую конфигурацию, которая гарантирует, что IIS присутствует на одних узлах, а Hyper-V — на других:
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
Последняя строка в этом скрипте компилирует конфигурацию, передавая $MyData в качестве значения параметр ConfigurationData .
В результате создаются два MOF-файла:
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 указывает два разных узла, каждый со своим и NodeNameRole. Конфигурация динамически создает блоки узлов , беря коллекцию узлов, от которых она получает ( $MyData в частности, $AllNodes), и фильтрует эту коллекцию по свойству Role .
Использование данных конфигурации для определения сред разработки и рабочей среды
Давайте рассмотрим полный пример, в котором используется одна конфигурация для настройки как среды разработки, так и рабочей среды веб-сайта. В среде разработки IIS и SQL Server устанавливаются на одном узле. В производственной среде IIS и SQL Server устанавливаются на отдельных узлах. Мы будем использовать файл конфигурационных данных .psd1, чтобы указать данные для двух разных сред.
Файл с конфигурационными данными
Мы определим данные среды разработки и производственной среды в файле с именем следующим образом 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\"
}
)
}
Файл конфигурационного скрипта
Теперь в конфигурации, которая определена в файле .ps1 , мы фильтруем определенные DevProdEnvData.psd1 нами узлы по их роли (MSSQL, Devили обеим) и настраиваем их соответствующим образом. В среде разработки SQL Server и IIS находятся на одном узле, в то время как в производственной среде они находятся на двух разных узлах. Содержимое сайта также отличается, как указано в свойствах SiteContents .
В конце конфигурационного скрипта мы вызываем конфигурацию (компилируем ее в MOF-документ), передавая DevProdEnvData.psd1 ее в качестве параметра $ConfigurationData .
Заметка: Эта конфигурация требует, чтобы модули
xSqlPsбылиxWebAdministrationустановлены на целевом узле.
Давайте определим конфигурацию в файле с именем 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
При запуске этой конфигурации создаются три MOF-файла (по одному для каждой именованной записи в массиве 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
Использование данных, не относящихся к узлам
Вы можете добавить дополнительные ключи в хэш-таблицу ConfigurationData для данных, которые не относятся к узлу. Следующая конфигурация обеспечивает наличие двух сайтов. Данные для каждого сайта определяются в массиве AllNodes . Файл Config.xml используется для обоих сайтов, поэтому мы определяем его в дополнительном ключе с именем NonNodeData. Обратите внимание, что у вас может быть столько дополнительных ключей, сколько вы хотите, и вы можете назвать их как угодно.
NonNodeData это не зарезервированное слово, это просто то, как мы решили назвать дополнительный ключ.
Доступ к дополнительным ключам осуществляется с помощью специальной переменной $ConfigurationData. В данном примере доступ осуществляется с помощью строки: ConfigFileContents
Contents = $ConfigurationData.NonNodeData.ConfigFileContents
в блоке File ресурсов.
$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
}
}
}