Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a: Windows PowerShell 4.0, Windows PowerShell 5.0
Pode ser útil separar os dados usados em uma configuração de DSC da própria configuração usando dados de configuração. Ao fazer isso, você pode usar uma única configuração para vários ambientes.
Por exemplo, se você estiver desenvolvendo um aplicativo, poderá usar uma configuração para ambientes de desenvolvimento e produção e usar dados de configuração para especificar dados para cada ambiente.
O que são dados de configuração?
Os dados de configuração são dados definidos em uma tabela de hash e passados para uma configuração de DSC quando você compila essa configuração.
Para obter uma descrição detalhada da tabela de hash ConfigurationData , consulte Usando dados de configuração.
Um exemplo simples
Vejamos um exemplo muito simples para ver como isso funciona. Criaremos uma única configuração que garante que o IIS esteja presente em alguns nós e que o Hyper-V esteja presente em outros:
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
A última linha neste script compila a configuração, passando $MyData como o valor ConfigurationData parâmetro.
O resultado é que dois arquivos MOF são criados:
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 especifica dois nós diferentes, cada um com seu próprio NodeName e Role. A configuração cria dinamicamente blocos de nó pegando a coleção de nós que obtém ( $MyData especificamente, $AllNodes) e filtra essa coleção em relação à Role propriedade.
Usando dados de configuração para definir ambientes de desenvolvimento e produção
Vejamos um exemplo completo que usa uma única configuração para configurar os ambientes de desenvolvimento e produção de um site. No ambiente de desenvolvimento, o IIS e o SQL Server são instalados em um único nó. No ambiente de produção, o IIS e o SQL Server são instalados em nós separados. Usaremos um arquivo .psd1 de dados de configuração para especificar os dados para os dois ambientes diferentes.
Arquivo de dados de configuração
Definiremos os dados do ambiente de desenvolvimento e produção em um arquivo chamado DevProdEnvData.psd1 da seguinte maneira:
@{
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\"
}
)
}
Arquivo de script de configuração
Agora, na configuração, que é definida em um .ps1 arquivo, filtramos os nós que definimos por DevProdEnvData.psd1 sua função (MSSQL, Dev, ou ambos) e os configuramos de acordo. O ambiente de desenvolvimento tem o SQL Server e o IIS em um nó, enquanto o ambiente de produção os tem em dois nós diferentes. O conteúdo do site também é diferente, conforme especificado pelas SiteContents propriedades.
No final do script de configuração, chamamos a configuração (compilamos em um documento MOF), passando DevProdEnvData.psd1 como parâmetro $ConfigurationData .
Nota: Essa configuração requer que os módulos
xSqlPssejamxWebAdministrationinstalados no nó de destino.
Vamos definir a configuração em um arquivo chamado 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
Quando você executa essa configuração, três arquivos MOF são criados (um para cada entrada nomeada na matriz 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
Usando dados que não são de nó
Você pode adicionar chaves adicionais à tabela de hash ConfigurationData para dados que não são específicos de um nó. A configuração a seguir garante a presença de dois sites. Os dados de cada site são definidos na matriz AllNodes . O arquivo Config.xml é usado para ambos os sites, então nós o definimos em uma chave adicional com o nome NonNodeData. Observe que você pode ter quantas chaves adicionais quiser e nomeá-las como quiser.
NonNodeData não é uma palavra reservada, é apenas o que decidimos nomear a chave adicional.
Você acessa chaves adicionais usando a variável especial $ConfigurationData. Neste exemplo, ConfigFileContents é acessado com a linha:
Contents = $ConfigurationData.NonNodeData.ConfigFileContents
no bloco de File recursos.
$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
}
}
}