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

ابزارهای بسیاری مانند Chef و Puppet برای مدیریت پیکربندی وجود دارند که معمولن پیچیدگی‌های فنی زیادی دارند. Ansible یک جایگزین مناسب برای این سیستم‌هاست زیرا معماری که ارایه می‌دهد نیازی به نرم‌افزار خاصی ندارد و از SSH و فایل‌های YAML برای اجرای فرآیندها استفاده می‌کند.

در این راهنما، شیوه‌ی نصب و اصول اولیه در استفاده از Ansible را روی سرور اوبونتو 20.04 بررسی می‌کنیم.

پیش نیازها

  • یک Node کنترل Ansible : نُد کنترل Ansible سروری است که از آن برای اتصال و کنترل سرورهای دیگر یا هاست‌های Ansible استفاده می‌کنیم. در این راهنما Node کنترل یک ابرک با سیستم‌عامل Ubuntu 20.04 است. Node کنترل باید دارای موارد زیر باشد:

    • یک کاربر غیر root با دسترسی sudo

    • یک جفت کلید SSH برای این کاربر

  • یک یا چند Node میزبان یا هاست Ansible : میزبان Ansible هر سروری است که Node کنترل Ansible برای خودکار کردن فرآیندهای آن پیکربندی شده است. در این راهنما هاست‌های Ansible سرورهای Ubuntu 20.04 هستند. در هر هاست Ansible باید:

    • کلید عمومی SSH نُد کنترل Ansible به

      authorized_keys
      کاربر اضافه شده باشد. این کاربر می‌تواند کاربر root یا معمولی با دسترسی‌های sudo باشد.

تنظیمات کلید SSH روی Nodeها

پیش از نصب و استفاده از Ansible لازم است یک جفت کلید SSH روی Node کنترل بسازید و کلید عمومی آن را در هاست‌ها کپی کنید.

ساخت کلید SSH روی Node کنترل

برای ایجاد یک کلید SSH برای کاربر فعلی‌تان (که باید غیر root باشد) از دستور زیر استفاده کنید:

ssh-keygen

سپس از شما خواسته می‌شود مسیر کلید را تایید کنید. برای این کار Enter بزنید و در مرحله‌ی بعد که یک Passphrase برای کلید از خواسته می‌شود مجدد Enter بزنید تا Passphraseای برای آن انتخاب نشود.

در آخر باید خروجی‌ای مشابه تصویر زیر مشاهده کنید:

کپی کردن کلید عمومی SSH در Nodeهای میزبان

اکنون لازم است کلید عمومی را در نُدهای هاست نیز قرار دهید. برای این کار دستور زیر را وارد کنید:

ssh-copy-id username@IP

از شما خواسته می‌شود، اتصال به این سرور را تایید کنید. با نوشتن yes و سپس فشردن Enter، آن را بپذیرید. سپس پسورد سروری که می‌خواهید کلید در آن کپی شود را وارد کرده و Enter بزنید.

با این کار محتویات مسیر

ssh/id_rsa.pub./~
در Node کنترل در مسیر
ssh/authorized_keys./~
در Node میزبان کپی می‌شود.


شما باید این کار را برای همه‌ی سرورهای هاست انجام دهید.

گام نخست: نصب Ansible

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

در Node کنترل خود، دستور زیر را اجرا کنید تا PPA پروژه رسمی را در لیست منابع سیستم قرار دهید:

sudo apt-add-repository ppa:ansible/ansible

وقتی از شما خواسته شد تا PPA را بپذیرید

ENTER
را بزنید.

در مرحله‌ی بعد، apt را به‌روزرسانی کنید تا از بسته‌های موجود در PPA جدید آگاه شود:

sudo apt update

پس از این به‌روزرسانی، می‌توانید Ansible را نصب کنید:

sudo apt install ansible

Node کنترل Ansible شما اکنون تمام نرم‌افزارهای مورد نیاز برای مدیریت هاست‌ها را دارد. در گام بعد، شیوه‌ی اضافه کردن‌ هاست‌ها به Node کنترل را بررسی می‌کنیم.

گام دوم: تنظیم فایل Inventory

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

برای ویرایش Inventory پیش‌فرض انسیبل، فایل

etc/ansible/hosts/
را با استفاده از ویرایش‌گر متن دل‌خواهتان در Node کنترل Ansible باز کنید:

sudo nano /etc/ansible/hosts

اگرچه Ansible معمولاً یک فایل Inventory پیش‌فرض را در

etc/ansible/hosts
ایجاد می‌کند، اما شما می‌توانید فایل‌های Inventory را در هر مسیری که نیاز دارید بسازید. برای این کار، باید مسیر فایل Inventory سفارشی خود را هنگام اجرای دستورهای Ansible و Playbook با پارامتر
i-
ارایه دهید.

فایل Inventory پیش‌فرض ارایه‌شده به‌وسیله‌ی Ansible شامل تعدادی نمونه است که می‌توانید از آن‌ها برای تنظیم Inventory خود استفاده کنید.

در نمونه‌ی زیر گروهی از سه سرور مختلف با نام‌

[servers]
تعریف شده است که هر کدام با aliasهای: server2 ،server1 و server3 شناسایی می‌شوند.

شما باید IP‌های نمونه را با آدرس‌های IP‌ هاست‌های Ansible خود جایگزین کنید.

[servers]
server1 ansible_host=1.2.3.4
server2 ansible_host=8.8.8.8
server3 ansible_host=4.2.2.4
​
[all:vars]
ansible_python_interpreter=/usr/bin/python3

در آخر با فشار دادن

CTRL+X
سپس
Y
و
ENTER
فایل را ذخیره کرده و ببندید.

برای بررسی Inventory خود می‌توانید کامند زیر را اجرا کنید:

ansible-inventory --list -y

خروجی را به‌شکل زیر اما با اطلاعات زیرساخت سرور‌های خودتان مشاهده خواهید کرد:

all:
  children:
    servers:
      hosts:
        server1:
          ansible_host: 1.2.3.4
          ansible_python_interpreter: /usr/bin/python3
        server2:
          ansible_host: 8.8.8.8
          ansible_python_interpreter: /usr/bin/python3
        server3:
          ansible_host: 4.2.2.2
          ansible_python_interpreter: /usr/bin/python3
    ungrouped: {}

گام سوم: تست اتصال

پس از تنظیم فایل Inventory بررسی کنید آیا Ansible امکان اتصال به این سرورها و اجرای دستورها از طریق SSH را دارد یا خیر.

از Node کنترل Ansible، این دستور را اجرا کنید:

ansible all -m ping -u root

این دستور از ماژول Ping داخلی Ansible برای اجرای تست اتصال روی تمام Nodeهای Inventory پیش‌فرض استفاده می‌کند. این ماژول بررسی می‌کند که:

  • میزبان‌ها در دسترس باشند

  • دارای کلیدهای SSH معتبر باشند

  • هاست‌ها بتوانند ماژول‌های Ansible را با استفاده از پایتون اجرا کنند.

باید خروجی را به‌ این شکل دریافت کنید:

server1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
server2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
server3 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

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

yes
را تایپ کنید و سپس
ENTER
بزنید.

هنگامی که پاسخ

"pong"
را از از یک میزبان دریافت می‌کنید، یعنی شما امکان اجرای دستورهای Ansible و Playbook را در آن سرور دارد.

اجرای دستورهای Ad-Hoc

پس از تایید این‌که Node کنترل Ansible شما قادر به برقراری ارتباط با هاست‌هاست، می‌توانید اجرای دستورهای Ad-hoc و Playbookها را در سرورهای خود شروع کنید.

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

ansible all -a "df -h" -u root

خروجی:

server1 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
udev            3.9G     0  3.9G   0% /dev
tmpfs           798M  624K  798M   1% /run
/dev/vda1       155G  2.3G  153G   2% /
tmpfs           3.9G     0  3.9G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           3.9G     0  3.9G   0% /sys/fs/cgroup
/dev/vda15      105M  3.6M  101M   4% /boot/efi
tmpfs           798M     0  798M   0% /run/user/0

server2 | CHANGED | rc=0 >>
Filesystem      Size  Used Avail Use% Mounted on
udev            2.0G     0  2.0G   0% /dev
tmpfs           395M  608K  394M   1% /run
/dev/vda1        78G  2.2G   76G   3% /
tmpfs           2.0G     0  2.0G   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup
/dev/vda15      105M  3.6M  101M   4% /boot/efi
tmpfs           395M     0  395M   0% /run/user/0

...

دستور

df -h
را می‌توان با هر دستوری جایگزین کرد.

علاوه‌بر این می‌توانید ماژول‌های Ansible را از طریق دستورهای ad-hoc اجرا کنید. به عنوان مثال، با دستور زیر می‌توانید با استفاده از ماژول

apt
آخرین نسخه‌ی
vim
را روی تمام سرورهای Inventory خود نصب کنید:

ansible all -m apt -a "name=vim state=latest" -u root

می‌توانید دستورهای Ansible را روی هاست‌ها، گروه‌ها یا زیرگروه‌ها اجرا کنید. مثلن، شیوه‌ی بررسی

uptime
هر هاست در گروه
servers
به این شکل است:

ansible servers -a "uptime" -u root

هم‌چنین می‌توانید چندین میزبان را با جدا کردن آن‌ها با دونقطه مشخص کنیم:

ansible server1:server2 -m ping -u root

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