trombik.opensearch

trombik.opensearch

Rôle ansible pour gérer opensearch.

Le rôle est en version bêta.

Pour les utilisateurs de FreeBSD

L'exemple, pas le rôle lui-même, nécessite mon propre port de opensearch-dashboards pour FreeBSD, disponible sur trombik/freebsd-ports-opensearch. L'exemple utilise trombik.opensearch_dashboards. Cependant, le port et le rôle dépendent de www/node10, qui est EoLed et déprécié.

Voir Issue 835 pour le plan de mise à niveau.

Pour les utilisateurs de Debian et CentOS

Le rôle installe opensearch à partir de l'archive tar officielle. C'est un gros hack jusqu'à ce qu'Amazon ou d'autres distributions sortent des paquets.

Les variables de rôle liées à l'installation à partir des sources, opensearch_src_*, ne sont pas documentées intentionnellement.

Le rôle n'installe pas le paquet JDK. Le JDK inclus est utilisé à la place.

Le rôle importe une clé PGP dans la clé de root à partir du projet en amont pour vérifier le fichier tar. Si vous savez comment vérifier un fichier signé sans importer la clé PGP, faites-le moi savoir.

Certains plugins ne fonctionnent pas encore.

Les changements par rapport au paramètre par défaut incluent :

  • le fichier journal est sous /var/log/opensearch
  • l'application est installée sous opensearch_root_dir. La valeur par défaut est /usr/local/opensearch-dashboards
  • l'utilisateur pour exécuter l'application est opensearch

Les changements seront mis à jour lorsqu'un paquet officiel sera disponible.

Le rôle télécharge l'archive tar officielle sous opensearch_src_dir. La valeur par défaut est /var/dist. Ce répertoire n'est pas seulement un répertoire de cache. En plus du fichier tar, il contient une clé PGP, un fichier de signature et des fichiers pour contrôler les tâches ansible.

Le rôle installe un fichier d'unité systemd pour opensearch. L'auteur n'est pas un expert de systemd en aucun cas.

Exigences

Par défaut, le rôle utilise trombik.x509_certificate pour gérer les certificats X509. Le rôle ne liste pas trombik.x509_certificate comme dépendance car TLS n'est pas obligatoire.

Variables de rôle

Variable Description Par défaut
opensearch_user nom d'utilisateur de opensearch {{ __opensearch_user }}
opensearch_group nom de groupe de opensearch {{ __opensearch_group }}
opensearch_log_dir chemin vers le répertoire log {{ __opensearch_log_dir }}
opensearch_db_dir chemin vers le répertoire des données {{ __opensearch_db_dir }}
opensearch_scripts_dir chemin vers le répertoire des scripts {{ __opensearch_scripts_dir }}
opensearch_plugins_dir chemin vers le répertoire des plugins {{ __opensearch_plugins_dir }}
opensearch_plugin_command chemin vers la commande opensearch-plugin {{ __opensearch_plugin_command }}
opensearch_plugins une liste de plugins (voir ci-dessous) []
opensearch_service nom du service de opensearch {{ __opensearch_service }}
opensearch_package nom du paquet de opensearch {{ __opensearch_package }}
opensearch_conf_dir chemin vers le répertoire de configuration {{ __opensearch_conf_dir }}
opensearch_jvm_options options JVM (voir le playbook d'exemple) ""
opensearch_conf_file chemin vers opensearch.yml {{ opensearch_conf_dir }}/opensearch.yml
opensearch_flags drapeaux supplémentaires pour les scripts de démarrage ""
opensearch_config contenu de opensearch.yml ""
opensearch_config_log4j2_properties contenu de log4j2.properties ""
opensearch_http_host adresse ou hostname de opensearch. Cette adresse doit être accessible depuis le contrôleur ansible (l'hôte sur lequel ansible s'exécute). La valeur est utilisée pour l'accès à l'API. Donc, la valeur doit correspondre au nom commun du certificat lorsque TLS est utilisé et que la vérification des hôtes distants est activée. Sinon, les appels API dans le rôle échoueront. localhost
opensearch_http_port port d'écoute de opensearch. Ce port doit être accessible depuis le contrôleur ansible (l'hôte sur lequel ansible s'exécute) 9200
opensearch_http_url URL de l'interface HTTP. Cette URL doit être accessible depuis le contrôleur ansible (l'hôte sur lequel ansible s'exécute) https://{{ opensearch_http_host }}:{{ opensearch_http_port }}
opensearch_http_auth détails d'authentification pour l'accès à l'API, voir ci-dessous {}
opensearch_java_home variable d'environnement JAVA_HOME {{ __opensearch_java_home }}
opensearch_extra_plugin_files liste de fichiers supplémentaires pour les plugins (voir ci-dessous) []
opensearch_include_role_x509_certificate si vrai, inclure trombik.x509_certificate pendant le play (trombik.x509_certificate doit être listé dans requirements.yml) yes
opensearch_x509_certificate_vars variable à passer à trombik.x509_certificate {}
opensearch_wait_for_cluster_status attendre que l'état du cluster soit cette valeur après le démarrage du service. les valeurs valides incluent red, yellow, green, et false. définir la valeur false pour désactiver no
opensearch_wait_for_cluster_status_timeout délai d'attente lorsque l'on attend que l'état du cluster soit opensearch_wait_for_cluster_status 10s
opensearch_wait_for_cluster_status_retry réessayer lorsque l'on attend que l'état du cluster soit opensearch_wait_for_cluster_status 3

opensearch_plugins

Ceci est une liste de plugins. Un élément de la liste est un dictionnaire.

Clé Description Obligatoire ?
name nom du plugin oui
src la source du plugin, généralement une URL non

opensearch_extra_plugin_files

Cette variable est une liste de fichiers pour les plugins. Un élément de la liste est un dictionnaire.

Clé Description Obligatoire ?
path chemin relatif vers le fichier depuis opensearch_plugins_dir oui
type soit yaml ou raw. lorsque le type est yaml, la valeur de content est rendue en YAML. lorsque le type est raw, la valeur de content est rendue telle quelle. lorsque la valeur de state est omise, ou present, le type doit être spécifié. non
mode mode du fichier non
owner propriétaire du fichier non
group groupe du fichier non
state soit present ou absent. present crée le fichier. absent supprime le fichier. la valeur par défaut est present non
content contenu du fichier (voir aussi type ci-dessus) non
post_command un dictionnaire pour ansible.builtin.command non

post_command est un dictionnaire pour exécuter une commande après le changement de statut de l'élément. La variable est passée à ansible.builtin.command (pas à ansible.builtin.shell).

Il accepte les clés suivantes :

Clé Description Obligatoire ?
cmd La commande à exécuter oui
args Un dictionnaire pour args. Actuellement, chdir, creates et removes sont supportés. non
enabled Soit yes ou no. Lorsque yes, la commande est exécutée, pas lorsque no oui

post_command est principalement conçu pour securityadmin.sh. Voir Appliquer des changements avec securityadmin.sh pour plus de détails. Utilisez enabled pour exécuter securityadmin.sh sur un nœud spécifique.

opensearch_http_auth

Cette variable est un dictionnaire et est utilisée comme informations d'identification de l'utilisateur lors de l'accès aux points de terminaison API à opensearch_http_url.

Clé Description Obligatoire ?
client_cert Chemin vers la clé publique du client au format PEM. Lorsqu'il s'agit d'un chemin relatif, le chemin est relatif au répertoire de travail sur le contrôleur ansible, PAS sur la machine cible. non
client_key Chemin vers la clé secrète du client au format PEM. Lorsqu'il s'agit d'un chemin relatif, le chemin est relatif au répertoire de travail sur le contrôleur ansible, PAS sur la machine cible. non
ca_path Chemin vers la clé publique de l'autorité de certification (CA) au format PEM. Lorsqu'il s'agit d'un chemin relatif, le chemin est relatif au répertoire de travail sur le contrôleur ansible, PAS sur la machine cible. non
url_username Nom d'utilisateur pour l'authentification de base non
url_password Mot de passe pour l'authentification de base non
validate_certs vérifier le certificat distant non

Le rôle passe la variable au module uri.

ca_path a été ajouté dans la version ansible 2.11. client_cert et client_key ont été ajoutés dans la version ansible 2.4. Assurez-vous que votre version ansible supporte les clés. En conséquence, vous ne pouvez pas utiliser validate_certs: yes lorsque votre version ansible est plus ancienne que 2.11 et que le certificat n'est pas signé par une CA dans le bundle CA par défaut (dans la plupart des cas, vous souhaitez avoir votre propre CA pour signer des certificats en raison de frais financiers).

Notez que les appels API sont effectués à partir de ansible. opensearch_http_url doit être accessible depuis ansible.

Les fichiers auxquels client_cert, client_key et ca_path pointent doivent être sur le contrôleur ansible.

Problèmes connus avec opensearch_http_auth et TLS

opensearch prend en charge l'authentification de base et l'authentification par certificat client TLS. Cependant, dans certaines configurations, l'appel API échoue.

La réponse courte est : utilisez l'authentification de base via TLS avec ca_path. C'est la seule configuration qui fonctionne de manière sécurisée comme prévu.

Pour utiliser l'authentification TLS client sans nom d'utilisateur et mot de passe, vous devez définir validate_certs à no. Voici la matrice de test et les résultats.

Méthode d'authentification valeur de validate_certs avec ca_path? Résultat
Certificat client TLS no Oui Succès
Certificat client TLS no Non Succès
Certificat client TLS yes Oui Échec
Certificat client TLS yes Non Échec (c'est attendu car le client ne peut pas valider sans certificat CA)
Basique no Oui Succès
Basique no Non Succès
Basique yes Oui Succès
Basique yes Non Échec (c'est attendu car le client ne peut pas valider sans certificat CA)

Cela pourrait être un bug dans le module uri de ansible car curl fonctionne bien dans les cas d'authentification des certificats clients TLS et d'authentification de base via TLS.

Debian

Variable Par défaut
__opensearch_user opensearch
__opensearch_group opensearch
__opensearch_log_dir /var/log/opensearch
__opensearch_db_dir /var/lib/opensearch
__opensearch_package opensearch
__opensearch_conf_dir /usr/local/opensearch/config
__opensearch_root_dir /usr/local/opensearch
__opensearch_scripts_dir ""
__opensearch_plugins_dir /usr/local/opensearch/plugins
__opensearch_plugin_command /usr/local/opensearch/bin/opensearch-plugin
__opensearch_service opensearch
__opensearch_java_home /usr/local/opensearch/jdk

FreeBSD

Variable Par défaut
__opensearch_user opensearch
__opensearch_group opensearch
__opensearch_log_dir /var/log/opensearch
__opensearch_db_dir /var/db/opensearch
__opensearch_package textproc/opensearch
__opensearch_conf_dir /usr/local/etc/opensearch
__opensearch_scripts_dir ""
__opensearch_plugins_dir /usr/local/lib/opensearch/plugins
__opensearch_plugin_command /usr/local/lib/opensearch/bin/opensearch-plugin
__opensearch_service opensearch
__opensearch_java_home /usr/local

RedHat

Variable Par défaut
__opensearch_user opensearch
__opensearch_group opensearch
__opensearch_log_dir /var/log/opensearch
__opensearch_db_dir /var/lib/opensearch
__opensearch_package opensearch
__opensearch_conf_dir /usr/local/opensearch/config
__opensearch_root_dir /usr/local/opensearch
__opensearch_scripts_dir ""
__opensearch_plugins_dir /usr/local/opensearch/plugins
__opensearch_plugin_command /usr/local/opensearch/bin/opensearch-plugin
__opensearch_service opensearch
__opensearch_java_home /usr/local/opensearch/jdk

Dépendances

Exemple de Playbook

Un exemple d'installation de :

  • opensearch
  • opensearch-dashboards
  • haproxy
  • fluentd

haproxy est un serveur proxy inverse pour opensearch-dashboards. Les journaux de haproxy et du démon syslog sont envoyés à un écouteur local fluentd syslog. Le fluentd traite ensuite les journaux et les envoie à opensearch. Le modèle d'index est logstash-*.

Notez que le plugin de sortie fluentd elasticsearch ne prend pas en charge opensearch. L'exemple contourne le problème en :

  • installant des versions spécifiques de fluentd-elasticsearch-plugin et des gemmes liées à elasticsearch
  • définissant verify_es_version_at_startup et default_elasticsearch_version dans fluentd.conf

Voir Issue 915 pour plus de détails.

Utilisez l'utilisateur admin avec le mot de passe admin pour vous connecter aux tableaux de bord.

Pour un exemple de cluster, voir tests/serverspec/cluster.yml.

---
- hosts: localhost
  pre_tasks:
    - name: Autoriser le port HTTP
      ansible.builtin.iptables:
        chain: INPUT
        destination_port: 80
        protocol: tcp
        jump: ACCEPT
      when: ansible_os_family == 'RedHat'

    - name: Activer le transfert syslog depuis rsyslog
      ansible.builtin.copy:
        dest: /etc/rsyslog.d/fluentd.conf
        content: |
          *.*;syslog;auth,authpriv.none action(
            Target="127.0.0.1"
            type="omfwd"
            Port="1514"
            Protocol="udp"
            template="RSYSLOG_SyslogProtocol23Format"
          )
        mode: "0644"
      when:
        - ansible_os_family == 'Debian' or ansible_os_family == 'RedHat'
      register: __register_project_rsyslog_config

    - name: Redémarrer rsyslog
      ansible.builtin.service:
        name: rsyslog
        state: restarted
      when:
        - ansible_os_family == 'Debian' or ansible_os_family == 'RedHat'
        - __register_project_rsyslog_config['changed']

    - name: Activer le transfert syslog depuis syslogd
      ansible.builtin.copy:
        dest: /etc/syslog.d/fluentd.conf
        content: |
          *.*						@127.0.0.1:1514
        mode: "0644"
      when: ansible_os_family == 'FreeBSD'
      register: __register_project_syslog_config

    - name: Activer syslog rfc5424
      ansible.builtin.copy:
        dest: /etc/rc.conf.d/syslogd
        content: |
          syslogd_flags="-s -O rfc5424"
        mode: "0644"
      when: ansible_os_family == 'FreeBSD'
      register: __register_project_syslog_flags

    - name: Redémarrer syslogd
      ansible.builtin.service:
        name: syslogd
        state: restarted
      when:
        - ansible_os_family == 'FreeBSD'
        - __register_project_syslog_config['changed'] or __register_project_syslog_flags['changed']
  roles:
    - role: trombik.freebsd_pkg_repo
      when: ansible_os_family == "FreeBSD"
    - name: trombik.apt_repo
      when: ansible_os_family == 'Debian'
    - name: trombik.redhat_repo
      when: ansible_os_family == 'RedHat'
    - role: trombik.java
      # XXX le JDK inclus est utilisé sur Ubuntu et CentOS
      when: ansible_os_family == "FreeBSD"
    - role: trombik.sysctl
    - ansible-role-opensearch
    - role: trombik.opensearch_dashboards
    - role: trombik.fluentd
    - role: trombik.haproxy
  vars:
    # XXX utilisez mon propre paquet, car le paquet dans l'arborescence de paquets officielle est
    # cassé. notez que le paquet dépend de node10, qui est EoLed et a
    # des vulnérabilités.
    freebsd_pkg_repo:
      local:
        enabled: "true"
        url: "http://pkg.i.trombik.org/{{ ansible_distribution_version | regex_replace('\\.') }}{{ ansible_architecture }}-default-default"
        mirror_type: none
        priority: 100
        state: present
    os_opensearch_extra_packages:
      FreeBSD: []
      Debian:
        - unzip
      RedHat: []
    opensearch_extra_packages: "{{ os_opensearch_extra_packages[ansible_os_family] }}"
    os_java_packages:
      FreeBSD:
        - openjdk11
        - jq
        - vim
        - tmux
        - p5-ack
      Debian:
        - openjdk-11-jdk
      RedHat:
        - java-11-openjdk-devel
    java_packages: "{{ os_java_packages[ansible_os_family] }}"
    os_sysctl:
      FreeBSD:
        kern.maxfilesperproc: 65536
        security.bsd.unprivileged_mlock: 1
      Debian:
        # voir https://opensearch.org/docs/latest/opensearch/install/important-settings/
        vm.max_map_count: 262144
      RedHat:
        vm.max_map_count: 262144
    sysctl: "{{ os_sysctl[ansible_os_family] }}"
    opensearch_wait_for_cluster_status: yellow
    os_opensearch_package:
      FreeBSD: "{{ __opensearch_package }}"
      Debian: "{{ __opensearch_package }}"
      RedHat: opensearch-1.13.2
    opensearch_package: "{{ os_opensearch_package[ansible_os_family] }}"
    os_opensearch_flags:
      FreeBSD: ""
      Debian: |
        ES_PATH_CONF={{ opensearch_conf_dir }}
        ES_STARTUP_SLEEP_TIME=5
      RedHat: |
        ES_PATH_CONF={{ opensearch_conf_dir }}
        ES_STARTUP_SLEEP_TIME=5
    opensearch_flags: "{{ os_opensearch_flags[ansible_os_family] }}"
    os_opensearch_jvm_options:
      FreeBSD: ""
      Debian: |
        # voir opensearch-tar-install.sh
        # /usr/bin/getconf CLK_TCK`
        -Dclk.tck=100
        -Djdk.attach.allowAttachSelf=true
        -Djava.security.policy={{ opensearch_root_dir }}/plugins/opensearch-performance-analyzer/pa_config/opensearch_security.policy
      RedHat: |
        # /usr/bin/getconf CLK_TCK`
        -Dclk.tck=100
        -Djdk.attach.allowAttachSelf=true
        -Djava.security.policy={{ opensearch_root_dir }}/plugins/opensearch-performance-analyzer/pa_config/opensearch_security.policy

    os_opensearch_http_auth:
      FreeBSD:
        url_username: admin
        url_password: admin
        ca_path: "{{ role_path }}/files/test/certs/root-ca.pem"
        validate_certs: yes
      Debian:
        client_cert: "{{ role_path }}/files/test/certs/admin.pem"
        client_key: "{{ role_path }}/files/test/certs/admin-key.pem"
        # XXX la version d'ansible sur Ubuntu est 2.9.6. De ce fait, ca_path
        # ne peut pas être utilisé.
        validate_certs: no
      RedHat:
        client_cert: "{{ role_path }}/files/test/certs/admin.pem"
        client_key: "{{ role_path }}/files/test/certs/admin-key.pem"
        validate_certs: no
    opensearch_http_auth: "{{ os_opensearch_http_auth[ansible_os_family] }}"
    opensearch_jvm_options: "{{ lookup('file', 'test/jvm_options') + os_opensearch_jvm_options[ansible_os_family] }}"
    opensearch_config:
      discovery.type: single-node
      network.publish_host: ["10.0.2.15"]
      path.data: "{{ opensearch_db_dir }}"
      http.port: "{{ opensearch_http_port }}"
      path.logs: "{{ opensearch_log_dir }}"
      node.data: "true"
      http.compression: "true"
      network.host:
        - "{{ opensearch_http_host }}"
        - _site_
      cluster.name: testcluster
      node.name: testnode
      http.cors.enabled: "true"
      http.cors.allow-origin: "*"
      http.cors.max-age: 86400
      http.cors.allow-methods: "OPTIONS, HEAD, GET, POST, PUT, DELETE"
      http.cors.allow-headers: "X-Requested-With, Content-Type, Content-Length"
      http.cors.allow-credentials: "true"
      # _________________________TLS
      plugins.security.ssl.transport.pemcert_filepath: node.pem
      plugins.security.ssl.transport.pemkey_filepath: node-key.pem
      plugins.security.ssl.transport.pemtrustedcas_filepath: root-ca.pem
      plugins.security.ssl.transport.enforce_hostname_verification: false
      plugins.security.ssl.http.enabled: true
      plugins.security.ssl.http.pemcert_filepath: node.pem
      plugins.security.ssl.http.pemkey_filepath: node-key.pem
      plugins.security.ssl.http.pemtrustedcas_filepath: root-ca.pem
      plugins.security.allow_unsafe_democertificates: true
      plugins.security.allow_default_init_securityindex: true
      plugins.security.authcz.admin_dn:
        # XXX utiliser un CN différent pour admin_dn et nodes_dn. lorsque admin_dn ==
        # nodes_dn, c'est une erreur.
        - CN=Admin,O=Internet Widgits Pty Ltd,ST=Some-State,C=AU
      plugins.security.nodes_dn:
        - CN=localhost,O=Internet Widgits Pty Ltd,ST=Some-State,C=AU

      plugins.security.advanced_modules_enabled: false
      plugins.security.audit.type: internal_opensearch
      plugins.security.enable_snapshot_restore_privilege: true
      plugins.security.check_snapshot_restore_write_privileges: true
      plugins.security.restapi.roles_enabled: ["all_access", "security_rest_api_access"]
      plugins.security.system_indices.enabled: true
      plugins.security.system_indices.indices: [".opendistro-alerting-config", ".opendistro-alerting-alert*", ".opendistro-anomaly-results*", ".opendistro-anomaly-detector*", ".opendistro-anomaly-checkpoints", ".opendistro-anomaly-detection-state", ".opendistro-reports-*", ".opendistro-notifications-*", ".opendistro-notebooks", ".opendistro-asynchronous-search-response*"]

      plugins.security.disabled: false
      cluster.routing.allocation.disk.threshold_enabled: false

    project_security_plugin_dir: "{{ opensearch_plugins_dir }}/opensearch-security"
    project_securityadmin_bin: "{{ project_security_plugin_dir }}/tools/securityadmin.sh"
    project_security_plugin_post_command:
      cmd: "{{ project_securityadmin_bin }} -icl -nhnv -cacert {{ opensearch_conf_dir }}/root-ca.pem -cert {{ opensearch_conf_dir }}/admin.pem -key {{ opensearch_conf_dir }}/admin-key.pem"
      args:
        chdir: "{{ project_security_plugin_dir }}/securityconfig"
      enabled: "{% if 1 == 1 %}yes{% else %}no{% endif %}"

    opensearch_plugins: []
    opensearch_extra_plugin_files:
      - path: opensearch-security/securityconfig/action_groups.yml
        type: yaml
        mode: "0640"
        group: "{{ opensearch_user }}"
        content: "{{ lookup('file', 'test/securityconfig/action_groups.yml') | from_yaml }}"
        post_command: "{{ project_security_plugin_post_command }}"
      - path: opensearch-security/securityconfig/audit.yml
        type: yaml
        mode: "0640"
        group: "{{ opensearch_user }}"
        content: "{{ lookup('file', 'test/securityconfig/audit.yml') | from_yaml }}"
        post_command: "{{ project_security_plugin_post_command }}"
      - path: opensearch-security/securityconfig/config.yml
        type: yaml
        mode: "0640"
        group: "{{ opensearch_user }}"
        content: "{{ lookup('file', 'test/securityconfig/config.yml') | from_yaml }}"
        post_command: "{{ project_security_plugin_post_command }}"
      - path: opensearch-security/securityconfig/internal_users.yml
        type: yaml
        mode: "0640"
        group: "{{ opensearch_user }}"
        content: "{{ lookup('file', 'test/securityconfig/internal_users.yml') | from_yaml }}"
        post_command: "{{ project_security_plugin_post_command }}"
      - path: opensearch-security/securityconfig/nodes_dn.yml
        type: yaml
        mode: "0640"
        group: "{{ opensearch_user }}"
        content: "{{ lookup('file', 'test/securityconfig/nodes_dn.yml') | from_yaml }}"
        post_command: "{{ project_security_plugin_post_command }}"
      - path: opensearch-security/securityconfig/roles.yml
        type: yaml
        mode: "0640"
        group: "{{ opensearch_user }}"
        content: "{{ lookup('file', 'test/securityconfig/roles.yml') | from_yaml }}"
        post_command: "{{ project_security_plugin_post_command }}"
      - path: opensearch-security/securityconfig/roles_mapping.yml
        type: yaml
        mode: "0640"
        group: "{{ opensearch_user }}"
        content: "{{ lookup('file', 'test/securityconfig/roles_mapping.yml') | from_yaml }}"
        post_command: "{{ project_security_plugin_post_command }}"
      - path: opensearch-security/securityconfig/tenants.yml
        type: yaml
        mode: "0640"
        group: "{{ opensearch_user }}"
        content: "{{ lookup('file', 'test/securityconfig/tenants.yml') | from_yaml }}"
        post_command: "{{ project_security_plugin_post_command }}"
      - path: opensearch-security/securityconfig/whitelist.yml
        type: yaml
        mode: "0640"
        group: "{{ opensearch_user }}"
        content: "{{ lookup('file', 'test/securityconfig/whitelist.yml') | from_yaml }}"
        post_command: "{{ project_security_plugin_post_command }}"

    opensearch_config_log4j2_properties: "{{ lookup('file', 'test/log4j2_properties') }}"

    x509_certificate_debug_log: yes
    x509_certificate:
      - name: node
        state: present
        public:
          path: "{{ opensearch_conf_dir }}/node.pem"
          mode: "0444"
          key: "{{ lookup('file', 'test/certs/node.pem') }}"
        secret:
          path: "{{ opensearch_conf_dir }}/node-key.pem"
          owner: "{{ opensearch_user }}"
          group: "{{ opensearch_group }}"
          mode: "0600"
          key: "{{ lookup('file', 'test/certs/node-key.pem') }}"
      - name: root-ca
        state: present
        public:
          path: "{{ opensearch_conf_dir }}/root-ca.pem"
          key: "{{ lookup('file', 'test/certs/root-ca.pem') }}"
        secret:
          path: "{{ opensearch_conf_dir }}/root-ca-key.pem"
          owner: "{{ opensearch_user }}"
          group: "{{ opensearch_group }}"
          key: "{{ lookup('file', 'test/certs/root-ca-key.pem') }}"
      - name: admin
        state: present
        public:
          path: "{{ opensearch_conf_dir }}/admin.pem"
          key: "{{ lookup('file', 'test/certs/admin.pem') }}"
        secret:
          path: "{{ opensearch_conf_dir }}/admin-key.pem"
          owner: "{{ opensearch_user }}"
          group: "{{ opensearch_group }}"
          key: "{{ lookup('file', 'test/certs/admin-key.pem') }}"

    # _____________________________________________opensearch-dashboards
    opensearch_dashboards_config:
      server.host: "{{ opensearch_dashboards_bind_address }}"
      server.port: "{{ opensearch_dashboards_bind_port }}"
      server.name: "OpenSearch Dashboards"
      logging.dest: "{% if ansible_os_family == 'FreeBSD' %}/var/log/opensearch_dashboards.log{% else %}{{ opensearch_dashboards_log_file }}{% endif %}"
      logging.verbose: true
      opensearch.hosts: ["https://localhost:9200"]
      path.data: "{{ opensearch_dashboards_data_dir }}"
      opensearch.ssl.verificationMode: none
      opensearch.username: "kibanaserver"
      opensearch.password: "kibanaserver"
      opensearch_security.multitenancy.enabled: true
      opensearch_security.multitenancy.tenants.preferred: ["Private", "Global"]
      opensearch_security.readonly_mode.roles: ["kibana_read_only"]
      opensearch_security.cookie.secure: false
    # _____________________________________________haproxy
    project_backend_host: 127.0.0.1
    project_backend_port: 5601
    os_haproxy_selinux_seport:
      FreeBSD: {}
      Debian: {}
      RedHat:
        ports:
          - 80
          - 5601
        proto: tcp
        setype: http_port_t
    haproxy_selinux_seport: "{{ os_haproxy_selinux_seport[ansible_os_family] }}"
    haproxy_config: |
      global
        daemon
      {% if ansible_os_family != 'RedHat' %}
        log 127.0.0.1:5140 len 65535 format rfc3164 local0 info
      {% else %}
        log 127.0.0.1:5140 len 65535 local2
        log-send-hostname
      {% endif %}

      {% if ansible_os_family == 'FreeBSD' %}
        maxconn 4096
        user {{ haproxy_user }}
        group {{ haproxy_group }}
      {% elif ansible_os_family == 'Debian' %}
        chroot {{ haproxy_chroot_dir }}
        stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
        stats timeout 30s
        user {{ haproxy_user }}
        group {{ haproxy_group }}

        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private

        ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
        ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256
        ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-tickets
      {% elif ansible_os_family == 'OpenBSD' %}
        maxconn 1024
        chroot {{ haproxy_chroot_dir }}
        uid 604
        gid 604
        pidfile /var/run/haproxy.pid
      {% elif ansible_os_family == 'RedHat' %}
        chroot /var/lib/haproxy
        pidfile /var/run/haproxy.pid
        maxconn 4000
        user haproxy
        group haproxy
        daemon
      {% endif %}

      defaults
        log global
        mode http
        timeout connect 5s
        timeout client 10s
        timeout server 10s
        retries 3
        maxconn 2000
      {% if ansible_os_family == 'Debian' %}
        errorfile 400 /etc/haproxy/errors/400.http
        errorfile 403 /etc/haproxy/errors/403.http
        errorfile 408 /etc/haproxy/errors/408.http
        errorfile 500 /etc/haproxy/errors/500.http
        errorfile 502 /etc/haproxy/errors/502.http
        errorfile 503 /etc/haproxy/errors/503.http
        errorfile 504 /etc/haproxy/errors/504.http
      {% elif ansible_os_family == 'OpenBSD' %}
        option redispatch
      {% endif %}

      frontend http-in
        bind *:80
        default_backend servers
        unique-id-format %{+X}o\ %ci:%cp_%fi:%fp_%Ts_%rt:%pid
      {% if ansible_os_family != 'RedHat' %}
        http-request capture req.fhdr(Host) len 128
        http-request capture req.fhdr(Referer) len 1024
        http-request capture req.fhdr(User-Agent) len 1024
        http-request capture req.fhdr(Accept) len 1024
      {% else %}
        capture request header Host len 128
        capture request header Referer len 1024
        capture request header User-Agent len 1024
        capture request header Accept len 1024
      {% endif %}
      {% if ansible_os_family != 'RedHat' %}
        log-format '{"bytes_read":%B}'
      {% else %}
        log-format {"bytes_read":%B,"hostname":"%H","unique-id":"%ID","status_code":%ST,"gmt_date_time":"%T","timestamp":%Ts,"bytes_uploaded":%U,"backend_name":"%b","beconn":%bc,"backend_queue":%bq,"client_ip":"%ci","client_port":%cp,"frontend_name":"%f","frontend_ip":"%fi","frontend_port":%fp,"ssl":{"ciphers":"%sslc","version":"%sslv"},"request":{"headers":"%hr"}}
      {% endif %}

      backend servers
        option forwardfor
        server server1 {{ project_backend_host }}:{{ project_backend_port }} maxconn 32 check

    os_haproxy_flags:
      FreeBSD: |
        haproxy_config="{{ haproxy_conf_file }}"
      Debian: |
        #CONFIG="/etc/haproxy/haproxy.cfg"
      OpenBSD: ""
      RedHat: |
        OPTIONS=""
    haproxy_flags: "{{ os_haproxy_flags[ansible_os_family] }}"

    # _____________________________________________fluentd
    fluentd_system_config: |
      log_level debug
      suppress_config_dump
    fluentd_configs:
      input_udp_1514:
        enabled: yes
        config: |
          <source>
            @type syslog
            @label @forward
            port 1514
            bind 127.0.0.1
            tag syslog
            severity_key severity
            <parse>
              message_format rfc5424
              with_priority true
            </parse>
          </source>

      input_udp_5140:
        enabled: true
        config: |
          <source>
            @type syslog
            @label @haproxy
            port 5140
            bind 127.0.0.1
            tag haproxy
            severity_key severity
            <parse>
              message_format rfc3164
            </parse>
          </source>

      outout_default:
        enabled: yes
        config: |
          <label @forward>
            <match **>
              @type elasticsearch
              host localhost
              port 9200
              scheme https
              ssl_version TLSv1_2
              user "logstash"
              password "logstash"
              with_transporter_log true
              ca_file {{ opensearch_conf_dir }}/root-ca.pem
              ssl_verify true
              logstash_format true
              verify_es_version_at_startup false
              default_elasticsearch_version 7

              <buffer>
                timekey 1d
                timekey_use_utc true
                timekey_wait 10m
              </buffer>
            </match>
          </label>
    fluentd_gems:
      - name: elasticsearch-transport
        version: 7.13.3
        state: present
      - name: elasticsearch-api
        version: 7.13.3
        state: present
      - name: elasticsearch
        version: 7.13.3
        state: present
      - name: fluent-plugin-elasticsearch
        version: 5.1.0
        state: present

    os_fluentd_flags:
      FreeBSD: |
        fluentd_flags="-p {{ fluentd_plugin_dir }} --log {{ fluentd_log_file }}"
      Debian: |
        TD_AGENT_LOG_FILE="{{ fluentd_log_file }}"
        TD_AGENT_OPTIONS="-p {{ fluentd_plugin_dir }}"
        STOPTIMEOUT=180
      RedHat: |
        TD_AGENT_LOG_FILE="{{ fluentd_log_file }}"
        TD_AGENT_OPTIONS=""
      OpenBSD: "--daemon /var/run/fluentd/fluentd.pid --config {{ fluentd_config_file }} -p {{ fluentd_plugin_dir }} --log {{ fluentd_log_file }}"
    fluentd_flags: "{{ os_fluentd_flags[ansible_os_family] }}"

    # _____________________________________________apt
    apt_repo_keys_to_add:
      - https://packages.treasuredata.com/GPG-KEY-td-agent
    apt_repo_to_add:
      - "deb http://packages.treasuredata.com/4/ubuntu/{{ ansible_distribution_release }}/ {{ ansible_distribution_release }} contrib"
    # _____________________________________________redhat_repo
    redhat_repo:
      treasuredata:
        baseurl: http://packages.treasuredata.com/4/redhat/$releasever/$basearch
        gpgkey: https://packages.treasuredata.com/GPG-KEY-td-agent

Licence

Copyright (c) 2019 Tomoyuki Sakurai <[email protected]>

La permission d'utiliser, copier, modifier et distribuer ce logiciel pour tout
objectif, avec ou sans frais, est ici accordée, à condition que l'avis de copyright ci-dessus et cet avis de permission apparaissent dans toutes les copies.

LE LOGICIEL EST FOURNI "TEL QUEL" ET L'AUTEUR DÉCLINE TOUTES GARANTIES
EN CE QUI CONCERNE CE LOGICIEL, Y COMPRIS TOUTES GARANTIES IMPLICITES DE
COMMERCIALITÉ ET D'ADÉQUATION. EN AUCUN CAS, L'AUTEUR NE SAURAIT ÊTRE TENUE RESPONSABLE DE
TOUS DOMMAGES SPÉCIAUX, DIRECTS, INDIRECTS OU CONSÉCUTIFS, OU DE TOUS DOMMAGES
QUELCONQUES RÉSULTANT D'UNE PERTE D'UTILISATION, DE DONNÉES OU DE PROFITS, QUE CE SOIT DANS
LE CADRE D'UN CONTRAT, D'UNE NÉGLIGENCE OU D'AUTRE ACTION TORTUEUSE, DÉCOULANT DE
OU EN RELATION AVEC L'UTILISATION OU LA PERFORMANCE DE CE LOGICIEL.

Informations sur l'auteur

Tomoyuki Sakurai y@trombik.org

Ce README a été créé par qansible

À propos du projet

Configures opensearch

Installer
ansible-galaxy install trombik.opensearch
Licence
isc
Téléchargements
156
Propriétaire
PGP finger print: 03EB 3D97 5E04 9B0C AB21 93A2 D693 42A9 EFBC 3577 Makerspace and Coliving in Siem Reap, Cambodia: http://info.mkrsgh.org/