نحوه کار با 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-galaxy
هم برای collections و هم برای roles کار می کند. اگر به لیست گزینه های کمکی برای مجموعه ها (collections) نیاز دارید، دستور زیر را اجرا کنید.
$ ansible-galaxy collection --help
فضای نام گلکسی چیست؟
هنگامی که در ansible-galaxy ثبت نام می کنید، یک فضای نام (namespace) تحت نام کاربری شما ایجاد می شود. مجموعه ها در فضای نام ذخیره می شوند. شما می توانید بیش از یک مجموعه را در یک فضای نام واحد داشته باشید.
namespace
-> collection 1
-> role1
-> role2
-> plugin
-> collection 2
-> collection N
فضای نام به شما در جداسازی پروژه کمک می کند. هنگامی که به مجموعه موجود در کتاب بازی مراجعه می کنید، می توانید از نام مجموعه کاملاً واجد شرایط (FQCN) استفاده کنید. اطلاعات بیشتر در مورد این در بخش آینده.
نصب Ansible Collections به صورت محلی
به طور پیش فرض هنگام نصب مجموعه ها، ansible سعی می کند آنها را از ansible-galaxy بیرون بکشد. اگر می خواهید آن را از یک سرور توزیع متفاوت بیرون بکشید، باید کلاینت galaxy را پیکربندی کنید. بیایید از ansible-galaxy به عنوان سرور توزیع این مقاله استفاده کنیم.
به وب سایت galaxy بروید . صفحه اول محبوب ترین بخش ها را نشان می دهد.
می توانید به بخش جستجو بروید و هر مجموعه ای را جستجو کنید. فرض کنید می خواهید یک مجموعه برای پایگاه داده “MongoDB” داشته باشید، نام پایگاه داده را در گزینه جستجو تایپ کرده و enter را فشار دهید.
بیایید اولین نتیجه جستجو را بگیریم. شما می توانید جزئیات زیر را دریافت کنید.
- نام فضای نام مجموعه.
- لیست ماژول ها، نقش ها و پلاگین ها.
- تعداد کل دانلودها
- نسخه مجموعه فعلی.
- اسناد مجموعه و پیوند به کد منبع در 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'
مجموعه ها را با استفاده از 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
نحوه استفاده از مجموعه در 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
نتیجه
در این مقاله، ansible collection و روشهای مختلف نصب مجموعهها در ماشین محلی شما را دیدیم . به وب سایت ansible-galaxy بروید و چند مجموعه را بررسی کنید تا در مورد ساختار آن بیشتر یاد بگیرید.
افزودن نظر