دروس الدمية للمبتدئين: ما هي الدمية وكيفية استخدامها؟

قبل أن نتعلم الدمية، دعونا نفهم:

ما هي إدارة التكوين؟

إدارة التكوين هي عملية الحفاظ على البرامج وأنظمة الكمبيوتر (على سبيل المثال، الخوادم والتخزين والشبكات) في حالة معروفة ومرغوبة ومتسقة. كما يسمح بالوصول إلى سجل تاريخي دقيق لحالة النظام لأغراض إدارة المشروع والتدقيق.

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

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

ما هي الدمية؟

دمية هي أداة لإدارة النظام لمركزية وأتمتة عملية إدارة التكوين. تُستخدم الدمية أيضًا كأداة لنشر البرامج. إنه برنامج إدارة تكوين مفتوح المصدر يستخدم على نطاق واسع لتكوين الخادم وإدارته ونشره وتنسيقه لمختلف التطبيقات والخدمات عبر البنية التحتية الكاملة للمؤسسة.

تم تصميم Puppet خصيصًا لإدارة تكوين أنظمة Linux وWindows. إنه مكتوب بلغة روبي ويستخدم أسلوبه الفريد Domain Specific Lاللغة (DSL) لوصف تكوين النظام.

ما هي إصدارات الدمى؟

تأتي الدمية في نسختين:

  • دمية مفتوحة المصدر: إنها نسخة أساسية من أداة إدارة تكوين Puppet، والتي تُعرف أيضًا باسم Open Source Puppet. وهو متاح مباشرة من موقع Puppet الإلكتروني ومرخص بموجب نظام Apache 2.0.
  • الدمية المؤسسة: إصدار تجاري يوفر ميزات مثل تقارير الامتثال والتنسيق والتحكم في الوصول المستند إلى الأدوار وواجهة المستخدم الرسومية وواجهة برمجة التطبيقات وأدوات سطر الأوامر لإدارة العقد بشكل فعال.

ما الدمية يمكن أن تفعل؟

على سبيل المثال، لديك بنية تحتية تضم حوالي 100 خادم. باعتبارك مسؤول النظام، فإن دورك هو التأكد من أن جميع هذه الخوادم محدثة دائمًا وتعمل بكامل الوظائف.

يعمل مسؤول النظام يدويًا على الخوادم
يعمل مسؤول النظام يدويًا على الخوادم

للقيام بذلك، يمكنك استخدام Puppet، الذي يسمح لك بكتابة رمز بسيط يمكن نشره تلقائيًا على هذه الخوادم. وهذا يقلل من الجهد البشري ويجعل عملية التطوير سريعة وفعالة.

تعمل الدمية على أتمتة إدارة الخادم
تقوم الدمية بأتمتة إدارة الخادم

دمية تؤدي المتابعةwing المهام:

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

دمية DSL ونماذج البرمجة

قبل أن نتعلم Puppet DSL، دعونا نفهم نماذج البرمجة:

نموذج البرمجة هو النمط الذي تستخدمه في برمجة الكمبيوتر.

أربعة أنواع من النماذج هي:

  • إلزامي.
  • تصريحي.
  • وظيفية (والتي تعتبر مجموعة فرعية من هذا النموذج التعريفي)
  • وجوه المنحى.

سنركز على الأمر الحتمي والتصريحي.

النماذج الحتمية

يعبر نموذج البرمجة هذا عن منطق الحساب (ما يجب فعله) ويصف تدفق التحكم فيه (كيفية القيام به)

على سبيل المثال:

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

النماذج التصريحية

يعبر نموذج البرمجة هذا عن منطق الحساب (ما يجب فعله) دون وصف تدفق التحكم الخاص به (كيفية القيام به)

على سبيل المثال:

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

نموذج ماذا أفعل كيفية القيام
واجب نعم نعم
تصريحي نعم لا

يستخدم Puppet نموذج برمجة تعريفي

يستخدم Puppet أسلوب البرمجة التصريحية.

على سبيل المثال: إنشاء مستخدم على النظام:

يمكن القيام بذلك باستخدام نمط البرمجة الحتمية بواسطة برنامج نصي shell: هنا نحدد كيفية إنشاء المستخدم والأوامر التي يجب استخدامها في نظام التشغيل.

النماذج التصريحية

ومع ذلك، يمكن القيام بذلك باستخدام نمط البرمجة التعريفي مع بضعة أسطر فقط من كود الدمية، ولغة مجال الدمية المحددة (DSL)، ولا يزال يحقق نفس النتيجة.

النماذج التصريحية

نماذج نشر أدوات إدارة التكوين

هناك نوعان من نماذج النشر لـ أدوات إدارة التكوين :

  • نموذج النشر القائم على الدفع: يبدأ بواسطة عقدة رئيسية.
  • نموذج النشر القائم على السحب: بدأه الوكلاء.

نموذج النشر القائم على الدفع

في نموذج النشر هذا، يقوم الخادم الرئيسي بدفع التكوينات والبرامج إلى الوكلاء الفرديين. بعد التحقق من الاتصال الآمن، يقوم السيد بتشغيل الأوامر عن بعد على الوكلاء. على سبيل المثال، Ansible ومكدس الملح.

نموذج النشر القائم على السحب.

في نموذج النشر هذا، تتصل الخوادم الفردية بخادم رئيسي، وتتحقق من الاتصال الآمن وتؤسسه، وتقوم بتنزيل التكوينات والبرامج الخاصة بها، ثم تقوم بتكوين نفسها وفقًا لذلك - على سبيل المثال، Puppet وChef.

كيف تعمل الدمية؟

يعتمد Puppet على نموذج نشر السحب، حيث تقوم عقد الوكيل بالتحقق بانتظام بعد كل مرة 1800 ثوانٍ مع العقدة الرئيسية لمعرفة ما إذا كان هناك أي شيء يحتاج إلى التحديث في الوكيل. إذا كان هناك أي شيء يحتاج إلى تحديث، يقوم الوكيل بسحب رموز الدمية الضرورية من السيد وتنفيذ الإجراءات المطلوبة.

دعنا نوضح ذلك بمثال:

على سبيل المثال: رئيسي - إعداد الوكيل:

السيد

جهاز يعمل بنظام التشغيل Linux ومثبت عليه برنامج Puppet master. وهي مسؤولة عن الحفاظ على التكوينات في شكل رموز دمية. العقدة الرئيسية يمكن أن تكون Linux فقط.

الوكلاء

الأجهزة المستهدفة يتم إدارتها بواسطة دمية مع تثبيت برنامج وكيل الدمية عليها.

يمكن تكوين الوكيل على أي نظام تشغيل مدعوم مثل Linux أو Windows أو Solaris أو Mac OS.

ويتم الاتصال بين السيد والوكيل من خلال شهادات آمنة.

دمية وكيل الاتصالات الرئيسية
دمية وكيل الاتصالات الرئيسية

التواصل بين السيد والوكيل

الخطوة 1) بمجرد إنشاء الاتصال بين الوكيل والسيد، يرسل وكيل الدمية البيانات حول حالته إلى خادم الدمية الرئيسي. تسمى هذه الحقائق: تتضمن هذه المعلومات اسم المضيف، kernel details، عنوان IP، اسم الملف details، إلخ…

التواصل بين السيد والوكيل
الوكيل يرسل الحقائق إلى السيد

الخطوة 2) يستخدم Puppet Master هذه البيانات ويقوم بتجميع قائمة بالتكوين الذي سيتم تطبيقه على الوكيل. تُعرف قائمة التكوين التي سيتم تنفيذها على الوكيل باسم a فهرس. يمكن تغيير ذلك مثل تثبيت الحزمة، أو الترقيات أو الإزالة، أو إنشاء نظام الملفات، أو إنشاء المستخدم أو حذفه، أو إعادة تشغيل الخادم، أو تغييرات تكوين IP، وما إلى ذلك.

التواصل بين السيد والوكيل
يرسل السيد كتالوجًا إلى الوكيل

الخطوة 3) يستخدم الوكيل قائمة التكوين هذه لتطبيق أي تغييرات تكوين مطلوبة على العقدة.

في حالة عدم وجود انحرافات في التكوين، لا يقوم الوكيل بإجراء أي تغييرات في التكوين ويترك العقدة لتعمل بنفس التكوين.

التواصل بين السيد والوكيل
يطبق الوكيل التكوين

الخطوة 4) بمجرد الانتهاء من ذلك، تعود العقدة إلى مدير الدمية للإشارة إلى أنه تم تطبيق التكوين وإكماله.

كتل الدمية

توفر Puppet المرونة اللازمة لدمج التقارير مع أدوات الجهات الخارجية باستخدام Puppet APIs.

أربعة أنواع من اللبنات الأساسية للعرائس هي

  1. المصادر
  2. فصول دراسية
  3. واضح
  4. الوحدات

موارد الدمى

موارد الدمى هي اللبنات الأساسية لـ Puppet.

الموارد هي وظائف يحمل في ثناياه عوامل التي تعمل في النهاية الخلفية لأداء العمليات المطلوبة في الدمية.

دروس الدمى

يمكن تجميع مجموعة من الموارد المختلفة معًا في وحدة واحدة تسمى الفئة.

بيان الدمية

البيان هو دليل يحتوي على ملفات DSL الدمية. تحتوي هذه الملفات على ملحق .pp. يرمز ملحق .pp إلى برنامج الدمية. يتكون رمز الدمية من تعريفات أو إعلانات لفئات الدمى.

وحدات الدمية

الوحدات عبارة عن مجموعة من الملفات والأدلة مثل البيانات وتعريفات الفئة. إنها الوحدات القابلة لإعادة الاستخدام والقابلة للمشاركة في Puppet.

على سبيل المثال، MySQL وحدة لتثبيت وتكوين MySQL أو وحدة Jenkins لإدارة Jenkins، وما إلى ذلك.

وحدات الدمية
وحدات الدمية

أنواع الموارد الدمية

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

دمية. يتم تنفيذ جميع العمليات على العملاء العميلين بمساعدة الموارد العميلة.

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

يمكن أن يكون للموارد أنواع مختلفة. استخدامات الدمية موارد و أنواع الموارد من أجل وصف تكوين النظام.

هناك ثلاثة أنواع من أنواع الموارد:

  1. الدمية الأساسية أو أنواع الموارد المضمنة.
  2. أنواع الموارد المحددة للدمى.
  3. أنواع الموارد المخصصة للدمى.

الدمية الأساسية أو أنواع الموارد المضمنة

أنواع الموارد الأساسية أو المضمنة هي أنواع موارد الدمى المضمنة مسبقًا والتي يتم شحنها مع برامج الدمى. تتم كتابة جميع أنواع موارد Puppet الأساسية أو المضمنة وصيانتها بواسطة فريق Puppet.

أنواع الموارد المحددة للدمى

أنواع الموارد المحددة هي أنواع موارد خفيفة مكتوبة بلغة تعريفية للعرائس باستخدام مجموعة من أنواع الموارد الموجودة.

أنواع الموارد المخصصة للدمى

أنواع الموارد المخصصة هي أنواع موارد مخصصة بالكامل مكتوبة بلغة روبي.

دعونا نستكشف أنواع موارد الدمى...

في المحطة، اكتب فولوwing أمر لعرض قائمة بالأوامر الفرعية ذات الصلة بالدمية:

Puppet --help

أنواع الموارد المخصصة للدمى

في حالتنا نحن مهتمون بالأمر الفرعي "مورد"والتي سنستخدمها للعثور على معلومات حول أنواع موارد الدمى المضمنة.

في المحطة، اكتب أيًا من الخطوات التاليةwing أوامر لعرض قائمة الإجراءات المرتبطة بالأمر الفرعي للدمية "مورد"

Puppet help resource		
Puppet resource --help		

أنواع الموارد المخصصة للدمى

في هذه الحالة ، لدينا مورد كأمر فرعي و -أنواع كعمل.

يحتوي Puppet على 49 نوعًا من الموارد الأساسية المضمنة.

في المحطة، اكتب فولوwing أمر لعرض قائمة بأنواع موارد الدمى المضمنة المتاحة:

puppet resource –types

أنواع الموارد المخصصة للدمى

كل نوع يدعم قائمة سمات. توفر هذه السمات وصفًا تفصيليًا يستخدمه Puppet لإدارة المورد.

لمعرفة جميع السمات المرتبطة بنوع مورد الدمية، استخدم المتابعةwing أمر:

puppet describe <resource type name>	

ستقوم المعلمات بسرد جميع السمات المتاحة لهذا النوع من الموارد.

دمية تصف الحزمة

أنواع الموارد المخصصة للدمى

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

ما هي فئات الدمى؟

فئات الدمى هي مجموعة من موارد الدمى المجمعة معًا كوحدة واحدة.

قدمت الدمية دروسًا لجعل الهيكل قابلاً لإعادة الاستخدام وتنظيمه.

أولا، نحتاج إلى تعريف فئة باستخدام بناء جملة تعريف الفئة؛ يجب أن تكون الفئات فريدة ولا يمكن الإعلان عنها إلا مرة واحدة بنفس الاسم:

class <class-name> {
<Resource declarations>
}

على سبيل المثال:

class ntpconfig {
    file {
        "/etc/ntp.conf": 
     ensure=> "present", content=> "server 0.centos.pool.ntp.org iburst\n",
    }
}

لقد قمنا حتى الآن بتعريف الفئة فقط، لكننا لم نستخدمها في أي مكان. وهذا يعني أن هذا الكود الذي كتبناه لن يتم تنفيذه أبدًا ما لم نعلن عن هذه الفئة في مكان آخر.

إعلان الطبقة

لاستخدام فئة محددة في التعليمات البرمجية، استخدم تتضمن الكلمة.

class ntpconfig {
    file {
        "/etc/ntp.conf": 
      ensure=> "present", 
      content=> "server 0.centos.pool.ntp.org iburst\n",
    }
}
include ntpconfig

دعونا نفهم هذا مع سيناريو حالة حقيقية.

تثبيت تجريبي NTP

أولاً، تأكد من أن حزمة NTP غير موجودة بالفعل على الخادم، اتبع الخطوات التاليةwing لن يُرجع الأمر شيئًا إذا لم يكن telnet موجودًا على الخادم:

rpm -qa | grep -i ntp

العرض التوضيحي لتثبيت NTP

كما نرى، فإن حزمة NTP موجودة بالفعل على الخادم. لنقم بإزالة حزمة NTP الموجودة:

yum remove ntp

بعد إزالة الحزمة، تأكد من عدم وجود الملف ntp.conf:

ls -lrt /etc/ntp.conf

العرض التوضيحي لتثبيت NTP

تحقق من عدم وجود خدمة ntp عن طريق تشغيل الأمر following أمر:

systemctl status ntp

العرض التوضيحي لتثبيت NTP

قم بإنشاء ملف .pp جديد لحفظ الكود. من سطر الأوامر:

vi demontp.pp

قم بالتغيير إلى وضع الإدراج بالضغط على i من لوحة المفاتيح.

اكتب فولوwing كود لإنشاء ملف جديد:

# Class Definition 
class ntpconfig {
    # Installing NTP Package 
  package {"ntp": 
    ensure=> "present",
    }
    # Configuring NTP configuration file 
  file {"/etc/ntp.conf": 
    ensure=> "present", 
    content=> "server 0.centos.pool.ntp.org iburst\n",
    }
    # Starting NTP services 
  service {"ntpd": 
    ensure=> "running",
    }
}

بعد الانتهاء من التحرير: اضغط على esc

لحفظ الملف اضغط على :wq!

الخطوة التالية هي التحقق ما إذا كان الرمز يحتوي على أي أخطاء في بناء الجملة. نفذ الأمرwing أمر:

puppet parser validate demontp.pp

تأكد من أنك قمت بالتبديل إلى جذر لتتمكن من إكمال الاختبار دون أي خطأ، وذلك بتنفيذ الأمر:

su root

اختبار هي الخطوة التالية في عملية إنشاء التعليمات البرمجية. نفذ الأمرwing أمر إجراء اختبار الدخان:

Puppet applies demontp.pp --noop

الخطوة الأخيرة هي يجري الدمية في الوضع الحقيقي والتحقق من الإخراج.

puppet apply demontp.pp

لم تقم الدمية بأي شيء لأن الفصل التجريبي كان عادلاً تعريف ولكن ليس معلن.

لذلك، حتى تعلن عن فئة الدمية، لن يتم تطبيق الكود.

دعونا أعلن الطبقة التجريبية داخل نفس الكود باستخدام تضمين اسم الفئة في نهاية الكود:

# Class Definition 
class ntpconfig {
    # Installing NTP Package 
  package {"ntp": 
    ensure=> "present",
    }
    # Configuring NTP configuration file 
  file {"/etc/ntp.conf": 
    ensure=> "present", 
    content=> "server 0.centos.pool.ntp.org iburst\n",
    }
    # Starting NTP services 
  service {"ntpd": 
    ensure=> "running",
    }
}

# Class Declaration 
include ntpconfig

ثانية التحقق ما إذا كان الرمز يحتوي على أي أخطاء في بناء الجملة. نفذ الأمرwing أمر:

puppet parser validate demontp.pp

تأكد من أنك قمت بالتبديل إلى جذر لتتمكن من إكمال الاختبار دون أي خطأ، وذلك بتنفيذ الأمر:

su root

الاختبار هي الخطوة التالية في عملية إنشاء التعليمات البرمجية. نفذ الأمرwing أمر إجراء اختبار الدخان:

Puppet apply demontp.pp --noop

الخطوة الأخيرة هي يجري الدمية في الوضع الحقيقي والتحقق من الإخراج.

puppet apply demontp.pp

هذه المرة يتم تطبيق الكود لأنه تم تعريف الفئة ثم الإعلان عنها.

العرض التوضيحي لتثبيت NTP

تأكد من وجود ntp.conf الآن:

ls -lrt /etc/ntp.conf

تحقق من بدء خدمة ntp عن طريق تشغيل following أمر:

systemctl status ntpd

العرض التوضيحي لتثبيت NTP