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
, ésxWebAdministration
telepíteni kell a célcsomópontra.
Definiáljuk a konfigurációt egy nevű MyWebApp.ps1
fá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:
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: