stone-payments.mongodb
stone-payments.mongodb
Rol para Ansible que gestiona MongoDB en una configuración independiente o en un conjunto de réplicas.
Sistemas soportados
Para conservar esfuerzos en el desarrollo, decidimos que una distribución soportada debe:
- estar actualmente soportada por el creador de la distribución (es decir, no estar en EOL);
- estar actualmente soportada por MongoDB.org (este requisito probablemente se eliminará pronto);
- estar basada en systemd;
- tener una base de usuarios suficientemente amplia.
Por lo tanto, la lista actual de sistemas soportados es:
- Linux empresarial (tanto CentOS como RHEL)
- 7.3
- 7.4
- 7.5
- Ubuntu
- 16.04
Se pueden agregar otras distribuciones a pedido, siempre que se cumplan los requisitos.
Uso
Comienzo rápido
No se necesita ninguna variable para configurar una instalación básica de MongoDB sin contraseña y solo para bucle invertido. Simplemente inclúyelo en un play:
- name: instalar mongodb
hosts: all
roles: stone-payments.mongodb
Configuración de conjunto de réplicas
Para construir un conjunto de réplicas, necesitas informar al maestro que es un maestro, y a una réplica a la que el maestro debe conectarse. Puedes hacer todo esto con el siguiente fragmento:
- name: instalar conjunto de réplicas mongodb
host: all
roles: stone-payments.mongodb
vars:
mongodb_conf_bindIp: "0.0.0.0"
mongodb_replSet_enabled: true
mongodb_replSet_name: "nombreDelConjuntoDeRéplicas"
mongodb_replSet_master: "1.2.3.4" #debe ser una dirección IP
mongodb_replSet_key: "unaClaveLarga" #opcional, clave de autenticación entre réplicas
mongodb_replSet_member: "{{ ansible_eth1['ipv4']['address'] }}" #opcional, especifica una IF diferente para replicación
mongodb_replSet_arbiter: "{{ true if inventory_hostname == 'hostQueEsArbitro' else false }}"
Autenticación
Puedes habilitar la autenticación y crear una cuenta de administrador de la siguiente manera:
- name: instalar mongodb con autenticación
hosts: all
roles: stone-payments.mongodb
vars:
mongodb_conf_auth: true
mongodb_admin_user: "admin"
mongodb_admin_password: "algunaContraseña"
Registro
Puedes establecer cualquier opción de systemLog proporcionando un diccionario mongodb_conf_logging
:
- name: instalar mongodb con registro de depuración de red
host: all
roles: stone-payments.mongodb
vars:
mongodb_conf_logging:
verbosity: 0
component:
network:
verbosity: 5
destination: file
path: /var/log/mongodb/mongod.log
Firewall
Esta regla configurará ya sea ufw o firewalld para habilitar conexiones entrantes por defecto. Puedes personalizar esto con las siguientes opciones (que son específicas de la solución de firewall que estés utilizando):
- name: instalar mongodb con configuraciones de firewall personalizadas
hosts: all
roles: stone-payments.mongodb
vars:
mongodb_firewall_zone: "public" #solo firewalld
mongodb_firewall_interface: "eth0" #solo ufw
mongodb_firewall_source: "192.168.0.0/24" #solo ufw
También puedes suprimir la configuración del firewall estableciendo mongodb_install_firewall: false
.
Módulos de Seguridad de Linux
Este rol configurará los LSM de forma predeterminada (actualmente solo se admite SELinux). Puedes deshabilitar esto estableciendo:
mongodb_install_lsm: false
.
Otras configuraciones
Creo que casi todas las demás configuraciones son autoexplicativas o están directamente relacionadas con una característica central de MongoDB. Simplemente anula las configuraciones en defaults/main.yml
y se aplicarán (con suerte) a tu sistema.
Pruebas
Este rol implementa la mayoría de las pruebas unitarias con Molecule en Docker. Ten en cuenta que solo admitimos Molecule 2.0 o superior. Algunas pruebas se implementan en Vagrant con VirtualBox para poder probar aspectos que requieren una VM completa. Sin embargo, para las pruebas que requieren Vagrant, no hay integración de CI ya que no hay una CI pública que admita virtualización anidada.
Los siguientes escenarios están presentes:
Nombre del escenario | Controlador | Descripción |
---|---|---|
default |
docker | Pruebas básicas de funcionalidad del rol en una instalación individual |
replica-set |
docker | Instalación mixta en un conjunto de réplicas |
security |
vagrant | VM completa para probar la configuración de LSM y firewall |
Configuración del entorno de Docker
Puedes instalar Molecule y la biblioteca de interacción de Docker dentro de un entorno virtual con los siguientes comandos. Ten en cuenta que necesitamos docker-py tanto dentro como fuera del virtualenv.
sudo pip install docker-py
virtualenv .venv
.venv/bin/activate
pip install molecule docker-py
La instalación y configuración de Docker está fuera de alcance.
Si tienes un host con SELinux habilitado, también debes tener instalada la biblioteca libselinux-python. Hay una adición especial en el playbook de Molecule al delegar tareas a localhost para usar el intérprete de python del host en lugar del python del virtualenv para acceder correctamente a los enlaces de SELinux. Puedes instalar este paquete tanto en Fedora como en CentOS con:
sudo yum install python2-libselinux
Configuración del entorno de Vagrant
Puedes instalar Molecule dentro de un entorno virtual con los siguientes comandos:
virtualenv .venv
.venv/bin/activate
pip install molecule
La instalación y configuración de Vagrant y VirtualBox está fuera de alcance.
Ejecutando la prueba
Después de haber configurado Molecule dentro del virtualenv, puedes ejecutar las pruebas con:
molecule converge [-s nombre_del_escenario]
Donde nombre_del_escenario
es el nombre de un caso de prueba bajo molecule
. El caso de prueba predeterminado se ejecuta si no se pasa ningún parámetro.
Contribuir
Solo abre un PR. ¡Nos encantan los PRs!
Lista de tareas
Aquí hay algunas sugerencias sobre qué hacer:
- Soportar el uso de MongoDB empaquetado por la distribución.
- Escribir más pruebas independientes con serverspec o testinfra.
- Mejorar el caso de prueba para el conjunto de réplicas.
Licencia
Este rol se distribuye bajo la licencia MIT.
ansible-galaxy install stone-payments.mongodb