Коллекции в Ansible — формат распространения связанного набора плейбуков, ролей, модулей и плагинов. Он появился после того, как количество встроенных модулей внутрь Ansible стало настолько огромным, что их поддержка резко усложнилась. Все встроенные модули перенесли в коллекции Ansible Collections. Часть этих модулей распространяются с Ansible сразу, другие же устанавливаются как роли через Ansible Galaxy.
Список установленных коллекций можно посмотреть так:
ansible-galaxy collection list
# Не полный вывод
Collection Version
----------------------------- -------
amazon.aws 2.1.0
ansible.netcommon 2.5.0
ansible.posix 1.3.0
ansible.utils 2.4.3
ansible.windows 1.9.0
cloud.common 2.1.0
community.crypto 2.1.0
community.digitalocean 1.14.0
community.dns 2.0.4
community.docker 2.1.1
community.general 4.3.0
community.google 1.0.0
community.grafana 1.3.0
community.kubernetes 2.0.1
community.mongodb 1.3.2
community.network 3.0.0
community.postgresql 1.6.0
community.rabbitmq 1.1.0
community.skydive 1.0.0
community.vmware 1.17.0
community.windows 1.9.0
community.zabbix 1.5.1
containers.podman 1.9.0
google.cloud 1.0.2
hetzner.hcloud 1.6.0
kubernetes.core 2.2.2
Коллекция ansible.builtin здесь не указана, так как это единственная коллекция модулей, встроенная прямо в ядро Ansible.
Принцип именования коллекций такой же как и у ролей. Первая часть — неймспейс, вторая имя коллекции. Но в отличие от роли, у коллекций есть и третье имя, модуль, который используется. Посмотрим на примере базы данных PostgreSQL. Ниже задача, которая управляет базой данных:
- hosts: all
tasks:
- name: Создание новой базы данных
community.postgresql.postgresql_db:
name: hexlet-development
- name: Создание дампа существующей базы данных
community.postgresql.postgresql_db:
name: hexlet-production
state: dump
target: /tmp/hexlet.production.sql
Или другой пример — управление таблицами в существующей базе данных:
- hosts: all
tasks:
- name: Создание таблицы
community.postgresql.postgresql_table:
db: hexlet-development
name: users
PostgeSQL поставляется вместе с Ansible, поэтому его можно использовать напрямую, как и остальные коллекции из списка выше. Если коллекция не входит в стандартную поставку, то ее можно установить через ansible-galaxy
. Ниже пример с Nginx.
ansible-galaxy collection install nginxinc.nginx_core
Коллекция nginxinc.nginx_core содержит внутри набор ролей, для установки и настройки Nginx. Для примера:
- hosts: all
roles:
# Установка Nginx
- nginxinc.nginx_core.nginx
Или более сложный вариант, с конфигурацией.
Автоматическая установка
Ansible поддерживает автоматическую установку коллекции по такому же принципу как это делается с ролями. Для этого создается файл requirements.yml, например, в том месте где запускается ansible
. Туда добавляется список нужных коллекций:
collections:
# Install a collection from Ansible Galaxy
- name: geerlingguy.php_roles
version: 0.9.3
Затем выполняется установка:
ansible-galaxy install -r requirements.yml
Самостоятельная работа
Благодаря подходу "инфраструктура как код" Ansible позволяет удобно управлять ssh-ключами на сервере. В результате добавление доступов новому разработчику выполняется одной командой. Представьте, что вы создали новый сервер, ваш ssh-ключ добавлен в облачном хранилище, вы являетесь главным админом. Но вот у вас появляется новый разработчик и необходимо ему дать доступ к серверу. Это небольшое задание можно решить с помощью разных модулей и ролей. Например использовать модуль из коллекции Ansible Posix. Такой способ используется например на Хекслете.
-
Создайте новый плейбук в котором будет описываться конфигурация сервера. Опишите в нем установку необходимых пакетов.
-
Добавьте в плейбук новую таску, которая будет загружать на сервер актуальные SSH ключи. Для этого вам необходмо положить свой публичный ключ в рабочую директорию.
В результате выполнения задания у вас получится плейбук, который устанавливает необходимые ключи и актуализирует доступ к серверу. Не забудьте использовать теги для частичного выполнения тасок.
Дополнительные материалы
Остались вопросы? Задайте их в разделе «Обсуждение»
Вам ответят команда поддержки Хекслета или другие студенты
Для полного доступа к курсу нужен базовый план
Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.