gsoft.eventstore
Rôle Ansible EventStoreDB
Un rôle Ansible qui installe et configure une machine Linux pour être utilisée comme un serveur EventStoreDB.
Voir des exemples d'utilisation ici.
Exigences
Ubuntu 14.04 (Trusty) LTS et supérieur.
Variables du rôle
Les variables disponibles sont listées ci-dessous, avec les valeurs par défaut (voir 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 }}"
Configuration
Par défaut, le fichier de configuration (eventstore.conf) est minimaliste comme suit :
---
ClusterSize: 1
Sécurité
Contrairement aux versions précédentes, EventStoreDB v20+ est sécurisé par défaut. Cela signifie que vous devez fournir des certificats valides et une configuration pour que le nœud de base de données fonctionne.
Ce rôle suppose que le certificat CA est déjà présent sur votre machine. Voir ce dépôt pour des exemples sur la façon dont vous pourriez fournir vos certificats avant d'exécuter ce rôle.
Certificats de nœud
Si vous souhaitez générer les certificats de nœud avec le rôle, définissez eventstore_generate_node_certitificate: true
.
La génération de certificats suivra les valeurs par défaut comme suit (modifiable) :
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 }}"
Cela générera les fichiers suivants :
/etc/eventstore/certs/node/node.key
/etc/eventstore/certs/node/node.crt
avec des SAN correspondant aux adresses IP/DNS de bouclage, à l'adresse IP par défaut (interface eth0) et au DNS du nom d'hôte.
Exemple de Playbook
Modifier la configuration est aussi simple que de créer votre propre fichier YAML et de préciser le chemin avec la variable eventstore_config_file
. Par exemple :
Structure de dossier exemple :
- playbook.yml
- files/eventstore.conf.j2
Contenu exemple pour eventstore.conf.j2
:
** Voir la documentation de configuration officielle pour toutes les options possibles. **
# Configuration des certificats
CertificateFile: /etc/eventstore/certs/node/node.crt
CertificatePrivateKeyFile: /etc/eventstore/certs/node/node.key
TrustedRootCertificatesPath: /etc/eventstore/certs/ca
# Configuration réseau
IntIp: {{ ansible_default_ipv4.address }}
ExtIp: {{ ansible_default_ipv4.address }}
EnableExternalTcp: true
EnableAtomPubOverHTTP: true
# Gossip de cluster
ClusterSize: 3
DiscoverViaDns: true
ClusterDns: eventstore.dns
# Configuration des projections
RunProjections: All
Exemple 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: Assurer que le groupe eventstore existe
ansible.builtin.group:
name: eventstore
state: present
- name: Assurer que l'utilisateur eventstore existe
ansible.builtin.user:
name: eventstore
state: present
- name: Créer le dossier de certificats ca d'eventstore
ansible.builtin.file:
path: /etc/eventstore/certs/ca
state: directory
- name: Ajouter les fichiers de certificats ca d'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: Faire confiance au certificat ca d'eventstore
ansible.builtin.copy:
content: "{{ eventstore_ca_cert }}"
dest: /usr/local/share/ca-certificates/eventstore-ca.crt
mode: '0644'
notify:
- mettre à jour ca de confiance
handlers:
- name: mettre à jour ca de confiance
shell: /usr/sbin/update-ca-certificates
Licence
Copyright © 2021, GSoft inc. Ce code est sous licence Apache, Version 2.0. Vous pouvez obtenir une copie de cette licence à l'adresse https://github.com/gsoft-inc/gsoft-license/blob/master/LICENSE.
ansible-galaxy install gsoft.eventstore