Sdílet prostřednictvím


Vytvoření složeného prostředku DSC

V reálných situacích můžou být konfigurace DSC dlouhé a složité, volají několik různých prostředků DSC a nastavují desítky vlastností. K řešení této složitosti můžete použít konfiguraci DSC jako prostředek DSC pro jiné konfigurace DSC. Tomu se říká složený prostředek DSC. Složený prostředek DSC je konfigurace DSC, která přijímá parametry. Parametry konfigurace DSC fungují jako vlastnosti prostředku DSC. Konfigurace DSC se uloží jako soubor s příponou .schema.psm1 . Další informace o prostředcích DSC najdete v tématu Prostředky DSC.

Důležité

Složené prostředky DSC nefungují s Invoke-DscResource. V DSC 2.0 a novějších verzích se podporují jenom pro použití s funkcí konfigurace počítače Azure Automanage.

Vytvoření složeného prostředku

V našem příkladu vytvoříme konfiguraci, která vyvolá několik existujících prostředků pro konfiguraci virtuálních počítačů. Místo zadání hodnot, které se mají nastavit v blocích konfigurace, konfigurace přebírá parametry, které se pak použijí v blocích konfigurace.

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

Poznámka

DSC nepodporuje umísťování složených bloků prostředků DSC do definice složeného prostředku DSC.

Uložení konfigurace DSC jako složeného prostředku DSC

Pokud chcete parametrizovanou konfiguraci DSC použít jako prostředek DSC, uložte ho do adresářové struktury podobné prostředku DSC založeného na MOF a pojmenujte ho rozšířením .schema.psm1 . V tomto příkladu pojmenujeme soubor xVirtualMachine.schema.psm1. Musíte také vytvořit manifest s názvem xVirtualMachine.psd1 , který obsahuje následující řádek.

RootModule = 'xVirtualMachine.schema.psm1'

Poznámka

To je oddělené od MyDscResources.psd1manifestu modulu pro všechny prostředky DSC ve MyDscResources složce.

Až budete hotovi, struktura složek by měla být následující.

$env: psmodulepath
    |- MyDscResources
        |- MyDscResources.psd1
        |- DSCResources
            |- xVirtualMachine
                |- xVirtualMachine.psd1
                |- xVirtualMachine.schema.psm1

Prostředek DSC je teď zjistitelný pomocí Get-DscResource rutiny a jeho vlastnosti jsou zjistitelné buď pomocí této rutiny, nebo pomocí automatického dokončování mezerníku ctrl+ v nástroji VS Code.

Použití složeného prostředku

Dále vytvoříme konfiguraci DSC, která volá složený prostředek DSC. Tato konfigurace DSC volá složený xVirtualMachine prostředek DSC k vytvoření virtuálního počítače.

Configuration CreateVM {
    Import-DSCResource -ModuleName xVirtualMachine

    xVirtualMachine VM {
        VMName          = "Test"
        SwitchName      = "Internal"
        SwitchType      = "Internal"
        VhdParentPath   = "C:\Demo\VHD\RTM.vhd"
        VHDPath         = "C:\Demo\VHD"
        VMStartupMemory = 1024MB
        VMState         = "Running"
    }
}

Tento složený prostředek DSC můžete také použít k vytvoření více virtuálních počítačů předáním pole názvů virtuálních počítačů pro vlastnost VMName složeného prostředku DSC.

Configuration MultipleVms {
    Import-DSCResource -ModuleName xVirtualMachine

    xVirtualMachine VMs {
        VMName          = @(
            "IIS01"
            "SQL01"
            "SQL02"
        )
        SwitchName      = "Internal"
        SwitchType      = "Internal"
        VhdParentPath   = "C:\Demo\VHD\RTM.vhd"
        VHDPath         = "C:\Demo\VHD"
        VMStartupMemory = 1024MB
        VMState         = "Running"
    }
}

Viz také