Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Коллекции Основы автоматизации в 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

Домашнее задание

Загрузите домашнее задание с помощью команды:

hexlet program download devops-for-programmers ansible

Самостоятельная работа

Развернём с помощью Ansible полноценное приложение.

  1. В плейбук, в котором ранее устанавливали NodeJS и Postgres добавьте следующие задачи

    • Скачивание репозитория [js-fastify-blog](https://github.com/hexlet-components/js-fastify-blog)

    • Создание БД и пользователя для подключение к Postgres

    • Подготовка .env файла из шаблона. Этот файл должен находиться внутри приложения. Внутри файла - переменные окружения по которым приложение подключиться к базе данных Postgres. Ниже указаны стандартные настройки

DATABASE_NAME=postgres
DATABASE_USERNAME=postgres
DATABASE_PASSWORD=postgres
DATABASE_PORT=5432
DATABASE_HOST=localhost
  • Установка зависимостей проекта с помощью через NPM

В результате должно получиться настроенное окружение и приложение, которое готово к запуску и работе с Postgres


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

  1. Ansible Collections

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Даю согласие на обработку персональных данных, соглашаюсь с «Политикой конфиденциальности» и «Условиями оказания услуг»