Puppet یک ابزار مدیریت پیکربندی (Configuration Management) و اتوماسیون IT است که به شما امکان میدهد سرورها و نرمافزارها را به صورت خودکار و استاندارد مدیریت کنید.
مبتنی بر Master/Agent یا حالت Agentless با Bolt
از Puppet DSL یا YAML برای تعریف پیکربندیها استفاده میکند
هدف اصلی Puppet حفظ وضعیت مورد انتظار (Desired State) سرورها و جلوگیری از تغییرات ناخواسته است
💡 به زبان ساده:
Puppet مثل یک مدیر کارخانه است که چک میکند همه دستگاهها و سرورها همیشه طبق دستورالعملها عمل کنند و اگر چیزی تغییر کرده باشد، آن را اصلاح میکند.

مدیریت سرورها و نرمافزارها: نصب، بهروزرسانی و پیکربندی
حفظ وضعیت مورد انتظار (Desired State): اطمینان از اینکه سیستم همیشه به شکل تعریف شده باقی بماند
اتوماسیون وظایف تکراری: مانیتورینگ، بکاپ، راهاندازی سرویسها
DevOps و CI/CD: یکپارچگی محیط توسعه، تست و تولید
مدیریت شبکه و سرورهای ابری: Puppet میتواند چندین سرور را همزمان مدیریت کند
مدیریت وضعیت مورد انتظار: سیستمها همیشه طبق Policy تعریف شده عمل میکنند
مقیاسپذیری: مدیریت صدها یا هزاران سرور بهطور همزمان
اتوماسیون کامل: کاهش خطای انسانی
پشتیبانی از چندین سیستم عامل: Linux، Windows و Mac
جامعه بزرگ و ماژولهای آماده: نصب و مدیریت نرمافزارها با Puppet Forge

تصور کن چندین خانه داری و میخواهی همیشه همه خانهها مرتب باشند:
بدون Puppet = هر روز تکتک خانهها را چک میکنی
با Puppet = یک مدیر داری که هر روز بررسی میکند و اگر خانهای نامرتب شد، خودکار مرتبش میکند
مثال ساده Puppet برای نصب Nginx:
package { 'nginx': ensure => installed, } service { 'nginx': ensure => running, enable => true, }
این دستور Nginx را نصب و سرویس آن را اجرا و فعال میکند.
فرض کن یک سازمان بزرگ با 50 سرور وب و 20 سرور دیتابیس دارد:
میخواهی وضعیت همه سرورها همیشه مطابق سیاستها باشد
با Puppet میتوان یک Manifest پیچیده نوشت:
نصب و بهروزرسانی سیستم عامل و پکیجها
پیکربندی شبکه و Firewall
راهاندازی سرویس دیتابیس و وب سرورها
Deploy اپلیکیشن و بررسی وضعیت سرویسها
اصلاح خودکار هرگونه تغییر غیرمجاز
نتیجه: سرورها همیشه در حالت استاندارد و پایدار باقی میمانند و خطای انسانی به حداقل میرسد.
معماری
در puppet : بصورت Master/Agent (Agent-based) یا Agentless با Bolt
در ansible : بصورت Agentless، مبتنی بر SSH
زبان تعریف
در puppet : بصورت Puppet DSL مخصوص خودش
در ansible : بصورت YAML (Playbook)
پیچیدگی
در puppet : نیاز به یادگیری DSL و مفاهیم پیشرفته
در ansible : ساده و قابل یادگیری سریع
نحوه اجرا
در puppet : حالت Desired State، سرور همیشه بررسی میشود و وضعیت اصلاح میشود
در ansible :حالت Push-based: دستورات به سرورها ارسال و اجرا میشوند
مقیاسپذیری
در puppet : عالی برای صدها و هزاران سرور
در ansible :مناسب برای دهها تا صدها سرور، مقیاسپذیری متوسط
اتوماسیون
در puppet : تمرکز بر حفظ وضعیت پایدار سیستم
در ansible :تمرکز بر اجرای سریع وظایف و اتوماسیون DevOps
محیط استفاده
در puppet : سازمانهای بزرگ با سرورهای پایدار
در ansible : مناسب برای DevOps، CI/CD و توسعه سریع اپلیکیشنها
به زبان ساده:
Puppet = مدیر کارخانه که همیشه وضعیت سرورها را کنترل و اصلاح میکند
Ansible = دستیار جادویی که دستورات شما را اجرا میکند و سرورها را سریع آماده میسازد

Master و Agent:
Puppet معمولاً دارای یک سرور Master و چندین Agent است.
Agent هر سرور هر چند وقت یکبار به Master متصل میشود و وضعیت خود را گزارش میدهد.
Manifest و Modules:
Master یا فایلهای محلی شامل Manifest و Module هستند که وضعیت مورد انتظار سرورها (Desired State) را تعریف میکنند.
مثال: نرمافزار نصب باشد، سرویس در حال اجرا باشد، فایل پیکربندی خاص وجود داشته باشد.
تحلیل وضعیت (Catalog Compilation):
Master Manifestها را پردازش کرده و برای هر Agent یک Catalog ایجاد میکند.
Catalog شامل تمام منابع و وضعیت مورد انتظار سرور است.
اجرای تغییرات:
Agent Catalog را دریافت میکند و وضعیت فعلی سرور را با وضعیت مورد انتظار مقایسه میکند.
اگر تفاوت وجود داشته باشد، Agent آن را اصلاح میکند.
گزارشگیری:
پس از اجرای تغییرات، Agent گزارشی به Master ارسال میکند که چه تغییراتی اعمال شده یا نیاز به اصلاح بوده است.
💡 به زبان ساده:
Puppet مثل یک بازرس حرفهای است:
اول بررسی میکند سرورها طبق دستورالعملها هستند یا نه
اگر چیزی تغییر کرده یا ناقص است، خودکار آن را اصلاح میکند
سپس گزارش میدهد که چه کارهایی انجام شده