تأليف مورد DSC مركب

في حالات العالم الحقيقي، يمكن أن تصبح تكوينات DSC طويلة ومعقدة، ما يستدعي العديد من موارد DSC المختلفة وتعيين عشرات الخصائص. للمساعدة في معالجة هذا التعقيد، يمكنك استخدام تكوين DSC كمورد DSC لتكوينات DSC الأخرى. يسمى هذا مورد DSC مركب. مورد DSC المركب هو تكوين DSC يأخذ المعلمات. تعمل معلمات تكوين DSC كخصائص لمورد DSC. يتم حفظ تكوين DSC كملف مع ملحق .schema.psm1 . لمزيد من المعلومات حول موارد DSC، راجع موارد DSC.

هام

لا تعمل موارد DSC المركبة مع Invoke-DscResource. في DSC 2.0 والإصدارات الأحدث، يتم دعمها فقط للاستخدام مع ميزة تكوين جهاز Azure Automanage.

إنشاء المورد المركب

في مثالنا، نقوم بإنشاء تكوين يستدعي العديد من الموارد الموجودة لتكوين الأجهزة الظاهرية. بدلا من تحديد القيم التي سيتم تعيينها في كتل التكوين، يأخذ التكوين المعلمات التي يتم استخدامها بعد ذلك في كتل التكوين.

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 المركبة ضمن تعريف مورد DSC مركب.

حفظ تكوين DSC كمورد DSC مركب

لاستخدام تكوين DSC ذي المعلمات كمورد DSC، احفظه في بنية دليل مثل مورد DSC المستند إلى MOF، وقم بتسمية ذلك بملحق .schema.psm1 . على سبيل المثال، سنسمي الملف xVirtualMachine.schema.psm1. تحتاج أيضا إلى إنشاء بيان باسم xVirtualMachine.psd1 يحتوي على السطر التالي.

RootModule = 'xVirtualMachine.schema.psm1'

ملاحظة

هذا منفصل عن MyDscResources.psd1، بيان الوحدة لجميع موارد DSC ضمن MyDscResources المجلد.

عند الانتهاء، يجب أن تكون بنية المجلد كما يلي.

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

أصبح مورد DSC الآن قابلا للاكتشاف باستخدام Get-DscResource cmdlet، ويمكن اكتشاف خصائصه إما بواسطة cmdlet هذا أو مع الإكمال التلقائي ل Ctrl+Space في VS Code.

استخدام المورد المركب

بعد ذلك نقوم بإنشاء تكوين DSC يستدعي مورد DSC المركب. يستدعي xVirtualMachine تكوين DSC هذا مورد DSC المركب لإنشاء جهاز ظاهري.

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

يمكنك أيضا استخدام مورد DSC المركب هذا لإنشاء أجهزة ظاهرية متعددة عن طريق تمرير صفيف من أسماء الأجهزة الظاهرية لخاصية VMName لمورد 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"
    }
}

راجع أيضًا