Összetett erőforrások: DSC-konfiguráció használata erőforrásként
A következőkre vonatkozik: Windows PowerShell 4.0, Windows PowerShell 5.0
Valós helyzetekben a konfigurációk hosszúak és összetettek lehetnek, számos különböző erőforrást hívhatnak meg, és rengeteg tulajdonságot állíthatnak be. Ennek az összetettségnek a megoldásához Windows PowerShell Desired State Configuration (DSC) konfigurációt használhat más konfigurációk erőforrásaként. Ezt összetett erőforrásnak nevezzük. Az összetett erőforrás egy olyan DSC-konfiguráció, amely paramétereket vesz igénybe. A konfiguráció paraméterei az erőforrás tulajdonságaiként működnek.
A konfigurációt kiterjesztésű .schema.psm1
fájlként menti a rendszer. Ez az MOF-séma és az erőforrásszkript helyét is átveszi egy tipikus DSC-erőforrásban. További információ a DSC-erőforrásokról: Windows PowerShell Desired State Configuration Erőforrások.
Az összetett erőforrás létrehozása
A példában létrehozunk egy konfigurációt, amely számos meglévő erőforrást hív meg a virtuális gépek konfigurálásához. A konfigurációs blokkokban beállítandó értékek megadása helyett a konfiguráció a konfigurációs blokkokban használt paramétereket veszi fel.
Configuration xVirtualMachine
{
param
(
# Name of VMs
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[String[]] $VMName,
# Name of Switch to create
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[String] $SwitchName,
# Type of Switch to create
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[String] $SwitchType,
# Source Path for VHD
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[String] $VHDParentPath,
# Destination path for diff VHD
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[String] $VHDPath,
# Startup Memory for VM
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[String] $VMStartupMemory,
# State of the VM
[Parameter(Mandatory)]
[ValidateNotNullOrEmpty()]
[String] $VMState
)
# Import the module that defines custom resources
Import-DSCResource -ModuleName xComputerManagement,xHyper-V
# Install the Hyper-V role
WindowsFeature HyperV
{
Ensure = "Present"
Name = "Hyper-V"
}
# Create the virtual switch
xVMSwitch $SwitchName
{
Ensure = "Present"
Name = $SwitchName
Type = $SwitchType
DependsOn = "[WindowsFeature]HyperV"
}
# Check for Parent VHD file
File ParentVHDFile
{
Ensure = "Present"
DestinationPath = $VHDParentPath
Type = "File"
DependsOn = "[WindowsFeature]HyperV"
}
# Check the destination VHD folder
File VHDFolder
{
Ensure = "Present"
DestinationPath = $VHDPath
Type = "Directory"
DependsOn = "[File]ParentVHDFile"
}
# Create VM specific diff VHD
foreach ($Name in $VMName)
{
xVHD "VHD$Name"
{
Ensure = "Present"
Name = $Name
Path = $VHDPath
ParentPath = $VHDParentPath
DependsOn = @("[WindowsFeature]HyperV",
"[File]VHDFolder")
}
}
# Create VM using the above VHD
foreach($Name in $VMName)
{
xVMHyperV "VMachine$Name"
{
Ensure = "Present"
Name = $Name
VhDPath = (Join-Path -Path $VHDPath -ChildPath $Name)
SwitchName = $SwitchName
StartupMemory = $VMStartupMemory
State = $VMState
MACAddress = $MACAddress
WaitForIP = $true
DependsOn = @("[WindowsFeature]HyperV",
"[xVHD]VHD$Name")
}
}
}
Megjegyzés
A DSC jelenleg nem támogatja az összetett erőforrások vagy beágyazott konfigurációk összetett erőforráson belüli elhelyezését.
A konfiguráció mentése összetett erőforrásként
Ha a paraméteres konfigurációt DSC-erőforrásként szeretné használni, mentse egy címtárstruktúrába, mint bármely más MOF-alapú erőforrás, és nevezze el egy .schema.psm1
kiterjesztéssel. Ebben a példában elnevezzük a fájlt xVirtualMachine.schema.psm1
. Létre kell hoznia egy nevű xVirtualMachine.psd1
jegyzékfájlt is, amely a következő sort tartalmazza.
RootModule = 'xVirtualMachine.schema.psm1'
Megjegyzés
Ez a mellett MyDscResources.psd1
a modul jegyzékfájlja a mappában található MyDscResources
összes erőforráshoz.
Ha elkészült, a mappastruktúrának a következőnek kell lennie.
$env: psmodulepath
|- MyDscResources
|- MyDscResources.psd1
|- DSCResources
|- xVirtualMachine
|- xVirtualMachine.psd1
|- xVirtualMachine.schema.psm1
Az erőforrás most már felderíthető a Get-DscResource
parancsmaggal, és tulajdonságai a parancsmaggal vagy a Ctrl+Szóköz automatikus kiegészítéssel észlelhetők a Windows PowerShell ISE-ben.
Az összetett erőforrás használata
Ezután létrehozunk egy konfigurációt, amely meghívja az összetett erőforrást. Ez a konfiguráció meghívja az xVirtualMachine összetett erőforrást egy virtuális gép létrehozásához, majd meghívja az xComputer erőforrást az átnevezéséhez.
configuration RenameVM
{
Import-DSCResource -ModuleName xVirtualMachine
Node localhost
{
xVirtualMachine VM
{
VMName = "Test"
SwitchName = "Internal"
SwitchType = "Internal"
VhdParentPath = "C:\Demo\VHD\RTM.vhd"
VHDPath = "C:\Demo\VHD"
VMStartupMemory = 1024MB
VMState = "Running"
}
}
Node "192.168.10.1"
{
xComputer Name
{
Name = "SQL01"
DomainName = "fourthcoffee.com"
}
}
}
Ezzel az erőforrással több virtuális gépet is létrehozhat, ha virtuálisgép-neveket tartalmazó tömböt ad át az xVirtualMachine erőforrásnak.
Configuration MultipleVms
{
Import-DSCResource -ModuleName xVirtualMachine
Node localhost
{
xVirtualMachine VMs
{
VMName = "IIS01", "SQL01", "SQL02"
SwitchName = "Internal"
SwitchType = "Internal"
VhdParentPath = "C:\Demo\VHD\RTM.vhd"
VHDPath = "C:\Demo\VHD"
VMStartupMemory = 1024MB
VMState = "Running"
}
}
}
PsDscRunAsCredential támogatása
Megjegyzés
A PsDscRunAsCredential a PowerShell 5.0-s és újabb verzióiban támogatott.
A PsDscRunAsCredential tulajdonság használható a DSC-konfigurációk erőforrásblokkjában annak megadásához, hogy az erőforrást egy megadott hitelesítőadat-készlet alatt kell futtatni. További információ: DSC futtatása felhasználói hitelesítő adatokkal.
Ha egyéni erőforráson belülről szeretné elérni a felhasználói környezetet, használja az automatikus változót $PsDscContext
.
A következő kód például azt a felhasználói környezetet írja meg, amelyben az erőforrás a részletes kimeneti adatfolyamon fut:
if ($PsDscContext.RunAsUser) {
Write-Verbose "User: $PsDscContext.RunAsUser";
}