Учебное пособие по коллекциям 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 и просмотрите несколько коллекций, чтобы больше узнать о ее структуре.