تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

آموزش ساخت و اجرای اولین Playbook در Ansible


۴ اردیبهشت ۱۴۰۴

Playbook در Ansible یک فایل YAML می‌باشد که با آن می‌توانید دستورالعمل‌های مختلفی را به‌صورت خودکار انجام دهید؛ مثلا نصب پکیج‌ها، راه‌اندازی یک وب‌سرور یا استقرار یک پروژه. هر Playbook شامل یک یا چند Play است که هر کدام شامل یک سری از Taskها هستند. کار با Ansible بدون پلی‌بوک‌ها تقریبا غیرممکن است. در این آموزش از وبلاگ لیارا قصد داریم اولین Playbook را در انسیبل ایجاد و اجرا کنیم. تا پایان همراه ما باشید.

در ادامه بخوانید:

  • Playbook در Ansible چیست؟
  • ایجاد دایرکتوری پروژه
  • ساخت فایل اینونتوری (Inventory)
  • ایجاد فایل Playbook
  • اجرای Playbook
  • جمع‌بندی
  • سوالات متداول
ساخت playbook

Playbook در Ansible چیست؟

همان‌طور که پیش‌تر گفتیم، Playbookها در Ansible فایل‌های با فرمت YAMLهستند که داخل آنها لیستی از Playها نوشته می‌شود. در واقع این فایل‌ها در انسیبل، شبیه به اسکلت‌بندی برای تنظیمات و دستورات هستند.

برای آشنایی کامل با انسیبل و ویژگی‌های آن، مقاله زیر را مطالعه کنید.
Ansible چیست؟

اجزای هر playbook

در ادامه به معرفی هر یک از اجزای کاربردی هر پلی‌بوک خواهیم پرداخت.

hosts: all

فایل Playbook با مشخص کردن این‌که تنظیمات باید روی تمامی هاست‌ها (hosts: all) اعمال شود، آغاز می‌شود. البته می‌توان این مقدار را تغییر داد و عملیات را تنها روی هاست‌ها یا گروه‌های خاصی انجام داد.

become: true

این گزینه به Ansible می‌گوید که برای اجرای همه دستورات از دسترسی روت (sudo) استفاده کند. البته می‌شود این تنظیم را فقط برای هر task خاص اعمال کرد تا دسترسی‌های مختلفی برای وظایف متفاوت در نظر گرفته شود.

tasks

در این بخش وظایف (tasks) تعریف می‌شوند. ابتدا بسته‌های apt به‌روزرسانی می‌شود و در وظیفه بعدی، بسته apache2 نصب می‌شود. در وظیفه سوم، از ماژول file برای ساخت دایرکتوری در مسیر ریشه‌ای که برای سرویس‌دهی وب استفاده می‌کنیم، استفاده می‌شود. این ماژول برای مدیریت فایل‌ها و دایرکتوری‌ها در سرور به‌کار می‌رود. وظیفه چهارم از ماژول copy برای کپی کردن یک فایل از سیستم محلی به سرور استفاده می‌کند. در اینجا یک فایل HTML ساده را برای سرویس‌دهی وب Apache کپی می‌کنیم.

vars

در این بخش متغیرهایی مانند doc_root تعریف می‌شود که قبلاً در tasks استفاده کرده‌ایم. در این قسمت می‌توان متغیرهای دیگری هم تعریف کرد تا در طول Playbook به‌کار برده شوند و به اجرای بهتر وظایف کمک کنند.

handlers

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

مثال:

---
- hosts: all
  tasks:
    - name: Print a message
      debug:
        msg: "Hello from Ansible"

ایجاد دایرکتوری پروژه

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

cd ~
mkdir ansible-practice
cd ansible-practice

با این‌کار، فولدری به‌نام ansible-practice ایجاد کرده و وارد آن می‌شوید تا تمام فایل‌‌های مربوط به Playbookهای خود را در آن نگهدارید.

برای آشنایی کامل با نحوه راه‌اندازی Docker Compose از طریق Ansible در اوبونتو، مقاله زیر را از دست ندهید.
راه‌اندازی Docker Compose از طریق Ansible

ساخت فایل اینونتوری (Inventory)

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

cp ~/ansible/inventory ~/ansible-practice/inventory

محتوای فایل Inventory به شکل زیر است:

[web]
192.168.1.100 ansible_user=sammy

ایجاد فایل Playbook

حالا وقت آن است که اولین Playbook را با دستور زیر ایجاد کنید:

nano playbook-01.yml

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

---
- hosts: all
  tasks:
    - name: Print message
      debug:
        msg: "Hello Ansible World"

اکنون فایل را ذخیره کرده و خارج شوید. این ساده‌ترین Playbookی است که می‌توان نوشت.

همین الان، بدون کمترین پیچیدگی، سرور مجازی خودتون رو در کمتر از ۳۰ ثانیه، راه‌اندازی کنید.
✅ عملکرد پایدار ✅ ترافیک نامحدود ✅ هزینه به‌صرفه
خرید سرور مجازی ابری

اجرای Playbook

پس از ایجاد، این پلی‌بوک را با دستور زیر اجرا کنید:

ansible-playbook -i inventory playbook-01.yml -u sammy

سپس خروجی زیر را دریافت خواهید کرد:

PLAY [all] ***********************************************************************************

TASK [Gathering Facts] ***********************************************************************
ok: [203.0.113.10]

TASK [Print message] *************************************************************************
ok: [203.0.113.10] => {
    "msg": "Hello Ansible World"
}

PLAY RECAP ***********************************************************************************
203.0.113.10             : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

شاید متوجه شده باشید که با وجود اینکه یک تسک (Print message) را در playbook خود تعریف کرده‌اید، در خروجی دو task لیست شده است.

این اتفاق می‌افتد زیرا Ansible به‌طور پیش‌فرض یک تسک به‌نام Gathering Facts ایجاد می‌کند. که این تسک برای جمع‌آوری اطلاعات از سیستم‌های مقصد می‌باشد. تسک Gathering Facts باید ابتدا اجرا شود، زیرا این تسک جمع‌آوری اطلاعات باید اول اجرا شود، چون برای اجرای تسک‌های بعدی ممکن است بخواهید از همین اطلاعات استفاده کنید.

اگر به‌دنبال آموزش کامل راه‌اندازی اولیه سرور مجازی با اوبونتو Ubuntu هستید، می‌توانید مقاله زیر را بخوانید.
راه‌اندازی سرور مجازی با اوبونتو

جمع‌بندی

ساخت و اجرای اولین playbookها بسیار ساده و آسان است. با تعریف host و taskها می‌توانید دستورالعمل‌های مختلف را خودکار کنید. امیدواریم این مقاله برای شما مفید بوده باشد.

با سرور مجازی ابری لیارا، سرور خود را با بالاترین عملکرد و امنیت، به‌راحتی مدیریت کنید!
✅ مقیاس‌پذیری بالا ✅ منابع اختصاصی و قابل تنظیم ✅ پشتیبانی 24/7 ✅ هزینه به‌صرفه ✅ استقرار سریع
خرید سرور مجازی ابری لیارا

سوالات متداول

Playbook در Ansible چیست و چه کاربردی دارد؟

Playbook در Ansible یک فایل با فرمت YAML است که مجموعه‌ای از دستورات (Tasks) را برای انجام عملیات خودکار بر روی سرورها یا سیستم‌ها تعریف می‌کند.

Playbookها چگونه با سرورها ارتباط برقرار می‌کنند؟

در Playbook، با استفاده از بخش hosts سرورهایی که باید تنظیمات روی آن‌ها اعمال شود مشخص می‌گردد.

چه فرمت‌هایی برای نوشتن Playbook در Ansible استفاده می‌شود؟

Playbookها باید در قالب YAML نوشته شوند.

چرا Playbook من اجرا نمی‌شود؟

دلایل مختلفی می‌تواند باعث عدم اجرای صحیح Playbook شود، مانند اشتباهات در فرمت YAML، خطا در فایل اینونتوری، یا مشکلات در دسترسی به سرور مقصد.

به اشتراک بگذارید