Playbook چیست؟
در این مقاله میخوانید
ansible playbook به صورت خلاصه مدیریت پیکربندی سرور ( در اینجا منظور خودکار سازی مدیریت IT است ) ، یک راه حل برای تبدیل مدیریت زیر ساخت به صورت بر مبنای کد “Codebase” است ، و برای انجام این کار نیاز به استقرار یک سرور برای تهیه اسکریپت هایی با قابلیت نسخه بندی و استفاده مجدد است. با این کار می توان همه زیرساخت همه سرور ها را به صورت جامع بهبود بخشید.
در این مطلب درباره نحوه خودکار سازی مدیریت سرور ها بوسیله “Ansible” صحبت می کنیم. برنامه Ansible یک یک ابزار برای خودکار سازی مدیریت پیکربندی است که چهار چوب های کامل و قابلیت تنظیمات را با هدف ساده سازی و خلاصه کردن تنظیمات در اختیار ما قرار می دهد. در این مطلب بر روی نحوه دستوری ، اصطلاحات و ویژگی های مورد نیاز برای ایجاد یک نمونه ساده روند خودکار سازی ساده و توسعه آن بر روی سرور Ubuntu 14.04 و با وب سرور “Apache” تمرکز می کنیم.
خرید انواع سرویس لینوکسی با وب سرور آپاچی از پارس پک
از این مقاله میتوانید برای مدیریت سرویسهای لینوکسی خود استفاده کنید و اگر قصد خرید سرور لینوکس پارس پک را دارید، میتوانید با کارشناسان فروش ما در ارتباط باشید. همچنین، میتوانید جهت کسب اطلاعات بیشتر به لینکهای زیر مراجعه کنید.
مراحل نصب playbook
در زیر لیست مراحلی که باید برای رسیدن به هدف خودکار سازی تنظیمات سرور ها را انجام دهیم آورده ایم :
- به روز رسانی مخزن apt
- نصب Apache
- ساخت root directory سفارشی
- قرار دادن index.html در root directory سفارشی
- اعمال یک قالب برای راه اندازی یک هاست مجازی
- راه اندازی مجدد Apache
با نگاهی به ویژگی های اصلی زبانی که برای نوشتن “Playbook” ها استفاده می شود ،کار را با بررسی اصطلاحات استفاده شده در Ansible شروع می کنیم. در انتهای این مطلب مثال های کاملی را با شما به اشتراک می گذاریم تا خودتان آن ها را امتحان کنید.
نکته : این مطلب آماده شده تا زبان Ansible و نحوه نوشتن Playbook ها برای خودکار سازی تنظیمات سرور ها را به شما معرفی کند. برای مشاهده مقدمات بیشتر درباره Ansible و مراحل مورد نیاز برای نصب و شروع کار با آن مطلب آموزش نصب و راه اندازی Ansible بر روی Ubuntu 14.04 را مطالعه کنید.
آموزش نصب paybook
قبل از شروع اصطلاحات Ansible به صورت کلی مرور می کنیم ، آشنایی با اصطلاحات و مفاهیم Ansible بسیار مهم است :
اصطلاحات Ansible
• Controller Machine : ماشین یا سروری است که Ansible بر روی آن نصب شده و مسئولیت اجرای سرویس دهی به سرور هایی است که می خواهید آن ها را مدیریت کنید.
• Inventory : یک فایل INI که شامل اطلاعات سرور هایی است که می خواهید آن ها را مدیریت کنید.
• Playbook : نقطه شروع تنظیمات و مقررات Ansible ، که وظایف خودکار سازی در آن با قالب بندی “YAML” تعریف شده است.
• Task : یک بلاک که یک روش را برای اجرا شدن تعریف می کند ، مانند نصب یک بسته.
• Module : یک ماژول معمولا وظایف یا کارهای سیستم را خلاصه می کند ، مانند برخورد با بسته ها یا ایجاد و تغییر فایل ها.
• Role : به Playbook های از پیش تعیین شده و سازماندهی شده می گویند که به راحتی به برای استفاده مجدد به اشتراک گذاشته می شوند.
• Play : کارهایی که از شروع تا پایان انجام می شوند را یک “play” می گویند.
• Facts : متغیرهای عمومی که شامل اطلاعات سیستم مانند رابط های شبکه یا سیستم عامل می باشند.
• Handlers : برای تغییر وضعیت یک سرویس استفاده می شود مانند راه اندازی یا متوقف کردن یک سرویس می باشد.
مقررات و تنظیمات Ansible با YAML که یک زبان ساده برای مرتب سازی داده ها است استفاده می شود.
وظایف – Tasks
یک وظیفه یا “Task” یک کاری را تعریف می کند که باعث اجرای یک مرحله از موارد مورد نیاز می شود. این وظایف معمولا شامل استفاده از یک ماژول یا یک دستور ساده می شود ( ماژول ها نیز دستوراتی را تولید می کنند که در انتها این دستورات اجرا می شوند). در اینجا یک وظیفه یا Task را می بینیم :
– name: This is a task
apt: pkg=vim state=latest
مقدار name معمولا اختیاری است ولی برای اینکه در خروجی اجرای وظایف بتوانید نام آن را مشاهده کنید پیشنهاد می شود که از آن استفاده کنید. Apt نیز یک ماژول توکار Ansible است که ابزار مدیریت بسته در توزیع های مبتنی بر دبیان است. این وظیفه به Ansible می گوید که وضعیت بسته vim باید به latest تغییر کند، با این دستور اگر تاکنون بسته vim نصب نشده باشد آن بسته نصب و به روز می شود.
قالب بندی Playbook
Playbook ها نقطه اصلی تنظیمات Ansible می باشد. آن ها شامل اطلاعات سیستم هایی هستند که باید مدیریت شوند ، همچنین دستورالعمل ها و مراحلی که باید اجرا شوند. در زیر یک نمونه Playbook آورده شده که دو کار را انجام می دهد : به روز رسانی apt سپس نصب vim.
1. —
2. – hosts: all
3. become: true
4. tasks:
5. – name: Update apt-cache
6. apt: update_cache=yes
7.
8. – name: Install Vim
9. apt: name=vim state=latest
در زبان YAML برای طبقه بندی داده ها از دندانه گذاری استفاده می شود و به همین دلیل موقع نوشتن Playbook ها و مخصوصا هنگام کپی کردن مثال های Playbook ها باید بسیار دقت کنید که ظاهر صحیح آن حفظ شود.
نوشتن Playbook ها
کار با متغیر ها
روش های مختلفی برای تعریف متغیر در Ansible وجود دارد. ساده ترین روش استفاده از قسمت vars در playbook می باشد. در مثال زیر متغیر package تعریف شده است که قبلا در وظایف از آن استفاده کردیم :
1. —
2. – hosts: all
3. become: true
4. vars:
5. package: vim
6. tasks:
7. – name: Install Package
8. apt: name={{ package }} state=latest
متغیر package در همه سرور ها قابل دسترس است که شامل فایل ها و قالب ها است.
استفاده از Loop
حلقه ها یا “Loop” ها برای تکرار یک وظیفه یا Task با استفاده مقادیر متفاوت است. برای نمونه به جای ایجاد کردن 10 وظیفه برای نصب 10 بسته ، یک وظیفه ایجاد می کنیم و با استفاده از Loop آن وظیفه را با بسته های مورد نظرتان برای نصب تکرار می کنیم.
برای ساخت حلقه با یک وظیفه از with_items با آرایه ای از مقادیر استفاده می کنیم. برای دسترسی به محتوا نیز از طریق متغیر item به مقادیر دسترسی داشته باشد ، مانند مثال زیر :
– name: Install Packages
apt: name={{ item }} state=latest
with_items:
– vim
– git
– curl
همچنین از متغیر آرایه برای تعریف مقادیر نیز می توانید استفاده کنید :
– hosts: all
sudo: true
vars:
packages: [ ‘vim’, ‘git’, ‘curl’ ]
tasks:
– name: Install Package
apt: name={{ item }} state=latest
with_items: packages
استفاده از شرط ها
از شرط ها به صورت پویا و بر مبنای یک متغیر یا خروجی یک دستور ، می توانید برای اجرا شدن یا نشدن یک فرمان استفاده کنید. در مثال زیر ، یک وظیفه فقط بر روی سیستم های مبتنی بر دبیان اجرا می شود :
– name: Shutdown Debian Based Systems
command: /sbin/shutdown -t now
when: ansible_os_family == “Debian”
شرط when
شرط when آرگومان اظهار شده را برای ارزیابی دریافت می کند و وظیفه فقط زمانی اجرا می شود که مقدار دریافت شده true باشد. در اینجا ما فقط بررسی می کنیم که سیستم عضو خانواده دبیان باشد.
عمومی ترین استفاده از شرط ها در روند خودکار سازی، زمانی است که اجرا شدن یک وظیفه به مقدار خروجی یک دستور دیگر دارد.
راه کار اجرایی برای این کار این است که یک متغیر برای نگهداری خروجی دستور تعریف می کنیم ، سپس در وظیفه مورد نظر آن را بررسی می کنیم. برای بررسی خروجی دستور می توان وضعیت خروجی را که با موفقیت اجرا شده است یا خیر را بررسی کرد یا اینکه محتوای خروجی دستور را بررسی کنیم که در این حالت ممکن است به regex expressions یا دستورات تحلیل رشته ها نیاز داشته باشیم.
در مثال زیر دو وظیفه آورده شده است که برای اجرا شدن به خروجی دستور php -v نیاز دارند. همانطور که می دانید اگر PHP بر روی سرور نصب نباشد اجرای این دستور با خطا مواجه خواهد شد ، پس برای بررسی شرط خروجی این دستور ، وضعیت اجرای دستور را بررسی می کنیم. قسمت ignore_errors بخش مهمی از یک وظیفه است و برای ادامه فعالیت یک وظیفه نسبت به خروجی دستور نقش مهمی را دارد.
– name: Check if PHP is installed
register: php_installed
command: php -v
ignore_errors: true– name: This task is only executed if PHP is installed
debug: var=php_install
when: php_installed|success– name: This task is only executed if PHP is NOT installed
debug: msg=’PHP is NOT installed’
when: php_installed|failed
ماژول Debug که در اینجا استفاده کردیم یکی ماژول بسیار کاربردی برای نمایش مقدار متغیر ها و تحلیل پیام هاست. این ماژول می تواند یک رشته را چاپ کند ( زمانی که از آرگومان msg استفاده شود ) یا اینکه محتوای یک متغیر را چاپ کنید ( زمانی که از آرگومان var استفاده شود ).
کار با قالب ها
قالب ها معمولا برای فایل های تنظیمات پیکربندی استفاده می شوند که با استفاده از متغیر ها یا ویژگی های مورد نظرمان می توانیم از این فایل ها برای مقاصد دیگر نیز استفاده کنیم. Ansible از قالب موتور Jinja2 استفاده می کند.
در مثال زیر یک قالب برای تنظیم یک هاست Apache آورده شده است که از یک متغیر برای تعیین مسیر ریشه هاست استفاده می کنیم :
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot {{ doc_root }}<Directory {{ doc_root }}>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
ماژول توکار template برای اعمال قالب می باشد که به صورت یک وظیفه عمل می کند. اگر نام قالب که در بالا تعریف کردیم را vhost.tpl گذاشته باشید و در همان مسیری باشد که Playbook شما قرار داشته باشد ، با صورتی که در زیر آورده شده می توانید قالب را با قالب پیش فرض تعیین هاست Apache جایگزین و اعمال کنید :
– name: Change default Apache virtual host
template: src=vhost.tpl dest=/etc/apache2/sites-available/000-default.conf
تعریف و راه اندازی کنترل کننده ها – Handlers
از کنترل کننده ها یا همان “Handler” ها به عنوان تغییر دهنده وضعیت یک سرویس ، مانند متوقف کردن یا راه اندازی مجدد استفاده می شود. کنترل کننده ها رفتاری شبیه به وظیفه ها دارند و دستور تعریف شده را اجرا می کنند ، با این تفاوت که برای اجرا باید notify در آن وظیفه تعریف شده باشد. کنترل کننده ها معمولا از قبل در یک آرایه در قسمت handlers از playbook تعریف شده اند.
برای نمونه نگاهی به مثال قبل که از یک قالب نمونه برای ایجاد هاست مجازی Apache استفاده کردیم می اندازیم. اگر بخواهیم که Apache بعد از تغییرات هاست مجازی مجددا راه اندازی شود ، باید یک کنترل کننده برای سرویس Apache بنویسم. به صورت زیر یک کنترل کننده یا Handler برای Playbook می نویسیم :
handlers:
– name: restart apache
service: name=apache2 state=restarted– name: other handler
service: name=other state=restarted
اهمیت name
در اینجا قسمت name بسیار مهم است ، زیرا تعیین کننده یک نام واحد و Unique برای کنترل کننده یا Hnadler است. برای اجرا شدن این کنترل کننده در یک وظیفه باید از گزینه notify استفاده کنید :
– name: Change default Apache virtual host
template: src=vhost.tpl dest=/etc/apache2/sites-available/000-default.conf
notify: restart apache
یک نمونه Playbook
اکنون به Playbook ای که در این مطلب برای خودکار سازی نصب Apache بر روی سرور Ubuntu 14.04 نوشتیم ، نگاه دقیق تری می کنیم. این یک مثال کامل است که شامل قالب و راه اندازی Apache و یک فایل HTML است که توسط وب سرور نمایش داده می شود که از اینجا می توانید این فایل را بدست آورید.
همچنین این پوشه حاوی Vagrantfile است که از آن برای بررسی و تست ساده Playbook با ماشین مجازی مدیریت شده با Vagrant مدیریت می شود ، می توانید استفاده کنید.
در زیر Playbook به صورت کامل آورده شده :
playbook.yml
—
– hosts: all
become: true
vars:
doc_root: /var/www/example
tasks:
– name: Update apt
apt: update_cache=yes– name: Install Apache
apt: name=apache2 state=latest– name: Create custom document root
file: path={{ doc_root }} state=directory owner=www-data group=www-data– name: Set up HTML file
copy: src=index.html dest={{ doc_root }}/index.html owner=www-data group=www-data mode=0644– name: Set up Apache virtual host file
template: src=vhost.tpl dest=/etc/apache2/sites-available/000-default.conf
notify: restart apache
handlers:
– name: restart apache
service: name=apache2 state=restarted
توضیحات Playbook
hosts: all
فایل Playbook با اظهار اینکه تنظیمات باید به تمامی هاست ها ( host: all ) اعمال شوند ، شروع می شود. این مقدار می تواند به هاست های بخصوص یا گروهی از هاست ها تغییر کند.
become: true
این قسمت به Ansible می گوید که از افزایش دسترسی (sudo) برای اجرای تمامی دستورات استفاده کند. این گزینه می تواند برای هر وظیفه ای و بازنویسی شود.
vars
تعریف متغیر doc_root ، که قبلا در وظیفه Task از آن استفاده کردیم. در این قسمت می توان متغیر های متفاوت دیگری را نیز تعریف کرد.
tasks
در این قسمت خود وظیفه یا Task تعریف می شود. ابتدا بسته apt را به روز می کند و در وظیفه بعدی بسته apache2 را نصب می کند.
وظیفه سوم از ماژول file برای ساخت دایرکتوری در مسیر ریشه ای که برای سرویس دهی استفاده می کنیم ، ایجاد می کند. از این ماژول برای مدیریت فایل و دایرکتوری استفاده می شود.
چهارمین وظیفه از ماژول copy برای کپی کردن فایل سیستم محلی به سرور استفاده می کند. یک فایل HTML ساده را برای سرویس دهی وب Apache کپی می کنیم.
handlers
در انتهای نیز قسمت handlers را داریم که سرویس ها در آن معرفی شدند. یک کنترل کننده restart apache تعریف کردیم تا تغییرات Apache اعمال شوند.
جمع بندی
آموزش ساخت playbook موضوع این مقاله آموزش لینوکس از سری مقالات آموزش سیستم عامل وبلاگ پارسپک بود، امیدواریم توانسته باشیم به یک سوال دیگر شما پاسخ داده باشیم.
سوالات متداول:
playbook به صورت خلاصه به چه معنا میباشد؟
اگر به صورت کوتاه و خلاصه بخواهیم بگوییم، یک روش برای تبدیل کردن مدیریت زیر ساخت، به صورتی که کد Codebase مبنای آن است.
مراحلی که باید برای رسیدن به هدف خودکار سازی تنظیمات سرور ها انجام دهیم به چه صورت است؟
به روز رسانی مخزن aptنصب Apache، ساخت root directory سفارشی، قرار دادن index.html در root، director سفارشی، اعمال یک قالب برای راه اندازی یک هاست مجازی، راه اندازی مجدد Apache
در چه مواقعی از Loop استفاده میشود؟
برای تکرار یک وظیفه یا Task با استفاده از مقادیر مختلف از حلقه ها یا همان Loop استفاده میشود.