خانه » آموزش Ansible Collections برای مبتدیان
DevOPS آموزش

آموزش Ansible Collections برای مبتدیان

نحوه کار با Collections در Ansible

ما به برخی از موضوعات ضروری در Ansible پرداخته‌ایم و در این مقاله یک ویژگی ساده و مهم دیگر Ansible به نام Collections را خواهیم دید.

Ansible Collections چیست؟

Ansible Collections یک قالب توزیع هستند که در آن می‌توانید پروژه ansible خود را بسته‌بندی کرده و آن را به دیگران توزیع کنید. یک Collection می تواند شامل نقش ها، پلاگین ها، ماژول ها و playbookها باشد. Collections یا مجموعه‌ها باید در جایی میزبانی شوند تا هر کسی بتواند آنها را دانلود کرده و از آن استفاده کند.

Ansible galaxy یک سرور توزیع محبوب است که در آن مجموعه های ansible میزبانی می شوند. کاربران می توانند با استفاده از دستور ” ansible-galaxy مجموعه را از ansible galaxy دانلود کنند. جایگزین هایی برای مرکز اتوماسیون ansible galaxy وجود دارد. همچنین می‌توانید مجموعه‌ها را در سیستم‌های ٰVersion Control مانند github ، bitbucket ذخیره کنید و از آنها نیز دانلود کنید.

Ansible Galaxy Binary

برای نصب مجموعه ها، باید  دستور “ansible-galaxy” را روی دستگاه خود نصب کنید. این دستور به طور پیش فرض همراه با نصب ansible شما ارائه می شود. برای بررسی نصب بودن دستور ansible-galaxy می توانید دستور زیر را اجرا کنید:

$ which ansible-galaxy
/home/ansuser/.local/bin/ansible-galaxy

دسترسی به راهنما

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

$ ansible-galaxy --help
راهنمای گلکسی Ansible

دستور ansible-galaxy هم برای collections و هم برای roles کار می کند. اگر به لیست گزینه های کمکی برای مجموعه ها (collections) نیاز دارید، دستور زیر را اجرا کنید.

$ ansible-galaxy collection --help
راهنمای Ansible Galaxy Collection

فضای نام گلکسی چیست؟

هنگامی که در ansible-galaxy ثبت نام می کنید، یک فضای نام (namespace) تحت نام کاربری شما ایجاد می شود. مجموعه ها در فضای نام ذخیره می شوند. شما می توانید بیش از یک مجموعه را در یک فضای نام واحد داشته باشید.

namespace
	-> collection 1
          -> role1
          -> role2
          -> plugin
	-> collection 2
	-> collection N

فضای نام به شما در جداسازی پروژه کمک می کند. هنگامی که به مجموعه موجود در کتاب بازی مراجعه می کنید، می توانید از نام مجموعه کاملاً واجد شرایط (FQCN) استفاده کنید. اطلاعات بیشتر در مورد این در بخش آینده.

نصب Ansible Collections به صورت محلی

به طور پیش فرض هنگام نصب مجموعه ها، ansible سعی می کند آنها را از ansible-galaxy بیرون بکشد. اگر می خواهید آن را از یک سرور توزیع متفاوت بیرون بکشید، باید کلاینت galaxy را پیکربندی کنید. بیایید از ansible-galaxy به عنوان سرور توزیع این مقاله استفاده کنیم.

به وب سایت galaxy بروید . صفحه اول محبوب ترین بخش ها را نشان می دهد.

صفحه وب Ansible Galaxy

می توانید به بخش جستجو بروید و هر مجموعه ای را جستجو کنید. فرض کنید می خواهید یک مجموعه برای پایگاه داده “MongoDB” داشته باشید، نام پایگاه داده را در گزینه جستجو تایپ کرده و enter را فشار دهید.

مجموعه MongoDB را جستجو کنید

بیایید اولین نتیجه جستجو را بگیریم. شما می توانید جزئیات زیر را دریافت کنید.

  • نام فضای نام مجموعه.
  • لیست ماژول ها، نقش ها و پلاگین ها.
  • تعداد کل دانلودها
  • نسخه مجموعه فعلی.
  • اسناد مجموعه و پیوند به کد منبع در github یا هر سیستم کنترل نسخه.

بر اساس محبوبیت مجموعه می توانید آن را دانلود کنید. بیایید با مجموعه community.mongodb پیش برویم .

می توانید دستور نصب را از صفحه مجموعه ها دریافت کنید. شما دو گزینه دارید.

  • دستور install را اجرا کنید که مجموعه را دانلود و نصب می کند.
  • tarball را دانلود کنید و یک نصب محلی انجام دهید.

برای نصب پکیج دستور زیر را اجرا کنید. این کار به طور خودکار وابستگی ها را در نظر می گیرد.

# syntax
$ ansible-galaxy collection install namespace.collection

مثال:

# Install mongodb collection
$ ansible-galaxy collection install community.mongodb

هنگامی که مجموعه ای را نصب می کنید، Ansible دایرکتوری های مرتبط را در فهرست اصلی کاربر ایجاد می کند و مجموعه را در آن دانلود می کند.

/home/${USER}/.ansible/collections/ansible_collections
فهرست مجموعه

همچنین می توانید تربال را دانلود کرده و مجموعه را به صورت محلی نصب کنید.

# SYNTAX
ansible-galaxy collection install filename.tar.gz

مثال:

# command
ansible-galaxy collection install community-mongodb-1.5.1.tar.gz

نصب مجموعه ها به صورت محلی با نسخه های مختلف

می توانید مشخص کنید که کدام نسخه از مجموعه نصب شود. شما می توانید نسخه نصب را از وب سایت galaxy انتخاب کنید و بر این اساس دستور install به طور خودکار تغییر می کند.

نسخه مجموعه متفاوت

همچنین می توانید از شناسه های محدوده زیر استفاده کنید.

سمبلاستفاده
*جدیدترین نسخه. این رفتار به طور پیش فرض است.
==نسخه مشخص شده را نصب می کند.
!=با نسخه مشخص شده برابری نمی کند.
>بزرگتر از نسخه مشخص شده
>=بزرگتر یا مساوی با نسخه مشخص شده
<کمتر از نسخه مشخص شده
<=کمتر یا مساوی با نسخه مشخص شده.
،برای تعیین شرایط متعدد
جدول – شناسه محدوده

فرض کنید می خواهید آخرین نسخه را بین V1 و V2 نصب کنید، سپس دستور مانند زیر می شود.

$ ansible-galaxy collection install 'community.mongodb:>=1.0.0,<2.0.0'
مجموعه را با استفاده از Range Identifiers نصب کنید

مجموعه ها را با استفاده از Requirements File نصب کنید

اگر با پایتون کار کرده اید، باید استفاده از فایل نیازمندی ها را بدانید . به طور مشابه، ما می توانیم فایل مورد نیاز برای نصب چندین مجموعه را با یک دستور ایجاد کنیم.

یک فایل به نام ” requirements.yml ایجاد کنید و قطعه زیر را اضافه کنید. در اینجا من مجموعه را از سایت github و galaxy نصب می کنم.

---
collections:

  - name: https://github.com/ansible-collections/community.docker
    type: git
    version: main

  - name: fortinet.fortiswitch
    version: 1.1.0
    source: https://galaxy.ansible.com/

برای نصب مجموعه ها دستور زیر را اجرا کنید.

$ ansible-galaxy install -r requires.yml

دانلود مجموعه برای نصب آفلاین

همچنین می توانید با استفاده از دستور ” download مجموعه را به همراه وابستگی ها دانلود کنید . این به طور خودکار فایل requirements.yml زیر دایرکتوری ./collections تولید می کند.

دانلود مجموعه ها برای نصب آفلاین

اکنون می توانید مجموعه ها را از فایل نیازمندی های تولید شده نصب کنید.

فهرست مجموعه های مختلف

با استفاده از پرچم p و ارسال نام دایرکتوری به عنوان آرگومان، می‌توانید مجموعه را در دایرکتوری دیگری نصب کنید .

$ ansible-galaxy collection install community.docker -p ~/ansible_test_collection/

Starting galaxy collection install process
[WARNING]: The specified collections path '/home/ansuser/ansible_test_collection' is not part of the configured Ansible
collections paths '/home/ansuser/.ansible/collections:/usr/share/ansible/collections'. The installed collection won't be
picked up in an Ansible run.
Process install dependency map
Starting collection install process
Downloading https://galaxy.ansible.com/download/community-docker-3.4.3.tar.gz to /home/ansuser/.ansible/tmp/ansible-local-21443ehap2roq/tmpn4odb5n8/community-docker-3.4.3-loe0190d
Installing 'community.docker:3.4.3' to '/home/ansuser/ansible_test_collection/ansible_collections/community/docker'
community.docker:3.4.3 was installed successfully

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

# ansible.cfg 
COLLECTIONS_PATH = ~/.ansible/collections:~/ansible_test_collection/

لیست مجموعه های نصب شده

با اجرای دستور زیر می توانید لیست مجموعه های نصب شده را دریافت کنید. این دستور به شما مجموعه های نصب شده توسط ansible و همچنین مجموعه های نصب شده توسط شما را نشان می دهد.

$ ansible-galaxy collection list
لیست مجموعه Ansible

نحوه استفاده از مجموعه در Playbook

تاکنون نحوه دانلود مجموعه ها را با روش های مختلف مشاهده کرده ایم. بخش اصلی این است که شما باید از مجموعه های موجود در playbookهای خود برای انجام برخی اقدامات استفاده کنید.

من از ماژول docker_network_info برای بررسی اطلاعات شبکه استفاده می کنم. این ماژول بخشی از مجموعه community.docker است.

برای استفاده از مجموعه از دستورالعمل collections استفاده کرده و نام مجموعه را به عنوان آرگومان ارسال کرده ام. در ابتدا از ماژول ” docker_network_info استفاده می کنم که به طور خودکار از دستورالعمل collection انتخاب می شود.

---
- hosts: localhost
  connection: local
  gather_facts: false

  collections:
    - community.docker

  tasks:
    - name: docker network information
      docker_network_info:
        name: anslab
      register: anslab_result

    - name: Print docker network information
      ansible.builtin.debug:
        var: anslab_result.network.Containers
خروجی docker_network_info

نتیجه

در این مقاله، ansible collection و روش‌های مختلف نصب مجموعه‌ها در ماشین محلی شما را دیدیم . به وب سایت ansible-galaxy بروید و چند مجموعه را بررسی کنید تا در مورد ساختار آن بیشتر یاد بگیرید.

مهدی منصوری

من مهدی منصوری و کارشناس حوزه نرم افزار و امنیت اطلاعات هستم. کارشناسی ارشد خودم را در رشته امنیت اطلاعات از دانشگاه مالک اشتر تهران گرفتم. هم اکنون در زمینه DevOPS مشغول هستم. و در زمان های ممکن در این سایت و چند سایت دیگه مطلب می گذارم

درباره نویسنده

مهدی منصوری

من مهدی منصوری و کارشناس حوزه نرم افزار و امنیت اطلاعات هستم. کارشناسی ارشد خودم را در رشته امنیت اطلاعات از دانشگاه مالک اشتر تهران گرفتم.
هم اکنون در زمینه DevOPS مشغول هستم. و در زمان های ممکن در این سایت و چند سایت دیگه مطلب می گذارم

افزودن نظر

برای ارسال نظرات خود اینجا را کلیک کنید