إنه أسهل مما تعتقد

هل فكرت يومًا في تجربة DSC ولكنك شعرت أن منحنى التعلم شديد الانحدار؟ أو ربما لم يسبق لك أن رأيت نفسك تستخدمه في الإنتاج، لذا لم تزعج نفسك؟




لا يجب أن يكون استخدام DSC أمرًا صعبًا أو معقدًا، ولا تحتاج إلى بنية تحتية ضخمة لجعله جديرًا بالاهتمام. ستتحدث هذه المقالة عن تكلفة الدعم المباشر وكيفية اتخاذ الخطوات الأولى، وتتضمن أمثلة لكيفية البدء بتطبيقها على نطاق صغير في الإنتاج.


ما هو DSC؟

تكوين الحالة المرغوبة (DSC) هو نظام إدارة تكوين مضمن في Windows ويمكّنك من تكوين نظامك كرمز. ويستخدم تكوينًا مكتوبًا في PowerShell والذي يتم تحويله لاحقًا إلى تنسيق كائن مُدار (MOF).

تتم قراءة ملف MOF لاحقًا وتطبيقه بواسطة خدمة إدارة التكوين المحلي على العقدة المستهدفة (الكمبيوتر).

يستخدم التكوين الذي تم إنشاؤه وتشغيله DSC مختلفًا موارد من وحدات DSC. تشبه وحدات DSC وحدة PowerShell العادية، والموارد هي وظائفها. على سبيل المثال، يمكنك تثبيتها باستخدام

Install-Module 

، ويتم تخزينها في PSModulePath.


ما الذي يمكنني استخدام DSC من أجله؟

أصعب جزء في DSC بالنسبة للكثيرين هو العثور على حالات الاستخدام له. يميل الأشخاص إلى التحدث والكتابة عن DSC فقط عندما يتعلق الأمر بتنسيق وتدوير البيئات الكبيرة، أو الاختبار وضمان الجودة لتطبيقات مختلفة، وهو موضوع بعيد المنال بالنسبة للعديد من المسؤولين.

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

مثال: قراءة وكتابة تكوين DSC

يمكن أن تعادل بضعة أسطر من DSC مئات الأسطر باستخدام PowerShell الخام، ولهذا السبب يمكن أن تكون قوية جدًا بشكل لا يصدق.

يتكون تكوين DSC أساسًا من جزأين: تكوين DSC وبيانات التكوين.


يمكن تضمين بيانات التكوين (الموضحة أدناه) خارجيًا، عادة من ملف PSD، أو تضمينها في ملف التكوين. الطريقة الموصى بها والأكثر قابلية للصيانة هي تضمين هذا من ملف منفصل.

فيما يلي مثال لكيفية إنشاء DSC MOF الذي يقوم بتنزيل وتثبيت MSI عام عند تطبيقه:

Configuration MyDSCConfiguration {
    
    Import-DscResource -ModuleName PSDesiredStateConfiguration
    Import-DscResource -ModuleName xPSDesiredStateConfiguration -ModuleVersion "8.10.0.0"

    
    
    
    Node "fileserver-1" {
       
        
        File SoftwarePackagesDirectory {
            

            DestinationPath = "C:ProgramDataSoftwarePackages"
            Type = "Directory" 
            Ensure = "Present" 

        }

                
        xRemoteFile DownloadBackupAgent {
            
    
            DependsOn = "(File)SoftwarePackagesDirectory" 
            Uri = "http://web.contoso.com/packages/backupagent.msi" 
            DestinationPath = "C:ProgramDataSoftwarePackagesBackupAgent.msi" 
    
        }
                
                
        xMsiPackage InstallBackupAgent {
            
            
            DependsOn = "(xRemoteFile)DownloadBackupAgent" 
            ProductId = "d29c3fa9-e03e-40e0-a6ed-556c6f05476a" 
            Path = "C:ProgramDataSoftwarePackagesBackupAgent.msi" 
            Ensure = "Present" 

        }

    }
}

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

PS51> MyDSCConfiguration

    Directory: C:TutorialsDSCMyDSCConfiguration

Mode LastWriteTime Length Name
-a---- 2019-10-28 16:38 3952 fileserver-1.mof

يمكنك تطبيق جميع تكوينات DSC الموجودة في مجلد MyDSCConfiguration على مضيفها عن طريق تشغيل:

PS51> Start-DscConfiguration -Path .MyDSCConfiguration -Wait 

استخدام DSC مع بيانات التكوين

تحتوي بيانات التكوين على بيانات التكوين الخاصة بتكوين DSC. تتضمن المعلومات اسم العقدة (اسم الكمبيوتر)، ويمكن أن تحتوي على بيانات أخرى مثل معلومات حول كيفية تثبيت حزمة MSI أو قيم مفتاح التسجيل، وما إلى ذلك. وهذا يمنحنا نهجًا ديناميكيًا وأكثر تنوعًا لـ DSC، بحيث يمكن إعادة استخدامه وتعديلها بسهولة.


لنفترض أن لديك هذه الخوادم الثلاثة التي يحتاج كل منها إلى مجموعة فريدة من الحزم:

  • خادم الملفات-1
  • قاعدة البيانات-1
    • الاحتياجات: BackupAgent، BackupAgent-DatabaseAddon
  • خادم التطبيقات-1
    • الاحتياجات: BackupAgent، MonitoringAgent

أفضل طريقة هي إنشاء ملف يحتوي على بيانات التكوين التي تحتاجها بدلاً من ذلك، وليس فقط تحديد العقد (الخوادم)، ولكن أيضًا إضافة قائمة الحزم إليه:

@{
        
        
    
    AllNodes = @(
@{
            NodeName = "*"
        }

        
@{
            NodeName = "fileserver-1"
            Role = "Fileserver"

            
            Packages = @(
                'BackupAgent'
            )
        },

        
@{
            NodeName = "database-1"
            Role = "Database"

            
            Packages = @(
                'BackupAgent',
                'BackupAgent-DataBaseAddon'
            )
        },

        
@{
            NodeName = "appserver-1"
            Role = "Appserver"

            
            Packages = @(
                'BackupAgent',
                'MonitoringAgent'
            )
        }
    )

        
    
        
    Packages = @(
@{
            Name = "BackupAgent"
            ProductId = "3c4e21b5-8de2-408e-84e0-a42b0507b8b1"
            FileName = "BackupAgent.msi"
            Ensure = "Present"
        },
@{
            Name = "BackupAgent-DataBaseAddon"
            ProductId = "97f860f6-0a58-4bf3-aef8-abc0f796e9df"
            FileName = "BackupAgent-DataBaseAddon.msi"
            Ensure = "Present"
        },
@{
            Name = "MonitoringAgent"
            ProductId = "77b29b12-c222-4d85-b812-bbd4136ad0ff"
            FileName = "MonitoringAgent.msi"
            Ensure = "Present"
        }
    )
}

يمكنك الآن استخدام ملف بيانات التكوين هذا لإنشاء تكوينات DSC لخوادمك ديناميكيًا:

Configuration MyDSCConfiguration {
    
    Import-DscResource -ModuleName PSDesiredStateConfiguration
    Import-DscResource -ModuleName xPSDesiredStateConfiguration -ModuleVersion "8.10.0.0"

    
    $Packages = $ConfigurationData.Packages

    
    
    
    Node $AllNodes.NodeName {
        
        
        File SoftwarePackagesDirectory {
            DestinationPath = "C:ProgramDataSoftwarePackages"
            Type = "Directory" 
            Ensure = "Present" 
        }

        
        Foreach($PackageName in $Node.Packages){

            $Package = $Packages.Where{$_.Name -eq $PackageName}

            xRemoteFile "PackageDownload-$($Package.Name)" {
                DependsOn = "(File)SoftwarePackagesDirectory"
                DestinationPath = "C:SoftwarePackages$($Package.FileName)"
                Uri = "http://web.contso.com/packages/$($Package.FileName)"
            }

            xMsiPackage "Install$($Package.Name)" {
                DependsOn = "(xRemoteFile)PackageDownload-$($Package.Name)"
                ProductId = $Package.ProductId
                Path = "C:ProgramDataSoftwarePackages$($Package.FileName)"
                Ensure = $Package.Ensure
            }
        }
    }
}

إذا قمت بتشغيل هذا، تقوم وظيفة DSC بإنشاء ملف MOF لكل خادم من خوادمك والذي يمكن استخدامه لتثبيت الحزم التي حددتها في ملف ConfigurationData.psd1:

PS51> MyDSCConfiguration -ConfigurationData .ConfigurationData.psd1

    Directory: C:TutorialsDSCMyDSCConfiguration

Mode LastWriteTime Length Name
-a---- 2019-10-28 17:25 3962 fileserver-1.mof
-a---- 2019-10-28 17:25 6012 database-1.mof
-a---- 2019-10-28 17:25 5894 appserver-1.mof


PS51> Start-DscConfiguration -Path .MyDSCConfiguration -Wait

إذا كنت تريد إضافة حزم جديدة، فقم بتعديل ملف ConfigurationData.psd1 الخاص بك وقم بتشغيل التعليمات البرمجية السابقة مرة أخرى.

خاتمة

يمكن أن يكون منحنى التعلم قصيرًا وشديد الانحدار لبدء استخدام DSC. لكن الجزء الأصعب بالنسبة للكثيرين هو العثور على حالات الاستخدام حيث يمكنهم استخدامها.


يمنحك استخدام الطريقة السابقة التي تستخدم HTTP (أو HTTPS) لجلب الحزم طريقة متعددة الاستخدامات لتوزيع البرامج على خوادمك. ولأنه HTTPS، فمن الأسهل كشفه أيضًا، ويمكنك استخدامه لإدارة البرامج في DMZ والشبكات الأخرى الأقل ثقة.

بالإضافة إلى ذلك، فإن استخدام بيانات التكوين بدلاً من تشفير كل شيء في تكوينات DSC الخاصة بك يمنحك نهجًا أكثر سهولة في الصيانة. يمكنك أيضًا إنشاء بيانات التكوين هذه من مصادر خارجية مثل CSV وSQL وSharepoint وكل شيء آخر يمكن قراءته باستخدام PowerShell.

أتمنى أن تكون قد حصلت على بعض الأفكار لبيئتك لتبدأ في تسهيل مهامك اليومية مع DSC.

(العلامات للترجمة)مايكروسوفت

أضف تعليق