Ansible: اتوماسیون نصب و پیکربندی سرورها بدون نیاز به Agent
وقتی باید یک بستهٔ نرمافزاری را روی ۲۰ سرور مشابه نصب کنید، اجرای دستی همان چند دستور روی هر سرور هم خستهکننده است و هم مستعد خطا (یادتان میرود یک سرور را پیکربندی کنید، یا نسخهٔ متفاوتی نصب میکنید). Ansible این کار را با یک فایل ساده و یک دستور، روی هر تعداد سرور که بخواهید، یکسان و خودکار انجام میدهد.
Ansible چیست و چرا Agent-less است؟
برخلاف برخی ابزارهای اتوماسیون که نیاز به نصب یک نرمافزار Agent روی هر سرور مقصد دارند، Ansible فقط از طریق SSH به سرورها متصل میشود و دستورات را اجرا میکند. این یعنی هیچ نرمافزار اضافهای روی سرورهای مقصد لازم نیست؛ کافی است دسترسی SSH (که پیشتر در راهاندازی اولیهٔ سرور تنظیم کردهاید) برقرار باشد.
نصب Ansible
sudo apt update
sudo apt install ansible -y
ansible --versionتعریف سرورها در فایل Inventory
فایلی به نام inventory.ini که لیست سرورهای مقصد را مشخص میکند:
[webservers]
web1 ansible_host=192.168.1.10 ansible_user=root
web2 ansible_host=192.168.1.11 ansible_user=root
[dbservers]
db1 ansible_host=192.168.1.20 ansible_user=rootبرای اطمینان از برقراری اتصال، دستور زیر باید از هر سرور پاسخ pong دریافت کند:
ansible all -i inventory.ini -m pingنوشتن اولین Playbook
Playbook فایلی YAML است که مراحل موردنیاز را بهترتیب تعریف میکند. نمونهای برای نصب و اجرای Nginx روی همهٔ سرورهای گروه webservers:
- name: Install and start Nginx
hosts: webservers
become: true
tasks:
- name: Install nginx
apt:
name: nginx
state: present
update_cache: true
- name: Ensure nginx is running
service:
name: nginx
state: started
enabled: trueاجرای Playbook
ansible-playbook -i inventory.ini install_nginx.ymlAnsible بهصورت موازی روی تمام سرورهای تعریفشده این Playbook را اجرا میکند و در پایان گزارشی از وضعیت هر سرور (تغییر انجام شد، بدون تغییر، یا خطا) نمایش میدهد.
مفهوم مهم: Idempotency
یکی از مهمترین ویژگیهای Ansible این است که Playbookها Idempotent هستند؛ یعنی اجرای چندبارهٔ یک Playbook روی یک سرور، نتیجهٔ یکسانی دارد و تغییری اضافه ایجاد نمیکند. اگر Nginx از قبل نصب باشد، اجرای مجدد Playbook فقط بررسی میکند و وضعیت "بدون تغییر" را گزارش میدهد، نه اینکه دوباره نصب را تکرار کند.
جمعبندی
Ansible با حذف نیاز به Agent و استفاده از فایلهای YAML ساده و قابلخواندن، یکی از سریعترین راهها برای شروع اتوماسیون مدیریت سرور است؛ بهخصوص برای تیمهایی که چند سرور مشابه (مثل چند سرور دارای Docker) را مدیریت میکنند و میخواهند از تکرار دستی دستورات خلاص شوند.
Ansible در کنار Infrastructure as Code
در حالی که Ansible برای پیکربندی نرمافزارها و سرویسهای روی سرورهای موجود کاربرد دارد، برای ایجاد خود زیرساخت (سرور، شبکه، دیسک) معمولاً از ابزارهای Infrastructure as Code مانند Terraform استفاده میشود. آشنایی کامل با Terraform در مقاله Terraform و Infrastructure as Code آمده است.