gsoft.eventstore

Rol de Ansible EventStoreDB

Un rol de Ansible que instala y configura una máquina Linux para ser utilizada como un servidor EventStoreDB.

Consulta ejemplos de uso aquí.

Requisitos

Ubuntu 14.04 (Trusty) LTS o superior.

Variables del Rol

Las variables disponibles se enumeran a continuación, junto con valores predeterminados (ver defaults/main.yml):

eventstore_version: 20.10.4
eventstore_admin_password: changeit
eventstore_admin_new_password: null
eventstore_config_file: "{{ role_path }}/templates/eventstore.conf.j2"
eventstore_wait_for_http: true
eventstore_wait_for_http_timeout: 30
eventstore_generate_node_certitificate: false
eventstore_certificate_path: /etc/eventstore/certs
eventstore_ca_key_path: ./ca/ca.key
eventstore_ca_cert_path: ./ca/ca.crt
eventstore_node_cert_days: 365
eventstore_node_cert_out: ./node
eventstore_node_cert_ip_addresses:
  - 127.0.0.1
  - "{{ ansible_default_ipv4.address }}"
eventstore_node_cert_dns_names:
  - localhost
  - "{{ inventory_hostname }}"

Configuración

Por defecto, el archivo de configuración (eventstore.conf) es básico y contiene lo siguiente:

---
ClusterSize: 1

Seguridad

A diferencia de versiones anteriores, EventStoreDB v20+ es seguro por defecto. Esto significa que debes proporcionar certificados válidos y una configuración para que el nodo de la base de datos funcione.

Este rol asume que el certificado CA ya está presente en tu máquina. Consulta este repositorio para ejemplos sobre cómo podrías provisionar tus certificados antes de ejecutar este rol.

Certificados de nodo

Si deseas generar los certificados de nodo con el rol, configura eventstore_generate_node_certitificate: true. La generación de certificados seguirá los valores predeterminados de la siguiente manera (se pueden cambiar):

eventstore_certificate_path: /etc/eventstore/certs
eventstore_ca_key_path: ./ca/ca.key
eventstore_ca_cert_path: ./ca/ca.crt
eventstore_node_cert_days: 365
eventstore_node_cert_out: ./node
eventstore_node_cert_ip_addresses:
  - 127.0.0.1
  - "{{ ansible_default_ipv4.address }}"
eventstore_node_cert_dns_names:
  - localhost
  - "{{ inventory_hostname }}"

Esto generará los siguientes archivos:

/etc/eventstore/certs/node/node.key
/etc/eventstore/certs/node/node.crt

con SANs que coinciden con la dirección IP de bucle invertido/DNS, la dirección IP predeterminada (interfaz eth0) y el DNS del nombre del host.

Ejemplo de Playbook

Modificar la configuración es tan fácil como crear tu propio archivo YAML y especificar la ruta con la variable eventstore_config_file. Por ejemplo:

Estructura de carpeta de ejemplo:

- playbook.yml
- files/eventstore.conf.j2

Contenido de ejemplo para eventstore.conf.j2:

** Ve la documentación oficial de configuración para todas las opciones posibles. **

# Configuración de Certificados
CertificateFile: /etc/eventstore/certs/node/node.crt
CertificatePrivateKeyFile: /etc/eventstore/certs/node/node.key
TrustedRootCertificatesPath: /etc/eventstore/certs/ca

# Configuración de Red
IntIp: {{ ansible_default_ipv4.address }}
ExtIp: {{ ansible_default_ipv4.address }}
EnableExternalTcp: true
EnableAtomPubOverHTTP: true

# Chismes de clúster
ClusterSize: 3
DiscoverViaDns: true
ClusterDns: eventstore.dns

# Configuración de Proyecciones
RunProjections: All

Ejemplo de playbook.yml

- hosts: all
  roles:
    - eventstore

  vars:
    eventstore_generate_node_certitificate: true
    eventstore_config_file: ./files/eventstore.conf.j2
    eventstore_ca_key: "{{ lookup('file', 'ca/ca.key') }}"
    eventstore_ca_cert: "{{ lookup('file', 'ca/ca.crt') }}"
    eventstore_node_cert_ip_addresses:
      - 127.0.0.1
      - "{{ ansible_default_ipv4.address }}"
    eventstore_node_cert_dns:
      - localhost
      - "{{ inventory_hostname }}"
      - eventstore.dns
  pre_tasks:
    - name: Asegurar que existe el grupo eventstore
      ansible.builtin.group:
        name: eventstore
        state: present

    - name: Asegurar que existe el usuario eventstore
      ansible.builtin.user:
        name: eventstore
        state: present

    - name: Crear carpeta para certificado CA de eventstore
      ansible.builtin.file:
        path: /etc/eventstore/certs/ca
        state: directory

    - name: Agregar archivos de certificado CA de eventstore
      ansible.builtin.copy:
        content: "{{ item.content }}"
        dest: "{{ item.dest }}"
        owner: eventstore
        group: eventstore
        mode: '0600'
      no_log: true
      loop:
        - { content: "{{ eventstore_ca_key }}", dest: /etc/eventstore/certs/ca/ca.key }
        - { content: "{{ eventstore_ca_cert }}", dest: /etc/eventstore/certs/ca/ca.crt }

    - name: Confiar en el certificado CA de eventstore
      ansible.builtin.copy:
        content: "{{ eventstore_ca_cert }}"
        dest: /usr/local/share/ca-certificates/eventstore-ca.crt
        mode: '0644'
      notify:
        - actualizar ca de confianza

  handlers:
    - name: actualizar ca de confianza
      shell: /usr/sbin/update-ca-certificates

Licencia

Copyright © 2021, GSoft inc. Este código está licenciado bajo la Licencia Apache, Versión 2.0. Puedes obtener una copia de esta licencia en https://github.com/gsoft-inc/gsoft-license/blob/master/LICENSE.

Acerca del proyecto

EventStoreDB role for Linux.

Instalar
ansible-galaxy install gsoft.eventstore
Licencia
Unknown
Descargas
868
Propietario
Workleap is the one simple employee experience platform to elevate hybrid work