mongodb
stone-payments.mongodb
Роль для Ansible, которая управляет MongoDB в стоStandalone или репликационном наборе.
Поддерживаемые системы
Чтобы сократить усилия на разработку, мы решили, что поддерживаемый дистрибутив должен:
- быть в текущей поддержке от создателя дистрибутива (т.е. не в EOL);
- быть в текущей поддержке от MongoDB.org (это требование, вероятно, будет снято скоро);
- основываться на systemd;
- иметь достаточно широкую пользовательскую базу.
Поэтому список поддерживаемых систем на данный момент следующий:
- Enterprise Linux (как CentOS, так и RHEL)
- 7.3
- 7.4
- 7.5
- Ubuntu
- 16.04
Дальнейшие дистрибутивы могут быть добавлены по запросу, при условии выполнения требований.
Использование
Быстрый старт
Для настройки базовой конфигурации MongoDB без пароля и только для обратного соединения не требуется никаких переменных. Просто включите его в плей:
- name: установить mongodb
hosts: all
roles: stone-payments.mongodb
Настройка реплика-набора
Чтобы построить репликационный набор, нужно сообщить мастеру, что он является мастером, и указать, к какому мастеру подключаться. Вы можете сделать это с помощью следующего фрагмента:
- name: установить mongodb реплика-набор
host: all
roles: stone-payments.mongodb
vars:
mongodb_conf_bindIp: "0.0.0.0"
mongodb_replSet_enabled: true
mongodb_replSet_name: "someReplicaSetName"
mongodb_replSet_master: "1.2.3.4" # должен быть IP-адрес
mongodb_replSet_key: "someLongKey" # необязательно, ключ аутентификации между репликами
mongodb_replSet_member: "{{ ansible_eth1['ipv4']['address'] }}" # необязательно, укажите другой интерфейс для репликации
mongodb_replSet_arbiter: "{{ true if inventory_hostname == 'hostThatIsArbiter' else false }}"
Аутентификация
Вы можете включить аутентификацию и создать административный аккаунт следующим образом:
- name: установить mongodb с аутентификацией
hosts: all
roles: stone-payments.mongodb
vars:
mongodb_conf_auth: true
mongodb_admin_user: "admin"
mongodb_admin_password: "somePassword"
Логирование
Вы можете установить любую опцию systemLog, предоставив словарь mongodb_conf_logging
:
- name: установить mongodb с логированием для отладки сети
host: all
roles: stone-payments.mongodb
vars:
mongodb_conf_logging:
verbosity: 0
component:
network:
verbosity: 5
destination: file
path: /var/log/mongodb/mongod.log
Брандмауэр
Это правило настроит либо ufw, либо firewalld для включения входящих соединений по умолчанию. Вы можете настроить это с помощью следующих опций (которые специфичны для используемого вами решения брандмауэра):
- name: установить mongodb с кастомными настройками брандмауэра
hosts: all
roles: stone-payments.mongodb
vars:
mongodb_firewall_zone: "public" # только для firewalld
mongodb_firewall_interface: "eth0" # только для ufw
mongodb_firewall_source: "192.168.0.0/24" # только для ufw
Вы также можете отключить конфигурацию брандмауэра, установив mongodb_install_firewall: false
.
Модули безопасности Linux
Эта роль по умолчанию настроит модули безопасности Linux (в данный момент поддерживается только SELinux). Вы можете отключить это, установив:
mongodb_install_lsm: false
.
Другие настройки
Я считаю, что почти каждая другая настройка самопоясняющаяся или напрямую связанная с основной функцией MongoDB. Просто переопределите настройки в defaults/main.yml
, и они будут (надеюсь) применены к вашей системе.
Тестирование
Эта роль реализует большинство юнит-тестов с помощью Molecule на Docker. Обратите внимание, что мы поддерживаем только Molecule 2.0 и выше. Некоторые тесты реализованы на Vagrant с VirtualBox, чтобы мы могли тестировать аспекты, требующие полноценной виртуальной машины. Однако для тестов, которые требуют Vagrant, нет CI интеграции, так как нет публичного CI, который поддерживает вложенную виртуализацию.
Следующие сценарии присутствуют:
Название сценария | Драйвер | Описание |
---|---|---|
default |
docker | Основные тесты роли в индивидуальной настройке |
replica-set |
docker | Настройка смешанного дистрибутива в репликационном наборе |
security |
vagrant | Полнофункциональная ВМ для тестирования LSM и конфигурации брандмауэра |
Настройка окружения Docker
Вы можете установить Molecule и библиотеку взаимодействия с Docker внутри виртуального окружения с помощью следующих команд. Обратите внимание, что нам нужен docker-py как внутри, так и вне виртуального окружения.
sudo pip install docker-py
virtualenv .venv
.venv/bin/activate
pip install molecule docker-py
Установка и настройка Docker выходят за рамки данного документа.
Если у вас хост с поддержкой SELinux, также необходимо установить библиотеку libselinux-python. В Molecule playbook есть специальное дополнение при делегировании задач на localhost, чтобы использовать интерпретатор python хоста вместо python виртуального окружения, чтобы правильно получить доступ к привязкам SELinux. Вы можете установить этот пакет как на Fedora, так и на CentOS с помощью:
sudo yum install python2-libselinux
Настройка окружения Vagrant
Вы можете установить Molecule внутри виртуального окружения с помощью следующих команд:
virtualenv .venv
.venv/bin/activate
pip install molecule
Установка и настройка Vagrant и VirtualBox выходят за рамки данного документа.
Запуск теста
После того, как Molecule будет настроен в виртуальном окружении, вы можете запустить тесты с помощью:
molecule converge [-s имя_сценария]
Где имя_сценария
— это название тестового случая внутри molecule
. Если параметр не указан, будет запущен тест по умолчанию.
Участие
Просто откройте PR. Мы любим PR!
Список задач
Вот несколько предложений о том, что можно сделать:
- Поддержка использования MongoDB, упакованного в дистрибутив.
- Написать дополнительные автономные тесты с помощью serverspec или testinfra.
- Улучшить тестовый случай для репликационного набора.
Лицензия
Эта роль распространяется под лицензией MIT.
ansible-galaxy install stone-payments/ansible-mongodb