Uso de datos de configuración para definir entornos de desarrollo y producción:
Veamos un ejemplo completo que utiliza una única configuración para configurar los entornos de desarrollo y producción de un sitio web. En el entorno de desarrollo, tanto IIS como SQL Server se instalan en un solo nodo. En el entorno de producción, IIS y SQL Server se instalan en nodos separados. Usaremos un archivo de datos de configuración .psd1 para especificar los datos para los dos entornos diferentes.
Archivo de datos de configuración:
Definiremos los datos del entorno de desarrollo y producción en un archivo denominado DevProdEnvData.psd1 de la siguiente manera:
@{
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\"
}
)
}
Archivo de script de configuración:
Ahora, en la configuración, que se define en un archivo .ps1, filtramos los nodos que definimos en DevProdEnvData.psd1 por su rol (MSSQL, Dev o ambos) y los configuramos en consecuencia. El entorno de desarrollo tiene SQL Server e IIS en un nodo, mientras que el entorno de producción los tiene en dos nodos diferentes. El contenido del sitio también es diferente, según lo especificado por las propiedades SiteContents.
Al final del script de configuración, llamamos a la configuración (la compilamos en un documento MOF), pasando DevProdEnvData.psd1 como el parámetro $ConfigurationData.
Nota: esta configuración requiere que los módulos xSqlPs y xWebAdministration estén instalados en el nodo de destino.
Definamos la configuración en un archivo llamado MyWebApp.ps1:
Configuration MyWebApp
{
Import-DscResource -Module PSDesiredStateConfiguration
Import-DscResource -Module xSqlPs
Import-DscResource -Module 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
Cuando ejecuta esta configuración, se crean tres archivos MOF (uno para cada entrada con nombre en la 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 datos que no son de nodo:
Puede agregar claves adicionales a la tabla hash ConfigurationData para datos que no son específicos de un nodo. La siguiente configuración asegura la presencia de dos sitios web. Los datos de cada sitio web se definen en la matriz AllNodes. El archivo Config.xml se usa para ambos sitios web, por lo que lo definimos en una clave adicional con el nombre NonNodeData. Tenga en cuenta que puede tener tantas claves adicionales como desee y puede nombrarlas como desee. NonNodeData no es una palabra reservada, es justo lo que decidimos nombrar como clave adicional.
Accede a claves adicionales usando la variable especial $ConfigurationData. En este ejemplo, se accede a ConfigFileContents con la línea:
Contents = $ConfigurationData.NonNodeData.ConfigFileContents
En el bloque de recursos de archivo.
$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
}
}
}
Seguiremos con más documentación de MS.