در Ansible، handlers معمولاً برای شروع، بارگذاری مجدد، ریستارت و توقف سرویسها استفاده میشوند. اگر playbook شما شامل تغییر فایلهای پیکربندی باشد، احتمال زیادی وجود دارد که نیاز داشته باشید سرویس مورد نظر را ریستارت کنید تا تغییرات اعمال شوند. در این حالت، باید handlerای برای آن سرویس تعریف کنید و دستور notify را در هر تسکی که به آن handler نیاز دارد، وارد کنید.
در بخش قبلی این سری آموزشی، نحوه استفاده از قالب برای جایگزینی صفحه پیشفرض Nginx با یک صفحه HTML سفارشی را دیدهاید. در عمل، وقتی یک وبسرور Nginx راهاندازی میکنید، احتمالاً فایلهای جدیدی در دایرکتوری sites-available اضافه میکنید، لینکهای نمادین ایجاد میکنید یا تنظیماتی را تغییر میدهید که نیاز به بارگذاری مجدد یا ریستارت سرویس دارند.
در چنین شرایطی، یک handler برای ریستارت سرویس Nginx به شکل زیر خواهد بود:
برای فعال کردن این handler، باید دستور notify را در هر تسکی که به ریستارت Nginx نیاز دارد، وارد کنید.
playbook زیر، مقدار پیشفرض ریشه سند Nginx را با استفاده از ماژول replace در Ansible تغییر میدهد. این ماژول به دنبال الگوهایی در یک فایل بر اساس یک عبارت منظم (regexp) میگردد و هر مطابقتی را با محتوای مشخص شده در replace جایگزین میکند. سپس تسک با ارسال یک اعلان به handlerی با نام “Restart Nginx”، درخواست یک ریستارت در اسرع وقت میدهد. این بدین معنی است که هر چقدر هم تعداد دفعات درخواست ریستارت زیاد باشد، تنها زمانی که تمام تسکها اجرا شدهاند در انتهای فرآیند، handler اجرا خواهد شد. همچنین، اگر الگو در فایل پیدا نشود و تغییری اعمال نشود، handler فراخوانی نخواهد شد.
یک فایل جدید با نام playbook-12.yml در پوشه ansible-practice خود ایجاد کنید:
محتوای زیر را در فایل جدید وارد کنید:
---
- hosts: all
become: yes
tasks:
- name: Replace the document root
ansible.builtin.replace:
path: /etc/nginx/sites-available/default
regexp: 'root /var/www/html;'
replace: 'root /var/www/landing;'
notify: Restart Nginx
handlers:
- name: Restart Nginx
ansible.builtin.service:
name: nginx
state: restarted
پس از اتمام، فایل را ذخیره و ببندید.
یک نکته مهم درباره استفاده از handlers این است که تنها زمانی فعال میشوند که تسکی که دستور notify را تعریف کرده است، باعث تغییر در سرور شود. در قالب playbook بالا، دفعه اول اجرای تسک replace فایل پیکربندی Nginx را تغییر میدهد و در نتیجه handler ریستارت اجرا میشود. اما در اجراهای بعدی، چون عبارت مورد نظر دیگر در فایل نیست، هیچ تغییری ایجاد نمیشود و به همین دلیل handler فعال نمیشود.
هنگام اجرای این playbook، حتماً گزینه -K را وارد کنید زیرا نیاز به دسترسی sudo دارد:
در خروجی، خواهید دید که handler با نام “Restart Nginx” درست قبل از پایان play اجرا میشود. پس از آن، اگر با مرورگر به IP سرور متصل شوید، صفحه زیر را مشاهده خواهید کرد:

در بخش بعدی و پایانی این سری آموزشی، همه بخشها را به هم متصل میکنیم و یک playbook نهایی ایجاد میکنیم که به صورت خودکار سرور Nginx را راهاندازی کرده و وبسایت HTML استاتیک را روی آن مستقر میکند.
از اینکه همراه پارمین کلود یاد میگیرید، سپاسگزاریم. میتوانید محصولات ما در زمینه محاسبات، ذخیرهسازی، شبکه و دیتابیسهای مدیریت شده را بیشتر بشناسید.
Ansible ابزاری مدرن برای مدیریت پیکربندی است که نیازی به نصب نرمافزار عامل روی گرههای راه دور ندارد و تنها با استفاده از SSH و Python دستورها را روی سرورهای مدیریت شده اجرا میکند. این سری آموزشی شما را با ویژگیهای اصلی Ansible آشنا میکند تا بتوانید playbookهای خود را برای اتوماسیون سرورها بنویسید. در پایان، یک مثال عملی مشاهده خواهید کرد که چگونه playbookای برای راهاندازی خودکار یک سرور Nginx از راه دور و استقرار یک وبسایت HTML استاتیک بسازید.
به مجموعه آموزشها دسترسی دارید: 11 آموزش
من علاقهمند به حوزه Dev/Ops، منبع باز، PHP و لینوکس هستم. سابقه نویسندگی فنی ارشد در پارمین کلود دارم. حوزه تخصص من شامل LAMP Stack، اوبونتو، دبیان 11، لینوکس، Ansible و موارد دیگر است.
نظرات کاربران