Поиск по сайту:

Учебное пособие по коллекциям Ansible для начинающих

Как работать с коллекциями в Ansible

Мы рассмотрели некоторые важные темы, связанные с Ansible, и в этой статье мы увидим еще одну простую и важную функцию Ansible, называемую Коллекции.

Что такое коллекции Ansible?

Коллекции Ansible – это формат распространения, в котором вы можете объединить свой проект ansible и распространить его среди других. Коллекция может включать роли, плагины, модули и сборники сценариев. Коллекции должны где-то храниться, чтобы каждый мог загрузить их на свою машину и использовать.

Ansible galaxy — популярный сервер распространения, на котором размещаются коллекции ansible. Пользователи могут загрузить коллекцию из ansible galaxy с помощью команды "ansible-galaxy". Существуют альтернативы ansible-galaxy, например ansible Automation Hub. Вы также можете хранить коллекции в системах контроля версий, таких как github, bitbucket, а также загружать их оттуда.

Двойная галактика Ansible

Для установки коллекций на вашем компьютере должна быть установлена команда «ansible-galaxy». Эта команда по умолчанию поставляется с вашей установкой ansible. Вы можете запустить следующую команду, чтобы проверить, установлена ли команда ansible-galaxy:

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

Доступ к справке

Чтобы получить доступ к разделу справки, вы можете выполнить следующие команды.

ansible-galaxy --help

Справка по Ansible Galaxy

Команда ansible-galaxy работает как для коллекций, так и для ролей. Если вам нужен список вспомогательных параметров для коллекций, выполните следующую команду.

ansible-galaxy collection --help

Справка по коллекции Ansible Galaxy

Что такое пространство имен Galaxy?

Когда вы регистрируетесь с помощью ansible-galaxy, под именем пользователя будет создано пространство имен. Коллекции хранятся в пространстве имен. В одном пространстве имен может быть несколько коллекций.

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

Пространство имен помогает вам изолировать проект. Когда вы ссылаетесь на коллекцию в сборнике сценариев, вы можете использовать полное имя коллекции (FQCN). Подробнее об этом в следующем разделе.

Установка коллекций Ansible локально

По умолчанию при установке коллекций ansible попытается извлечь их из ansible-galaxy. Если вы хотите получить его с другого сервера распространения, вам необходимо настроить клиент Galaxy. Давайте остановимся на ansible-galaxy в качестве сервера распространения для этой статьи.

Перейдите на веб-сайт галактики. На первой странице показаны наиболее популярные направления.

Веб-страница Ansible Galaxy

Вы можете перейти в раздел поиска и ввести любые коллекции. Допустим, вам нужна коллекция для базы данных "MongoDB", введите имя базы данных в поле поиска и нажмите Enter.

Поиск в коллекции MongoDB

Возьмем первый результат поиска. Вы можете получить следующую информацию.

  • Имя пространства имен коллекции.
  • Список модулей, ролей и плагинов.
  • Общее количество загрузок.
  • Текущая версия коллекции.
  • Документация по сбору и ссылка на исходный код в github или любой системе контроля версий.

Учитывая популярность сборника, вы можете его скачать. Давайте продолжим работу с коллекцией community.mongodb.

Скачать коллекцию Community.mongodb

Вы можете получить команду установки на странице коллекций. У вас есть два варианта.

  • Запустите команду установки, которая извлечет и установит коллекцию.
  • Загрузите архив и выполните локальную установку.

Запустите следующую команду, чтобы установить пакет. Он автоматически позаботится о зависимостях.

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

Локальная установка коллекций с разными версиями

Вы можете указать, какую версию коллекции установить. Выбрать версию установки можно на сайте галактики и соответственно команда установки будет автоматически изменена.

Другая версия коллекции

Вы также можете использовать следующие идентификаторы диапазонов.

SYMBOL

ИСПОЛЬЗОВАНИЕ

*

Самая последняя версия. Это поведение по умолчанию.

==

Устанавливает указанную версию.

!=

Не соответствует указанной версии.

>

Версия больше указанной.

>=

Больше или равно указанной версии

<

Меньше указанной версии

<=

Меньше или равно указанной версии.

,

Чтобы указать несколько условий

Таблица – Идентификатор диапазона

Предположим, вы хотите установить самую последнюю версию между V1 и V2, тогда команда выглядит следующим образом.

ansible-galaxy collection install 'community.mongodb:>=1.0.0,<2.0.0'

Последняя версия на момент написания этой статьи — 1.5.1, и ansible установил ее, когда я выполнил приведенную выше команду.

Установить коллекцию, используя идентификаторы диапазона

Установка коллекций с использованием файла требований

Если вы работали с Python, вы должны знать, как использовать файл requirements. Аналогичным образом мы можем создать файл требований для установки нескольких коллекций с помощью одной команды.

Создайте файл с именем "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 requirements.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 для поиска коллекций по настроенному пути. Вам необходимо явно добавить другой каталог коллекций в конфигурацию для успешного запуска плейбуков.

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

Получение списка установленных коллекций

Вы можете получить список установленных коллекций, выполнив следующую команду. Это покажет вам коллекции, установленные в вашем дистрибутиве ansible, а также коллекции, установленные вами.

ansible-galaxy collection list

Список коллекций Ansible

Как использовать коллекцию в Playbook

До сих пор мы видели, как загружать коллекции разными способами. Основная часть заключается в том, что вам нужно использовать коллекции в вашей игровой книге для выполнения некоторых действий.

Я использую модуль docker_network_info для проверки информации о сети. Этот модуль является частью коллекции community.docker.

Чтобы использовать коллекцию, я использовал директиву "collections" и передал имя коллекции в качестве аргумента. Первая задача использует модуль "docker_network_info", который автоматически выбирается из директивы коллекции.

---
- 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 и различные способы установки коллекций на локальный компьютер. Перейдите на веб-сайт ansible-galaxy и просмотрите несколько коллекций, чтобы больше узнать о ее структуре.

Статьи по данной тематике