Master of Puppets: نصب و پیکربندی سیستم مدیریت پیکربندی از راه دور Puppet. Master of Puppets: نصب و پیکربندی سیستم مدیریت پیکربندی Puppet از راه دور نصب عروسک

برای استفاده موثرتر از Puppet، باید نحوه ساخت ماژول ها و مانیفست ها را بدانید. این آموزش با راه اندازی یک پشته LAMP در سرور اوبونتو 14.04، نحوه کار این مؤلفه های Puppet را به شما آموزش می دهد.

الزامات

  • نصب عروسک (استاد و عامل). بیشتر در این مورد -.
  • توانایی ایجاد حداقل یک سرور مجازی اوبونتو 14.04 برای خدمت به گره عامل Puppet.

مبانی کد عروسکی

منابع

کد عروسکی عمدتاً از منابع تشکیل شده است. یک منبع یک قطعه کد است که وضعیت سیستم را توصیف می کند و تغییرات مورد نیاز آن را تعیین می کند. مثلا:

user("میچل":
اطمینان => حاضر،
uid => "1000"،
gid => "1000"،
shell => "/bin/bash",
خانه => "/home/mitchell"
}

بیانیه منبع دارای فرمت زیر است:

resource_type("resource_name"
ویژگی => مقدار
...
}

برای مشاهده همه انواع منابع Puppet، دستور زیر را صادر کنید:

منابع عروسکی --انواع

در این راهنما با انواع منابع بیشتر آشنا خواهید شد.

مانیفست ها

مانیفست یک فیلمنامه ارکستراسیون است. به برنامه های عروسکی با پسوند pp مانیفست می گویند. مانیفست پیش‌فرض Puppet /etc/puppet/manifests/site.pp است.

کلاس ها

مانند هر زبان برنامه نویسی معمولی، کلاس ها مسئول سازماندهی و استفاده مجدد از بخش های ارکستراسیون هستند.

در تعریف کلاس، بلوکی از کد وجود دارد که نحوه عملکرد کلاس را توصیف می کند. هنگامی که یک کلاس را تعریف کردید، می توانید از آن در مانیفست ها استفاده کنید.

تعریف کلاس دارای فرمت زیر است:

کلاس example_class(
...
کد
...
}

این کد کلاس example_class را تعریف می کند. کد Puppet در پرانتزهای فرفری خواهد بود.

اعلان کلاس مکانی در کد است که یک کلاس خاص در آن فراخوانی می شود. با یک اعلان کلاس، Puppet کد خود را پردازش می کند.

اعلان کلاس می تواند معمولی و بر اساس نوع منبع باشد.

یک اعلان کلاس معمولی با استفاده از کلمه کلیدی include به کد اضافه می شود.

شامل example_class باشد

هنگامی که به عنوان یک نوع منبع اعلام می شود، کلاس در قالب منبع اعلان می شود:

کلاس ("نمونه_کلاس":)

این اعلان به شما امکان می دهد پارامترهای کلاس را به کد خود اضافه کنید که مقادیر پیش فرض ویژگی های کلاس را لغو می کند. مثلا:

گره "host2" (
کلاس ("apache": ) # از ماژول apache استفاده کنید
apache::vhost ( "example.com": # تعریف منبع vhost
پورت => "80"،
docroot => "/var/www/html"
}
}

ماژول ها

ماژول مجموعه ای از مانیفست ها و فایل های دیگر است که به روشی از پیش تعریف شده سازماندهی شده اند که اشتراک گذاری و استفاده مجدد از بخش های جداگانه ارکستراسیون را آسان می کند. ماژول ها به سازماندهی کد Puppet کمک می کنند زیرا می توان از آنها برای جداسازی کدها به چند مانیفست استفاده کرد.

ماژول های عروسکی در دایرکتوری /etc/puppet/modules ذخیره می شوند.

نوشتن مانیفست

می توانید با استفاده از مثال نصب یک پشته LAMP در سرور اوبونتو، نوشتن مانیفست های عروسکی، ماژول ها و کلاس ها را تمرین کنید (نتیجه این خواهد بود).

بنابراین، برای هماهنگ کردن سرور اوبونتو 14.04 و نصب پشته LAMP روی آن، به منابعی برای اقدامات زیر نیاز دارید:

  • نصب پکیج apache2
  • راه اندازی سرویس apache2
  • نصب پکیج سرور MySQL، سرور mysql.
  • راه اندازی سرویس mysql
  • نصب پکیج php5
  • ایجاد یک اسکریپت تست PHP، info.php.
  • به روز رسانی شاخص apt قبل از نصب هر بسته.

در زیر سه نمونه از کد Puppet را مشاهده خواهید کرد که می توان از آنها برای دستیابی به چنین تنظیمات پشته LAMP استفاده کرد.

مثال اول به شما یاد می دهد که چگونه مانیفست های اولیه را در یک فایل بنویسید. مثال دوم به شما کمک می کند یک کلاس و ماژول را بر اساس مانیفست های قبلاً نوشته شده جمع آوری و استفاده کنید. مثال سوم به شما نشان می دهد که چگونه از ماژول های عمومی از پیش ساخته شده برای نصب پشته LAMP استفاده کنید.

توجه داشته باشید: برای تست بهتر است از سرور مجازی تازه استفاده کنید.

مثال 1: نصب LAMP با یک مانیفست

مانیفست عروسکی را می توان بر روی گره عامل نوشت و سپس با استفاده از دستور اعمال عروسکی اجرا کرد (برای انجام این کار نیازی به تنظیم master و agent ندارید).

در این بخش، شما یاد خواهید گرفت که مانیفست هایی بنویسید که از این نوع اعلان منابع استفاده کنند:

  • exec: اجرای دستورات.
  • بسته: نصب بسته ها
  • خدمات: مدیریت خدمات.
  • فایل: مدیریت فایل

ایجاد مانیفست

یک مانیفست جدید ایجاد کنید:

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

کد زیر را به آن اضافه کنید تا منابع مورد نیاز را اعلام کنید.

# دستور "apt-get update" را اجرا کنید
exec("apt-update": # منبع exec "apt-update"
command => "/usr/bin/apt-get update" # دستوری که این منبع اجرا خواهد کرد
}
# بسته apache2 را نصب کنید
بسته("apache2":
نیاز => Exec["apt-update"]، # درخواست "apt-update" قبل از نصب بسته
اطمینان حاصل کنید که => نصب شده است،
}
# سرویس apache2 را راه اندازی کنید
سرویس ("apache2":
اطمینان => در حال اجرا،
}
# سرور mysql را نصب کنید
بسته ("mysql-server":
نیاز => Exec["apt-update"]، # درخواست "apt-update" با نصب مجدد
اطمینان حاصل کنید که => نصب شده است،
}
# سرویس mysql را راه اندازی کنید
سرویس ("mysql":
اطمینان => در حال اجرا،
}
# بسته php5 را نصب کنید
بسته ("php5":
نیاز => Exec["apt-update"]، # درخواست "apt-update" قبل از نصب
اطمینان حاصل کنید که => نصب شده است،
}
# سرویس info.php را راه اندازی کنید
file("/var/www/html/info.php":
اطمینان => فایل،
محتوا => ""، # کد phpinfo
نیاز => بسته["apache2"]، # درخواست برای بسته "apache2"
}

اعمال مانیفست

برای استفاده از مانیفست جدید، دستور را وارد کنید:

عروسک sudo application --test

یک نتیجه حجیم را نمایش می دهد که تمام تغییرات در وضعیت محیط را نشان می دهد. اگر هیچ خطایی در خروجی وجود ندارد، باید بتوانید آدرس IP خارجی یا نام دامنه خود را در مرورگر خود باز کنید. یک تست آزمایشی روی صفحه ظاهر می شود. صفحه پی اچ پیبا اطلاعات مربوط به پشته این بدان معنی است که آپاچی و PHP در حال کار هستند.

اکنون پشته LAMP با استفاده از Puppet بر روی سرور نصب می شود.

این یک مانیفست نسبتاً ساده است زیرا می توان آن را روی یک عامل اجرا کرد. اگر استاد عروسکی ندارید، سایر گره‌های عامل نمی‌توانند از این مانیفست استفاده کنند.

سرور Puppet Master تغییرات وضعیت سرور را هر 30 دقیقه بررسی می کند.

مثال 2: نصب پشته LAMP با استفاده از یک ماژول

اکنون سعی کنید یک ماژول ساده بر اساس مانیفست LAMP که در بخش قبل نوشتید ایجاد کنید.

برای ایجاد یک ماژول، یک دایرکتوری جدید در پوشه modules ایجاد کنید (نام آن باید با نام ماژول مطابقت داشته باشد). این دایرکتوری باید شامل دایرکتوری manifests و فایل init.pp باشد. فایل init.pp کلاس Puppet را مشخص می کند (نام آن نیز باید با نام ماژول مطابقت داشته باشد).

ایجاد یک ماژول

به سرور Puppet Master بروید و یک ساختار دایرکتوری برای ماژول ایجاد کنید:

cd /etc/puppet/modules
sudo mkdir -p لامپ/نمایش

فایل init.pp را در ویرایشگر ایجاد و باز کنید:

sudo vi lamp/manifests/init.pp

کلاس لامپ را در فایل وارد کنید:

چراغ کلاس(
}

محتویات مانیفست را از بخش 1 کپی کرده و در بلوک کلاس لامپ قرار دهید. اکنون شما یک تعریف کلاس لامپ دارید. سایر مانیفست ها می توانند از این کلاس به عنوان یک ماژول استفاده کنند.

ذخیره کنید و فایل را ببندید.

استفاده از یک ماژول در مانیفست اصلی

اکنون می توانید مانیفست اصلی را پیکربندی کنید و از ماژول لامپ برای نصب پشته LAMP روی سرور استفاده کنید.

در سرور Puppet Master فایل زیر را ویرایش کنید:

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

به احتمال زیاد در این لحظهفایل خالی است خطوط زیر را به آن اضافه کنید:

پیش فرض گره ( )
گره "لامپ-1" (
}

توجه داشته باشید: لامپ-1 را با نام میزبان عامل Puppet خود جایگزین کنید تا پشته روی آن نصب شود.

بلوک گره به شما امکان می دهد کد Puppet را مشخص کنید که فقط برای برخی از گره ها اعمال می شود.

بلوک پیش‌فرض برای تمام گره‌های عاملی که بلوک جداگانه ندارند اعمال می‌شود (آن را خالی بگذارید). بلوک لامپ-1 روی گره عامل لامپ-1 اعمال خواهد شد.

خط زیر را به این بلوک اضافه کنید که از ماژول لامپ استفاده می کند:

ذخیره کنید و فایل را ببندید.

حالا Node agent Puppet می تواند تنظیمات را از سرور اصلی دانلود کرده و پشته LAMP را نصب کند. اگر می‌خواهید همین الان تغییراتی ایجاد کنید، دستور را روی عامل اجرا کنید:

عامل سودو - تست

ماژول ها راحت ترین راه برای استفاده مجدد از کد عروسکی هستند. علاوه بر این، ماژول ها به شما کمک می کنند تا کد خود را به طور منطقی سازماندهی کنید.

مثال 3: نصب LAMP با استفاده از ماژول های عمومی

ماژول MySQL به روشی مشابه استفاده می شود. خطوط زیر را به بلوک گره اضافه کنید:

class("mysql::server":
root_password => "رمز عبور"،
}

شما همچنین می توانید پارامترهای ماژول MySQL را ارسال کنید.

منبعی اضافه کنید که info.php را در مکان مورد نظر کپی کند. از پارامتر منبع استفاده کنید. خطوط زیر را به بلوک گره اضافه کنید:

file("info.php": # نام فایل منبع
path => "/var/www/html/info.php"، # مسیر هدف
اطمینان => فایل،
نیاز => کلاس ["apache"]، # کلاس apache برای استفاده
منبع => "puppet:///modules/apache/info.php"، # مکان برای کپی کردن فایل
}

این اعلان کلاس از پارامتر منبع به جای محتوا استفاده می کند. این گزینه نه تنها از محتویات فایل استفاده می کند، بلکه آن را کپی می کند.

Puppet فایل puppet:///modules/apache/info.php را در /etc/puppet/modules/apache/files/info.php کپی می کند.

ذخیره کنید و فایل را ببندید.

یک فایل info.php ایجاد کنید.

sudo sh -c "echo""> /etc/puppet/modules/apache/files/info.php"

حالا Node agent Puppet می تواند تنظیمات را از سرور اصلی دانلود کرده و پشته LAMP را نصب کند. اگر می خواهید در حال حاضر تغییراتی در محیط عامل ایجاد کنید، دستور را در این گره اجرا کنید:

عامل سودو - تست

این دستور تمام به روز رسانی های گره فعلی را دانلود کرده و پشته را روی آن نصب می کند. برای اطمینان از کارکرد Apache و PHP، آدرس IP یا دامنه گره را در مرورگر باز کنید:

http://lamp_1_public_IP/info.php

نتیجه

اکنون دانش اولیه کار با ماژول ها و مانیفست های Puppet را دارید. سعی کنید خودتان یک مانیفست و ماژول ساده ایجاد کنید.

Puppet برای مدیریت فایل های پیکربندی برنامه عالی است.

برچسب ها: ,
کمی شعربه نظر می رسد که این مقاله باید نقطه شروع کل مجموعه باشد، اما مخاطبان هدف هنوز کاربران با تجربه تر محصولات آزمایشگاه های عروسکی منبع باز هستند که از ماژول های فردی و ضعیف یکپارچه با Puppet Forge راضی نیستند. مانند هر مورد «کتابخانه در مقابل چارچوب»، بهایی که باید پرداخت شود پیروی از جهان بینی نویسنده راه حل یکپارچه است.

کمی در مورد نحوه کار عروسک

Puppet در درجه اول یک زبان خاص برای مشخص کردن وضعیت نهایی سیستم است. برای مقایسه، GNU Makefile بسیار مناسب است، جایی که، علاوه بر توصیف مستقیم وابستگی‌ها، می‌توان تا حد زیادی عجیب و غریب شد.

انتزاع عروسکی چیزی شبیه به این است ( شکستن الگوها - همه چیزهایی که در مورد اصطلاحات برنامه نویسی می دانستید را فراموش کنید!).

  • گرهمجموعه ای از تنظیمات برای یک سیستم هدف خاص است. در واقع، این یک مورد خاص از یک کلاس است.
  • کلاسمجموعه ای از منطق اعلانی است که در پیکربندی گره یا کلاس های دیگر گنجانده شده است. کلاس نه نمونه دارد و نه متد، اما دارای پارامترها و متغیرهایی است که در منطق تعریف شده اند. در واقع، این یک رویه است که می تواند رویه دیگری را با اضافه کردن کد و داشتن یک دامنه نه چندان پیش پا افتاده از متغیرها به ارث ببرد.
  • تایپ کنید- اما این بیشتر شبیه یک کلاس کلاسیک به نظر می رسد - مواردی را با نام و قطعاً فرض می کند پارامترهای داده شده، اما هیچ چیز بیشتر. یک پیاده‌سازی خاص از یک نوع را می‌توان به‌عنوان یک اسکریپت عروسکی از طریق define نوشت که نمونه‌هایی از انواع دیگر ایجاد می‌کند، یا به‌عنوان یک پسوند Ruby با یک پرواز خیالی.
  • منبع- اینها در واقع نمونه هایی از Types هستند. هر نام منبع در یک نوع خاص در پیکربندی گره (دایرکتوری) منحصر به فرد است.
  • متغیرها- خوب، خلاصه، اینها ثابت هستند... قبل از Puppet 4، همه چیز با دامنه آنها بدتر بود. اکنون کافی است: برای استفاده از خارج از محل تعریف، یک شناسه کاملا واجد شرایط باید مشخص شود، به جز در مورد ارث بری کلاس.
Puppet را می توان برای استقرار محلی بدون شبکه یا زیرساخت مرتبط استفاده کرد. از این می توان برای ایجاد تصاویر کانتینر استفاده کرد. حتی یک جنبش کامل وجود دارد که از کنار گذاشتن یک سرور متمرکز حمایت می کند.

به روشی صحیح از نظر ایدئولوژیک، زیرساخت Puppet متشکل از یک عامل - یک سرویس ممتاز در سیستم هدف - و یک سرور است که دستورالعمل‌های ارزشمند را در قالب دایرکتوری‌های منابع اعلامی بر اساس درخواست عوامل توزیع می‌کند. امنیت در سطح زیرساخت کلید عمومی خصوصی (X.509) اجرا می شود. به عبارت ساده، همان مکانیسم‌هایی که در HTTPS وجود دارد، اما با CA خاص خود و تأیید اجباری گواهی مشتری.

در یک شکل ساده، روش استقرار چیزی شبیه به این است:

  1. پردازش از طریق TLS و X.509 (ایجاد اتصال، به‌روزرسانی CRL، بررسی محدودیت‌های گواهی، و غیره)
  2. عامل، مولدهای واقعیت را از سرور با ذخیره و همه چیز دریافت می کند (به طور دقیق تر، همه چیز از پوشه های lib/ در ماژول ها بیرون کشیده می شود). اضافه کردن اسکریپت روبی خود برای جمع آوری اطلاعات مورد علاقه دشوار نیست.
  3. عامل اطلاعات مربوط به سیستم مورد نظر را جمع آوری کرده و به سرور ارسال می کند. همه حقایق را می توان به راحتی از طریق تماس با حقایق عروسکی به صورت دستی مشاهده کرد. این حقایق به عنوان متغیرهای جهانی در دسترس هستند.
  4. سرور یک کاتالوگ از منابع را جمع آوری می کند و آن را برای نماینده ارسال می کند. در زیر این یک لایه کامل از مفاهیم مختلف نهفته است.
  5. عامل همه چیز لازم را از سرور بیرون می کشد و سیستم را به فرم مشخص شده می آورد. خود عامل نمی‌داند با منابع چه کند؛ به پیاده‌سازی ارائه‌دهنده‌ها (ترجمه معنایی «اجراکننده»، نه تأمین‌کننده) انواع خاصی از منابع متکی است. برخی از ارائه‌دهندگان استاندارد هستند و در بسته‌های Puppet گنجانده می‌شوند، در حالی که بقیه از ماژول ها بیرون کشیده می شوند.
برای لذت بردن از تمام لذت ها، نان های اضافی به شکل زیر وجود دارد:
  • مدول- مجموعه ای از اسکریپت های نمایشی Puppet، پسوندهای Ruby برای Puppet، فایل ها، قالب های فایل، داده های Hiera و بسیاری موارد دیگر. اصطلاح صحیح تر «بسته» است.
  • محیط- مجموعه ای از اسکریپت ها، ماژول ها و داده های Hiera. با پیچیده‌تر شدن زیرساخت، ناگزیر باید پیکربندی را بیشتر از تقسیم استاندارد بر اساس گره‌ها تقسیم کرد. اساساً، این برای نوآوری‌های آزمایشی و کنترل دسترسی پیش پا افتاده (زمانی که همه مدیران به همه گره‌های زیرساخت فناوری اطلاعات دسترسی ندارند) مورد نیاز است.
  • هیرا- پایگاه داده سلسله مراتبی این فرمول می تواند بسیار ترسناک باشد. احتمالاً به همین دلیل است که در اسناد نسخه های بعدی تغییر کرده است. در واقع، این یک مکانیسم بسیار ساده و راحت برای استخراج پیکربندی از فایل های YAML یا JSON است. سلسله مراتب توانایی تعیین ترتیب خواندن چندین فایل پیکربندی است - یعنی. سلسله مراتب/اولویت این فایل ها.
    • Puppet علاوه بر واکشی داده‌ها با فراخوانی تابع، پارامترهای کلاس پیش‌فرض را می‌کشد که برجسته‌ترین نکته است.
    • البته Hiera از درونیابی واقعیت و حتی فراخوانی توابع ویژه پشتیبانی می کند.
    • در Puppet 4.3، ما دوباره همان عملکرد را اجرا کردیم تا نه تنها پایگاه داده جهانی، بلکه محلی برای محیط و ماژول را نیز پشتیبانی کنیم، اگرچه نویسنده قبلاً چندین مشکل در اجرای آنها پیدا کرده است (PUP-5983، PUP-5952 و PUP). -5899)، که فورا توسط آزمایشگاه عروسکی رفع شد.
    • چندین استراتژی برای استخراج مقادیر از همه فایل های سلسله مراتبی پشتیبانی می شود:
      • اول - اولین مقدار یافت شده بر اساس اولویت برگردانده می شود
      • منحصر به فرد - تمام مقادیر را در یک آرایه یک بعدی جمع آوری می کند و موارد تکراری را حذف می کند
      • هش - همه YAML هاش های یافت شده را ترکیب می کند. کلیدهای تکراری بر اساس اولویت انتخاب می شوند.
      • عمیق در اصل یک نسخه بازگشتی از هش است
    • زیبایی این است که استراتژی نمونه برداری را می توان هم هنگام فراخوانی تابع lookup() مشخص کرد، زیرا و در هر فایل سلسله مراتبی از طریق کلید ویژه lookup_options که بطور فعال در ماژول cfnetwork استفاده می شود.
  • PuppetDB- اساساً لایه ای از منطق تجاری حول یک پایگاه داده رابطه ای (PostgreSQL)، که به شما امکان می دهد گزارش های مربوط به حقایق و استقرارهای انجام شده را ذخیره کنید و منابع را برای وارد کردن بعدی به فهرست ها در سایر گره ها یا انتخاب ها صادر کنید. توابع ویژه. همچنین یک رابط وب به شکل داشبورد عروسکی وجود دارد.
  • X.509 PKI- زیرساخت گواهی قبلاً ذکر شده، که برای استفاده برای سایر خدمات بدون نیاز به مدیریت زیرساخت جداگانه بسیار راحت است.
  • MCCollective- به نظر می رسد چیز مفیدی برای راه اندازی وظایف مبتنی بر رویداد در مزرعه سرور باشد، اما نویسنده نسبت به امنیت یک راه حل خاص بی اعتمادی خاصی دارد.
  • عروسک خیمه شب بازی- یک پلت فرم باز برای انتشار و دانلود ماژول ها.
  • برخی از ویژگی های دیگر در قالب کنترل دستگاه های خارجینوع تجهیزات سیسکو و استقرار روی فلز خالی، اما این داستان متفاوت است

نکاتی در مورد امنیت و دسترسی

شما باید درک کنید که سرور عروسکی به یک نقطه آسیب پذیر در کل زیرساخت فناوری اطلاعات تبدیل می شود، زیرا ... پیکربندی نهایی تمام سیستم ها را تعیین می کند. در موارد خاص، منطقی است که جداسازی انجام شود - یک سرور جداگانه برای عناصر زیرساخت حیاتی با فوق العاده دسترسی محدودو آپدیت دستی و دومی برای هر چیز دیگری.

در دسترس بودن Puppet Server توانایی مدیریت کل زیرساخت را تعیین می کند. منطقی است که سرور عروسکی را در یک ماشین مجازی در یک ابر شخص ثالث قابل اعتمادتر و سریع تر از قابلیت های خود میزبانی کنید. یا باید چندین سرور نصب کنید.

در هر صورت نباید سرویس های دیگری را روی سیستم نصب کنید که سرور عروسکی با زنگ و سوت در آن مستقر می شود. مجازی سازی و محفظه سازی می تواند به شما کمک کند.

چند مستر (چند سرور عروسکی مجزا)

  • در این مورد، فقط یک سرور به عنوان CA (مرجع صدور گواهی) عمل می کند - در دسترس نبودن آن به این معنی است که اضافه کردن گره های جدید غیرممکن است.
    • Puppet به شما این امکان را می دهد که از زیرساخت X.509 شخص ثالث استفاده کنید اگر زیرساخت داخلی رضایت بخش نیست.
  • کل پیکربندی (Environment) باید در یک سیستم کنترل نسخه ذخیره شود و به طور همزمان در هر سرور مستقر شود.
  • تنها چیزی که مشترک است پایگاه داده PostgreSQL است که سازماندهی در دسترس بودن بالای آن از حوصله این مقاله خارج است.
  • ماژول cfpuppetserver از نصب ها به عنوان اصلی (با CA) و به عنوان یک سرور ثانویه پشتیبانی می کند.

چه چیز قابل توجهی نسبت به نسخه های قدیمی تغییر کرده است

سازنده توضیحات کامل دارد.
  • همه سرویس ها به JVM، JRuby و Jetty منتقل شده اند. با وجود مزایای آشکار یکپارچه سازی، معایبی نیز از نظر مصرف حافظه وجود دارد.
  • توابع Lambda برای پردازش مجموعه ها اضافه شده اند - اکنون دیگر نیازی به برش عصا در Ruby یا منحرف کردن از طریق ()create_resources نیست.
  • ابزاری برای پردازش الگوهای EPP ظاهر شده است - اساساً همان ERB، اما با Puppet DSL به جای Ruby،
  • ساختار دایرکتوری پیش فرض فایل های پیکربندی به طور قابل توجهی تغییر کرده است
  • پشتیبانی از ارائه دهندگان داده برای محیط‌ها و ماژول‌ها اضافه شد (دیگر نیازی به هک نیست).
  • کم اهمیت جلوه دادن نقش هیرا جهانی. دستور جدید و مرتبط Puppet Look است.

نصب و راه اندازی

این فرآیند کاملاً ابتدایی است، اما مستلزم دنبال کردن یک توالی مشخص از مراحل است. از آنجایی که انجام این کار به صورت دستی یک کار غیر قابل تشکر است، نویسنده چیز بدی را به شما آموزش می دهد، یعنی دانلود اسکریپت های نامفهوم از اینترنت و اجرای آنها به عنوان روت در سیستم شما.

سه جزء اصلی سرور عبارتند از خود سرور عروسکی، PuppetDB و PostgreSQL. همه آنها می توانند در یک گره جمع شوند یا به دو یا سه سیستم تقسیم شوند. Puppet Server و Puppet DB را می توان چندین بار اجرا کرد، اما PostgeSQL یک نقطه شکست است. روش‌های مختلفی برای تکرار و خوشه‌بندی PostgeSQL وجود دارد. یک رویکرد راحت در مورد سرورهای اصلی و ثانویه، Master + Read-Only Slave است که در خود PuppetDB به عنوان گره پایگاه داده اصلی و فقط خواندنی پشتیبانی می‌شود، اما این موارد را خودکار می‌کند. یک راه اندازی زمان می برد و بنابراین هنوز در ماژول cfpuppetserver موجود نیست.

خود پیکربندی به سادگی می تواند حداقل در آن ذخیره شود سیستم فایلهمراه با سرور عروسکی، اما مانند نوشتن اسکریپت روی یک وب سرور تولیدی است. مناسب ترین راه حل یک مخزن git است. ابزار r10k می تواند تمام شاخه های مخزن را بکشد و آنها را به عنوان محیط های جداگانه در سرور عروسکی مستقر کند. r10k در کشیدن وابستگی ها بسیار بد است، بنابراین از عروسک کتابدار در بالا استفاده می شود. شایان ذکر است که محیط اصلی عروسکی متعارف "تولید" است. بنابراین، مخزن پیکربندی باید از شاخه ای به نام "production" به جای "master" استفاده کند.

سیستم مورد نیاز

سخت افزار توسط خود سازنده توضیح داده شده است. ماژول cfpuppetserver در حال حاضر فقط از Debian Jessie+ و Ubuntu Trusty+ پشتیبانی می کند.

پیکربندی در Git

برای خود r10k، مکان مخزن اهمیت زیادی ندارد - نکته اصلی در دسترس بودن آن است. به عنوان مثال، برای اهداف آزمایشی، مخزن می تواند در همان سیستم میزبانی شود و از طریق file:// قابل دسترسی باشد. یک مکان خوب برای شروع، مثال پیکربندی codingfuture/puppet-exampleenv است.
  1. شبیه سازی مخزن: git clone https://github.com/codingfuture/puppet-exampleenv my-puppet-conf && cd my-puppet-conf
  2. نصب تنظیمات عمومیدسترسی ادمین با استفاده از نکات در نظرات:
    • $EDITOR data/common.yaml
  3. بیایید یک پیکربندی گره ایجاد کنیم:
    • $MY_DOMAIN - نام دامنه ریشه (به عنوان مثال، example.org)
    • $HOST_NAME - نام میزبان مشتری بدون دامنه
    • داده mkdir/$MY_DOMAIN
    • cp data/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 خود فشار می آوریم یا آن را به صورت محلی در یک گره با سرور عروسکی از طریق 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. اجرا کنید: bash setup_puppetserver.sh عروسک.$(MY_DOMAIN) .
    • مثال با یک مخزن راه دور: bash setup_puppetserver.sh ssh:// [ایمیل محافظت شده]/puppet-conf
    • مثال با محلی: bash setup_puppetserver.sh file:///root/puppetconf/
  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. نام کاملاً واجد شرایط سرور عروسکی باید از طریق DNS در میزبان مدیریت شده در دسترس باشد یا به صورت کدهای سخت در /etc/hosts موجود باشد.
    • مثال: echo "128.1.1.1 puppet.example.com" >> /etc/hosts
  2. در گره با سرور عروسکی، اسکریپت زیر /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. تمام است، شما یک زیرساخت حداقلی Puppet آماده دارید!

خروجی نمونه از /root/genclientinit.sh

ضربه شدید</etc/cflocation fi if test! -z ""؛ سپس echo -n >/etc/cflocationpool fi if test! -z "\$http_proxy"؛ سپس http_proxy export https_proxy="\$http_proxy" export HTTP_PROXY="\$http_proxy" export HTTPS_PROXY="\$http_proxy" fi echo host.example.com > /etc/hostname hostname host.example.com if ! که lsb-release | خواندن؛ سپس apt-get install lsb-release fi codename=\$(lsb_release -cs) if test -z "\$codename"; سپس بازتاب "نام کد صحیح شناسایی نشد" خروج 1 فی wget https://apt.puppetlabs.com/puppetlabs-release-pc1-\$(codename).deb dpkg -i puppetlabs-release-pc1-\$(نام رمز) .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

  • deployuser = "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::face منبع برای پذیرش اتصالات ورودی
  • puppetserver_mem = خودکار - RAM برای سرور عروسکی در مگابایت (حداقل 192 مگابایت)
  • puppetdb_mem = خودکار - RAM برای PuppetDB در مگابایت (حداقل 192 مگابایت)
  • postgresql_mem = خودکار - RAM برای PostgreSQL در مگابایت (حداقل 128 مگابایت)

کلاس cfpuppetserver::puppetdb

  • postgresql_host = "localhost" - آدرس پایگاه داده
  • postgresql_listen = $postgresql_host - مقدار مستقیماً به دستورالعمل listen_addresses PostgreSQL می رود.
  • postgresql_port = 5432 - پورت پایگاه داده
  • postgresql_user = "puppetdb" - کاربر PuppetDB در پایگاه داده
  • postgresql_pass = "puppetdb" - رمز عبور کاربر PuppetDB در پایگاه داده
  • postgresql_ssl = false - فعال کردن رمزگذاری اتصال بر اساس گواهی‌های Puppet PKI

کلاس cfpuppetserver::puppetserver

  • علامت خودکار = نادرست - نباید در یک محیط جنگی استفاده شود، به جز در DMZ. منحصراً برای اتوماسیون تست وجود دارد.
  • global_hiera_config = "cfpuppetserver/hiera.yaml" - مسیر فایل پیکربندی پیش‌فرض Hiera طبق قوانین Puppet (اولین جزء نام ماژول است، بقیه مسیر زیر فایل/پوشه در ماژول است)

می توانید کمک کنید و مبلغی را برای توسعه سایت انتقال دهید



مدیریت تعداد زیادی از سیستم های یونیکس را نمی توان راحت نامید. برای تغییر یک پارامتر، مدیر باید با هر دستگاه تماس بگیرد؛ اسکریپت‌ها فقط تا حدی می‌توانند کمک کنند و نه در همه موقعیت‌ها.

باید اذعان داشت که مدیران شبکه ویندوز هنوز در موقعیت بهتری قرار دارند. کافی است تنظیمات خط مشی گروه را تغییر دهید و پس از مدتی همه رایانه‌های موجود در شبکه، از جمله رایانه‌هایی که سیستم عامل اخیراً نصب شده‌اند، در مورد نوآوری «یاد خواهند گرفت»، البته اگر مربوط به آنها باشد. با نگاهی به دوره طولانی توسعه یونیکس، متوجه می‌شوید که هیچ‌چیز مشابه این هرگز مورد توجه قرار نگرفته است. راه حل هایی مانند kickstart وجود دارد که به نصب اولیه کمک می کند سیستم عامل، اما اصلاح بیشتر به تلاش قابل توجهی نیاز دارد. راه حل های تجاری مانند BladeLogic و OpsWare فقط تا حدی مشکل تنظیمات خودکار را حل می کنند؛ مزیت اصلی آنها در دسترس بودن است. رابط کاربری گرافیکی، و آنها را فقط می توان از سازمان های بزرگ خریداری کرد. البته پروژه‌هایی وجود دارند که راه‌حل‌های رایگان ارائه می‌دهند، اما در طول عمرشان هرگز نتوانسته‌اند یک جامعه بزرگ ایجاد کنند. به عنوان مثال، Cfengine در بین مدیران زیاد محبوب نیست، اگرچه علاوه بر لینوکس، می توان از آن در *BSD، Windows و Mac OS X استفاده کرد. این ممکن است به دلیل پیچیدگی نسبی ایجاد تنظیمات باشد. هنگام توصیف وظایف، باید ویژگی‌های هر سیستم خاص را در نظر بگیرید و هنگام اجرای دستورات، دنباله اقدامات را به صورت دستی کنترل کنید. یعنی مدیر باید به خاطر داشته باشد که برای برخی از سیستم ها باید adduser را برای دیگران بنویسید، useradd را بنویسید، محل فایل ها را در سیستم های مختلف در نظر بگیرید و غیره. این امر فرآیند نوشتن دستورات را به ترتیبی پیچیده می کند؛ ایجاد پیکربندی صحیح در پرواز بسیار دشوار است و تقریباً غیرممکن است که پیکربندی های ایجاد شده را پس از مدتی بخوانید. با وجود مجوز GPL، Cfengine در واقع یک پروژه تک نفره است که همه تغییرات را کنترل می کند و علاقه زیادی به ایجاد یک جامعه باز ندارد. در نتیجه، قابلیت های cfengine برای توسعه دهنده کاملا رضایت بخش است، اما برای مدیران دیگر این یک سردرد اضافی است. برای بهبود cfengine، افزونه های مختلفی توسط توسعه دهندگان شخص ثالث ایجاد شد که اغلب فقط وضعیت را بدتر می کرد. نویسنده چندین ماژول از این دست برای cfengine، Luke Kanies، در نهایت تصمیم گرفت ابزار مشابهی را توسعه دهد، اما بدون بسیاری از کاستی های cfengine.

ویژگی های عروسکی

Puppet، مانند cfengine، یک سیستم کلاینت-سرور است که از یک زبان اعلامی، یعنی زبان اجباری برای توصیف وظایف و کتابخانه ها برای اجرای آنها استفاده می کند. مشتریان به صورت دوره ای (30 دقیقه به طور پیش فرض) به سرور مرکزی متصل می شوند و آخرین پیکربندی را دریافت می کنند. در صورت عدم تطابق تنظیمات دریافتی با وضعیت سیستم، اجرا شده و در صورت نیاز گزارشی از عملیات انجام شده به سرور ارسال خواهد شد. سرور می تواند پیام ها را در syslog یا یک فایل ذخیره کند، یک نمودار RRD ایجاد کند و آنها را به یک ایمیل مشخص ارسال کند. لایه‌های انتزاعی تراکنش و منابع، حداکثر سازگاری را با تنظیمات و برنامه‌های موجود فراهم می‌کنند و به شما این امکان را می‌دهند که بدون نگرانی در مورد تفاوت در اجرا و شرح دستورات و فرمت‌های فایل، روی اشیاء سیستم تمرکز کنید. مدیر فقط با نوع شی کار می کند، Puppet بقیه موارد را بر عهده دارد. بنابراین، نوع بسته‌ها حدود 17 سیستم بسته را می‌شناسد؛ سیستم مورد نیاز به طور خودکار بر اساس اطلاعات مربوط به نسخه توزیع یا سیستم شناسایی می‌شود، اگرچه در صورت لزوم، مدیر بسته می‌تواند مجبور شود.

برخلاف اسکریپت‌ها، که اغلب استفاده از آن‌ها در سیستم‌های دیگر امکان‌پذیر نیست، پیکربندی‌های Puppet نوشته شده توسط مدیران شخص ثالث، در اکثر موارد، بدون مشکل در هر شبکه دیگری کار می‌کنند. در کتاب آشپزی عروسکی [ 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 اشاره کنیم و ویژگی های آن را تنظیم کنیم:

file("/etc/passwd":

مالک => ریشه،

گروه => ریشه،

اکنون کلاینت ها با اتصال به سرور، فایل /etc/passwd را کپی کرده و ویژگی های مشخص شده را نصب می کنند. می توانید چندین منبع را در یک قانون تعریف کنید و آنها را با استفاده از نقطه ویرگول از هم جدا کنید. اگر فایل پیکربندی استفاده شده در سرور با فایل های سرویس گیرنده متفاوت است یا اصلا استفاده نمی شود چه باید کرد؟ به عنوان مثال، این وضعیت ممکن است زمانی که تنظیمات VPNاتصالات در این صورت می توان به فایل با استفاده از دستور منبع اشاره کرد. در اینجا، طبق معمول، دو گزینه برای تعیین مسیر فایل دیگر وجود دارد؛ دو پروتکل URI نیز پشتیبانی می‌شوند: فایل و عروسک. در مورد اول، یک پیوند به یک خارجی سرور NFS، در گزینه دوم یک سرویس NFS مانند روی سرور Puppet راه اندازی می شود که منابع را صادر می کند. در مورد دوم، مسیر پیش‌فرض نسبت به دایرکتوری ریشه عروسک - /etc/puppet است. یعنی پیوند 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

و سپس هنگام توصیف منبع به این بخش می رویم.

منبع => "puppet://server.domain.com/config/sshd_config"

قبل از کولون نام منبع است. در ساده ترین موارد، می توانید به سادگی یک نام مستعار یا متغیرها را به عنوان نام مشخص کنید. نام مستعار با استفاده از دستور مستعار تنظیم می شود. مسیر کامل فایل در پیکربندی های پیچیده تر

file("/etc/passwd":

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

گزینه دیگری برای ایجاد نام مستعار زمانی خوب است که باید با سیستم عامل های مختلف سر و کار داشته باشید. به عنوان مثال، بیایید یک منبع برای توصیف فایل sshd_config ایجاد کنیم:

فایل (sshdconfig:

name => $operatingsystem ? (

solaris => "/usr/local/etc/ssh/sshd_config"،

پیش فرض => "/etc/ssh/sshd_config"

در این مثال با یک انتخاب روبرو هستیم. فایل برای Solaris به طور جداگانه مشخص شده است، برای بقیه فایل /etc/ssh/sshd_config انتخاب خواهد شد. اکنون این منبع به صورت sshdconfig قابل دسترسی است، بسته به سیستم عامل مسیر مورد نظر انتخاب خواهد شد. به عنوان مثال، نشان می دهیم که اگر دیمون sshd در حال اجرا و دریافت باشد فایل جدید، باید سرویس را مجددا راه اندازی کنید.

اطمینان => درست است،

اشتراک => فایل

هنگام کار با داده های کاربر، اغلب از متغیرها استفاده می شود. به عنوان مثال، ما مکان دایرکتوری های خانگی کاربر را شرح می دهیم:

$homeroot = "/home"

اکنون فایل های یک کاربر خاص به عنوان قابل دسترسی است

$(homeroot)/$name

پارامتر $name با نام حساب کاربر پر می شود. در برخی موارد، تعریف یک مقدار پیش فرض برای برخی از انواع راحت است. به عنوان مثال، برای نوع exec، آنها اغلب دایرکتوری هایی را نشان می دهند که در آنها باید فایل اجرایی را جستجو کند:

Exec (مسیر => "/usr/bin:/bin:/usr/sbin:/sbin")

اگر نیاز دارید به چندین فایل تودرتو و دایرکتوری اشاره کنید، می توانید از پارامتر Recurse استفاده کنید.

file("/etc/apache2/conf.d":

منبع => "puppet:// puppet://server.domain.com/config/apache/conf.d"،

بازگشت => "درست"

منابع متعدد را می توان در کلاس ها یا تعاریف ترکیب کرد. کلاس ها توضیح کاملی از یک سیستم یا سرویس هستند و به طور جداگانه استفاده می شوند.

"/etc/passwd": مالک => ریشه، گروه => ریشه، حالت => 644;

"/etc/shadow": مالک => ریشه، گروه => ریشه، حالت => 440

همانند زبان های شی گرا، کلاس ها را می توان نادیده گرفت. به عنوان مثال، در FreeBSD صاحب گروه این فایل ها چرخ است. بنابراین، برای اینکه منبع را به طور کامل بازنویسی نکنیم، بیایید یک کلاس جدید freebsd ایجاد کنیم که کلاس لینوکس را به ارث می برد:

کلاس freebsd لینوکس را به ارث می برد (

فایل[“/etc/passwd”] ( group => wheel );

فایل ["/etc/shadow"] (گروه => چرخ)

برای راحتی، همه کلاس ها را می توان در یک فایل جداگانه قرار داد، که با استفاده از دستورالعمل include می توان آنها را متصل کرد. تعاریف می توانند چندین پارامتر را به عنوان آرگومان در نظر بگیرند، اما از وراثت پشتیبانی نمی کنند و زمانی استفاده می شوند که شما نیاز به توصیف اشیاء قابل استفاده مجدد دارید. به عنوان مثال، اجازه دهید فهرست اصلی کاربران و دستورات لازم برای ایجاد یک حساب کاربری جدید را تعریف کنیم.

تعریف user_homedir ($group، $fullname، $ingroups) (

user("$name":

اطمینان => حاضر،

نظر => "$fullname"،

gid => "$group",

گروه ها => $ inggroups،

عضویت => حداقل،

shell => "/bin/bash",

home => "/home/$name"،

نیاز => گروه[$group]،

exec("$name homedir":

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

ایجاد => "/home/$name"،

نیاز => کاربر[$name]،

حالا برای ایجاد یک جدید حسابفقط با user_homedir تماس بگیرید.

user_homedir("sergej":

گروه => "سرگژ"،

نام کامل => “Sergej Jaremchuk”,

ingroups => ["رسانه"، "ادمین]

توضیحات جداگانه ای از گره ها وجود دارد که از وراثت مانند کلاس ها پشتیبانی می کنند. هنگامی که یک کلاینت به سرور Puppet متصل می شود، بخش گره مربوطه جستجو می شود و تنظیمات مربوط به این رایانه ارائه می شود. برای توصیف تمام سیستم های دیگر، می توانید از پیش فرض گره استفاده کنید. توضیحات همه انواع در سند "مرجع نوع" آمده است که در هر صورت حداقل برای درک تمام قابلیت های زبان Puppet باید خوانده شود. انواع مختلفبه شما امکان می دهد دستورات مشخص شده را اجرا کنید، از جمله زمانی که شرایط خاصی برآورده می شود (مثلاً تغییر یک فایل پیکربندی)، کار با cron، اعتبار کاربری و گروه ها، رایانه ها، نصب منابع، شروع و توقف خدمات، نصب، به روز رسانی و حذف بسته ها، کار کردن با کلیدهای SSH، مناطق سولاریس و غیره. به همین راحتی می توان لیست بسته های موجود در توزیع ها را با استفاده از apt مجبور کرد که هر روز بین 2 تا 4 ساعت به روز شوند.

برنامه زمانی (روزانه:

دوره => روزانه،

محدوده =>

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

برنامه => روزانه

به روز رسانی برای آن دوره توسط هر سیستم فقط یک بار انجام می شود و پس از آن کار انجام شده در نظر گرفته می شود و از رایانه مشتری حذف می شود. زبان Puppet از دیگر ساختارهای آشنا پشتیبانی می کند: شرایط، توابع، آرایه ها، نظرات و موارد مشابه.

نصب عروسک

Puppet به Ruby (>= 1.8.1) با پشتیبانی OpenSSL و کتابخانه های XMLRPC و همچنین کتابخانه Faster نیاز دارد. http://reductivelabs.com/projects/facter]. مخزن اوبونتو 7.04 که برای نصب آزمایشی استفاده شد، قبلاً شامل بسته توله سگ بود.

$ sudo apt-cache عروسک جستجو

عروسک - مدیریت پیکربندی متمرکز برای شبکه ها

Puppetmaster - دیمون کنترل مدیریت پیکربندی متمرکز

در حین نصب، تمام بسته های وابستگی لازم نصب می شوند: facter libopenssl-ruby libxmlrpc-ruby.

$ sudo apt-get install puppet puppetmaster

با دستور می توانید در دسترس بودن کتابخانه های روبی را بررسی کنید.

$ ruby ​​‎ -ropenssl -e "puts:yep"

~$ ruby‎ -rxmlrpc/client -e "puts:yep"

اگر هیچ خطایی دریافت نشد، همه چیزهایی که نیاز دارید قبلاً گنجانده شده است. فایل هایی که پیکربندی مورد نظر سیستم ها را توصیف می کنند در اصطلاح Puppet مانیفست نامیده می شوند. هنگام راه‌اندازی، دیمون سعی می‌کند فایل /etc/puppet/manifests/site.pp را بخواند؛ اگر گم نشد، یک پیام هشدار نمایش می‌دهد. هنگام آزمایش، می توانید به دیمون بگویید در حالت آفلاین کار کند، در این صورت نیازی به مانیفست نیست

$ sudo /usr/bin/puppetmasterd --nonodes

در صورت لزوم، می توانید فایل های دیگر را برای مثال با توضیحات کلاس به site.pp متصل کنید. برای اجرای آزمایشی می توانید ساده ترین دستورالعمل ها را در این فایل وارد کنید.

file("/etc/sudoers":

مالک => ریشه،

گروه => ریشه،

همه فایل های پیکربندی هم برای سرور و هم برای کلاینت ها در /etc/puppet قرار دارند. فایل fileserver.conf که در بالا در مورد آن صحبت کردیم اختیاری است و تنها در صورتی استفاده می شود که Puppet به عنوان یک سرور فایل نیز کار کند. در اوبونتو، این فایل زیر شاخه /etc/puppet/files را صادر می کند. دایرکتوری فرعی ssl حاوی گواهینامه ها و کلیدهایی است که هنگام اتصال کلاینت ها برای رمزگذاری استفاده می شود. اولین باری که puppetmasterd را شروع می‌کنید، کلیدها به‌طور خودکار ایجاد می‌شوند؛ می‌توانید آنها را به صورت دستی با دستور ایجاد کنید.

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

فایل های 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 تأیید نمی شود

اطلاعیه: گواهی دریافت نکرد

اگر خط دیگری برگردانده شد، باید عملکرد سرور را بررسی کنید.

$ ps aux | عروسک grep

عروسک 5779 0.0 1.4 27764 15404 ? Ssl 21:49 0:00 ruby ​​/usr/sbin/puppetmasterd

فایروال باید اجازه اتصال به پورت 8140 را بدهد.

در سرور ما لیستی از گواهینامه هایی را دریافت می کنیم که باید امضا شوند.

$ sudo puppetca --list

nomad.grinder.com

و گواهی مشتری را امضا می کنیم.

$ sudo puppetca –sign nomad.grinder.com

اکنون مشتری می تواند آزادانه به سرور متصل شود و تنظیمات را دریافت کند.

متأسفانه نمایش تمام قابلیت های Puppet در مقاله به سادگی امکان پذیر نیست. اما همانطور که می بینید، این یک ابزار کاربردی و انعطاف پذیر است که به شما امکان می دهد اکثر مشکلات مدیریت همزمان تعداد زیادی سیستم را حل کنید. اگر خط کاری شما نیاز به راه اندازی چندین سیستم دارد. و مهمتر از همه، این پروژه موفق شد یک جامعه کوچک اما دائماً در حال رشد را جمع کند. بنابراین، بیایید امیدوار باشیم که یک ایده خوب اجازه داده نشود که بمیرد یا کنار برود.

عروسک خیمه شب بازییک ساختار متقابل پلت فرم است که اجازه می دهد مدیران سیستمکارهای رایج را با استفاده از کد انجام دهید. این کد به شما امکان می دهد کارهای مختلفی از نصب برنامه های جدید گرفته تا بررسی مجوزهای فایل یا به روز رسانی حساب های کاربری را انجام دهید. عروسک خیمه شب بازینه تنها در طول نصب اولیه سیستم، بلکه در کل چرخه عمر سیستم برتر است. در بیشتر موارد عروسک خیمه شب بازیدر پیکربندی کلاینت/سرور استفاده می شود.

این بخش نصب و پیکربندی را نشان می دهد عروسک خیمه شب بازیدر پیکربندی مشتری/سرور. این مثال ساده نحوه نصب را نشان می دهد آپاچیاستفاده كردن عروسک خیمه شب بازی.

نصب و راه اندازی

برای نصب عروسک خیمه شب بازیدر ترمینال وارد کنید:

Sudo apt-get install puppetmaster

در ماشین(های مشتری) وارد کنید:

عروسک نصب Sudo apt-get

تنظیمات

قبل از راه اندازی عروسک ممکن است بخواهید یک ورودی اضافه کنید DNS CNAMEبرای puppet.example.com، جایی که example.com- این دامنه شماست. مشتریان پیش فرض عروسک خیمه شب بازی DNS را برای puppet.example.com به عنوان نام سرور عروسکی بررسی کنید ( استاد عروسک). برای جزئیات بیشتر در مورد استفاده از DNS به سرویس نام دامنه مراجعه کنید.

اگر قصد استفاده از DNS را ندارید، می توانید ورودی هایی را به فایل /etc/hosts در سرور و کلاینت اضافه کنید. به عنوان مثال، در فایل /etc/hosts عروسک خیمه شب بازیافزودن سرور:

عروسک 127.0.0.1 localhost.localdomain localhost 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 را ویرایش کنید و مقدار را جایگزین کنید شروع کنیدبر آره:

Sudo /etc/init.d/puppet start

برگردیم به عروسک خیمه شب بازیسرور برای امضای گواهی مشتری با استفاده از دستور:

Sudo puppetca --sign meercat02.example.com

بررسی /var/log/syslogبرای هر گونه خطای پیکربندی اگر همه چیز خوب پیش رفت، بسته آپاچی 2و وابستگی های آن نصب خواهد شد عروسک خیمه شب بازیمشتری.

این مثال بسیار ساده است و بسیاری از ویژگی ها و مزایای آن را نشان نمی دهد. عروسک خیمه شب بازی. برای اطلاعات اضافینگاه کن

سرگئی یارمچوک

پیکربندی متمرکز سیستم های یونیکس با استفاده از Puppet

مدیریت تعداد زیادی از سیستم های یونیکس را نمی توان راحت نامید. برای تغییر یک پارامتر، مدیر باید با هر دستگاه تماس بگیرد؛ اسکریپت‌ها فقط تا حدی می‌توانند کمک کنند و نه در همه موقعیت‌ها.

باید اذعان داشت که مدیران شبکه ویندوز هنوز در موقعیت بهتری قرار دارند. کافی است تنظیمات خط مشی گروه را تغییر دهید و پس از مدتی همه رایانه‌های موجود در شبکه، از جمله رایانه‌هایی که سیستم عامل اخیراً نصب شده‌اند، در مورد نوآوری «یاد خواهند گرفت»، البته اگر مربوط به آنها باشد. با نگاهی به دوره طولانی توسعه یونیکس، می بینید که هیچ چیزی شبیه به این هرگز به چشم نیامده است. راه حل هایی مانند kickstart وجود دارد که به نصب اولیه سیستم عامل کمک می کند، اما توسعه بیشتر به تلاش قابل توجهی نیاز دارد. راه حل های تجاری، مانند BladeLogic و OpsWare، مشکل خودکارسازی تنظیمات را تنها تا حدی حل می کنند؛ مزیت اصلی آنها وجود یک رابط گرافیکی است و فقط سازمان های بزرگ می توانند آنها را خریداری کنند. البته پروژه‌هایی وجود دارند که راه‌حل‌های رایگان ارائه می‌دهند، اما در طول عمرشان نتوانسته‌اند یک جامعه بزرگ ایجاد کنند. به عنوان مثال، Cfengine در بین مدیران چندان محبوب نیست، اگرچه، علاوه بر لینوکس، می توان از آن در *BSD، Windows و Mac OS X نیز استفاده کرد. این ممکن است به دلیل پیچیدگی نسبی ایجاد تنظیمات باشد. هنگام توصیف وظایف، لازم است ویژگی های هر سیستم خاص را در نظر بگیرید و هنگام اجرای دستورات، دنباله اقدامات را به صورت دستی کنترل کنید. یعنی مدیر باید به خاطر داشته باشد که برای برخی از سیستم ها باید adduser بنویسید، برای برخی دیگر - useradd، محل فایل ها را در سیستم های مختلف در نظر بگیرید و غیره. این امر فرآیند نوشتن دستورات را به ترتیبی پیچیده می کند؛ ایجاد پیکربندی صحیح در پرواز بسیار دشوار است و تقریباً غیرممکن است که پیکربندی های ایجاد شده را پس از مدتی بخوانید. با وجود مجوز GPL، Cfengine اساسا یک پروژه تک نفره است که همه تغییرات را کنترل می کند و علاقه زیادی به ایجاد یک جامعه باز ندارد. در نتیجه، قابلیت‌های Cfengine برای توسعه‌دهنده کاملاً رضایت‌بخش است، اما برای سایر مدیران این یک سردرد اضافی است. برای بهبود Cfengine، افزونه های مختلفی توسط توسعه دهندگان شخص ثالث ایجاد شد که اغلب فقط وضعیت را بدتر می کرد. نویسنده چندین ماژول از این دست برای Cfengine، Luke Kanies، در نهایت تصمیم گرفت ابزار مشابهی را توسعه دهد، اما بسیاری از کاستی‌های Cfengine را نداشت.

ویژگی های عروسکی

Puppet، مانند Cfengine، یک سیستم سرویس گیرنده-سرور است که از یک زبان اعلامی برای توصیف وظایف و کتابخانه ها برای پیاده سازی آنها استفاده می کند. مشتریان به صورت دوره ای (به طور پیش فرض هر 30 دقیقه) به سرور مرکزی متصل می شوند و آخرین پیکربندی را دریافت می کنند. در صورت عدم تطابق تنظیمات دریافتی با وضعیت سیستم، اجرا شده و در صورت نیاز گزارشی از عملیات انجام شده به سرور ارسال خواهد شد. سرور پیام می تواند آن را در syslog یا یک فایل ذخیره کند، یک نمودار RRD ایجاد کند و آن را به ایمیل مشخص شده ارسال کند. لایه‌های انتزاعی تراکنش و منابع، حداکثر سازگاری را با تنظیمات و برنامه‌های موجود فراهم می‌کنند و به شما این امکان را می‌دهند که بر روی اشیاء سیستم تمرکز کنید بدون اینکه نگران تفاوت در اجرا و شرح دستورات دقیق و فرمت‌های فایل باشید. مدیر فقط با نوع شی کار می کند، Puppet بقیه موارد را بر عهده دارد. بنابراین، نوع بسته‌ها حدود 17 سیستم بسته را می‌شناسد؛ سیستم مورد نیاز به‌طور خودکار بر اساس اطلاعات مربوط به نسخه توزیع یا سیستم شناسایی می‌شود، اگرچه در صورت لزوم، می‌توان مدیریت بسته را به اجبار تنظیم کرد.

برخلاف اسکریپت‌ها، که اغلب استفاده از آنها در سیستم‌های دیگر غیرممکن است، پیکربندی‌های Puppet که توسط مدیران شخص ثالث نوشته شده‌اند، عمدتاً بدون مشکل در هر شبکه دیگری کار می‌کنند. کتاب آشپزی عروسکی در حال حاضر سه دوجین دستور پخت آماده دارد. Puppet در حال حاضر به طور رسمی از سیستم عامل ها و خدمات زیر پشتیبانی می کند: Debian، RedHat/Fedora، Solaris، SUSE، CentOS، Mac OS X، OpenBSD، Gentoo و MySQL، LDAP.

زبان عروسکی

برای حرکت رو به جلو، ابتدا باید عناصر و قابلیت های اساسی زبان را درک کنید. زبان یکی از نقاط قوت عروسک است. این منابعی را که مدیر برنامه ریزی برای مدیریت می کند و اقداماتی که انجام می دهد را توصیف می کند. برخلاف اکثر راه حل های مشابه، Puppet به زبان اجازه می دهد تا دسترسی به تمام منابع مشابه را در هر سیستمی در یک محیط ناهمگن ساده کند. توصیف منبع معمولاً از یک نام، نوع و ویژگی ها تشکیل شده است. به عنوان مثال، اجازه دهید به فایل /etc/passwd اشاره کنیم و ویژگی های آن را تنظیم کنیم:

file("/etc/passwd":

مالک => ریشه،

گروه => ریشه،

حالت => 644،

اکنون کلاینت هایی که به سرور متصل می شوند فایل /etc/passwd را کپی کرده و ویژگی های مشخص شده را تنظیم می کنند. می توانید چندین منبع را در یک قانون تعریف کنید و آنها را با استفاده از نقطه ویرگول از هم جدا کنید. اما اگر فایل پیکربندی مورد استفاده در سرور با فایل های سرویس گیرنده متفاوت باشد یا اصلا استفاده نشود، چه؟ به عنوان مثال، این وضعیت ممکن است هنگام تنظیم اتصالات VPN ایجاد شود. در این حالت باید با استفاده از دستور منبع به فایل اشاره کنید. در اینجا دو گزینه وجود دارد؛ شما می توانید طبق معمول مسیر فایل دیگری را مشخص کنید و همچنین از دو پروتکل URI پشتیبانی شده استفاده کنید: فایل و عروسک. در حالت اول، از پیوند به یک سرور NFS خارجی استفاده می شود؛ در گزینه دوم، یک سرویس NFS مانند بر روی سرور Puppet راه اندازی می شود که منابع را صادر می کند. در مورد دوم، مسیر پیش‌فرض نسبت به دایرکتوری ریشه عروسک - /etc/puppet است. یعنی پیوند 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 را رد کنید

و سپس هنگام توصیف منبع به این بخش مراجعه می کنیم:

منبع => "puppet://server.domain.com/config/sshd_config"

قبل از کولون نام منبع است. در ساده ترین موارد، به سادگی می توانید مسیر کامل فایل را به عنوان نام مشخص کنید. در پیکربندی های پیچیده تر بهتر است از نام مستعار یا متغیرها استفاده شود. نام مستعار با استفاده از دستور مستعار تنظیم می شود:

file("/etc/passwd":

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

گزینه دیگری برای ایجاد نام مستعار زمانی خوب است که باید با سیستم عامل های مختلف سر و کار داشته باشید. به عنوان مثال، بیایید یک منبع ایجاد کنیم که فایل sshd_config را توصیف کند:

فایل (sshdconfig:

نام => $operatingsystem ? (

Solaris => "/usr/local/etc/ssh/sshd_config"،

پیش فرض => "/etc/ssh/sshd_config"

در این مثال با یک انتخاب روبرو هستیم. فایل برای Solaris به طور جداگانه مشخص شده است، برای بقیه فایل /etc/ssh/sshd_config انتخاب خواهد شد. اکنون این منبع به صورت sshdconfig قابل دسترسی است، بسته به سیستم عامل مسیر مورد نظر انتخاب خواهد شد. به عنوان مثال، نشان می دهیم که اگر دیمون sshd در حال اجرا باشد و یک فایل جدید دریافت شود، سرویس باید دوباره راه اندازی شود:

سرویس(sshd:

اطمینان حاصل کنید => درست است،

اشتراک => فایل

هنگام کار با داده های کاربر، اغلب از متغیرها استفاده می شود. به عنوان مثال، ما مکان دایرکتوری های خانگی کاربر را شرح می دهیم:

$homeroot = "/home"

اکنون فایل های یک کاربر خاص به صورت زیر قابل دسترسی هستند:

$(homeroot)/$name

پارامتر $name با نام حساب کاربر پر می شود. در برخی موارد، تعریف یک مقدار پیش فرض برای برخی از انواع راحت است. به عنوان مثال، برای نوع exec، مشخص کردن دایرکتوری هایی که باید در آنها به دنبال فایل اجرایی بگردند بسیار رایج است:

Exec ( مسیر => "/usr/bin:/bin:/usr/sbin:/sbin")

اگر نیاز دارید به چندین فایل و دایرکتوری تو در تو اشاره کنید، می توانید از پارامتر Recurse استفاده کنید:

file("/etc/apache2/conf.d":

منبع => "puppet:// puppet://server.domain.com/config/apache/conf.d"،

بازگشت => "درست"

منابع متعدد را می توان در کلاس ها یا تعاریف ترکیب کرد. کلاس ها شرح کاملی از یک سیستم یا سرویس هستند و به طور جداگانه استفاده می شوند:

کلاس لینوکس (

فایل (

"/etc/passwd": مالک => ریشه، گروه => ریشه، حالت => 644;

"/etc/shadow": مالک => ریشه، گروه => ریشه، حالت => 440

همانند زبان های شی گرا، کلاس ها را می توان نادیده گرفت. به عنوان مثال، در FreeBSD صاحب گروه این فایل ها چرخ است. بنابراین، برای اینکه منبع را به طور کامل بازنویسی نکنیم، بیایید یک کلاس جدید freebsd ایجاد کنیم که کلاس لینوکس را به ارث می برد:

کلاس freebsd لینوکس را به ارث می برد (

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

فایل["/etc/shadow"] (گروه => چرخ)

برای راحتی، همه کلاس ها را می توان در یک فایل جداگانه قرار داد، که باید با استفاده از دستورالعمل include گنجانده شود. تعاریف می توانند چندین پارامتر را به عنوان آرگومان در نظر بگیرند، اما از وراثت پشتیبانی نمی کنند و زمانی استفاده می شوند که شما نیاز به توصیف اشیاء قابل استفاده مجدد دارید. به عنوان مثال، اجازه دهید فهرست اصلی کاربر و دستورات مورد نیاز برای ایجاد یک حساب کاربری جدید را تعریف کنیم:

تعریف user_homedir ($group، $fullname، $ingroups) (

کاربر("$name":

اطمینان => حاضر،

نظر => "$fullname"،

Gid => "$group",

گروه ها => $inggroups،

عضویت => حداقل،

Shell => "/bin/bash"،

صفحه اصلی => "/home/$name"،

نیاز => گروه[$group]،

Exec("$name homedir":

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

ایجاد => "/home/$name"،

نیاز => کاربر[$name]،

اکنون، برای ایجاد یک حساب کاربری جدید، فقط با user_homedir تماس بگیرید:

user_homedir("sergej":

گروه => "سرگژ"،

نام کامل => "Sergej Jaremchuk"،

Ingroups => ["رسانه"، "مدیر]

توضیحات جداگانه ای از گره هایی که از وراثت پشتیبانی می کنند و همچنین کلاس ها وجود دارد. هنگامی که یک کلاینت به سرور Puppet متصل می شود، بخش گره مربوطه جستجو می شود و تنظیمات مربوط به این رایانه ارائه می شود. برای توصیف تمام سیستم های دیگر، می توانید از پیش فرض گره استفاده کنید. توضیحات همه انواع در سند "مرجع نوع" آمده است که در هر صورت حداقل برای درک تمام قابلیت های زبان Puppet باید خوانده شود. انواع مختلف به شما امکان می دهد دستورات مشخص شده را اجرا کنید، از جمله زمانی که شرایط خاصی برآورده می شود (به عنوان مثال، تغییر یک فایل پیکربندی)، کار با cron، اطلاعات کاربری و گروه ها، رایانه ها، نصب منابع، شروع و توقف خدمات، نصب، به روز رسانی و حذف بسته ها. ، کار با کلیدهای SSH، مناطق Solaris و غیره. به این ترتیب می توانید به راحتی لیست بسته های موجود در توزیع ها را با استفاده از apt مجبور کنید روزانه بین 2 تا 4 ساعت به روز شود:

برنامه زمانی (روزانه:

دوره => روزانه،

محدوده =>

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

برنامه => روزانه

به روز رسانی برای آن دوره توسط هر سیستم فقط یک بار انجام می شود و پس از آن کار انجام شده در نظر گرفته می شود و از رایانه مشتری حذف می شود. زبان Puppet از دیگر ساختارهای آشنا پشتیبانی می کند: شرایط، توابع، آرایه ها، نظرات و موارد مشابه.

نصب عروسک

Puppet به Ruby (نسخه 1.8.1 و بالاتر) با پشتیبانی OpenSSL و کتابخانه های XMLRPC و همچنین کتابخانه Faster نیاز دارد. مخزن اوبونتو 7.04 که برای نصب آزمایشی استفاده شد، قبلاً شامل بسته توله سگ است:

$ sudo apt-cache عروسک جستجو

~$ ruby‎ -rxmlrpc/client -e "puts:yep"

بله

اگر هیچ خطایی دریافت نشد، همه چیزهایی که نیاز دارید قبلاً گنجانده شده است. فایل هایی که پیکربندی مورد نظر سیستم ها را توصیف می کنند در اصطلاح Puppet مانیفست نامیده می شوند. هنگام راه‌اندازی، دیمون سعی می‌کند فایل /etc/puppet/manifests/site.pp را بخواند؛ اگر گم نشد، یک پیام هشدار نمایش می‌دهد. هنگام آزمایش، می توانید به دیمون بگویید در حالت مستقل اجرا شود، که نیازی به مانیفست ندارد:

$ sudo /usr/bin/puppetmasterd --nonodes

در صورت لزوم، می توانید فایل های دیگر را به عنوان مثال با توضیحات کلاس به site.pp متصل کنید. برای اجرای آزمایشی می توانید ساده ترین دستورالعمل ها را در این فایل وارد کنید.

کلاس سودو(

فایل ("/etc/sudoers":

مالک => ریشه،

گروه => ریشه،

حالت => 440،

پیش فرض گره(

سودو را شامل شود

همه فایل های پیکربندی، چه سرور و چه کلاینت، در /etc/puppet قرار دارند. فایل fileserver.conf، که قبلاً در مورد آن صحبت کردیم، اختیاری است و تنها در صورتی استفاده می‌شود که Puppet به عنوان یک سرور فایل نیز کار کند. در اوبونتو، این فایل زیر شاخه /etc/puppet/files را صادر می کند. دایرکتوری فرعی ssl حاوی گواهینامه ها و کلیدهایی است که هنگام اتصال کلاینت ها برای رمزگذاری استفاده می شود. اولین باری که puppetmasterd را شروع می کنید کلیدها به طور خودکار ایجاد می شوند؛ می توانید آنها را به صورت دستی با دستور زیر ایجاد کنید:

$ sudo /usr/bin/puppetmasterd --mcusers

فایل های 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 –sign nomad.grinder.com

اکنون مشتری می تواند آزادانه به سرور متصل شود و تنظیمات را دریافت کند.

متاسفانه نمایش تمام قابلیت های Puppet در داخل مقاله غیر ممکن است. اما، همانطور که می بینید، این یک ابزار کاربردی و انعطاف پذیر است که به شما امکان می دهد اکثر مشکلات مدیریت همزمان تعداد زیادی سیستم را حل کنید. و مهمتر از همه، این پروژه موفق شد یک جامعه کوچک اما دائماً در حال رشد را جمع کند. بنابراین، بیایید امیدوار باشیم که یک ایده خوب اجازه داده نشود که بمیرد یا کنار برود.

موفق باشید!

  1. وب سایت پروژه BladeLogic – http://www.bladelogic.com.
  2. وب سایت پروژه OpsWare http://www.opsware.com است.
  3. وب سایت پروژه Cfengine http://www.cfengine.org است.
  4. وب سایت پروژه عروسکی http://reductivelabs.com/projects/puppet است.
  5. کتاب آشپزی عروسکی - http://www.reductivelabs.com/trac/puppet/tagspuppet%2Crecipe.
  6. کتابخانه سریعتر -



بالا