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

PostgreSQL поставляется вместе с 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

Рекомендуемые программы