الموارد المركبة: استخدام تكوين DSC كمورد

ينطبق على: Windows PowerShell 4.0، Windows PowerShell 5.0

في حالات العالم الحقيقي، يمكن أن تصبح التكوينات طويلة ومعقدة، ما يستدعي العديد من الموارد المختلفة ويضبط عددا كبيرا من الخصائص. للمساعدة في معالجة هذا التعقيد، يمكنك استخدام تكوين Windows PowerShell تكوين الحالة المطلوبة (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 cmdlet، ويمكن اكتشاف خصائصه إما بواسطة cmdlet هذا أو باستخدام الإكمال التلقائي ل Ctrl+Space في Windows PowerShell ISE.

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

بعد ذلك نقوم بإنشاء تكوين يستدعي المورد المركب. يستدعي هذا التكوين المورد المركب 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 مع بيانات اعتماد المستخدم.

للوصول إلى سياق المستخدم من داخل مورد مخصص، يمكنك استخدام المتغير $PsDscContextالتلقائي .

على سبيل المثال، ستكتب التعليمات البرمجية التالية سياق المستخدم الذي يتم تشغيل المورد ضمنه إلى دفق الإخراج المطول:

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

راجع أيضاً

المفاهيم