Sumber daya komposit: Menggunakan konfigurasi DSC sebagai sumber daya

Berlaku Untuk: Windows PowerShell 4.0, Windows PowerShell 5.0

Dalam situasi dunia nyata, konfigurasi dapat menjadi panjang dan kompleks, memanggil banyak sumber daya yang berbeda dan mengatur sejumlah besar properti. Untuk membantu mengatasi kompleksitas ini, Anda dapat menggunakan konfigurasi Windows PowerShell Desired State Configuration (DSC) sebagai sumber daya untuk konfigurasi lain. Ini disebut sumber daya komposit. Sumber daya komposit adalah konfigurasi DSC yang mengambil parameter. Parameter konfigurasi bertindak sebagai properti sumber daya. Konfigurasi disimpan sebagai file dengan .schema.psm1 ekstensi. Ini menggantikan skema MOF, dan skrip sumber daya dalam sumber daya DSC yang khas. Untuk informasi selengkapnya tentang sumber daya DSC, lihat Windows PowerShell Sumber Daya Konfigurasi Status yang Diinginkan.

Membuat sumber daya komposit

Dalam contoh kami, kami membuat konfigurasi yang memanggil sejumlah sumber daya yang ada untuk mengonfigurasi komputer virtual. Alih-alih menentukan nilai yang akan diatur dalam blok konfigurasi, konfigurasi mengambil parameter yang kemudian digunakan dalam blok konfigurasi.

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

Catatan

DSC saat ini tidak mendukung penempatan sumber daya komposit atau konfigurasi berlapis dalam sumber daya komposit.

Menyimpan konfigurasi sebagai sumber daya komposit

Untuk menggunakan konfigurasi berparameter sebagai sumber daya DSC, simpan dalam struktur direktori seperti sumber daya berbasis MOF lainnya, dan beri nama dengan .schema.psm1 ekstensi. Untuk contoh ini, kita akan memberi nama file xVirtualMachine.schema.psm1. Anda juga perlu membuat manifes bernama xVirtualMachine.psd1 yang berisi baris berikut.

RootModule = 'xVirtualMachine.schema.psm1'

Catatan

Ini selain MyDscResources.psd1, manifes modul untuk semua sumber daya di MyDscResources bawah folder .

Setelah selesai, struktur folder harus sebagai berikut.

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

Sumber daya sekarang dapat ditemukan dengan menggunakan Get-DscResource cmdlet , dan propertinya dapat ditemukan oleh cmdlet tersebut atau dengan menggunakan Ctrl+Space lengkapi otomatis di Windows PowerShell ISE.

Menggunakan sumber daya komposit

Selanjutnya kita membuat konfigurasi yang memanggil sumber daya komposit. Konfigurasi ini memanggil sumber daya komposit xVirtualMachine untuk membuat komputer virtual, lalu memanggil sumber daya xComputer untuk mengganti namanya.

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

Anda juga dapat menggunakan sumber daya ini untuk membuat beberapa VM dengan meneruskan array nama VM ke sumber daya 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"
        }
    }
}

Mendukung PsDscRunAsCredential

Catatan

PsDscRunAsCredential didukung di PowerShell 5.0 dan yang lebih baru.

Properti PsDscRunAsCredential dapat digunakan dalam blok sumber daya konfigurasi DSC untuk menentukan bahwa sumber daya harus dijalankan di bawah sekumpulan kredensial yang ditentukan. Untuk informasi selengkapnya, lihat Menjalankan DSC dengan kredensial pengguna.

Untuk mengakses konteks pengguna dari dalam sumber daya kustom, Anda dapat menggunakan variabel $PsDscContextotomatis .

Misalnya, kode berikut akan menulis konteks pengguna di mana sumber daya berjalan ke aliran output verbose:

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

Lihat juga

Konsep