Udostępnij za pośrednictwem


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.psm1nazwę . 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.psd1manifestu 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";
}

Zobacz też

Pojęcia