سيد الدمى: تثبيت وتكوين نظام إدارة تكوين الدمى عن بعد. سيد الدمى: تثبيت وتكوين نظام إدارة تكوين الدمى عن بعد

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

متطلبات

  • تركيب الدمية (السيد والوكيل). المزيد عن هذا -.
  • القدرة على إنشاء خادم افتراضي Ubuntu 14.04 واحد على الأقل لخدمة عقدة وكيل Puppet.

أساسيات كود الدمية

موارد

يتكون رمز الدمية بشكل أساسي من الموارد. المورد هو جزء من التعليمات البرمجية التي تصف حالة النظام وتحدد التغييرات التي يحتاجها. على سبيل المثال:

المستخدم ("ميتشل":
ضمان => الحاضر،
المستخدم => "1000"،
معرف => "1000"،
شل => "/ بن/باش"،
الصفحة الرئيسية => "/الصفحة الرئيسية/ميتشل"
}

إعلان الموارد له التنسيق التالي:

نوع_الموارد("اسم_الموارد"
السمة => القيمة
...
}

لعرض كافة أنواع موارد الدمية، قم بإصدار الأمر:

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

سوف تتعلم المزيد عن أنواع الموارد في هذا الدليل.

البيانات

البيان هو برنامج نصي للتنسيق. تسمى برامج الدمى ذات الامتداد .pp بالبيانات. بيان الدمى الافتراضي هو /etc/puppet/manifests/site.pp.

الطبقات

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

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

تعريف الفئة له التنسيق التالي:

فئة example_class(
...
شفرة
...
}

يحدد هذا الرمز فئة example_class. سيكون رمز الدمية بين قوسين متعرجين.

إعلان الفئة هو المكان في الكود الذي يتم فيه استدعاء فئة معينة. باستخدام إعلان الفئة، تقوم Puppet بمعالجة الكود الخاص بها.

يمكن أن يكون إعلان الفئة عاديًا وحسب نوع المورد.

تتم إضافة إعلان فئة عادية إلى الكود باستخدام الكلمة الأساسية include.

تضمين example_class

عندما يتم الإعلان عن الفئة كنوع مورد، يتم الإعلان عن الفئة بتنسيق المورد:

فئة("example_class":)

يتيح لك هذا الإعلان إضافة معلمات فئة إلى التعليمات البرمجية الخاصة بك والتي تتجاوز القيم الافتراضية لسمات الفئة. على سبيل المثال:

العقدة "المضيف 2" (
class ("Apache": ) # استخدم وحدة Apache
apache::vhost("example.com": # تعريف مورد vhost
المنفذ => "80"،
دوكروت => "/فار/www/html"
}
}

وحدات

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

يتم تخزين وحدات الدمى في الدليل /etc/puppet/modules.

كتابة بيان

يمكنك التدرب على كتابة بيانات ووحدات وفئات Puppet باستخدام مثال تثبيت حزمة LAMP على خادم Ubuntu (ستكون النتيجة ).

لذا، لتنظيم خادم Ubuntu 14.04 وتثبيت حزمة LAMP عليه، فإنك تحتاج إلى موارد للإجراءات التالية:

  • تثبيت حزمة Apache2.
  • بدء خدمة apache2.
  • تثبيت الحزمة خادم ماي إس كيو إل، خادم الخلية.
  • بدء خدمة MySQL.
  • تثبيت حزمة php5
  • إنشاء برنامج نصي لاختبار PHP، info.php.
  • تحديث الفهرس المناسب قبل تثبيت كل حزمة.

ستجد أدناه ثلاثة أمثلة لرمز Puppet الذي يمكن استخدامه لتحقيق إعداد مكدس LAMP هذا.

سيعلمك المثال الأول كيفية كتابة البيانات الأساسية في ملف واحد. سيساعدك المثال الثاني في تجميع واستخدام فئة ووحدة نمطية بناءً على البيانات المكتوبة مسبقًا. سيوضح لك المثال الثالث كيفية استخدام الوحدات العامة المعدة مسبقًا لتثبيت حزمة LAMP.

ملحوظة: للاختبار فمن الأفضل استخدام خادم افتراضي جديد.

مثال 1: تثبيت LAMP ببيان واحد

يمكن كتابة بيان الدمية على عقدة الوكيل ثم تنفيذه باستخدام أمر تطبيق الدمية (لا تحتاج إلى إعداد رئيسي ووكيل للقيام بذلك).

في هذا القسم، ستتعلم كيفية كتابة البيانات التي ستستخدم هذه الأنواع من إعلانات الموارد:

  • exec: تنفيذ الأوامر.
  • الحزمة: تثبيت الحزم.
  • الخدمة: إدارة الخدمة.
  • الملف: إدارة الملفات.

إنشاء بيان

إنشاء بيان جديد:

Sudo vi /etc/puppet/manifests/lamp.pp

أضف الكود التالي إليه للإعلان عن الموارد المطلوبة.

# تشغيل أمر "apt-get update".
exec("apt-update": # مورد exec "apt-update"
الأمر => "/usr/bin/apt-get update" # الأمر الذي سيتم تشغيل هذا المورد
}
# تثبيت حزمة apache2
الحزمة ("أباتشي 2":
require => Exec["apt-update"]، # اطلب "apt-update" قبل تثبيت الحزمة
تأكد => مثبت،
}
# ابدأ خدمة apache2
الخدمة ("أباتشي 2":
ضمان => قيد التشغيل،
}
# تثبيت خادم MySQL
الحزمة ("خادم MySQL":
تتطلب => Exec["apt-update"]، # طلب "apt-update" عن طريق إعادة التثبيت
تأكد => مثبت،
}
# ابدأ خدمة MySQL
الخدمة ("ماي إس كيو إل"):
ضمان => قيد التشغيل،
}
# تثبيت حزمة php5
الحزمة ("php5":
require => Exec["apt-update"], # طلب "apt-update" قبل التثبيت
تأكد => مثبت،
}
# ابدأ خدمة info.php
ملف("/var/www/html/info.php":
ضمان => الملف،
المحتوى => ""، # كود phpinfo
تتطلب => الحزمة["Apache2"]، # طلب الحزمة "Apache2"
}

تطبيق بيان

لاستخدام البيان الجديد، أدخل الأمر:

تطبيق دمية سودو --test

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

الآن تم تثبيت مكدس LAMP على الخادم باستخدام Puppet.

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

يتحقق خادم Puppet الرئيسي من تغير حالة الخادم كل 30 دقيقة.

المثال 2: تثبيت حزمة LAMP باستخدام وحدة نمطية

حاول الآن إنشاء وحدة نمطية بسيطة استنادًا إلى بيان LAMP الذي كتبته في القسم السابق.

لإنشاء وحدة نمطية، قم بإنشاء دليل جديد في دليل الوحدات النمطية (يجب أن يتطابق اسمه مع اسم الوحدة النمطية). يجب أن يحتوي هذا الدليل على دليل البيانات وملف init.pp. يحدد الملف init.pp فئة Puppet (يجب أن يتطابق اسمها أيضًا مع اسم الوحدة).

إنشاء وحدة

انتقل إلى خادم Puppet الرئيسي وقم بإنشاء بنية دليل للوحدة:

cd /etc/puppet/modules
Sudo mkdir -p lamp/manifests

قم بإنشاء وفتح ملف init.pp في المحرر:

sudo vi lamp/manifests/init.pp

أدخل فئة المصباح في الملف:

مصباح الصف (
}

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

أحفظ وأغلق الملف.

باستخدام وحدة في البيان الرئيسي

يمكنك الآن تكوين البيان الرئيسي واستخدام وحدة المصباح لتثبيت حزمة LAMP على الخادم.

على خادم Puppet master، قم بتحرير الملف التالي:

Sudo vi /etc/puppet/manifests/site.pp

على الأرجح على هذه اللحظةالملف فارغ. وأضف إليها الأسطر التالية:

العقدة الافتراضية ()
العقدة "مصباح -1" (
}

ملحوظة: استبدل lamp-1 باسم المضيف الخاص بوكيل Puppet الخاص بك والذي سيتم تثبيت المكدس عليه.

تسمح لك كتلة العقدة بتحديد رمز الدمية الذي سيتم تطبيقه على بعض العقد فقط.

تنطبق الكتلة الافتراضية على جميع عقد الوكيل التي لا تحتوي على كتلة فردية (اتركها فارغة). سيتم تطبيق كتلة المصباح 1 على عقدة وكيل المصباح 1.

أضف السطر التالي إلى هذه الكتلة، التي تستخدم وحدة المصباح:

أحفظ وأغلق الملف.

ستتمكن الآن عقدة وكيل Puppet من تنزيل الإعدادات من الخادم الرئيسي وتثبيت حزمة LAMP. إذا كنت تريد إجراء تغييرات الآن، فقم بتشغيل الأمر على الوكيل:

وكيل سودو الدمية - اختبار

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

مثال 3: تثبيت LAMP باستخدام الوحدات العامة

يتم استخدام وحدة MySQL بطريقة مماثلة. أضف الأسطر التالية إلى كتلة العقدة:

فئة ("mysql::server":
root_password => "كلمة المرور"،
}

يمكنك أيضًا تمرير معلمات وحدة MySQL.

قم بإضافة مورد يقوم بنسخ info.php إلى الموقع المطلوب. استخدم المعلمة المصدر. أضف الأسطر التالية إلى كتلة العقدة:

file("info.php": # اسم ملف المورد
المسار => "/var/www/html/info.php"، # المسار المستهدف
ضمان => الملف،
require => Class["Apache"]، # فئة Apache المراد استخدامها
المصدر => "puppet:///modules/Apache/info.php"، # الموقع المراد نسخ الملف إليه
}

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

ستقوم الدمية بنسخ الملف puppet:///modules/Apache/info.php إلى /etc/puppet/modules/apache/files/info.php.

أحفظ وأغلق الملف.

قم بإنشاء ملف info.php.

سودو sh -c "صدى""> /etc/puppet/modules/Apache/files/info.php"

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

وكيل سودو الدمية - اختبار

سيقوم هذا الأمر بتنزيل جميع التحديثات للعقدة الحالية وتثبيت المكدس عليها. للتأكد من عمل Apache وPHP، افتح عنوان IP الخاص بالعقدة أو المجال في المتصفح:

http://lamp_1_public_IP/info.php

خاتمة

لديك الآن المعرفة الأساسية حول العمل مع وحدات وبيانات الدمى. حاول إنشاء بيان بسيط ووحدة نمطية بنفسك.

يعد Puppet رائعًا لإدارة ملفات تكوين التطبيق.

العلامات: ,
قليلا من الشعر.يبدو أن هذه المقالة يجب أن تكون نقطة البداية للسلسلة بأكملها، ولكن الجمهور المستهدف لا يزال هو المستخدمين الأكثر خبرة لمنتجات Open Source Puppet Labs الذين ليسوا راضين عن الوحدات الفردية سيئة التكامل مع Puppet Forge. كما هو الحال مع أي حالة "المكتبة مقابل إطار العمل"، فإن الثمن الذي يجب دفعه هو اتباع النظرة العالمية لمؤلف الحل المتكامل.

قليلا عن كيفية عمل الدمية

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

تجريد الدمية هو شيء من هذا القبيل ( كسر الأنماط - انسَ كل ما تعرفه عن مصطلحات البرمجة!).

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

وبطريقة صحيحة من الناحية الأيديولوجية، تتكون البنية التحتية للدمية من وكيل - خدمة مميزة على النظام المستهدف - وخادم يوزع تعليمات قيمة في شكل أدلة موارد تعريفية بناءً على طلب من الوكلاء. ويتم تنفيذ الأمن على مستوى البنية التحتية للمفتاح العام الخاص (X.509). ببساطة، نفس الآليات الموجودة في HTTPS، ولكن مع CA الخاص بها والتحقق الإلزامي شهادة العميل.

في شكل مبسط، يبدو إجراء النشر كما يلي:

  1. المعالجة عبر TLS وX.509 (إنشاء الاتصال، وتحديث CRL، والتحقق من قيود الشهادة، وما إلى ذلك)
  2. يتلقى الوكيل مولدات الحقائق من الخادم مع التخزين المؤقت وكل الأشياء (بشكل أكثر دقة، يتم سحب كل شيء من مجلدات lib/ الموجودة في الوحدات النمطية). ليس من الصعب إضافة برنامج Ruby النصي الخاص بك لجمع المعلومات التي تهمك.
  3. يقوم الوكيل بجمع الحقائق حول النظام المستهدف ويرسلها إلى الخادم. يمكن بسهولة عرض جميع الحقائق يدويًا عبر استدعاء الحقائق الخاصة بالدمى. هذه الحقائق متوفرة كمتغيرات عالمية.
  4. يقوم الخادم بتجميع كتالوج الموارد وإرساله إلى الوكيل. تحت هذا تكمن طبقة كاملة من المفاهيم المختلفة.
  5. يقوم الوكيل بسحب كل ما هو ضروري من الخادم وإحضار النظام إلى النموذج المحدد. إن الوكيل في حد ذاته لا يعرف ماذا يفعل بالموارد؛ فهو يعتمد على تنفيذ مقدمي الخدمات (الترجمة الدلالية ستكون "المنفذ"، وليس المورد) لأنواع محددة من الموارد. وبعض مقدمي الخدمات قياسيون ويتم تضمينهم في حزم الدمى، في حين أن يتم سحب الباقي من الوحدات.
للاستمتاع بجميع المأكولات اللذيذة، هناك كعكات إضافية على شكل:
  • وحدة- مجموعة من نصوص Puppet التعريفية، وامتدادات Ruby لـ Puppet، والملفات، وقوالب الملفات، وبيانات Hiera وغير ذلك الكثير. المصطلح الأكثر صحة هو "الحزمة".
  • بيئة- مجموعة من البرامج النصية والوحدات وبيانات هييرا. نظرًا لأن البنية التحتية أصبحت أكثر تعقيدًا، فقد أصبح من الضروري حتماً تقسيم التكوين بشكل أكبر من التقسيم القياسي حسب العقد. يعد هذا مطلوبًا بشكل أساسي للابتكارات التجريبية والتحكم في الوصول العادي (عندما لا يتمكن جميع المسؤولين من الوصول إلى جميع العقد في البنية التحتية لتكنولوجيا المعلومات).
  • هييرا- قاعدة البيانات الهرمية. هذه الصيغة يمكن أن تكون مخيفة للغاية. ربما هذا هو سبب تغييره في وثائق الإصدارات الأحدث. في الواقع، هذه آلية بسيطة ومريحة للغاية لاستخراج التكوين من ملفات YAML أو JSON. التسلسل الهرمي هو القدرة على تحديد ترتيب القراءة لملفات التكوين المتعددة - أي. التسلسل الهرمي/أولوية هذه الملفات.
    • بالإضافة إلى جلب البيانات عن طريق استدعاء الوظيفة، تقوم Puppet بسحب معلمات الفئة الافتراضية، وهو ما يمثل أهم ما يميزها.
    • بالطبع، يدعم Hiera استيفاء الحقائق وحتى استدعاء وظائف خاصة.
    • في Puppet 4.3، قمنا بتنفيذ نفس الوظيفة مرة أخرى لدعم ليس فقط قاعدة البيانات العالمية، ولكن أيضًا المحلية للبيئة والوحدة النمطية، على الرغم من أن المؤلف قد وجد بالفعل العديد من المشكلات في تنفيذها (PUP-5983، وPUP-5952، وPUP -5899)، والتي تم إصلاحها على الفور بواسطة Puppet Labs.
    • يتم دعم العديد من الاستراتيجيات لاستخراج القيم من كافة الملفات الموجودة في التسلسل الهرمي:
      • أولاً - يتم إرجاع القيمة الأولى التي تم العثور عليها حسب الأولوية
      • فريد - يجمع كل القيم في مصفوفة أحادية البعد ويزيل التكرارات
      • التجزئة - يجمع كل تجزئة YAML الموجودة. يتم تحديد المفاتيح المكررة حسب الأولوية.
      • Deep هو في الأساس نسخة متكررة من التجزئة
    • الجميل هو أنه يمكن تحديد استراتيجية أخذ العينات عند استدعاء وظيفة البحث () لأن وفي أي ملف هرمي من خلال مفتاح lookup_options الخاص، والذي يتم استخدامه بشكل نشط في وحدة cfnetwork.
  • PuppetDB- في الأساس طبقة من منطق الأعمال حول قاعدة بيانات علائقية (PostgreSQL)، والتي تسمح لك بحفظ التقارير حول الحقائق وعمليات النشر التي تم إجراؤها وتصدير الموارد لاستيرادها لاحقًا إلى أدلة على العقد أو التحديدات الأخرى عبر وظائف خاصة. هناك أيضًا واجهة ويب على شكل Puppet Dashboard.
  • X.509 PKI- البنية التحتية للشهادة التي سبق ذكرها، وهي ملائمة للغاية للاستخدام في خدمات أخرى دون الحاجة إلى إدارة بنية تحتية منفصلة.
  • مكولكتيف- يبدو أنه شيء مفيد لبدء المهام على أساس الحدث في مزرعة خوادم، ولكن المؤلف لديه بعض عدم الثقة في أمان حل معين.
  • صياغة الدمية- منصة مفتوحة لنشر وتحميل الوحدات.
  • بعض الميزات الأخرى في شكل الضوابط الأجهزة الخارجيةنوع معدات Cisco ونشرها على المعدن، ولكن هذه قصة مختلفة

ملاحظات حول الأمن وإمكانية الوصول

عليك أن تفهم أن Puppet Server يصبح نقطة ضعف في البنية التحتية لتكنولوجيا المعلومات بأكملها، لأن... يحدد التكوين النهائي لجميع الأنظمة. في حالات خاصة، يكون من المنطقي إجراء فصل - خادم منفصل لعناصر البنية التحتية الحيوية للغاية وصول محدودوالتحديث اليدوي والثاني لكل شيء آخر.

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

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

Multi-master (عدة خوادم منفصلة)

  • في هذه الحالة، يعمل خادم واحد فقط كمرجع مصدق (CA) - وعدم توفره يعني أنه من المستحيل إضافة عقد جديدة.
    • يتيح لك Puppet استخدام بنية أساسية X.509 تابعة لجهة خارجية إذا كانت البنية المضمنة غير مرضية.
  • يجب تخزين التكوين بأكمله (البيئة) في نظام التحكم في الإصدار ونشره على كل خادم في وقت واحد.
  • الشيء الوحيد المشترك هو قاعدة بيانات PostgreSQL، التي يقع تنظيم التوفر العالي لها خارج نطاق هذه المقالة.
  • تدعم وحدة cfpuppetserver عمليات التثبيت كخادم أساسي (مع CA) وكخادم ثانوي.

ما الذي تغير منذ الإصدارات الأقدم

الشركة المصنعة لديها وصف كامل.
  • انتقلت جميع الخدمات إلى JVM وJRuby وJetty. على الرغم من المزايا الواضحة للتكامل، إلا أن هناك أيضًا عيوبًا من حيث استهلاك الذاكرة.
  • تمت إضافة وظائف Lambda لمعالجة المجموعات - الآن ليست هناك حاجة لقطع العكازات في روبي أو الانحراف عبر create_resources()
  • ظهرت أداة لمعالجة قوالب EPP - وهي في الأساس نفس ERB، ولكن باستخدام Puppet DSL بدلاً من Ruby،
  • لقد تغيرت بنية الدليل الافتراضي لملفات التكوين بشكل ملحوظ
  • تمت إضافة دعم لموفري البيانات للبيئات والوحدات النمطية (لم تعد هناك حاجة للاختراق).
  • التقليل من دور الهيرا العالمية. الأمر الجديد ذو الصلة هو البحث عن الدمية.

تثبيت

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

مكونات الخادم الرئيسية الثلاثة هي Puppet Server نفسه، وPuppetDB، وPostgreSQL. يمكن حشرها جميعًا في عقدة واحدة أو تقسيمها إلى نظامين أو ثلاثة أنظمة. يمكن تشغيل Puppet Server وPuppet DB عدة مرات، لكن PostgeSQL هي نقطة الفشل الوحيدة. هناك طرق مختلفة لنسخ PostgeSQL وتجميعها، والأسلوب المناسب في حالة الخوادم الرئيسية والثانوية هو Master + Read-Only Slave، والذي يتم دعمه في PuppetDB نفسها كعقدة قاعدة بيانات رئيسية للقراءة فقط، ولكن أتمتة مثل هذه يستغرق الإعداد وقتًا وبالتالي فهو غير متوفر بعد في وحدة cfpuppetserver.

يمكن ببساطة تخزين التكوين نفسه على الأقل نظام الملفاتجنبًا إلى جنب مع Puppet Server، ولكنه يشبه كتابة البرامج النصية على خادم ويب للإنتاج. الحل الأنسب هو مستودع git. يمكن للأداة المساعدة r10k سحب جميع فروع المستودع ونشرها على Puppet Server كبيئات منفصلة. r10k سيء جدًا في سحب التبعيات، لذلك يتم استخدام دمية أمين المكتبة في الأعلى. تجدر الإشارة على الفور إلى أن بيئة الدمى الأساسية الأساسية هي "الإنتاج". لذلك، يجب أن يستخدم مستودع التكوين فرعًا يسمى "الإنتاج" بدلاً من "الرئيسي".

متطلبات النظام

يتم وصف الأجهزة من قبل الشركة المصنعة نفسها. تدعم وحدة cfpuppetserver حاليًا فقط Debian Jessie+ وUbuntu Trusty+.

التكوين في جيت

بالنسبة لـ r10k نفسه، لا يهم موقع المستودع كثيرًا - الشيء الرئيسي هو توفره. على سبيل المثال، لأغراض الاختبار، يمكن استضافة المستودع على نفس النظام والوصول إليه عبر file:// . المكان الجيد للبدء هو مثال تكوين codingfuture/puppet-exampleenv.
  1. استنساخ المستودع: git clone https://github.com/codingfuture/puppet-exampleenv my-puppet-conf && cd my-puppet-conf
  2. قمنا بتعيين الإعدادات العامة لوصول المسؤول باستخدام النصائح الموجودة في التعليقات:
    • بيانات المحرر $/common.yaml
  3. لنقم بإنشاء تكوين العقدة:
    • $MY_DOMAIN - اسم النطاق الجذر (على سبيل المثال، example.org)
    • $HOST_NAME - اسم مضيف العميل بدون المجال
    • بيانات mkdir/$MY_DOMAIN
    • بيانات cp/example.com/puppet.yaml data/$(MY_DOMAIN)/puppet.yaml
    • $EDITOR nano -w data/$(MY_DOMAIN)/puppet.yaml - إعداد عقدة مع Puppet Server وفقًا للاقتراحات الواردة في التعليقات
    • cp data/example.com/host.yaml data/$(MY_DOMAIN)/$(HOST_NAME).yaml
    • $EDITOR nano -w data/$(MY_DOMAIN)/$(HOST_NAME).yaml - إعداد عقدة عشوائية بناءً على الاقتراحات الواردة في التعليقات
  4. ندفع إلى خادم Git الخاص بنا أو نجعله متاحًا محليًا على عقدة مع Puppet Server عبر rsync أو scp. يعد المستودع المحلي مناسبًا كخطوة وسيطة حتى يتم نشر خادم Git من Puppet نفسه. بمعنى ما، هذا يذكرنا بتجميع المترجم على عدة مراحل.

التثبيت من الصفر على نظام نظيف

تتيح لك وحدة cfpuppetserver تثبيت كل شيء باستخدام Puppet نفسها، ولكن بالنسبة للتثبيت الأولي، يتم تكرار العمليات الأساسية بواسطة برنامج Bash النصي.

على نظام الهدف:

  1. قم بتنزيل البرنامج النصي للتثبيت: wget https://raw.githubusercontent.com/codingfuture/puppet-cfpuppetserver/master/setup_puppetserver.sh
  2. ننظر من خلال البرنامج النصي ونتجهم: أقل setup_puppetserver.sh
  3. تشغيل: باش setup_puppetserver.sh دمية.$(MY_DOMAIN) .
  4. نرى كيف ينتفخ النظام ولا يقوم بتثبيت كل شيء بسرعة كبيرة.
  5. إذا كان المستودع بعيدًا:
    • قم بإنشاء مفتاح SSH للجذر: ssh-keygen -t rsa -b 2048
    • نقوم بتسجيل المفتاح العام /root/.ssh/id_rsa.pub على خادم Git البعيد...
    • ... وهناك قمنا بإعداد ربط Git عن طريق استدعاء الأمر التالي: /usr/bin/ssh -T Deploypuppet@puppet.$(MY_DOMAIN) ./puppetdeploy.sh
  6. نبدأ بنشر التكوين يدويًا: /etc/puppetlabs/deploy.sh
  7. دعونا نجرب كيفية عمله على الخادم نفسه: /opt/puppetlabs/bin/puppet agent --test
  8. تأكد من إعدادات الشبكة لديك، حامي الطفرةوالوصول إلى SSH

إضافة العقد المدارة

  1. يجب أن يكون الاسم المؤهل بالكامل لخادم Puppet Server متاحًا عبر DNS على المضيف المُدار أو مشفرًا في /etc/hosts.
    • مثال: صدى "128.1.1.1 puppet.example.com" >> /etc/hosts
  2. على العقدة مع Puppet Server، قم بتشغيل البرنامج النصي التالي /root/genclientinit.sh $(HOST_NAME).$(MY_DOMAIN) .
  3. انسخ النتيجة بأكملها وألصقها فيها سطر الأوامرعلى نظام الهدف.
  4. ننتظر نهاية التنفيذ ونقوم بتشغيل /opt/puppetlabs/bin/puppet agent --test . عند الإطلاق الأول، سيتم إنشاء طلب توقيع الشهادة.
  5. نذهب إلى عقدة Puppet Server لتوقيع الشهادة.
    • قائمة شهادات الدمى - نتحقق من توقيع الشهادة بحثًا عن جنون العظمة الإضافي.
    • علامة شهادة الدمية $(HOST_NAME).$(MY_DOMAIN) - في الواقع، نحن نوقع الشهادة.
  6. نعود إلى العقدة المُدارة ونقوم بتشغيل: /opt/puppetlabs/bin/puppet agent --test` مرة أخرى. سيؤدي هذا إلى فرض بدء إجراء النشر.
  7. نحن في انتظار اكتمال النشر عبر Puppet Agent.
  8. هذا كل شيء، لديك بنية تحتية بسيطة جاهزة!

مثال على الإخراج من /root/genclientinit.sh

سحق</etc/cflocation فاي إذا كان الاختبار! -ض ""; ثم echo -n >/etc/cflocationpool fi if test! -z "\$http_proxy"; ثم قم بتصدير http_proxy Export https_proxy="\$http_proxy" تصدير HTTP_PROXY="\$http_proxy" تصدير HTTPS_PROXY="\$http_proxy" fi echo host.example.com > /etc/hostname hostname host.example.com if ! الذي lsb-الإصدار | يقرأ؛ ثم apt-get install lsb-release fi codename=\$(lsb_release -cs) if test -z "\$codename"; ثم صدى "فشل اكتشاف الاسم الرمزي الصحيح" للخروج من 1 fi wget https://apt.puppetlabs.com/puppetlabs-release-pc1-\$(codename).deb dpkg -i puppetlabs-release-pc1-\$(codename) .deb mkdir -p /etc/puppetlabs/puppet cat > /etc/puppetlabs/puppet/puppet.conf<علامة شهادة الدمية host.example.com" echo "استخدم CTRL + C لإيقاف الدورة، إذا فشلت لأسباب مختلفة" النوم 5 تم تنفيذ EOT

وصف الوحدة

قائمة كاملة بمعلمات Bash لبرنامج التثبيت الأولي

~# ./setup_puppetserver.sh الاستخدام: ./setup_puppetserver.sh [ [ [ [] ] ] ]
  • r10k_repo_url - URI لمستودع Git
  • certname - اسم المجال المؤهل بالكامل للمضيف
  • cflocation - تهيئة الحقيقة cf_location
  • cflocationpool - تهيئة الحقيقة cf_location_pool
  • http_proxy - خادم وكيل لطلبات HTTP وHTTPS

قائمة كاملة بمعلمات Bash للبرنامج النصي لتهيئة عميل Puppet

~# /root/genclientinit.sh الاستخدام: ./genclientinit.sh [ [ []]]
معنى المعلمات هو نفسه كما في البرنامج النصي السابق.

فئة cfpuppetserver

  • Publisher = "deploypuppet" - اسم المستخدم لنشر تحديثات التكوين تلقائيًا
  • Deployuser_auth_keys = undef - قائمة مفاتيح $deployuser
  • repo_url = undef - URI للمستودع (مثال: ssh://user@host/repo أو file:///some/path)
  • puppetserver = true - ما إذا كان سيتم تثبيت مكون Puppet Server على هذه العقدة
  • puppetdb = true - ما إذا كان سيتم تثبيت مكون PuppetDB على هذه العقدة
  • puppetdb_port = 8081 - منفذ PuppetDB
  • setup_postgresql = true - ما إذا كان سيتم تثبيت مكون PostgreSQL على هذه العقدة (فقط في حالة تمكين تثبيت PuppetDB)
  • Service_face = "any" - اسم المورد cfnetwork::iface لقبول الاتصالات الواردة
  • puppetserver_mem = تلقائي - ذاكرة الوصول العشوائي لخادم Puppet Server بالميجابايت (الحد الأدنى 192 ميجابايت)
  • puppetdb_mem = تلقائي - ذاكرة الوصول العشوائي لـ PuppetDB بالميجابايت (الحد الأدنى 192 ميجابايت)
  • postgresql_mem = تلقائي - ذاكرة الوصول العشوائي لـ PostgreSQL بالميجابايت (الحد الأدنى 128 ميجابايت)

فئة cfpuppetserver::puppetdb

  • postgresql_host = "localhost" - عنوان قاعدة البيانات
  • postgresql_listen = $postgresql_host - تنتقل القيمة مباشرة إلى توجيه الاستماع إلى عناوين PostgreSQL
  • postgresql_port = 5432 - منفذ قاعدة البيانات
  • postgresql_user = "puppetdb" - مستخدم PuppetDB في قاعدة البيانات
  • postgresql_pass = "puppetdb" - كلمة مرور مستخدم PuppetDB في قاعدة البيانات
  • postgresql_ssl = false - تمكين تشفير الاتصال استنادًا إلى شهادات Puppet PKI

فئة cfpuppetserver::puppetserver

  • autosign = false - لا ينبغي استخدامه في بيئة قتالية، ربما باستثناء المنطقة المجردة من السلاح. موجود حصريًا لأتمتة الاختبار.
  • global_hiera_config = "cfpuppetserver/hiera.yaml" - المسار إلى ملف تكوين Hiera الافتراضي وفقًا لقوانين Puppet (المكون الأول هو اسم الوحدة، والباقي هو المسار الموجود أسفل الملفات/المجلد في الوحدة)

يمكنك المساعدة وتحويل بعض الأموال لتطوير الموقع



لا يمكن وصف إدارة عدد كبير من أنظمة Unix بأنها مريحة. لتغيير معلمة واحدة، يجب على المسؤول الاتصال بكل جهاز؛ يمكن للبرامج النصية أن تساعد جزئيًا فقط، وليس في جميع المواقف.

يجب أن ندرك أن مسؤولي شبكة Windows لا يزالون في وضع أكثر فائدة. يكفي تغيير إعدادات سياسة المجموعة وبعد فترة من الوقت، جميع أجهزة الكمبيوتر الموجودة على الشبكة، بما في ذلك تلك التي تم تثبيت نظام التشغيل عليها مؤخرًا، سوف "تتعلم" عن الابتكار، إذا كان الأمر يتعلق بها بالطبع. إذا نظرنا إلى الوراء على مدى فترة طويلة من تطوير يونكس، ستلاحظ أنه لم يتم اكتشاف أي شيء مثل هذا على الإطلاق. هناك حلول مثل Kickstart التي تساعد في التثبيت الأولي نظام التشغيلولكن المزيد من التحسين سيتطلب جهدا كبيرا. الحلول التجارية مثل BladeLogic وOpsWare لا تحل مشكلة أتمتة الإعدادات إلا بشكل جزئي؛ وتتمثل ميزتها الرئيسية في توفرها واجهة المستخدم الرسومية، ولا يمكن شراؤها إلا من المؤسسات الكبيرة. هناك، بالطبع، مشاريع تقدم حلولاً مجانية، لكنها طوال فترة وجودها لم تتمكن أبدًا من إنشاء مجتمع كبير. على سبيل المثال، لا يحظى Cfengine بشعبية كبيرة بين المسؤولين، على الرغم من أنه بالإضافة إلى Linux، يمكن استخدامه في *BSD وWindows وMac OS X. قد يكون هذا بسبب التعقيد النسبي لإنشاء التكوينات. عند وصف المهام، عليك أن تأخذ في الاعتبار ميزات كل نظام محدد والتحكم يدويًا في تسلسل الإجراءات عند تنفيذ الأوامر. أي أنه يجب على المسؤول أن يتذكر أنه بالنسبة لبعض الأنظمة، يجب عليك كتابة adduser للآخرين، وuseradd، ومراعاة موقع الملفات على أنظمة مختلفة، وما إلى ذلك. يؤدي هذا إلى تعقيد عملية كتابة الأوامر، فمن الصعب جدًا إنشاء التكوين الصحيح بسرعة، ومن المستحيل تقريبًا قراءة التكوينات التي تم إنشاؤها بعد فترة. على الرغم من ترخيص GPL، فإن Cfengine هو في الواقع مشروع فردي يتحكم في جميع التغييرات وليس مهتمًا جدًا ببناء مجتمع مفتوح. ونتيجة لذلك، فإن إمكانيات cfengine مرضية تمامًا للمطور، ولكنها تمثل صداعًا إضافيًا بالنسبة للمسؤولين الآخرين. لتحسين cfengine، تم إنشاء العديد من الوظائف الإضافية بواسطة مطوري الطرف الثالث، الأمر الذي غالبًا ما أدى إلى تفاقم الوضع. قرر مؤلف العديد من هذه الوحدات لـ cfengine، Luke Kanies، في النهاية تطوير أداة مماثلة، ولكن بدون العديد من عيوب cfengine.

مميزات الدمية

Puppet، مثل cfengine، هو نظام خادم عميل يستخدم لغة تعريفية، أي لغة إلزامية لوصف المهام والمكتبات لتنفيذها. يتصل العملاء بشكل دوري (30 دقيقة افتراضيًا) بالخادم المركزي ويتلقون أحدث التكوين. إذا كانت الإعدادات المستلمة لا تتطابق مع حالة النظام، فسيتم تنفيذها، وإذا لزم الأمر، سيتم إرسال تقرير عن العمليات المنجزة إلى الخادم. يمكن للخادم حفظ الرسائل في سجل النظام أو الملف، وإنشاء رسم بياني RRD، وإرسالها إلى بريد إلكتروني محدد. توفر طبقات المعاملات وتجريد الموارد الإضافية أقصى قدر من التوافق مع الإعدادات والتطبيقات الحالية، مما يسمح لك بالتركيز على كائنات النظام دون القلق بشأن الاختلافات في تنفيذ ووصف الأوامر التفصيلية وتنسيقات الملفات. يعمل المسؤول فقط مع نوع الكائن، بينما يعتني Puppet بالباقي. وبالتالي، فإن نوع الحزم يعرف حوالي 17 نظامًا للحزم، وسيتم التعرف على النظام المطلوب تلقائيًا بناءً على معلومات حول إصدار التوزيع أو النظام، على الرغم من أنه يمكن إجبار مدير الحزم إذا لزم الأمر.

على عكس البرامج النصية، التي غالبًا ما لا يكون من الممكن استخدامها على أنظمة أخرى، فإن تكوينات الدمى المكتوبة بواسطة مسؤولي الطرف الثالث، في معظمها، ستعمل دون مشاكل على أي شبكة أخرى. في كتاب الطبخ الدمى [ http://www.reductivelabs.com/trac/puppet/tags/puppet%2Crecipe] هناك بالفعل ثلاثين وصفات جاهزة. يدعم Puppet حاليًا أنظمة التشغيل والخدمات التالية رسميًا: Debian، وRedHat/Fedora، وSolaris، وSUSE، وCentOS، وMac OS X، وOpenBSD، وGentoo، وMySQL، وLDAP.

لغة الدمية

للمضي قدمًا، يجب عليك أولاً فهم العناصر والإمكانيات الأساسية للغة. اللغة هي واحدة من نقاط القوةدمية. وبمساعدتها، يتم وصف الموارد التي يخطط المسؤول لإدارتها والإجراءات. على عكس معظم الحلول المماثلة، يسمح Puppet للغة بتبسيط الوصول إلى جميع الموارد المماثلة على أي نظام في بيئة غير متجانسة. يتكون وصف المورد عادةً من الاسم والنوع والسمات. على سبيل المثال، دعنا نشير إلى الملف /etc/passwd ونضبط سماته:

الملف ("/ الخ/passwd":

المالك => الجذر،

المجموعة => الجذر،

الآن سيقوم العملاء، بعد اتصالهم بالخادم، بنسخ الملف /etc/passwd وتثبيت السمات المحددة. يمكنك تحديد موارد متعددة في قاعدة واحدة، والفصل بينها باستخدام فاصلة منقوطة. ماذا تفعل إذا كان ملف التكوين المستخدم على الخادم يختلف عن ملف التكوين الخاص بالعميل أو لا يستخدم على الإطلاق؟ على سبيل المثال، قد ينشأ هذا الموقف عند إعداد اتصالات VPN. في هذه الحالة، يمكن الإشارة إلى الملف باستخدام التوجيه المصدر. هناك خياران هنا، كالعادة، لتحديد المسار إلى ملف آخر، كما يتم دعم بروتوكولين URI: الملف والدمية. في الحالة الأولى، يتم استخدام رابط لخادم NFS خارجي، وفي الخيار الثاني، يتم تشغيل خدمة تشبه NFS على خادم Puppet، الذي يقوم بتصدير الموارد. في الحالة الأخيرة، يكون المسار الافتراضي متعلقًا بدليل جذر الدمية - /etc/puppet. أي أن رابط الدمية://server.domain.com/config/sshd_config سيتوافق مع الملف /etc/puppet/config/sshd_config. يمكنك تجاوز هذا الدليل باستخدام توجيه filebucket، على الرغم من أنه من الأصح استخدام القسم الذي يحمل نفس الاسم في الملف /etc/puppet/fileserver.conf. في هذه الحالة، يمكنك تقييد الوصول إلى الخدمة من عناوين معينة فقط. على سبيل المثال، دعونا نصف قسم التكوين.

المسار /var/puppet/config

السماح *.domain.com

السماح 192.168.0.*

السماح 192.168.1.0/24

رفض *.wireless.domain.com

ثم ننتقل إلى هذا القسم عند وصف المورد.

المصدر => "دمية://server.domain.com/config/sshd_config"

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

الملف ("/ الخ/passwd":

الاسم المستعار => passwd

يعد الخيار الآخر لإنشاء اسم مستعار أمرًا جيدًا عندما يتعين عليك التعامل مع أنظمة تشغيل مختلفة. على سبيل المثال، لنقم بإنشاء مورد يصف ملف sshd_config:

ملف (سشدكونفيج:

الاسم => نظام التشغيل $؟ (

سولاريس => "/usr/local/etc/ssh/sshd_config"،

الافتراضي => "/etc/ssh/sshd_config"

في هذا المثال، نحن أمام خيار. يتم تحديد ملف Solaris بشكل منفصل، أما بالنسبة لجميع الملفات الأخرى فسيتم تحديد الملف /etc/ssh/sshd_config. الآن يمكن الوصول إلى هذا المورد كـ sshdconfig، اعتمادًا على نظام التشغيل، سيتم تحديد المسار المطلوب. على سبيل المثال، نشير إلى أنه إذا كان البرنامج الخفي sshd قيد التشغيل وتم استلام ملف جديد، فيجب إعادة تشغيل الخدمة.

تأكد => صحيح،

الاشتراك => ملف

غالبًا ما تُستخدم المتغيرات عند العمل مع بيانات المستخدم. على سبيل المثال، نصف موقع الأدلة الرئيسية للمستخدم:

$ هوميروت = "/المنزل"

الآن يمكن الوصول إلى ملفات مستخدم معين باسم

$(الجذر المنزلي)/$الاسم

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

إكسيك (المسار => "/usr/bin:/bin:/usr/sbin:/sbin")

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

الملف ("/etc/Apache2/conf.d":

المصدر => "دمية: // puppet://server.domain.com/config/apache/conf.d"،

التكرار => "صحيح"

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

"/etc/passwd": المالك => الجذر، المجموعة => الجذر، الوضع => 644؛

"/etc/shadow": المالك => الجذر، المجموعة => الجذر، الوضع => 440

كما هو الحال في اللغات الموجهة للكائنات، يمكن تجاوز الفئات. على سبيل المثال، في FreeBSD، مالك المجموعة لهذه الملفات هو wheel. لذلك، لكي لا نعيد كتابة المورد بالكامل، فلنقم بإنشاء فئة جديدة freebsd، والتي سوف ترث فئة linux:

الطبقة freebsd ترث نظام التشغيل Linux (

ملف["/etc/passwd"] (group => wheel );

ملف["/etc/shadow"] (المجموعة => العجلة)

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

تحديد user_homedir ($group, $fullname, $ingroups) (

المستخدم("اسم $":

ضمان => الحاضر،

التعليق => "$الاسم الكامل"،

معرف => "$مجموعة"،

المجموعات => $ingroups،

العضوية => الحد الأدنى،

شل => "/ بن/باش"،

الصفحة الرئيسية => "/الصفحة الرئيسية/اسم $"،

تتطلب => المجموعة[$group]،

exec("$name homedir":

الأمر => "/bin/cp -R /etc/skel /home/$name; /bin/chown -R $name:$group /home/$name"،

يخلق => "/الصفحة الرئيسية/اسم $"،

تتطلب => المستخدم [اسم $]،

الآن لإنشاء واحدة جديدة حسابفقط اتصل بـ user_homedir.

user_homedir("سيرج":

المجموعة => "سيرج"،

الاسم الكامل => "سيرج جاريمتشوك"،

المجموعات => ["الوسائط"، "المشرف]

هناك أوصاف منفصلة للعقد التي تدعم الميراث مثل الفئات. عندما يتصل العميل بخادم Puppet، سيتم البحث في قسم العقدة المقابل وسيتم توفير الإعدادات الخاصة بهذا الكمبيوتر فقط. لوصف جميع الأنظمة الأخرى، يمكنك استخدام العقدة الافتراضية. ويرد وصف لجميع الأنواع في مستند "مرجع النوع"، والذي يجب قراءته على أي حال، على الأقل لفهم جميع إمكانيات لغة الدمية. أنواع مختلفةالسماح لك بتنفيذ أوامر محددة، بما في ذلك عند استيفاء شروط معينة (على سبيل المثال، تغيير ملف التكوين)، والعمل مع cron، وبيانات اعتماد المستخدم والمجموعات، وأجهزة الكمبيوتر، وتثبيت الموارد، وبدء الخدمات وإيقافها، وتثبيت الحزم وتحديثها وإزالتها، والعمل مع مفاتيح SSHومناطق سولاريس وما إلى ذلك. هذا هو مدى سهولة فرض قائمة الحزم في التوزيعات باستخدام apt ليتم تحديثها كل يوم بين 2 و4 ساعات.

الجدول الزمني (يوميا:

الفترة => يوميا،

النطاق =>

exec("/usr/bin/apt-get update":

الجدول الزمني => يوميا

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

تركيب الدمية

يتطلب Puppet إصدار Ruby (>= 1.8.1) مع دعم OpenSSL ومكتبات XMLRPC، بالإضافة إلى المكتبة الأسرع [ http://reductivelabs.com/projects/facter]. يتضمن مستودع Ubuntu 7.04 الذي تم استخدامه للتثبيت الاختباري بالفعل حزمة الجرو.

$ sudo apt-cache دمية البحث

دمية — إدارة التكوين المركزية للشبكات

Puppetmaster - البرنامج الخفي للتحكم في إدارة التكوين المركزي

أثناء التثبيت، سيتم تثبيت جميع حزم التبعية الضرورية: Factor libopenssl-Ruby libxmlrpc-ruby.

$ sudo apt-get install puppet puppetmaster

يمكنك التحقق من توفر مكتبات روبي باستخدام الأمر.

$ روبي -ropenssl -e "يضع: نعم"

~$ روبي -rxmlrpc/client -e "يضع: نعم"

إذا لم يتم تلقي أي أخطاء، فهذا يعني أن كل ما تحتاجه قد تم تضمينه بالفعل. تسمى الملفات التي تصف التكوين المطلوب للأنظمة بالبيانات في مصطلحات الدمى. عند إطلاقه، يحاول البرنامج الخفي قراءة الملف /etc/puppet/manifests/site.pp؛ وإذا كان مفقودًا، فإنه يعرض رسالة تحذير. عند الاختبار، يمكنك إخبار البرنامج الخفي بالعمل في وضع عدم الاتصال، وفي هذه الحالة لا يكون البيان مطلوبًا

$ Sudo /usr/bin/puppetmasterd --nonodes

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

الملف ("/ الخ/سودورز":

المالك => الجذر،

المجموعة => الجذر،

جميع ملفات التكوين لكل من الخادم والعملاء موجودة في /etc/puppet. يعد الملف fileserver.conf الذي تحدثنا عنه أعلاه اختياريًا ويتم استخدامه فقط إذا كان Puppet سيعمل أيضًا كخادم ملفات. على Ubuntu، يقوم هذا الملف بتصدير الدليل الفرعي /etc/puppet/files. يحتوي الدليل الفرعي ssl على الشهادات والمفاتيح التي سيتم استخدامها للتشفير عند توصيل العملاء. يتم إنشاء المفاتيح تلقائيًا في المرة الأولى التي تبدأ فيها تشغيل Puppetmasterd، ويمكنك إنشاؤها يدويًا باستخدام الأمر.

$ sudo /usr/bin/ puppetmasterd --mkusers.

ملفات puppetd.conf وpuppetmasterd.conf متشابهة. تشير إلى بعض المعلمات الخاصة بتشغيل الشياطين على نظام العميل والخادم. يختلف ملف العميل فقط في وجود معلمة الخادم، التي تشير إلى الكمبيوتر الذي يعمل عليه puppetmasterd.

الخادم = Grinder.com

logdir = /var/log/puppet

vardir = /var/lib/puppet

rundir = /var/run

# إرسال تقرير إلى الخادم

لتجنب كتابة كل شيء يدويًا، يمكنك إنشاء قالب باستخدام puppetd نفسه.

$ puppetd --genconfig > /etc/puppet/puppetd.conf

وبالمثل، يمكنك إنشاء site.pp على الخادم.

$ puppetd --genmanifest > /etc/puppet/manifests/site.pp

هناك ملف آخر، tagmail.conf، يسمح لك بتحديد عناوين البريد الإلكتروني التي سيتم إرسال التقارير إليها. في أبسط الحالات، يمكنك استخدام سطر واحد.

الجميع: [البريد الإلكتروني محمي]

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

$ sudo puppetd --server Grinder.com --waitforcert 60 --test

معلومات: طلب الشهادة

تحذير: لن يتم التحقق من شهادة النظير في جلسة SSL هذه

تنويه: لم استلم الشهادة

إذا تم إرجاع سطر مختلف، فيجب عليك التحقق من تشغيل الخادم.

$ ملاحظة aux | دمية جريب

دمية 5779 0.0 1.4 27764 15404 ؟ SSL 21:49 0:00 روبي /usr/sbin/puppetmasterd

يجب أن يسمح جدار الحماية بالاتصالات على المنفذ 8140.

نتلقى على الخادم قائمة بالشهادات التي يجب التوقيع عليها.

$ سودو دمية - قائمة

nomad.grinder.com

ونقوم بالتوقيع على شهادة العميل.

$ sudo puppetca – وقع nomad.grinder.com

الآن يمكن للعميل الاتصال بالخادم بحرية وتلقي الإعدادات.

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

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

يعرض هذا القسم التثبيت والتكوين دميةفي تكوين العميل/الخادم. يوضح هذا المثال البسيط كيفية التثبيت أباتشياستخدام دمية.

تثبيت

من أجل التثبيت دميةأدخل في المحطة:

Sudo apt-get install puppetmaster

على جهاز (أجهزة) العميل، أدخل:

Sudo apt-get install puppet

إعدادات

قبل إعداد الدمية، قد ترغب في إضافة إدخال DNS CNAMEل puppet.example.com، أين example.com- هذا هو المجال الخاص بك. العملاء الافتراضيين دميةتحقق من DNS لـ puppet.example.com كاسم خادم الدمية ( سيد دمية). راجع خدمة اسم المجال للحصول على تفاصيل إضافية حول استخدام DNS.

إذا كنت لا تنوي استخدام DNS، فيمكنك إضافة إدخالات إلى الملف /etc/hosts على الخادم والعميل. على سبيل المثال، في الملف /etc/hosts دميةإضافة الخادم:

127.0.0.1 دمية المضيف المحلي.localdomain 192.168.1.17 meercat02.example.com meercat02

على كل دميةفي العميل، قم بإضافة إدخال للخادم:

192.168.1.16 meercat.example.com دمية ميركات

استبدال عناوين IP و أسماء النطاقاتمن المثال إلى عناوينك الحالية وأسماء الخادم والعملاء.

الآن لنقم بإعداد بعض الموارد لـ أباتشي2. قم بإنشاء ملف /etc/puppet/manifests/site.ppتحتوي على ما يلي:

خدمة الحزمة ("Apache2": ضمان => مثبتة) ("Apache2": ضمان => صحيح، تمكين => صحيح، يتطلب => الحزمة["Apache2"] )

العقدة "meercat02.example.com" (بما في ذلك apache2)

يستبدل meercat02.example.comالى اسمك الحالي دميةعميل.

الخطوة الأخيرة لهذا البسيط دميةيقوم الخادم بإعادة تشغيل الخدمة:

إعادة تشغيل Sudo /etc/init.d/puppetmaster

من الآن دميةتم تكوين كل شيء على الخادم وحان وقت تكوين العميل.

أولاً، لنقم بتكوين الخدمة دميةوكيل لإطلاق. تحرير /etc/default/puppet، مع استبدال القيمة يبدأعلى نعم:

سودو /etc/init.d/puppet ابدأ

دعونا نعود إلى دميةالخادم لتوقيع شهادة العميل باستخدام الأمر:

سودو دمية - تسجيل meercat02.example.com

يفحص /var/log/syslogعن أي أخطاء في التكوين. إذا سارت الأمور على ما يرام، الحزمة أباتشي2وسيتم تثبيت تبعياته ل دميةعميل.

هذا المثال بسيط جداً ولا يظهر الكثير من المميزات والفوائد. دمية. ل معلومات إضافيةينظر

سيرجي ياريمشوك

التكوين المركزي لأنظمة UNIX باستخدام Puppet

لا يمكن اعتبار إدارة عدد كبير من أنظمة UNIX أمرًا مريحًا. لتغيير معلمة واحدة، يجب على المسؤول الاتصال بكل جهاز؛ يمكن للبرامج النصية أن تساعد جزئيًا فقط، وليس في جميع المواقف.

يجب أن ندرك أن مسؤولي شبكة Windows لا يزالون في وضع أكثر فائدة. يكفي تغيير إعدادات سياسة المجموعة، وبعد فترة من الوقت، جميع أجهزة الكمبيوتر الموجودة على الشبكة، بما في ذلك تلك التي تم تثبيت نظام التشغيل عليها مؤخرًا، سوف "تتعلم" الابتكار، إذا كان الأمر يتعلق بها بالطبع. إذا نظرنا إلى الوراء على مدى فترة تطوير UNIX الطويلة، يمكنك أن ترى أنه لم يتم اكتشاف أي شيء مثل هذا على الإطلاق. هناك حلول مثل Kickstart التي تساعد في التثبيت الأولي لنظام التشغيل، ولكن المزيد من التطوير سيتطلب جهدًا كبيرًا. الحلول التجارية، مثل BladeLogic وOpsWare، تحل مشكلة أتمتة الإعدادات جزئيًا فقط؛ وتتمثل ميزتها الرئيسية في وجود واجهة رسومية، ولا تستطيع شرائها سوى المؤسسات الكبيرة. هناك بالطبع مشاريع تقدم حلولاً مجانية، لكنها طوال وجودها لم تكن قادرة على إنشاء مجتمع كبير. على سبيل المثال، لا يحظى Cfengine بشعبية كبيرة بين المسؤولين، على الرغم من أنه بالإضافة إلى Linux، يمكن استخدامه في *BSD وWindows وMac OS X. قد يكون هذا بسبب التعقيد النسبي لإنشاء التكوينات. عند وصف المهام، من الضروري مراعاة خصائص كل نظام محدد والتحكم يدويًا في تسلسل الإجراءات عند تنفيذ الأوامر. وهذا يعني أن المسؤول يجب أن يتذكر أنه بالنسبة لبعض الأنظمة، يجب عليك كتابة adduser، وبالنسبة للآخرين - useradd، مع مراعاة موقع الملفات على أنظمة مختلفة، وما إلى ذلك. يؤدي هذا إلى تعقيد عملية كتابة الأوامر، فمن الصعب جدًا إنشاء التكوين الصحيح بسرعة، ومن المستحيل تقريبًا قراءة التكوينات التي تم إنشاؤها بعد فترة. على الرغم من ترخيص GPL، يعد Cfengine في الأساس مشروعًا فرديًا يتحكم في جميع التغييرات وليس مهتمًا جدًا ببناء مجتمع مفتوح. ونتيجة لذلك، فإن إمكانيات Cfengine مرضية تمامًا للمطور، ولكنها تمثل صداعًا إضافيًا للمسؤولين الآخرين. لتحسين Cfengine، تم إنشاء العديد من الوظائف الإضافية بواسطة مطوري الطرف الثالث، الأمر الذي غالبًا ما أدى إلى تفاقم الوضع. قرر مؤلف العديد من هذه الوحدات لـ Cfengine، Luke Kanies، في النهاية تطوير أداة مماثلة، ولكن بدون العديد من عيوب Cfengine.

مميزات الدمية

Puppet، مثل Cfengine، هو نظام خادم عميل يستخدم لغة تعريفية لوصف المهام والمكتبات لتنفيذها. يتصل العملاء بشكل دوري (كل 30 دقيقة افتراضيًا) بالخادم المركزي ويتلقون أحدث التكوين. إذا كانت الإعدادات المستلمة لا تتطابق مع حالة النظام، فسيتم تنفيذها، وإذا لزم الأمر، سيتم إرسال تقرير عن العمليات المنجزة إلى الخادم. يمكن لخادم الرسائل حفظه في سجل النظام أو الملف وإنشاء رسم بياني RRD وإرساله إلى البريد الإلكتروني المحدد. توفر طبقات المعاملات وتجريد الموارد الإضافية أقصى قدر من التوافق مع الإعدادات والتطبيقات الحالية، مما يسمح لك بالتركيز على كائنات النظام دون القلق بشأن الاختلافات في التنفيذ ووصف الأوامر التفصيلية وتنسيقات الملفات. يعمل المسؤول فقط مع نوع الكائن، بينما يعتني Puppet بالباقي. وبالتالي، فإن نوع الحزم يعرف حوالي 17 نظامًا للحزم، وسيتم التعرف على النظام المطلوب تلقائيًا بناءً على معلومات حول إصدار التوزيع أو النظام، على الرغم من إمكانية تعيين مدير الحزم بالقوة إذا لزم الأمر.

على عكس البرامج النصية، التي غالبًا ما يكون من المستحيل استخدامها على أنظمة أخرى، فإن تكوينات الدمية المكتوبة بواسطة مسؤولي الطرف الثالث ستعمل في الغالب دون مشاكل على أي شبكة أخرى. يحتوي Puppet CookBook بالفعل على ثلاثين وصفة جاهزة. يدعم Puppet حاليًا أنظمة التشغيل والخدمات التالية رسميًا: Debian، وRedHat/Fedora، وSolaris، وSUSE، وCentOS، وMac OS X، وOpenBSD، وGentoo، وMySQL، وLDAP.

لغة الدمية

للمضي قدمًا، يجب عليك أولاً فهم العناصر والإمكانيات الأساسية للغة. اللغة هي إحدى نقاط قوة Puppet. وهو يصف الموارد التي يخطط المسؤول لإدارتها والإجراءات التي يتخذها. على عكس معظم الحلول المماثلة، يسمح Puppet للغة بتبسيط الوصول إلى جميع الموارد المماثلة على أي نظام في بيئة غير متجانسة. يتكون وصف المورد عادةً من الاسم والنوع والسمات. على سبيل المثال، دعنا نشير إلى الملف /etc/passwd ونضبط سماته:

الملف ("/ الخ/passwd":

المالك => الجذر،

المجموعة => الجذر،

الوضع => 644،

الآن سيقوم العملاء المتصلون بالخادم بنسخ الملف /etc/passwd وتعيين السمات المحددة. يمكنك تحديد موارد متعددة في قاعدة واحدة، والفصل بينها باستخدام فاصلة منقوطة. ولكن ماذا لو كان ملف التكوين المستخدم على الخادم يختلف عن ملف التكوين الخاص بالعميل أو لم يتم استخدامه على الإطلاق؟ على سبيل المثال، قد ينشأ هذا الموقف عند إعداد اتصالات VPN. في هذه الحالة، يجب عليك الإشارة إلى الملف باستخدام التوجيه المصدر. هناك خياران هنا؛ يمكنك كالعادة تحديد المسار إلى ملف آخر، وكذلك استخدام بروتوكولي URI المعتمدين: الملف والدمية. في الحالة الأولى، يتم استخدام رابط لخادم NFS خارجي، وفي الخيار الثاني، يتم تشغيل خدمة تشبه NFS على خادم Puppet، الذي يقوم بتصدير الموارد. في الحالة الأخيرة، يكون المسار الافتراضي متعلقًا بالدليل الجذر للدمية - /etc/puppet. أي أن رابط الدمية://server.domain.com/config/sshd_config سيتوافق مع الملف /etc/puppet/config/sshd_config. يمكنك تجاوز هذا الدليل باستخدام توجيه filebucket، على الرغم من أنه من الأصح استخدام القسم الذي يحمل نفس الاسم في الملف /etc/puppet/fileserver.conf. في هذه الحالة، يمكنك تقييد الوصول إلى الخدمة لعناوين معينة فقط. على سبيل المثال، دعونا نصف قسم التكوين:

المسار /var/puppet/config

السماح بـ *.domain.com

السماح 127.0.0.1

السماح 192.168.0.*

السماح 192.168.1.0/24

رفض *.wireless.domain.com

ثم نشير إلى هذا القسم عند وصف المورد:

المصدر => "دمية://server.domain.com/config/sshd_config"

قبل النقطتين هو اسم المورد. في أبسط الحالات، يمكنك ببساطة تحديد المسار الكامل للملف كاسم. في التكوينات الأكثر تعقيدًا، من الأفضل استخدام اسم مستعار أو متغيرات. يتم تعيين الاسم المستعار باستخدام توجيه الاسم المستعار:

الملف ("/ الخ/passwd":

الاسم المستعار => passwd

يعد الخيار الآخر لإنشاء اسم مستعار أمرًا جيدًا عندما يتعين عليك التعامل مع أنظمة تشغيل مختلفة. على سبيل المثال، لنقم بإنشاء مورد يصف ملف sshd_config:

ملف (سشدكونفيج:

الاسم => نظام التشغيل $؟ (

سولاريس => "/usr/local/etc/ssh/sshd_config"،

الافتراضي => "/etc/ssh/sshd_config"

في هذا المثال، نحن أمام خيار. يتم تحديد ملف Solaris بشكل منفصل، أما بالنسبة لجميع الملفات الأخرى فسيتم تحديد الملف /etc/ssh/sshd_config. الآن يمكن الوصول إلى هذا المورد كـ sshdconfig، اعتمادًا على نظام التشغيل، سيتم تحديد المسار المطلوب. على سبيل المثال، نشير إلى أنه إذا كان البرنامج الخفي sshd قيد التشغيل وتم استلام ملف جديد، فيجب إعادة تشغيل الخدمة:

الخدمة (سشد:

تأكد => صحيح،

الاشتراك => الملف

غالبًا ما تُستخدم المتغيرات عند العمل مع بيانات المستخدم. على سبيل المثال، نصف موقع الأدلة الرئيسية للمستخدم:

$ هوميروت = "/المنزل"

يمكن الآن الوصول إلى ملفات مستخدم معين على النحو التالي:

$(الجذر المنزلي)/$الاسم

سيتم ملء المعلمة $name باسم حساب المستخدم. في بعض الحالات يكون من المناسب تحديد قيمة افتراضية لبعض الأنواع. على سبيل المثال، بالنسبة للنوع exec، من الشائع جدًا تحديد المجلدات التي يجب أن يبحث فيها عن الملف القابل للتنفيذ:

إكسيك ( المسار => "/usr/bin:/bin:/usr/sbin:/sbin")

إذا كنت بحاجة إلى الإشارة إلى عدة ملفات وأدلة متداخلة، فيمكنك استخدام معلمة التكرار:

الملف ("/etc/Apache2/conf.d":

المصدر => "دمية:// puppet://server.domain.com/config/apache/conf.d"،

التكرار => "صحيح"

يمكن دمج موارد متعددة في فئات أو تعريفات. تعتبر الفئات وصفًا كاملاً لنظام أو خدمة ويتم استخدامها بشكل منفصل:

فئة لينكس (

ملف (

"/etc/passwd": المالك => الجذر، المجموعة => الجذر، الوضع => 644؛

"/etc/shadow": المالك => الجذر، المجموعة => الجذر، الوضع => 440

كما هو الحال في اللغات الموجهة للكائنات، يمكن تجاوز الفئات. على سبيل المثال، في FreeBSD، مالك المجموعة لهذه الملفات هو wheel. لذلك، لكي لا نعيد كتابة المورد بالكامل، فلنقم بإنشاء فئة جديدة freebsd، والتي سوف ترث فئة linux:

الطبقة freebsd ترث نظام التشغيل Linux (

ملف["/etc/passwd"] (group => wheel );

ملف["/etc/shadow"] (المجموعة => العجلة)

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

تحديد user_homedir ($group, $fullname, $ingroups) (

المستخدم("اسم $":

تأكد => موجود،

التعليق => "$الاسم الكامل"،

معرف => "$المجموعة"،

المجموعات => $ingroups،

العضوية => الحد الأدنى،

شل => "/ بن/باش"،

الصفحة الرئيسية => "/الصفحة الرئيسية/اسم $"،

تتطلب => المجموعة[$group]،

إكسيك("$name homedir":

Command => "/bin/cp -R /etc/skel /home/$name; /bin/chown -R $name:$group /home/$name"،

ينشئ => "/الصفحة الرئيسية/اسم $"،

يتطلب => المستخدم [اسم $]،

الآن، لإنشاء حساب جديد، ما عليك سوى الاتصال بـ user_homedir:

user_homedir("سيرج":

المجموعة => "سيرج"،

الاسم الكامل => "سيرج جارمتشوك"،

المجموعات الداخلية => ["الوسائط"، " المشرف]

هناك أوصاف منفصلة للعقد التي تدعم الميراث، وكذلك الفئات. عندما يتصل العميل بخادم Puppet، سيتم البحث في قسم العقدة المقابل وسيتم توفير الإعدادات الخاصة بهذا الكمبيوتر فقط. لوصف جميع الأنظمة الأخرى، يمكنك استخدام العقدة الافتراضية. ويرد وصف لجميع الأنواع في مستند "مرجع النوع"، والذي يجب قراءته على أي حال، على الأقل لفهم جميع إمكانيات لغة الدمية. تتيح لك الأنواع المختلفة تنفيذ أوامر محددة، بما في ذلك عند استيفاء شروط معينة (على سبيل المثال، تغيير ملف التكوين)، والعمل مع cron، وبيانات اعتماد المستخدم والمجموعات، وأجهزة الكمبيوتر، وتثبيت الموارد، وبدء الخدمات وإيقافها، وتثبيت الحزم وتحديثها وإزالتها والعمل مع مفاتيح SSH ومناطق سولاريس وما إلى ذلك. هذه هي الطريقة التي يمكنك من خلالها فرض قائمة الحزم في التوزيعات بسهولة باستخدام apt ليتم تحديثها يوميًا بين ساعتين و4 ساعات:

الجدول الزمني (يوميا:

الدورة => يوميا،

النطاق =>

exec("/usr/bin/apt-get update":

الجدول => يوميا

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

تركيب الدمية

يتطلب Puppet استخدام Ruby (الإصدار 1.8.1 وما فوق) مع دعم OpenSSL ومكتبات XMLRPC، بالإضافة إلى مكتبة Faster. يتضمن مستودع Ubuntu 7.04 الذي تم استخدامه للتثبيت التجريبي بالفعل حزمة الجرو:

$ sudo apt-cache دمية البحث

~$ روبي -rxmlrpc/client -e "يضع: نعم"

نعم

إذا لم يتم تلقي أي أخطاء، فهذا يعني أن كل ما تحتاجه قد تم تضمينه بالفعل. تسمى الملفات التي تصف التكوين المطلوب للأنظمة بالبيانات في مصطلحات الدمى. عند إطلاقه، يحاول البرنامج الخفي قراءة الملف /etc/puppet/manifests/site.pp؛ وإذا كان مفقودًا، فإنه يعرض رسالة تحذير. عند الاختبار، يمكنك إخبار البرنامج الخفي بأن يعمل في الوضع المستقل، وهو ما لا يتطلب بيانًا:

$ Sudo /usr/bin/puppetmasterd --nonodes

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

فئة سودو (

ملف("/الخ/سودورز":

المالك => الجذر،

المجموعة => الجذر،

الوضع => 440،

العقدة الافتراضية(

تضمين سودو

جميع ملفات التكوين، سواء الخادم أو العميل، موجودة في /etc/puppet. يعد الملف fileserver.conf، الذي تحدثنا عنه بالفعل، اختياريًا ويتم استخدامه فقط إذا كان Puppet سيعمل أيضًا كخادم ملفات. على Ubuntu، يقوم هذا الملف بتصدير الدليل الفرعي /etc/puppet/files. يحتوي الدليل الفرعي ssl على الشهادات والمفاتيح التي سيتم استخدامها للتشفير عند توصيل العملاء. يتم إنشاء المفاتيح تلقائيًا عند تشغيل Puppetmasterd لأول مرة، ويمكنك إنشاؤها يدويًا باستخدام الأمر:

$ sudo /usr/bin/puppetmasterd --mkusers

ملفات puppetd.conf وpuppetmasterd.conf متشابهة. تشير إلى بعض المعلمات الخاصة بتشغيل الشياطين على نظام العميل والخادم. يختلف ملف العميل فقط في وجود معلمة الخادم، التي تشير إلى الكمبيوتر الذي يعمل عليه puppetmasterd:

الخادم = Grinder.com

logdir = /var/log/puppet

vardir = /var/lib/puppet

rundir = /var/run

# إرسال تقرير إلى الخادم

تقرير = صحيح

لتجنب كتابة كل شيء يدويًا، يمكنك إنشاء قالب باستخدام puppetd نفسه:

$ puppetd --genconfig > /etc/puppet/puppetd.conf

وبالمثل، يمكنك إنشاء site.pp على الخادم:

$ puppetd --genmanifest > /etc/puppet/manifests/site.pp

هناك ملف آخر، tagmail.conf، يسمح لك بتحديد عناوين البريد الإلكتروني التي سيتم إرسال التقارير إليها. في أبسط الحالات، يمكنك استخدام سطر واحد:

الجميع: [البريد الإلكتروني محمي]

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

أولاً، لإعلام الخادم بالكمبيوتر الجديد، أدخل الأمر الموجود على نظام العميل:

$ Sudo puppetd --server Grinder.com --waitforcert 60 –test

يجب أن يسمح جدار الحماية بالاتصالات على المنفذ 8140.

نحصل على الخادم على قائمة بالشهادات التي يجب التوقيع عليها:

$ sudo puppetca –list

nomad.grinder.com

والتوقيع على شهادة العميل:

$ sudo puppetca – وقع nomad.grinder.com

الآن يمكن للعميل الاتصال بالخادم بحرية وتلقي الإعدادات.

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

حظ سعيد!

  1. موقع مشروع BladeLogic – http://www.bladelogic.com.
  2. الموقع الإلكتروني لمشروع OpsWare هو http://www.opsware.com.
  3. الموقع الإلكتروني لمشروع Cfengine هو http://www.cfengine.org.
  4. الموقع الإلكتروني لمشروع Puppet هو http://reductivelabs.com/projects/puppet.
  5. كتاب طبخ الدمى - http://www.reductivelabs.com/trac/puppet/tagspuppet%2Crecipe.
  6. مكتبة أسرع –



قمة