Поделиться через


Составные ресурсы: использование конфигурации DSC в качестве ресурса

Область применения: Windows PowerShell 4.0, Windows PowerShell 5.0

В реальных ситуациях конфигурации могут быть длительными и сложными, вызывая множество различных ресурсов и устанавливая огромное количество свойств. Чтобы решить эту сложность, можно использовать конфигурацию Windows PowerShell Desired State Configuration (DSC) в качестве ресурса для других конфигураций. Это называется составным ресурсом. Составной ресурс — это конфигурация DSC, которая принимает параметры. Параметры конфигурации выступают в качестве свойств ресурса. Конфигурация сохраняется в виде файла с расширением .schema.psm1 . Он заменяет как схему MOF, так и сценарий ресурса в типичном ресурсе DSC. Дополнительные сведения о ресурсах DSC см. в разделе Ресурсы конфигурации требуемого состояния Windows PowerShell.

Создание составного ресурса

В нашем примере мы создаем конфигурацию, которая вызывает ряд существующих ресурсов для настройки виртуальных машин. Вместо указания значений, которые должны быть установлены в блоках конфигурации, конфигурация принимает параметры, которые затем используются в блоках конфигурации.

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

Замечание

В настоящее время DSC не поддерживает размещение составных ресурсов или вложенных конфигураций в составном ресурсе.

Сохранение конфигурации в качестве составного ресурса

Чтобы использовать параметризованную конфигурацию в качестве ресурса DSC, сохраните ее в структуре каталогов, как у любого другого ресурса на основе MOF, и присвойте ей имя с расширением .schema.psm1 . В этом примере мы назовем файл xVirtualMachine.schema.psm1. Кроме того, необходимо создать манифест с именем xVirtualMachine.psd1 , содержащим следующую строку.

RootModule = 'xVirtualMachine.schema.psm1'

Замечание

Это в дополнение к MyDscResources.psd1манифесту модуля для всех ресурсов в MyDscResources папке.

Когда вы закончите, структура папок должна быть следующей.

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

Теперь ресурс можно обнаружить с помощью Get-DscResource командлета, а его свойства можно обнаружить либо с помощью этого командлета, либо с помощью автозаполнения Ctrl+Space в интегрированной среде сценариев Windows PowerShell.

Использование составного ресурса

Далее мы создаем конфигурацию, которая вызывает составной ресурс. Эта конфигурация вызывает составной ресурс xVirtualMachine для создания виртуальной машины, а затем вызывает ресурс xComputer для ее переименования.

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

Вы также можете использовать этот ресурс для создания нескольких виртуальных машин, передав массив имен виртуальных машин в ресурс 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"
        }
    }
}

Поддержка PsDscRunAsCredential

Замечание

PsDscRunAsCredential поддерживается в PowerShell 5.0 и более поздних версиях.

Свойство PsDscRunAsCredential можно использовать в блоке ресурсов конфигураций DSC , чтобы указать, что ресурс должен запускаться с указанным набором учетных данных. Дополнительные сведения см. в разделе Запуск DSC с учетными данными пользователя.

Чтобы получить доступ к пользовательскому контексту из пользовательского ресурса, можно использовать переменную $PsDscContextautomatic .

Например, следующий код запишет пользовательский контекст, в котором выполняется ресурс, в подробный поток вывода:

if ($PsDscContext.RunAsUser) {
    Write-Verbose "User: $PsDscContext.RunAsUser";
}

См. также

Концепции