Зарегистрируйтесь, чтобы продолжить обучение

Коллекции Основы автоматизации в Ansible

Коллекции в 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. Такой способ используется например на Хекслете.

  1. Создайте новый плейбук в котором будет описываться конфигурация сервера. Опишите в нем установку необходимых пакетов.

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

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


Дополнительные материалы

  1. Ansible Collections

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»