Delen via


Configuratie- en omgevingsgegevens scheiden

Van toepassing op: Windows PowerShell 4.0, Windows PowerShell 5.0

Het kan handig zijn om de gegevens die in een DSC-configuratie worden gebruikt, te scheiden van de configuratie zelf met behulp van configuratiegegevens. Door dit te doen, kunt u één configuratie voor meerdere omgevingen gebruiken.

Als u bijvoorbeeld een toepassing ontwikkelt, kunt u één configuratie gebruiken voor zowel ontwikkel- 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

Met de laatste regel in dit script wordt de configuratie gecompileerd, waarbij de waarde ConfigurationData parameter wordt doorgegeven$MyData.

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

$MyData hiermee geeft u twee verschillende knooppunten op, elk met een eigen NodeName en Role. De configuratie maakt dynamisch knooppuntblokken door de verzameling knooppunten te nemen die afkomstig zijn van $MyData (met name $AllNodes) en die verzameling te filteren op basis van de Role eigenschap..

Configuratiegegevens gebruiken om ontwikkel- en productieomgevingen te definiëren

Laten we eens kijken naar een volledig voorbeeld waarin één configuratie wordt gebruikt om zowel ontwikkel- als productieomgevingen van een website in te stellen. In de ontwikkelomgeving worden zowel IIS als SQL Server op één knooppunt geïnstalleerd. In de productieomgeving worden IIS en SQL Server op afzonderlijke knooppunten geïnstalleerd. We gebruiken een psd1-bestand met configuratiegegevens om de gegevens voor de twee verschillende omgevingen op te geven.

Configuratiegegevensbestand

We definiëren de gegevens van de ontwikkel- en productieomgeving als volgt in een bestand met de 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\"
        }
    )
}

Configuratiescriptbestand

Nu filteren we in de configuratie, die is gedefinieerd in een .ps1 bestand, de knooppunten waarin we hebben gedefinieerd op DevProdEnvData.psd1 hun rol (MSSQL, Devof 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 verschilt ook, zoals opgegeven door de SiteContents eigenschappen.

Aan het einde van het configuratiescript roepen we de configuratie aan (compileer deze in een MOF-document), waarbij we als parameter $ConfigurationData doorgevenDevProdEnvData.psd1.

Opmerking: Voor deze configuratie moeten de modules xSqlPs en xWebAdministration op het doelknooppunt worden geïnstalleerd.

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-matrix ):

    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

Niet-knooppuntgegevens 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 matrix AllNodes . Het bestand Config.xml wordt gebruikt voor beide websites, 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 gewenste naam kunt geven. NonNodeData is geen gereserveerd woord, het is precies wat we besloten om de extra sleutel te noemen.

U hebt toegang tot aanvullende sleutels met behulp van de speciale variabele $ConfigurationData. In dit voorbeeld ConfigFileContents wordt geopend 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
        }
    }
}

Zie ook