Zasoby złożone: używanie konfiguracji DSC jako zasobu
Dotyczy: Windows PowerShell 4.0, Windows PowerShell 5.0
W rzeczywistych sytuacjach konfiguracje mogą stać się długie i złożone, wywołując wiele różnych zasobów i ustawiając ogromną liczbę właściwości. Aby rozwiązać ten problem, można użyć konfiguracji Windows PowerShell Desired State Configuration (DSC) jako zasobu dla innych konfiguracji. Jest to nazywane zasobem złożonym. Zasób złożony to konfiguracja DSC, która przyjmuje parametry. Parametry konfiguracji działają jako właściwości zasobu.
Konfiguracja jest zapisywana jako plik z .schema.psm1
rozszerzeniem. Jest to miejsce zarówno schematu MOF, jak i skryptu zasobu w typowym zasobie DSC. Aby uzyskać więcej informacji na temat zasobów DSC, zobacz Windows PowerShell Desired State Configuration Zasoby.
Tworzenie zasobu złożonego
W naszym przykładzie utworzymy konfigurację, która wywołuje szereg istniejących zasobów w celu skonfigurowania maszyn wirtualnych. Zamiast określać wartości do ustawienia w blokach konfiguracji, konfiguracja przyjmuje parametry, które są następnie używane w blokach konfiguracji.
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")
}
}
}
Uwaga
Rozszerzenie DSC nie obsługuje obecnie umieszczania zasobów złożonych ani konfiguracji zagnieżdżonych w zasobie złożonym.
Zapisywanie konfiguracji jako zasobu złożonego
Aby użyć sparametryzowanej konfiguracji jako zasobu DSC, zapisz ją w strukturze katalogów, tak jak w przypadku dowolnego innego zasobu opartego na protokole MOF, i nadaj mu .schema.psm1
nazwę rozszerzeniem. W tym przykładzie nadamy plikowi xVirtualMachine.schema.psm1
nazwę . Należy również utworzyć manifest o nazwie xVirtualMachine.psd1
, który zawiera następujący wiersz.
RootModule = 'xVirtualMachine.schema.psm1'
Uwaga
Jest to dodatek do MyDscResources.psd1
manifestu modułu dla wszystkich zasobów w folderze MyDscResources
.
Po zakończeniu struktura folderów powinna być następująca.
$env: psmodulepath
|- MyDscResources
|- MyDscResources.psd1
|- DSCResources
|- xVirtualMachine
|- xVirtualMachine.psd1
|- xVirtualMachine.schema.psm1
Zasób jest teraz wykrywalny za pomocą polecenia cmdlet , a jego właściwości można odnaleźć za pomocą Get-DscResource
tego polecenia cmdlet lub zapomocą autouzupełniania spacji Ctrl+ w Windows PowerShell ISE.
Korzystanie z zasobu złożonego
Następnie utworzymy konfigurację, która wywołuje zasób złożony. Ta konfiguracja wywołuje zasób złożony xVirtualMachine w celu utworzenia maszyny wirtualnej, a następnie wywołuje zasób xComputer , aby zmienić jego nazwę.
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"
}
}
}
Za pomocą tego zasobu można również utworzyć wiele maszyn wirtualnych, przekazując tablicę nazw maszyn wirtualnych do zasobu xVirtualMachine.
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"
}
}
}
Obsługa elementu PsDscRunAsCredential
Uwaga
Program PsDscRunAsCredential jest obsługiwany w programie PowerShell 5.0 lub nowszym.
Właściwość PsDscRunAsCredential może być używana w bloku zasobów konfiguracji DSC , aby określić, że zasób powinien być uruchamiany w ramach określonego zestawu poświadczeń. Aby uzyskać więcej informacji, zobacz Running DSC with user credentials (Uruchamianie rozszerzenia DSC przy użyciu poświadczeń użytkownika).
Aby uzyskać dostęp do kontekstu użytkownika z poziomu zasobu niestandardowego, możesz użyć zmiennej automatycznej $PsDscContext
.
Na przykład poniższy kod będzie zapisywać kontekst użytkownika, w którym zasób jest uruchomiony do pełnego strumienia wyjściowego:
if ($PsDscContext.RunAsUser) {
Write-Verbose "User: $PsDscContext.RunAsUser";
}