cloud-riders.ES Powershell,WINDOWS DSC: Separación de los datos de configuración y del entorno (2)

DSC: Separación de los datos de configuración y del entorno (2)DSC: Separación de los datos de configuración y del entorno (2)

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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Related Post