Ansible چیست؟ Ansible یک ابزار متن باز قدرتمند و کارآمد برای مدیریت و پیکربندی سیستم ها ، گسترش برنامه ها ، اتوماتیک سازی و هماهنگ سازی وظایف و برخی موارد دیگر می باشد.به عبارت دیگر Ansible یک Remote Administration بسیار قوی با امکانات بسیارکارآمد می باشدو از پروتکل SSH برای برقراری ارتباط و مدیریت سیستم ها و دستگاه ها استفاده می نماید.در حال حاضر مالکیت Ansible در اختیار کمپانی Redhat هست و توسط آن اداره میشود .Ansible بر روی سیستم عامل های Red Hat Enterprise Linux (TM), CentOS, Fedora, Debian, Ubuntu قابل نصب و استفاده هست.
دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران
هدف از طراحی انسیبل | Ansible چیست؟
- حداقل میزان مصرف منابع
- امنیت
- اعتماد پذیری بالا
- آسان بودن نصب ، راه اندازی و کار با آن
چرا از Ansible استفاده کنیم؟
ابزارهای دیگری هم همانند Ansible به عنوان مثال Puppet و Chef وجود دارند.Agentless بوده و نصب به نیاز Agent بر روی سیستم و یا دیوایس نیست و تنها از پروتکل SSH برای ارتباط و مدیریت آنها استفاده می نماید اما در Puppet و Chef نیاز به نصب Agent هست.
بر پایه زبان پایتون ساخته شده و از فرمت YAML که یک زبان پیکربندی ساده هست استفاده و یادگیری آن را آسان میکند اما در puppet و Chef از زبان Ruby که یادگیری آن سخت است استفاده شده است.برای مدیریت لینوکس نیاز به python و برای مدیریت ویندوز هم نیاز به powershell دارد و برای ارتباط و مدیریت هم از ssh استفاده می نماید.
Ansible چگونه کار میکند؟
Ansible از دو بخش تشکیل شده است :
Control Machine چیست؟
Node : تمامی Node ها توسط یک Control Machine از طریق SSH مدیریت خواهد شد.Ansible یک ابزار ماژولار هست و ماژول ها هم یک واحد کاری در Ansible به حساب می آیند.ماژول ها بصورت standalone اجرا میشوند و همچنین میتوان با زبان های bash ، Perl ، Python و یا ruby آنها را ایجاد کرد.تا کنون برای Ansible بیش از 700 ماژول تولید شده است.
با منتشر شدن ورژن جدیدی از Ansible حداقل 20 ماژول و یا بیشتر هم منتشرخواهد شد.برای تنظیم و مدیریت Node ها Ansible ماژول ها را از طریق SSH به Node ها انتقال میدهد.ماژول ها بصورت موقت در Node ها ذخیره شده و از طریق پروتکل JSON با Control Machine با استفاده از خروجی استاندارد ارتباط برقرار میکند.زمانی که Ansible در حال مدیریت Node ها نباشد هیچ برنامه و یا پردازشی بصورت Background اجرا نشده و به همین دلیل منابعی نیز مصرف نخواهد شد.
انسیبل | Ansible چه کامپوننت هایی دارد؟
Ansible از کامپوننت های زیر تشکیل شده است :
- Inventories : توسط Inventory فهرستی از سیستم ها و دستگاه هایی که قرار هستند بوسیله Ansible مدیریت شوند را مشخص می نماییم .این سیستم ها و دستگاه ها با عنوان هاست در Inventory شناخته میشوند.Inventory را میتوان به دو صورت Static or Local و Dynamic مشخص نمود.
- Static or Local : در این حالت بصورت پیش فرض هاست ها درون فایل etc//ansible//hosts// مشخص میشوند.همچنین میتوان مسیر دیگری برای آن در نظر گرفت.
- Dynamic : در این حالت میتوان اسکریپتی با زبان پایتون نوشت که به عنوان مثال به سرویس ابری آمازون متصل شده و سیستم ها و دستگاه ها را فراخوانی کرده و بوسیله Ansible مدیریت نماییم.همچنین در این روش با استفاده از اسکریپت مذکور میتوان سیستم جدیدی در این سرویس ابری ایجاد و آن را فراخوانی و توسط Ansible مدیریت نماییم.
- Modules : Ansible یک ابزار ماژولار هست و ماژول ها هم یک واحد کاری در Ansible به حساب می آیند.ماژول ها بصورت standalone اجرا میشوند و همچنین میتوان با زبان های bash ، Perl ، Python و یا ruby آنها را ایجاد کرد.ماژول ها هم بصورت Local و هم بصورت Remote اجرا میشوند. به عنوان مثال ماژولی با نام yum هست که توسط آن میتوان پکیجی را در توزیع های rpm base نصب ، حذف و یا به روز رسانی نمود.تا کنون برای Ansible بیش از 700 ماژول تولید شده است.با منتشر شدن ورژن جدیدی از Ansible حداقل 20 ماژول و یا بیشتر هم منتشرخواهد شد.
- Variables : با تعریف متغییر در Ansible میتوان برخی روندها از جمله روند اجرا را سفارشی نمود.
- Facts : توسط Ansible Facts میتوان اطلاعاتی اعم از نوع سیستم عامل ، IP Address ، مشخصات CPU ، میزان RAM و غیره را از هاست ها دریافت نمود.
- Playbooks and plays : Playbooks دستورالعمل هایی است که توسط آن میتوان نحوه مدیریت هاست ها را مشخص نمود.Playbooks از زبان YAML که یک زبان پیکربندی ساده هست برای ساختار دستورالعمل های خود استفاده می نماید.یک Play یک Task در Playbooks هست که بصورت Standalone توسط playbooks اجرا میشوند. مثالی از playbooks و ساختار زبان YAML :
---
- name: This is a test
hosts: centos
remote_user: ansible
become: yes
become_method: sudo
connection: ssh
tasks:
- name: install apache on centos
yum:
name: httpd
state: latest
…
- Configuration Files : مسیر پیش فرض فایل کانفیگ Ansible در مسیر etc//ansible//ansible.cfg// هست که میتوان مسیر دیگری نیز مشخص نمود.Playbooks در زمان اجرای کانفیگ های Ansible را از این فایل دریافت می نماید.
- Templates : Template یک ماژول در Ansible می باشد که به شما اجازه میدهد فایلی با متغییرهای مورد نیاز با پسوند .j2 ایجاد و در زمان اجرای این ماژول آن را جایگزین فایل کانفیگ سرویسی و یا فایل مورد نظر خود نمایید.فایل با پسوند .j2 یک فایل text ساده هست که محتوای آن میتواند کانفیگ سرویسی و یا محتوایی که ما مشخص می نماییم باشد.تمپلیت ها توسط زبان تمپلیتی jinja2 پردازش میشوند.
- Handlers : Handlers یک Task درون Playbooks می باشد که توسط آن میتوانیم Error ها را Handle نماییم.
- Roles : یک Roles یک Playbooks هست که از یک یا چندین Playbooks تشکیل شده است و توسط Playbooks های یک role میتوانیم عملیاتی را بر روی هاست ها انجام دهیم.به عنوان مثال میتوانیم role را برای نصب آپاچی ایجاد نماییم و هر زمان که نیاز به نصب آپاچی داریم این role را در Playbooks فراخوانی کنیم تا سرویس آپاچی برای ما نصب شود.ما میتوانیم Role ها را بصورت دستی و یا توسط مخزن Ansible Galaxy نصب و ایجاد نماییم.
- Ansible Vault : توسط Ansible Vault میتوانیم فایل های حساس به عنوان مثال فایل های حاوی پسورد را رمزگذاری و هر زمان هم که نیاز بود آنها را رمزگشایی نماییم.در کل Ansible Vault ابزاری برای رمزگذاری و نگهداری از فایل های حساس در سیستم می باشد.
Ansible به دو روش اجرا میشود :
- Ad-Hoc command : در این روش میتوان از دستور ansible به همراه ماژول های آن استفاده نمود به عنوان مثال :
Ansible all -s –m yum –a “name=httpd state=latest"
در مثال بالا با استفاده از دستور Ansible و ماژول yum پکیج آپاچی را بر روی تمامی هاست های مشخص شده در فایل hosts نصب خواهد کرد.
- Playbooks : در این روش میبایست فایلی را با پسوند yaml. و یا .yml ایجاد و درون آن هم از ساختار زبان YAML که یک زبان پیکربندی ساده هست استفاده نمود.همچنین درون این فایل میتوان به هر تعداد ماژول که نیاز هست استفاده نمود.در روش Ad-Hoc در هر بار اجرا میتوان یک ماژول رو اجرا نمود اما در روش playbooks همانطور که عنوان شد میتوان به هر تعداد ماژول که نیاز هست استفاده نمود.در روش playbooks همچنین میتوان مدیریت و کنترلی را بر روی اجرای ماژول ها داشته باشیم.از دستور زیر هم برای اجرای playbook استفاده می کنیم :
Ansible-playbook test.yaml