Ansible یک ابزار اتوماسیون برای نگهداری، تنظیم و مدیریت سرور است. این ابزار به شما امکان می‌دهد که  سرور‌هایتان را به صورت گروهی سازماندهی کنید و نحوه تنظیمات این گروه‌ها و اقداماتی که باید در مورد آنها صورت بگیرد را مشخص نمایید. شما با ابزار Ansible همه این اقدامات را از یک موقعیت مرکزی انجام می‌دهید.

ابزار Ansible

اصطلاحات مرتبط با Ansible

برای شروع کار با ابزار Ansible، بهتر است ابتدا با برخی اصطلاحات و مفاهیم پایه برای توصیف اجزای اصلی آن آشنا شویم.

نقطه کنترل

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

نقاط مدیریتی

میزبان‌هایی که زیرساخت‌های شما را تشکیل می‌دهند و توسط نقطه کنترل Ansible مدیریت می‌شوند. نیازی به نصب ابزار Ansible در نقاط مدیریتی نیست.

فهرست

Ansible رهگیری نقاط مدیریتی‌اش را با استفاده از یک فایل فهرست که معمولاً در آدرس /etc/ansible/hosts قرار می‌گیرد، انجام می‌دهد. در فایل فهرست، شما می‌توانید نقاط مدیریتی را گروه‌بندی کنید و از این گروه‌ها برای تشکیل زیرساخت‌هایتان استفاده نمایید. در همین حال، ابزار Ansible می‌تواند با کمک پلاگین‌ها یا اسکریپت‌ها از منابع فهرست چندگانه مانند فهرست‌های دینامیک استفاده کند.

اگر ساختار مدیریت Ansible در طول زمان تغییر می‌کند، توصیه می‌شود که از پلاگین فهرست دینامیک برای سرور استفاده کنید.

ماژول‌ها

ماژول‌ها باعث اضافه‌شدن قابلیت‌های جدید به ابزار Ansible می‌شوند. می‌توانید ماژول‌های Ansible را مستقیماً از خط فرمان در نقاط مدیریتی اجرا کنید و یا از آنها در پلی‌بوک‌هایتان استفاده کنید.

وظایف

ساده‌ترین واحد اجرای دستورات در ابزار Ansible یک «وظیفه» نامیده می‌شود. وظایف یا Task ها از ماژول‌های Ansible برای مدیریت سرویس‌ها، بسته‌ها، فایل‌های هاست و اجرای تنظیمات مختلف سیستم استفاده می‌کنند. Taskها می‌توانند از طریق خط فرمان یا پلی‌بوک‌ها اجرا شوند.

پلی‌بوک‌ها

پلی‌بوک‌ها فایل‌های YAML هستند که شامل لیستی مرتب‌شده از وظایف برای اجرا می‌باشند. شما می‌توانید پلی‌بوک‌ها در نقاط مدیریتی اجرا کنید و آنها را به اشتراک گذاشته و دوباره استفاده کنید. متغیرها و قالب‌های Jinja روشی مناسب برای اجرای وظایف پیچیده در هاست‌های شما هستند.

هدف این آموزش

در این آموزش به معرفی مفاهیم پایه نصب ابزار Ansible و آماده‌سازی محیط برای استفاده از پلی‌بوک‌ها می‌پردازیم. در ادامه، گام‌های زیر را تکمیل خواهید کرد:

  • نصب و تنظیم ابزار Ansible در کامپیوتر یا سرور به عنوان نقطه کنترل برای مدیریت نقاط زیرساخت.
  • ایجاد دو سرور مدیریتی با Ansible و ارتباط پایه بین نقطه کنترل و نقاط مدیریتی. از نقاط مدیریتی با عنوان node-1 و node-2 نام برده می‌شود.

نکته:

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

قبل از شروع به کار

هشدار

در هنگام دنبال کردن مراحل این آموزش، حتماً به تعداد سرورهایی که ایجاد می‌کنید، دقت کنید. این کار ممکن است باعث افزایش هزینه‌هایتان در سرویس میزبان شود.

۱) سه سرور با سیستم‌عامل دبیان 9 ایجاد کنید. یکی به عنوان نقطه کنترل و دو سرور دیگر به عنوان نقطه‌های مدیریتی Ansible مورد استفاده قرار می‌گیرند. مثال‌های موجود در این آموزش در صورت لزوم از یک نقطه مدیریتی استفاده می‌کنند.

۲) ابزار Ansible از پروتکل SSH برای ورود به نقاط مدیریتی و تنظیمات پلی‌بوک بهره می‌برد. یک جفت کلید SSH برای استفاده به عنوان گواهی تأییدیه در نقطه کنترل ایجاد کنید. در اینجا فرض می‌شود که جفت‌کلیدهای عمومی و اختصاصی SSH در آدرس‌های ~/.ssh/id_rsa.pub و ~/.ssh/id_rsa ذخیره شده‌اند.

ssh-keygen -t rsa -b 4096

کلید را به node-1 کپی کنید. حتماً آدرس 203.0.113.0 را با آدرس IP سرور خودتان جایگزین نمایید.

ssh-copy-id [email protected]

این کار را برای نقاط باقیمانده تکرار کنید.

نکته:  این مرحله می‌تواند به صورت کاملاً خودکار توسط ماژول Ansible انجام شود.

تنظیمات نقطه کنترل

نصب و تنظیم Miniconda

با استفاده از Miniconda امکان ایجاد یک محیط مجازی برای ابزار Ansible فراهم می‌شود که برای سهولت روند نصب بسیاری از محیط‌های نیازمند نسخه‌های چندگانه پایتون مفید خواهد بود. توجه داشته باشید که نقطه کنترل شما به نسخه 2.7 یا بالاتر پایتون نیاز دارد تا بتواند Ansible را اجرا کند. برای دانلود و نصب Miniconda از فرمان‌های زیر استفاده کنید.

curl -OL https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh

bash Miniconda3-latest-Linux-x86_64.sh

در طول فرآیند نصب، برخی اعلان‌ها برایتان نمایش داده می‌شوند. شرایط و ضوابط را برای هر مرحله بررسی کرده و Yes را برای هر کدام انتخاب کنید.

Shell را دوباره راه‌اندازی کنید تا تغییرات PATH شما اِعمال شوند.

exec bash -l

یک محیط مجازی جدید برای ابزار Ansible ایجاد کنید.

conda create -n ansible-dev python=3

حالا محیط جدید را فعال کنید.

conda activate ansible-dev

نسخه پایتون را بررسی نمایید.

python --version

نصب ابزار Ansible

نکته: در این آموزش از Ansible 2.8 استفاده شده است.

بر اساس سیستم‌عاملی که در نقطه کنترل دارید، فرمان‌های زیر را دنبال کنید.

مکینتاش

sudo easy_install pip

sudo pip install ansible

لینوکس CentOS 7

sudo yum install epel-release

sudo yum install ansible

نکته: منبع مرتبط با EPEL را احتمالاً باید به برخی نسخه‌های CentOS، RHEL و Scientific Linux اضافه کنید.

اوبونتو 18.04

sudo apt update

sudo apt install software-properties-common

sudo apt-add-repository --yes --update ppa:ansible/ansible

sudo apt install ansible

بررسی صحت نصب ابزار Ansible

ansible --version

تنظیمات Ansible

فایل تنظیمات ابزار Ansible به صورت پیش‌فرض در آدرس /etc/ansible/ansible.cfg قرار می‌گیرد. در بسیاری از موارد، تنظیمات پیش‌فرض برای شروع کار با Ansible کافی خواهند بود. در اینجا،‌ از این تنظیمات استفاده خواهیم کرد.

برای مشاهده تمام تنظیمات در دسترس برای نقطه کنترل، فرمان ansible-config مورد استفاده قرار می‌گیرد.

ansible-config list

در نتیجه، خروجی‌ای مشابه زیر خواهید دید.

ACTION_WARNINGS:

default: true

description: [By default Ansible will issue a warning when recieved from a task

action (module or action plugin), These warnings can be silenced by adjusting

this setting to False.]

env:

- {name: ANSIBLE_ACTION_WARNINGS}

ini:

- {key: action_warnings, section: defaults}

name: Toggle action warnings

type: boolean

version_added: '2.5'

AGNOSTIC_BECOME_PROMPT:

default: false

...

ایجاد یک فهرست Ansible

ابزار Ansible با استفاده یک فایل فهرست که در آدرس /etc/ansible/hosts واقع شده، نقاط مدیریتی خود را رهگیری می‌کند. شما در فایل فهرست می‌توانید نقاط مدیریتی را گروه‌بندی کرده و از این گروه‌ها برای مقاصد زیرساختی خاص استفاده کنید. همچنین Ansible می‌تواند از منابع فهرست چندگانه مانند فایل‌های فهرست دینامیک که از پلاگین‌ها یا اسکریپت‌ها گرفته شده‌اند، استفاده کند.

با دنبال کردن مثال زیر، سه سرور خود را به فایل فهرست /etc/ansible/hosts در دو گروه جداگانه اضافه خواهید کرد. نقاط را می‌تواند به وسیله نامی که به آدرس IP یا DNS ارجاع داده می‌شود، دسته‌بندی کرد.

نقاط را به فایل فهرست پیش‌فرض اضافه کنید. حتماً آدرس‌های 203.0.113.0 و 203.0.113.1 را با آدرس‌های IP عمومی و یا نام دامین نقاط خود جایگزین نمایید.

/etc/ansible/hosts

[nginx]

203.0.113.0

[wordpress]

203.0.113.1

هر کدام از عنوان‌های داخل براکت، یک گروه Ansible را نشان می‌دهد. دسته‌بندی گروه‌ها با استفاده از توابع، روند اجرای فرمان‌ها برای مجموعه نقاط را تسهیل خواهد کرد.

نکته: دایرکتوری /etc/ansible در برخی محیط‌ها به صورت پیش‌فرض وجود ندارد. اگر متوجه این موضوع شدید، می‌توانید آن را به صورت دستی با استفاده از فرمان زیر ایجاد کنید.

mkdir /etc/ansible/

اگر از پورت‌های غیر استاندارد SSH در نقاط خود استفاده می‌کنید، حتماً در همان خط هاست، علامت نقل‌قول قرار داده و پورت را وارد نمایید (203.0.113.1:2222).

ارتباط با نقاط مدیریتی

پس از تنظیم نقطه کنترل، می‌توانید با نقاط مدیریتی ارتباط برقرار کنید و بر حسب نیاز، آنها را تنظیم کنید. در این بخش، با استفاده از ماژول ping، ارتباط با هاست‌های مدیریتی ابزار Ansible را آزمایش خواهیم کرد. در صورتی که نقطه کنترل با یک نقطه ارتباط داشته باشد، ماژول ping پاسخ “pong” را دریافت خواهد کرد. این بدان معناست که نقطه کنترل شما می‌تواند پایتون را در هاست‌ها اجرا کند.

Ansible به صورت پیش‌فرض از عنوان حساب کاربری محل شما برای ارتباط با نقاط به‌وسیله SSH استفاده می‌کند. در همین حال، شما می‌توانید این رفتار پیش‌فرض را با استفاده از گزینه -u و وارد کردن نام کاربری دلخواه، تغییر دهید. از آنجایی که در این مثال، هیچ حساب کاربری استانداردی در نقاط وجود ندارد، فرمان‌ها با کاربر روت اجرا می‌شوند.

ansible all -u root -m ping

نمونه خروجی

192.0.2.0 | SUCCESS => {

"changed": false,

"ping": "pong"

}

192.0.2.1 | SUCCESS => {

"changed": false,

"ping": "pong"

}

فرمان را برای نقاطی گروه [nginx] (تعریف‌شده در فایل فهرست) تکرار کنید.

ansible nginx -u root -m ping

این بار تنها نقطه node-1 پاسخ خواهد داد.

گام‌های بعدی

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