Skip to content

infOpen/ansible-role-elasticsearch

Repository files navigation

elasticsearch

Build Status

Install elasticsearch package.

Requirements

This role requires Ansible 2.1 or higher, and platform requirements are listed in the metadata file.

Testing

This role has some testing methods:

Automatically with Travis

Tests runs automatically on Travis on push, release, pr, ... using docker testing containers

Locally with Docker

You can use Docker to run tests on ephemeral containers.

make test-docker

Locally with Vagrant

You can use Vagrant to run tests on virtual machines.

make test-vagrant

Role Variables

Defaults variables

# Package variables
#------------------
elasticsearch_package_state: 'latest'

# Service variables
#------------------
elasticsearch_service_state: 'started'
elasticsearch_service_enabled: True
elasticsearch_apt_cache_valid_time: 3600

# Elacticsearch default version
elasticsearch_version: '2.3'

# Elasticsearch config files name
elasticsearch_main_file: 'elasticsearch.yml'
elasticsearch_logging_file: 'logging.yml'
elasticsearch_logrotate_file: 'logrotate.j2'

# User and group management
elasticsearch_user_name: 'elasticsearch'
elasticsearch_group_name: 'elasticsearch'

# Configuration files and folders properties
elasticsearch_etc_files_owner: "{{ elasticsearch_user_name }}"
elasticsearch_etc_files_group: "{{ elasticsearch_group_name }}"
elasticsearch_etc_files_mode: '0400'
elasticsearch_etc_folders_owner: "{{ elasticsearch_user_name }}"
elasticsearch_etc_folders_group: "{{ elasticsearch_group_name }}"
elasticsearch_etc_folders_mode: '0500'

# Data and logs folders properties
elasticsearch_data_folders_owner: "{{ elasticsearch_user_name }}"
elasticsearch_data_folders_group: "{{ elasticsearch_group_name }}"
elasticsearch_data_folders_mode: '0700'
elasticsearch_log_folders_owner: "{{ elasticsearch_user_name }}"
elasticsearch_log_folders_group: "{{ elasticsearch_group_name }}"
elasticsearch_log_folders_mode: '0700'


# Sysctl virtual memory setting
elasticsearch_sysctl_rules:
  - name: 'vm.max_map_count'
    value: 262144
    state: 'present'


# Security limits rules
elasticsearch_limits_rules:
  - 'elasticsearch soft memlock unlimited'
  - 'elasticsearch hard memlock unlimited'


# Elasticsearch paths
elasticsearch_folders:
  conf: '/etc/elasticsearch'
  data:
    - '/var/lib/elasticsearch'
  home: '/usr/share/elasticsearch'
  log: '/var/log/elasticsearch'
  pid: '/var/run/elasticsearch'
  work: '/tmp/elasticsearch'


# Default configuration file
#---------------------------
elasticsearch_etc_default_start_daemon: 'true'
elasticsearch_etc_default_heap_size: '1g'
elasticsearch_etc_default_heap_new_size: ''
elasticsearch_etc_default_direct_size: ''
elasticsearch_etc_default_max_open_files: 65536
elasticsearch_etc_default_max_locked_memory: 'unlimited'
elasticsearch_etc_default_max_map_count: 262144
elasticsearch_etc_default_log_dir: "{{ elasticsearch_folders.log }}"
elasticsearch_etc_default_data_dir: "{{ elasticsearch_folders.data }}"
elasticsearch_etc_default_work_dir: "{{ elasticsearch_folders.work }}"
elasticsearch_etc_default_conf_dir: "{{ elasticsearch_folders.conf }}"
elasticsearch_etc_default_conf_file: "{{ elasticsearch_folders.conf ~ '/elasticsearch.yml' }}"
elasticsearch_etc_default_java_opts: []
elasticsearch_etc_default_restart_on_upgrade: 'true'


# Main configuration file
#------------------------

# Cluster
elasticsearch_cluster_name: 'elasticsearch'

# Node
elasticsearch_node_name: "{{ ansible_hostname }}"
elasticsearch_custom_var: {}

# Paths
elasticsearch_path_data: "{{ elasticsearch_etc_default_data_dir }}"
elasticsearch_path_logs: "{{ elasticsearch_etc_default_log_dir }}"

# Memory
elasticsearch_bootstrap_mlockall: 'true'

# Network
elasticsearch_network_host: '127.0.0.1'
elasticsearch_http_port: 9200

# Discovery
elasticsearch_discovery_zen_minimum_master_nodes: 1
elasticsearch_discovery_zen_ping_unicast_hosts: []

# Gateway
elasticsearch_gateway_recover_after_nodes: 1

# Various
elasticsearch_various_node_max_local_storage_nodes: 1
elasticsearch_various_action_destructive_requires_name: 'true'


# Logging configuration file
#---------------------------

elasticsearch_logging:
  es.logger.level: INFO
  rootLogger: ${es.logger.level}, console, file
  logger:
    action: DEBUG
    deprecation: INFO, deprecation_log_file
    com.amazonaws: WARN
    com.amazonaws.jmx.SdkMBeanRegistrySupport: ERROR
    com.amazonaws.metrics.AwsSdkMetrics: ERROR
    org.apache.http: INFO
    index.search.slowlog: TRACE, index_search_slow_log_file
    index.indexing.slowlog: TRACE, index_indexing_slow_log_file

  additivity:
    index.search.slowlog: false
    index.indexing.slowlog: false
    deprecation: false

  appender:
    console:
      type: console
      layout:
        type: consolePattern
        conversionPattern: "[%d{ISO8601}][%-5p][%-25c] %m%n"

    file:
      type: file
      file: ${path.logs}/${cluster.name}.log
      layout:
        type: pattern
        conversionPattern: "[%d{ISO8601}][%-5p][%-25c] %.10000m%n"

    deprecation_log_file:
      type: file
      file: ${path.logs}/${cluster.name}_deprecation.log
      layout:
        type: pattern
        conversionPattern: "[%d{ISO8601}][%-5p][%-25c] %m%n"

    index_search_slow_log_file:
      type: file
      file: ${path.logs}/${cluster.name}_index_search_slowlog.log
      layout:
        type: pattern
        conversionPattern: "[%d{ISO8601}][%-5p][%-25c] %m%n"

    index_indexing_slow_log_file:
      type: file
      file: ${path.logs}/${cluster.name}_index_indexing_slowlog.log
      layout:
        type: pattern
        conversionPattern: "[%d{ISO8601}][%-5p][%-25c] %m%n"


# Logrotate settings
#-------------------
elasticsearch_logrotate_rules:
  - 'daily'
  - 'dateext'
  - 'dateformat _%Y-%m-%d'
  - 'rotate 31'
  - 'copytruncate'
  - 'compress'
  - 'delaycompress'
  - 'missingok'
  - "create 644 {{ elasticsearch_user_name }} {{ elasticsearch_group_name }}"

Specific OS family vars

# Debian
elasticsearch_packages :
  - elasticsearch
elasticsearch_service_name: elasticsearch

Dependencies

- role: infOpen.openjdk-jre
  openjdk_jre_version: 8

Example Playbook

Including an example of how to use your role (for instance, with variables passed in as parameters) is always nice for users too:

- hosts: servers
  roles:
     - { role: infOpen.elasticsearch }

License

MIT

Author Information

Alexandre Chaussier (for Infopen company)