Share via


Konfigurációs és környezeti adatok szétválasztása

Érintett kiadások: Windows PowerShell 4.0, Windows PowerShell 5.0

Hasznos lehet a DSC-konfigurációkban használt adatok elkülönítése magáról a konfigurációról konfigurációs adatok használatával. Ezzel egyetlen konfigurációt használhat több környezethez.

Ha például egy alkalmazást fejleszt, egy konfigurációt használhat fejlesztési és éles környezetekhez is, és konfigurációs adatokkal megadhatja az egyes környezetek adatait.

Mik azok a konfigurációs adatok?

A konfigurációs adatok olyan adatok, amelyek egy kivonattáblában vannak definiálva, és a konfiguráció lefordításakor egy DSC-konfigurációnak lesznek átadva.

A ConfigurationData kivonattáblájának részletes leírását lásd: Konfigurációs adatok használata.

Egy egyszerű példa

Tekintsünk meg egy nagyon egyszerű példát, hogy lássuk, hogyan működik ez. Egyetlen konfigurációt hozunk létre, amely biztosítja, hogy az IIS jelen legyen egyes csomópontokon, és hogy a Hyper-V más csomópontokon is jelen legyen:

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 szkript utolsó sora lefordítja a konfigurációt, és $MyData a ConfigurationData paraméterként adja át az értéket.

Az eredmény az, hogy két MOF-fájl jön létre:

    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 két különböző csomópontot határoz meg, mindegyik saját NodeName és Role. A konfiguráció dinamikusan hozza létre a Csomópontblokkokat a kapott csomópontok $MyData gyűjteményének (konkrétan $AllNodes) és a gyűjteménynek a Role tulajdonságon való szűrésével.

Konfigurációs adatok használata fejlesztési és éles környezetek definiálásához

Tekintsünk meg egy teljes példát, amely egyetlen konfigurációt használ egy webhely fejlesztési és éles környezeteinek beállításához. A fejlesztési környezetben az IIS és a SQL Server is egyetlen csomópontra van telepítve. Éles környezetben az IIS és a SQL Server külön csomópontokra vannak telepítve. A konfigurációs adatok .psd1 fájlját fogjuk használni a két különböző környezet adatainak megadásához.

Konfigurációs adatfájl

A fejlesztési és éles környezet adatait a következőképpen definiáljuk egy nevű DevProdEnvData.psd1 fájlban:

@{

    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\"
        }
    )
}

Konfigurációs szkriptfájl

Most a fájlban definiált .ps1 konfigurációban szűrjük a szerepkörük (MSSQL, vagy mindkettő) által definiált DevProdEnvData.psd1 csomópontokat, Devés ennek megfelelően konfiguráljuk őket. A fejlesztési környezet az SQL Server és az IIS-t is egy csomóponton, míg az éles környezetben két különböző csomóponton található. A webhely tartalma is eltér a tulajdonságok által meghatározottaktól SiteContents .

A konfigurációs szkript végén meghívjuk a konfigurációt (lefordítjuk egy MOF-dokumentumba), és paraméterként $ConfigurationData továbbítjukDevProdEnvData.psd1.

Megjegyzés: Ehhez a konfigurációhoz telepíteni kell a modulokat xSqlPs , és xWebAdministration telepíteni kell a célcsomópontra.

Definiáljuk a konfigurációt egy nevű MyWebApp.ps1fájlban:

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

A konfiguráció futtatásakor a rendszer három MOF-fájlt hoz létre (egyet az AllNodes tömb minden elnevezett bejegyzéséhez):

    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

Nem csomópontos adatok használata

További kulcsokat adhat hozzá a ConfigurationData kivonattáblához olyan adatokhoz, amelyek nem egy csomópontra vonatkoznak. Az alábbi konfiguráció két webhely meglétét biztosítja. Az egyes webhelyek adatai az AllNodes tömbben vannak definiálva. A fájlt Config.xml mindkét webhelyhez használjuk, ezért egy további kulcsban definiáljuk a következő néven NonNodeData: . Vegye figyelembe, hogy annyi további kulcs lehet, amennyit csak szeretne, és bármit elnevezhet nekik. NonNodeData nem egy fenntartott szó, csak az, amit úgy döntöttünk, hogy nevezze el a további kulcsot.

További kulcsokat a speciális $ConfigurationData változóval érhet el. Ebben a példában ConfigFileContents a következő sor érhető el:

 Contents = $ConfigurationData.NonNodeData.ConfigFileContents

az File erőforrásblokkban.

$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
        }
    }
}

Lásd még: