Merge "Add a possibility to deploy Elasticsearch 5.x version"
diff --git a/elasticsearch/client/init.sls b/elasticsearch/client/init.sls
index c950026..c169e97 100644
--- a/elasticsearch/client/init.sls
+++ b/elasticsearch/client/init.sls
@@ -39,9 +39,10 @@
{%- if index.get('force_operation', False) %}
elasticsearch_index_{{ index_name }}_{{ operation }}:
+ {% set curdate = None | strftime('%Y.%m.%d') %}
module.run:
- name: elasticsearch.index_{{ operation }}
- - index: {{ index_name }}
+ - index: {{ index_name }}-{{ curdate }}
{%- endif %}
{%- endfor %}
diff --git a/elasticsearch/files/elasticsearch b/elasticsearch/files/v2/elasticsearch
similarity index 100%
rename from elasticsearch/files/elasticsearch
rename to elasticsearch/files/v2/elasticsearch
diff --git a/elasticsearch/files/elasticsearch.yml b/elasticsearch/files/v2/elasticsearch.yml
similarity index 100%
rename from elasticsearch/files/elasticsearch.yml
rename to elasticsearch/files/v2/elasticsearch.yml
diff --git a/elasticsearch/files/es_template_audit.json b/elasticsearch/files/v2/es_template_audit.json
similarity index 100%
rename from elasticsearch/files/es_template_audit.json
rename to elasticsearch/files/v2/es_template_audit.json
diff --git a/elasticsearch/files/es_template_kibana4.json b/elasticsearch/files/v2/es_template_kibana.json
similarity index 100%
rename from elasticsearch/files/es_template_kibana4.json
rename to elasticsearch/files/v2/es_template_kibana.json
diff --git a/elasticsearch/files/es_template_log.json b/elasticsearch/files/v2/es_template_log.json
similarity index 100%
rename from elasticsearch/files/es_template_log.json
rename to elasticsearch/files/v2/es_template_log.json
diff --git a/elasticsearch/files/es_template_notification.json b/elasticsearch/files/v2/es_template_notification.json
similarity index 100%
rename from elasticsearch/files/es_template_notification.json
rename to elasticsearch/files/v2/es_template_notification.json
diff --git a/elasticsearch/files/logging.yml b/elasticsearch/files/v2/logging.yml
similarity index 100%
rename from elasticsearch/files/logging.yml
rename to elasticsearch/files/v2/logging.yml
diff --git a/elasticsearch/files/v5/elasticsearch b/elasticsearch/files/v5/elasticsearch
new file mode 100644
index 0000000..1836246
--- /dev/null
+++ b/elasticsearch/files/v5/elasticsearch
@@ -0,0 +1,76 @@
+{%- from "elasticsearch/map.jinja" import server with context -%}
+################################
+# Elasticsearch
+################################
+
+# Elasticsearch home directory
+#ES_HOME=/usr/share/elasticsearch
+
+# Elasticsearch configuration directory
+#CONF_DIR=/etc/elasticsearch
+
+# Elasticsearch data directory
+#DATA_DIR=/var/lib/elasticsearch
+
+# Elasticsearch logs directory
+#LOG_DIR=/var/log/elasticsearch
+
+# Elasticsearch PID directory
+#PID_DIR=/var/run/elasticsearch
+
+# Heap size defaults to 256m min, 1g max
+# Set ES_HEAP_SIZE to 50% of available RAM, but no more than 31g
+#ES_HEAP_SIZE={{ server.get('heap', {}).get('size', grains.get('mem_total', 1024)/2/1024)|round(0, 'ceil')|int }}g
+
+# Heap new generation
+#ES_HEAP_NEWSIZE=
+
+# Maximum direct memory
+#ES_DIRECT_SIZE=
+
+# Additional Java OPTS
+#ES_JAVA_OPTS=
+
+# Configure restart on package upgrade (true, every other setting will lead to not restarting)
+#ES_RESTART_ON_UPGRADE=true
+
+# Path to the GC log file
+#ES_GC_LOG_FILE=/var/log/elasticsearch/gc.log
+
+################################
+# Elasticsearch service
+################################
+
+# SysV init.d
+#
+# When executing the init script, this user will be used to run the elasticsearch service.
+# The default value is 'elasticsearch' and is declared in the init.d file.
+# Note that this setting is only used by the init script. If changed, make sure that
+# the configured user can read and write into the data, work, plugins and log directories.
+# For systemd service, the user is usually configured in file /usr/lib/systemd/system/elasticsearch.service
+#ES_USER=elasticsearch
+#ES_GROUP=elasticsearch
+
+# The number of seconds to wait before checking if Elasticsearch started successfully as a daemon process
+ES_STARTUP_SLEEP_TIME=5
+
+################################
+# System properties
+################################
+
+# Specifies the maximum file descriptor number that can be opened by this process
+# When using Systemd, this setting is ignored and the LimitNOFILE defined in
+# /usr/lib/systemd/system/elasticsearch.service takes precedence
+MAX_OPEN_FILES=131070
+
+# The maximum number of bytes of memory that may be locked into RAM
+# Set to "unlimited" if you use the 'bootstrap.mlockall: true' option
+# in elasticsearch.yml (ES_HEAP_SIZE must also be set).
+# When using Systemd, the LimitMEMLOCK property must be set
+# in /usr/lib/systemd/system/elasticsearch.service
+MAX_LOCKED_MEMORY=unlimited
+
+# Maximum number of VMA (Virtual Memory Areas) a process can own
+# When using Systemd, this setting is ignored and the 'vm.max_map_count'
+# property is set at boot time in /usr/lib/sysctl.d/elasticsearch.conf
+#MAX_MAP_COUNT=262144
diff --git a/elasticsearch/files/v5/elasticsearch.yml b/elasticsearch/files/v5/elasticsearch.yml
new file mode 100644
index 0000000..ac1122f
--- /dev/null
+++ b/elasticsearch/files/v5/elasticsearch.yml
@@ -0,0 +1,436 @@
+{%- from "elasticsearch/map.jinja" import server with context %}
+
+##################### Elasticsearch Configuration Example #####################
+
+# This file contains an overview of various configuration settings,
+# targeted at operations staff. Application developers should
+# consult the guide at <http://elasticsearch.org/guide>.
+#
+# The installation procedure is covered at
+# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/setup.html>.
+#
+# Elasticsearch comes with reasonable defaults for most settings,
+# so you can try it out without bothering with configuration.
+#
+# Most of the time, these defaults are just fine for running a production
+# cluster. If you're fine-tuning your cluster, or wondering about the
+# effect of certain configuration option, please _do ask_ on the
+# mailing list or IRC channel [http://elasticsearch.org/community].
+
+# Any element in the configuration can be replaced with environment variables
+# by placing them in ${...} notation. For example:
+#
+# node.rack: ${RACK_ENV_VAR}
+
+# For information on supported formats and syntax for the config file, see
+# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/setup-configuration.html>
+
+
+################################### Cluster ###################################
+
+# Cluster name identifies your cluster for auto-discovery. If you're running
+# multiple clusters on the same network, make sure you're using unique names.
+#
+# cluster.name: elasticsearch
+{%- if server.get('cluster', {}).name is defined %}
+cluster.name: {{ server.cluster.name }}
+{% endif %}
+#################################### Node #####################################
+
+# Node names are generated dynamically on startup, so you're relieved
+# from configuring them manually. You can tie this node to a specific name:
+#
+# node.name: "Franz Kafka"
+node.name: {{ server.get('name', '${HOSTNAME}') }}
+
+# Every node can be configured to allow or deny being eligible as the master,
+# and to allow or deny to store the data.
+#
+# Allow this node to be eligible as a master node (enabled by default):
+#
+node.master: {{ server.get('master', True)|lower }}
+#
+# Allow this node to store data (enabled by default):
+#
+node.data: {{ server.get('data', True)|lower }}
+
+# You can exploit these settings to design advanced cluster topologies.
+#
+# 1. You want this node to never become a master node, only to hold data.
+# This will be the "workhorse" of your cluster.
+#
+# node.master: false
+# node.data: true
+#
+# 2. You want this node to only serve as a master: to not store any data and
+# to have free resources. This will be the "coordinator" of your cluster.
+#
+# node.master: true
+# node.data: false
+#
+# 3. You want this node to be neither master nor data node, but
+# to act as a "search load balancer" (fetching data from nodes,
+# aggregating results, etc.)
+#
+# node.master: false
+# node.data: false
+
+# Use the Cluster Health API [http://localhost:9200/_cluster/health], the
+# Node Info API [http://localhost:9200/_nodes] or GUI tools
+# such as <http://www.elasticsearch.org/overview/marvel/>,
+# <http://github.com/karmi/elasticsearch-paramedic>,
+# <http://github.com/lukas-vlcek/bigdesk> and
+# <http://mobz.github.com/elasticsearch-head> to inspect the cluster state.
+
+# A node can have generic attributes associated with it, which can later be used
+# for customized shard allocation filtering, or allocation awareness. An attribute
+# is a simple key value pair, similar to node.key: value, here is an example:
+#
+# node.rack: rack314
+{%- if server.rack is defined %}
+node.rack: {{ server.rack }}
+{%- endif %}
+
+# By default, multiple nodes are allowed to start from the same installation location
+# to disable it, set the following:
+# node.max_local_storage_nodes: 1
+
+{%- if server.get('threadpool', {}).get('bulk', {}).queue_size is defined %}
+# For bulk operations. Thread pool type is fixed with a size of # of available processors.
+thread_pool.bulk.queue_size: {{ server.threadpool.bulk.queue_size }}
+{%- endif %}
+
+#################################### Index ####################################
+
+# You can set a number of options (such as shard/replica options, mapping
+# or analyzer definitions, translog settings, ...) for indices globally,
+# in this file.
+#
+# Note, that it makes more sense to configure index settings specifically for
+# a certain index, either when creating it or by using the index templates API.
+#
+# See <http://elasticsearch.org/guide/en/elasticsearch/reference/current/index-modules.html> and
+# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/indices-create-index.html>
+# for more information.
+
+# Set the number of shards (splits) of an index (5 by default):
+#
+#index.number_of_shards: {{ server.get('index', {}).get('shards', 5) }}
+
+# Set the number of replicas (additional copies) of an index (1 by default):
+#
+#index.number_of_replicas: {{ server.get('index', {}).get('replicas', 1) }}
+
+# Note, that for development on a local machine, with small indices, it usually
+# makes sense to "disable" the distributed features:
+#
+# index.number_of_shards: 1
+# index.number_of_replicas: 0
+
+# These settings directly affect the performance of index and search operations
+# in your cluster. Assuming you have enough machines to hold shards and
+# replicas, the rule of thumb is:
+#
+# 1. Having more *shards* enhances the _indexing_ performance and allows to
+# _distribute_ a big index across machines.
+# 2. Having more *replicas* enhances the _search_ performance and improves the
+# cluster _availability_.
+#
+# The "number_of_shards" is a one-time setting for an index.
+#
+# The "number_of_replicas" can be increased or decreased anytime,
+# by using the Index Update Settings API.
+#
+# Elasticsearch takes care about load balancing, relocating, gathering the
+# results from nodes, etc. Experiment with different settings to fine-tune
+# your setup.
+
+# Use the Index Status API (<http://localhost:9200/A/_status>) to inspect
+# the index status.
+
+
+#################################### Paths ####################################
+
+# Path to directory containing configuration (this file and log4j2.properties):
+#
+# path.conf: /path/to/conf
+
+# Path to directory where to store index data allocated for this node.
+#
+# path.data: /path/to/data
+{%- if server.get('path', {}).data is defined %}
+path.data: {{ server.path.data }}
+{%- endif %}
+#
+# Can optionally include more than one location, causing data to be striped across
+# the locations (a la RAID 0) on a file level, favouring locations with most free
+# space on creation. For example:
+#
+# path.data: /path/to/data1,/path/to/data2
+
+# Path to temporary files:
+#
+# path.work: /path/to/work
+
+# Path to log files:
+#
+# path.logs: /path/to/logs
+{%- if server.get('path', {}).logs is defined %}
+path.logs = {{ server.path.logs }}
+{%- endif %}
+
+# Path to where plugins are installed:
+#
+# path.plugins: /path/to/plugins
+#
+{%- if server.snapshot is defined %}
+path.repo:
+ {%- for repo_name, repo in server.snapshot.iteritems() %}
+ - {{ repo.path }}
+ {%- endfor %}
+{%- endif %}
+
+
+#################################### Plugin ###################################
+
+# If a plugin listed here is not installed for current node, the node will not start.
+#
+# plugin.mandatory: mapper-attachments,lang-groovy
+
+
+################################### Memory ####################################
+
+# Elasticsearch performs poorly when JVM starts swapping: you should ensure that
+# it _never_ swaps.
+#
+# Set this property to true to lock the memory:
+#
+# bootstrap.mlockall: true
+{%- if server.mlockall is defined %}
+bootstrap.memory_lock: {{ server.mlockall|lower }}
+{%- endif %}
+
+# Make sure that the ES_MIN_MEM and ES_MAX_MEM environment variables are set
+# to the same value, and that the machine has enough memory to allocate
+# for Elasticsearch, leaving enough memory for the operating system itself.
+#
+# You should also make sure that the Elasticsearch process is allowed to lock
+# the memory, eg. by using `ulimit -l unlimited`.
+
+
+############################## Network And HTTP ###############################
+
+# Elasticsearch, by default, binds itself to the 0.0.0.0 address, and listens
+# on port [9200-9300] for HTTP traffic and on port [9300-9400] for node-to-node
+# communication. (the range means that if the port is busy, it will automatically
+# try the next port).
+
+# Set both 'bind_host' and 'publish_host':
+#
+# network.host: 192.168.0.1
+
+{%- if server.get('bind', {}).address is defined %}
+network.host: {{ server.bind.address }}
+{%- endif %}
+
+# Set specifically the address other nodes will use to communicate with this
+# node. If not set, it is automatically derived. It must point to an actual
+# IP address.
+{%- if server.publish_host is defined %}
+network.publish_host: {{ server.publish_host }}
+{%- endif %}
+
+
+# Set a custom port for the node to node communication (9300 by default):
+#
+# transport.tcp.port: 9300
+
+# Enable compression for all communication between nodes (disabled by default):
+#
+# transport.tcp.compress: true
+
+# Set a custom port to listen for HTTP traffic:
+#
+# http.port: 9200
+{%- if server.get('bind', {}).port is defined %}
+http.port: {{ server.bind.port }}
+{%- endif %}
+
+# Set a custom allowed content length:
+#
+# http.max_content_length: 100mb
+
+# Enable or disable cross-origin resource sharing
+{%- if server.get('cors', {}).enabled is defined %}
+http.cors.enabled: {{ server.cors.enabled|lower }}
+{%- endif %}
+
+# Which origins to allow.
+{%- if server.get('cors', {}).allow_origin is defined %}
+http.cors.allow-origin: {{ server.cors.allow_origin }}
+{%- endif %}
+
+# Disable HTTP completely:
+#
+# http.enabled: false
+http.enabled: true
+
+
+################################### Gateway ###################################
+
+# The gateway allows for persisting the cluster state between full cluster
+# restarts. Every change to the state (such as adding an index) will be stored
+# in the gateway, and when the cluster starts up for the first time,
+# it will read its state from the gateway.
+
+# There are several types of gateway implementations. For more information, see
+# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/modules-gateway.html>.
+
+# The default gateway type is the "local" gateway (recommended):
+#
+# gateway.type: local
+
+# Settings below control how and when to start the initial recovery process on
+# a full cluster restart (to reuse as much local data as possible when using shared
+# gateway).
+
+# Allow recovery process after N nodes in a cluster are up:
+#
+# gateway.recover_after_nodes: 1
+{%- if server.get('gateway', {}).recover_after_nodes is defined %}
+gateway.recover_after_nodes: {{ server.gateway.recover_after_nodes }}
+{%- endif %}
+
+# Set the timeout to initiate the recovery process, once the N nodes
+# from previous setting are up (accepts time value):
+#
+# gateway.recover_after_time: 5m
+{%- if server.get('gateway', {}).recover_after_time is defined %}
+gateway.recover_after_time: {{ server.gateway.recover_after_time }}
+{%- endif %}
+
+# Set how many nodes are expected in this cluster. Once these N nodes
+# are up (and recover_after_nodes is met), begin recovery process immediately
+# (without waiting for recover_after_time to expire):
+#
+# gateway.expected_nodes: 2
+{%- if server.get('gateway', {}).expected_nodes is defined %}
+gateway.expected_nodes: {{ server.gateway.expected_nodes }}
+{%- endif %}
+
+
+############################# Recovery Throttling #############################
+
+# These settings allow to control the process of shards allocation between
+# nodes during initial recovery, replica allocation, rebalancing,
+# or when adding and removing nodes.
+
+# Set the number of concurrent recoveries happening on a node:
+#
+# 1. During the initial recovery
+#
+# cluster.routing.allocation.node_initial_primaries_recoveries: 4
+#
+# 2. During adding/removing nodes, rebalancing, etc
+#
+# cluster.routing.allocation.node_concurrent_recoveries: 2
+
+# Set to throttle throughput when recovering (eg. 100mb, by default 20mb):
+#
+# indices.recovery.max_bytes_per_sec: 20mb
+
+# Set to limit the number of open concurrent streams when
+# recovering a shard from a peer:
+#
+# indices.recovery.concurrent_streams: 5
+
+
+################################## Discovery ##################################
+
+# Discovery infrastructure ensures nodes can be found within a cluster
+# and master node is elected. Multicast discovery is the default.
+
+# Set to ensure a node sees N other master eligible nodes to be considered
+# operational within the cluster. Its recommended to set it to a higher value
+# than 1 when running more than 2 nodes in the cluster.
+#
+discovery.zen.minimum_master_nodes: {{ server.get('cluster', {}).minimum_master_nodes|default(1) }}
+
+# Set the time to wait for ping responses from other nodes when discovering.
+# Set this option to a higher value on a slow or congested network
+# to minimize discovery failures:
+#
+# discovery.zen.ping.timeout: 3s
+
+# For more information, see
+# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/modules-discovery-zen.html>
+
+# Unicast discovery allows to explicitly control which nodes will be used
+# to discover the cluster. It can be used when multicast is not present,
+# or to restrict the cluster communication-wise.
+#
+# 1. Disable multicast discovery (enabled by default):
+#
+#discovery.zen.ping.multicast.enabled: {{ server.get('cluster', {}).get('multicast', True)|lower }}
+#
+# 2. Configure an initial list of master nodes in the cluster
+# to perform discovery when new nodes (master or data) are started:
+#
+{%- if server.get('cluster', {}).members is defined %}
+discovery.zen.ping.unicast.hosts: [{% for member in server.cluster.members %}"{{ member.host }}:{{ member.get('port', 9300) }}"{% if not loop.last %}, {% endif %}{% endfor %}]
+{%- endif %}
+
+# EC2 discovery allows to use AWS EC2 API in order to perform discovery.
+#
+# You have to install the cloud-aws plugin for enabling the EC2 discovery.
+#
+# For more information, see
+# <http://elasticsearch.org/guide/en/elasticsearch/reference/current/modules-discovery-ec2.html>
+#
+# See <http://elasticsearch.org/tutorials/elasticsearch-on-ec2/>
+# for a step-by-step tutorial.
+
+# GCE discovery allows to use Google Compute Engine API in order to perform discovery.
+#
+# You have to install the cloud-gce plugin for enabling the GCE discovery.
+#
+# For more information, see <https://github.com/elasticsearch/elasticsearch-cloud-gce>.
+
+# Azure discovery allows to use Azure API in order to perform discovery.
+#
+# You have to install the cloud-azure plugin for enabling the Azure discovery.
+#
+# For more information, see <https://github.com/elasticsearch/elasticsearch-cloud-azure>.
+
+################################## Slow Log ##################################
+
+# Shard level query and fetch threshold logging.
+
+#index.search.slowlog.threshold.query.warn: 10s
+#index.search.slowlog.threshold.query.info: 5s
+#index.search.slowlog.threshold.query.debug: 2s
+#index.search.slowlog.threshold.query.trace: 500ms
+
+#index.search.slowlog.threshold.fetch.warn: 1s
+#index.search.slowlog.threshold.fetch.info: 800ms
+#index.search.slowlog.threshold.fetch.debug: 500ms
+#index.search.slowlog.threshold.fetch.trace: 200ms
+
+#index.indexing.slowlog.threshold.index.warn: 10s
+#index.indexing.slowlog.threshold.index.info: 5s
+#index.indexing.slowlog.threshold.index.debug: 2s
+#index.indexing.slowlog.threshold.index.trace: 500ms
+
+################################## GC Logging ################################
+
+#monitor.jvm.gc.young.warn: 1000ms
+#monitor.jvm.gc.young.info: 700ms
+#monitor.jvm.gc.young.debug: 400ms
+
+#monitor.jvm.gc.old.warn: 10s
+#monitor.jvm.gc.old.info: 5s
+#monitor.jvm.gc.old.debug: 2s
+
+{%- if server.script is mapping %}
+script: {{ server.script|yaml }}
+{%- endif %}
diff --git a/elasticsearch/files/v5/es_template_audit.json b/elasticsearch/files/v5/es_template_audit.json
new file mode 100644
index 0000000..f4579a9
--- /dev/null
+++ b/elasticsearch/files/v5/es_template_audit.json
@@ -0,0 +1,125 @@
+{%- from "elasticsearch/map.jinja" import server with context %}
+{
+ "settings" : {
+ "number_of_shards" : {{ server.get('index', {}).get('shards', 5) }},
+ "number_of_replicas" : {{ server.get('index', {}).get('replicas', 1) }}
+ },
+ "mappings": {
+ "message": {
+ "properties": {
+ "Payload": {
+ "type": "text"
+ },
+ "Logger": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "Hostname": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "Pid": {
+ "index": "not_analyzed",
+ "type": "long"
+ },
+ "Severity": {
+ "index": "not_analyzed",
+ "type": "long"
+ },
+ "Type": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "severity_label": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "environment_label": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "region": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "action": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "event_type": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "outcome": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "notification_type": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ }
+ },
+ "template": "audit-*"
+}
diff --git a/elasticsearch/files/v5/es_template_kibana.json b/elasticsearch/files/v5/es_template_kibana.json
new file mode 100644
index 0000000..c7438d9
--- /dev/null
+++ b/elasticsearch/files/v5/es_template_kibana.json
@@ -0,0 +1,295 @@
+{%- from "elasticsearch/map.jinja" import server with context %}
+{
+ "settings" : {
+ "number_of_shards" : {{ server.get('index', {}).get('shards', 5) }},
+ "number_of_replicas" : {{ server.get('index', {}).get('replicas', 1) }}
+ },
+ "mappings" : {
+ "index-pattern" : {
+ "properties" : {
+ "fieldFormatMap" : {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "fields" : {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "intervalName" : {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "notExpandable" : {
+ "type" : "boolean"
+ },
+ "timeFieldName" : {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "title" : {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ },
+ "config" : {
+ "properties" : {
+ "buildNum" : {
+ "index" : "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ },
+ "search" : {
+ "properties" : {
+ "columns" : {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "description" : {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "hits" : {
+ "type" : "integer"
+ },
+ "kibanaSavedObjectMeta" : {
+ "properties" : {
+ "searchSourceJSON" : {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ },
+ "sort" : {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "title" : {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "version" : {
+ "type" : "integer"
+ }
+ }
+ },
+ "visualization" : {
+ "properties" : {
+ "description" : {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "kibanaSavedObjectMeta" : {
+ "properties" : {
+ "searchSourceJSON" : {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ },
+ "savedSearchId" : {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "title" : {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "uiStateJSON" : {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "version" : {
+ "type" : "integer"
+ },
+ "visState" : {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ },
+ "dashboard" : {
+ "properties" : {
+ "description" : {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "hits" : {
+ "type" : "integer"
+ },
+ "kibanaSavedObjectMeta" : {
+ "properties" : {
+ "searchSourceJSON" : {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ },
+ "optionsJSON" : {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "panelsJSON" : {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "timeFrom" : {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }}
+ },
+ "timeRestore" : {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "timeTo" : {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "title" : {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "uiStateJSON" : {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "version" : {
+ "type" : "integer"
+ }
+ }
+ }
+ },
+ "template": ".kibana"
+}
+
diff --git a/elasticsearch/files/v5/es_template_log.json b/elasticsearch/files/v5/es_template_log.json
new file mode 100644
index 0000000..5e5e2e0
--- /dev/null
+++ b/elasticsearch/files/v5/es_template_log.json
@@ -0,0 +1,228 @@
+{%- from "elasticsearch/map.jinja" import server with context %}
+{
+ "settings" : {
+ "number_of_shards" : {{ server.get('index', {}).get('shards', 5) }},
+ "number_of_replicas" : {{ server.get('index', {}).get('replicas', 1) }}
+ },
+ "mappings": {
+ "message": {
+ "properties": {
+ "Logger": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "Hostname": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "Pid": {
+ "index": "not_analyzed",
+ "type": "long"
+ },
+ "Severity": {
+ "index": "not_analyzed",
+ "type": "long"
+ },
+ "Type": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "programname": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "python_module": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "severity_label": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "environment_label": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "region": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "request_id": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tenant_id": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "user_id": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "instance_id": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "http_response_time": {
+ "type": "float"
+ },
+ "http_status": {
+ "type": "integer"
+ },
+ "http_method": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "http_url": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "http_client_ip_address": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "remote_addr": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "user_agent_browser": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "http_referer": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "user_agent_os": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "http_version": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ }
+ },
+ "template": "log-*"
+}
diff --git a/elasticsearch/files/v5/es_template_notification.json b/elasticsearch/files/v5/es_template_notification.json
new file mode 100644
index 0000000..c19c7b9
--- /dev/null
+++ b/elasticsearch/files/v5/es_template_notification.json
@@ -0,0 +1,163 @@
+{%- from "elasticsearch/map.jinja" import server with context %}
+{
+ "settings" : {
+ "number_of_shards" : {{ server.get('index', {}).get('shards', 5) }},
+ "number_of_replicas" : {{ server.get('index', {}).get('replicas', 1) }}
+ },
+ "mappings": {
+ "message": {
+ "properties": {
+ "event_type": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "Payload": {
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "Logger": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "Hostname": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "hostname": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "Pid": {
+ "index": "not_analyzed",
+ "type": "long"
+ },
+ "Severity": {
+ "index": "not_analyzed",
+ "type": "long"
+ },
+ "Timestamp": {
+ "type": "date",
+ "format": "dateOptionalTime"
+ },
+ "Type": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "severity_label": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "environment_label": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "region": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "request_id": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "tenant_id": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "user_id": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ },
+ "launched_at": {
+ "type": "date",
+ "format": "dateOptionalTime"
+ },
+ "created_at": {
+ "type": "date",
+ "format": "dateOptionalTime"
+ },
+ "publisher": {
+ "index": "not_analyzed",
+ "type": "text",
+ "fields": {
+ "keyword": {
+ "type": "keyword",
+ "ignore_above": 256
+ }
+ }
+ }
+ }
+ }
+ },
+ "template": "notification-*"
+}
diff --git a/elasticsearch/files/v5/jvm.options b/elasticsearch/files/v5/jvm.options
new file mode 100644
index 0000000..f0dd096
--- /dev/null
+++ b/elasticsearch/files/v5/jvm.options
@@ -0,0 +1,112 @@
+{%- from "elasticsearch/map.jinja" import server with context -%}
+## JVM configuration
+
+################################################################
+## IMPORTANT: JVM heap size
+################################################################
+##
+## You should always set the min and max JVM heap
+## size to the same value. For example, to set
+## the heap to 4 GB, set:
+##
+## -Xms4g
+## -Xmx4g
+##
+## See https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html
+## for more information
+##
+################################################################
+
+# Xms represents the initial size of total heap space
+# Xmx represents the maximum size of total heap space
+
+-Xms{{ server.get('heap', {}).get('size', grains.get('mem_total', 1024)/2/1024)|round(0, 'ceil')|int }}g
+-Xmx{{ server.get('heap', {}).get('size', grains.get('mem_total', 1024)/2/1024)|round(0, 'ceil')|int }}g
+
+################################################################
+## Expert settings
+################################################################
+##
+## All settings below this section are considered
+## expert settings. Don't tamper with them unless
+## you understand what you are doing
+##
+################################################################
+
+## GC configuration
+-XX:+UseConcMarkSweepGC
+-XX:CMSInitiatingOccupancyFraction=75
+-XX:+UseCMSInitiatingOccupancyOnly
+
+## optimizations
+
+# pre-touch memory pages used by the JVM during initialization
+-XX:+AlwaysPreTouch
+
+## basic
+
+# force the server VM (remove on 32-bit client JVMs)
+-server
+
+# explicitly set the stack size (reduce to 320k on 32-bit client JVMs)
+-Xss1m
+
+# set to headless, just in case
+-Djava.awt.headless=true
+
+# ensure UTF-8 encoding by default (e.g. filenames)
+-Dfile.encoding=UTF-8
+
+# use our provided JNA always versus the system one
+-Djna.nosys=true
+
+# use old-style file permissions on JDK9
+-Djdk.io.permissionsUseCanonicalPath=true
+
+# flags to configure Netty
+-Dio.netty.noUnsafe=true
+-Dio.netty.noKeySetOptimization=true
+-Dio.netty.recycler.maxCapacityPerThread=0
+
+# log4j 2
+-Dlog4j.shutdownHookEnabled=false
+-Dlog4j2.disable.jmx=true
+-Dlog4j.skipJansi=true
+
+## heap dumps
+
+# generate a heap dump when an allocation from the Java heap fails
+# heap dumps are created in the working directory of the JVM
+-XX:+HeapDumpOnOutOfMemoryError
+
+# specify an alternative path for heap dumps
+# ensure the directory exists and has sufficient space
+#-XX:HeapDumpPath=${heap.dump.path}
+
+## GC logging
+
+#-XX:+PrintGCDetails
+#-XX:+PrintGCTimeStamps
+#-XX:+PrintGCDateStamps
+#-XX:+PrintClassHistogram
+#-XX:+PrintTenuringDistribution
+#-XX:+PrintGCApplicationStoppedTime
+
+# log GC status to a file with time stamps
+# ensure the directory exists
+#-Xloggc:${loggc}
+
+# By default, the GC log file will not rotate.
+# By uncommenting the lines below, the GC log file
+# will be rotated every 128MB at most 32 times.
+#-XX:+UseGCLogFileRotation
+#-XX:NumberOfGCLogFiles=32
+#-XX:GCLogFileSize=128M
+
+# Elasticsearch 5.0.0 will throw an exception on unquoted field names in JSON.
+# If documents were already indexed with unquoted fields in a previous version
+# of Elasticsearch, some operations may throw errors.
+#
+# WARNING: This option will be removed in Elasticsearch 6.0.0 and is provided
+# only for migration purposes.
+#-Delasticsearch.json.allow_unquoted_field_names=true
diff --git a/elasticsearch/files/v5/log4j2.properties b/elasticsearch/files/v5/log4j2.properties
new file mode 100644
index 0000000..16aee8d
--- /dev/null
+++ b/elasticsearch/files/v5/log4j2.properties
@@ -0,0 +1,74 @@
+status = error
+
+# log action execution errors for easier debugging
+logger.action.name = org.elasticsearch.action
+logger.action.level = debug
+
+appender.console.type = Console
+appender.console.name = console
+appender.console.layout.type = PatternLayout
+appender.console.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%m%n
+
+appender.rolling.type = RollingFile
+appender.rolling.name = rolling
+appender.rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}.log
+appender.rolling.layout.type = PatternLayout
+appender.rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%.-10000m%n
+appender.rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}-%d{yyyy-MM-dd}.log
+appender.rolling.policies.type = Policies
+appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
+appender.rolling.policies.time.interval = 1
+appender.rolling.policies.time.modulate = true
+
+rootLogger.level = info
+rootLogger.appenderRef.console.ref = console
+rootLogger.appenderRef.rolling.ref = rolling
+
+appender.deprecation_rolling.type = RollingFile
+appender.deprecation_rolling.name = deprecation_rolling
+appender.deprecation_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation.log
+appender.deprecation_rolling.layout.type = PatternLayout
+appender.deprecation_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c{1.}] %marker%.-10000m%n
+appender.deprecation_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_deprecation-%i.log.gz
+appender.deprecation_rolling.policies.type = Policies
+appender.deprecation_rolling.policies.size.type = SizeBasedTriggeringPolicy
+appender.deprecation_rolling.policies.size.size = 1GB
+appender.deprecation_rolling.strategy.type = DefaultRolloverStrategy
+appender.deprecation_rolling.strategy.max = 4
+
+logger.deprecation.name = org.elasticsearch.deprecation
+logger.deprecation.level = INFO
+logger.deprecation.appenderRef.deprecation_rolling.ref = deprecation_rolling
+logger.deprecation.additivity = false
+
+appender.index_search_slowlog_rolling.type = RollingFile
+appender.index_search_slowlog_rolling.name = index_search_slowlog_rolling
+appender.index_search_slowlog_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_index_search_slowlog.log
+appender.index_search_slowlog_rolling.layout.type = PatternLayout
+appender.index_search_slowlog_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %marker%.-10000m%n
+appender.index_search_slowlog_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_index_search_slowlog-%d{yyyy-MM-dd}.log
+appender.index_search_slowlog_rolling.policies.type = Policies
+appender.index_search_slowlog_rolling.policies.time.type = TimeBasedTriggeringPolicy
+appender.index_search_slowlog_rolling.policies.time.interval = 1
+appender.index_search_slowlog_rolling.policies.time.modulate = true
+
+logger.index_search_slowlog_rolling.name = index.search.slowlog
+logger.index_search_slowlog_rolling.level = trace
+logger.index_search_slowlog_rolling.appenderRef.index_search_slowlog_rolling.ref = index_search_slowlog_rolling
+logger.index_search_slowlog_rolling.additivity = false
+
+appender.index_indexing_slowlog_rolling.type = RollingFile
+appender.index_indexing_slowlog_rolling.name = index_indexing_slowlog_rolling
+appender.index_indexing_slowlog_rolling.fileName = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_index_indexing_slowlog.log
+appender.index_indexing_slowlog_rolling.layout.type = PatternLayout
+appender.index_indexing_slowlog_rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %marker%.-10000m%n
+appender.index_indexing_slowlog_rolling.filePattern = ${sys:es.logs.base_path}${sys:file.separator}${sys:es.logs.cluster_name}_index_indexing_slowlog-%d{yyyy-MM-dd}.log
+appender.index_indexing_slowlog_rolling.policies.type = Policies
+appender.index_indexing_slowlog_rolling.policies.time.type = TimeBasedTriggeringPolicy
+appender.index_indexing_slowlog_rolling.policies.time.interval = 1
+appender.index_indexing_slowlog_rolling.policies.time.modulate = true
+
+logger.index_indexing_slowlog.name = index.indexing.slowlog.index
+logger.index_indexing_slowlog.level = trace
+logger.index_indexing_slowlog.appenderRef.index_indexing_slowlog_rolling.ref = index_indexing_slowlog_rolling
+logger.index_indexing_slowlog.additivity = false
diff --git a/elasticsearch/map.jinja b/elasticsearch/map.jinja
index 94f12fa..b69b369 100644
--- a/elasticsearch/map.jinja
+++ b/elasticsearch/map.jinja
@@ -15,9 +15,11 @@
- python-elasticsearch-curator
service: elasticsearch
version: '1.4.4'
+default:
+ version: 2
{%- endload %}
-{%- set server = salt['grains.filter_by'](base_defaults, merge=salt['pillar.get']('elasticsearch:server')) %}
+{%- set server = salt['grains.filter_by'](base_defaults, merge=salt['pillar.get']('elasticsearch:server'), base='default') %}
{%- load_yaml as client_defaults %}
Debian:
diff --git a/elasticsearch/server/init.sls b/elasticsearch/server/init.sls
index 5206bb6..ee984cb 100644
--- a/elasticsearch/server/init.sls
+++ b/elasticsearch/server/init.sls
@@ -13,7 +13,7 @@
elasticsearch_default:
file.managed:
- name: /etc/default/elasticsearch
- - source: salt://elasticsearch/files/elasticsearch
+ - source: salt://elasticsearch/files/v{{ server.version }}/elasticsearch
- template: jinja
- require:
- pkg: elasticsearch_packages
@@ -21,18 +21,58 @@
elasticsearch_config:
file.managed:
- name: /etc/elasticsearch/elasticsearch.yml
- - source: salt://elasticsearch/files/elasticsearch.yml
+ - source: salt://elasticsearch/files/v{{ server.version }}/elasticsearch.yml
- template: jinja
- require:
- pkg: elasticsearch_packages
+{%- if server.version == 2 %}
elasticsearch_logging:
file.managed:
- name: /etc/elasticsearch/logging.yml
- - source: salt://elasticsearch/files/logging.yml
+ - source: salt://elasticsearch/files/v2/logging.yml
- template: jinja
- require:
- pkg: elasticsearch_packages
+{%- endif %}
+
+{%- if server.version == 5 %}
+elasticsearch_logging:
+ file.managed:
+ - name: /etc/elasticsearch/log4j2.properties
+ - source: salt://elasticsearch/files/v5/log4j2.properties
+ - template: jinja
+ - require:
+ - pkg: elasticsearch_packages
+
+elasticsearch_jvm_options:
+ file.managed:
+ - name: /etc/elasticsearch/jvm.options
+ - source: salt://elasticsearch/files/v5/jvm.options
+ - template: jinja
+ - require:
+ - pkg: elasticsearch_packages
+
+{%- if grains.get('init') == 'systemd' %}
+elasticsearch_override_limit_memlock_file:
+ file.managed:
+ - name: /etc/systemd/system/elasticsearch.service.d/override.conf
+ - makedirs: True
+ - contents: |
+ [Service]
+ LimitMEMLOCK=infinity
+ - require:
+ - pkg: elasticsearch_packages
+ - watch_in:
+ - module: elasticsearch_restart_systemd
+
+elasticsearch_restart_systemd:
+ module.wait:
+ - name: service.systemctl_reload
+ - watch_in:
+ - service: elasticsearch_service
+{%- endif %}
+{%- endif %}
{%- if server.get('log', {}).logrotate|default(True) and not
salt['file.file_exists' ]('/etc/logrotate.d/elasticsearch') %}
diff --git a/metadata/service/client.yml b/metadata/service/client.yml
index 701dc35..203c763 100644
--- a/metadata/service/client.yml
+++ b/metadata/service/client.yml
@@ -1,19 +1,24 @@
applications:
- elasticsearch
parameters:
+ _param:
+ elasticsearch_version: 2
elasticsearch:
client:
enabled: true
index:
log:
+ force_operation: true
enabled: true
- template: elasticsearch/files/es_template_log.json
+ template: elasticsearch/files/v${_param:elasticsearch_version}/es_template_log.json
audit:
+ force_operation: true
enabled: true
- template: elasticsearch/files/es_template_audit.json
+ template: elasticsearch/files/v${_param:elasticsearch_version}/es_template_audit.json
notification:
+ force_operation: true
enabled: true
- template: elasticsearch/files/es_template_notification.json
- kibana4:
+ template: elasticsearch/files/v${_param:elasticsearch_version}/es_template_notification.json
+ kibana:
enabled: true
- template: elasticsearch/files/es_template_kibana4.json
+ template: elasticsearch/files/v${_param:elasticsearch_version}/es_template_kibana.json
diff --git a/metadata/service/server/cluster.yml b/metadata/service/server/cluster.yml
index e432f74..2ff8db5 100644
--- a/metadata/service/server/cluster.yml
+++ b/metadata/service/server/cluster.yml
@@ -3,9 +3,12 @@
classes:
- service.elasticsearch.support
parameters:
+ _param:
+ elasticsearch_version: 2
elasticsearch:
server:
enabled: true
+ version: ${_param:elasticsearch_version}
bind:
address: 0.0.0.0
port: 9200
diff --git a/metadata/service/server/local.yml b/metadata/service/server/local.yml
index 259f468..24f577e 100644
--- a/metadata/service/server/local.yml
+++ b/metadata/service/server/local.yml
@@ -3,9 +3,12 @@
classes:
- service.elasticsearch.support
parameters:
+ _param:
+ elasticsearch_version: 2
elasticsearch:
server:
enabled: true
+ version: ${_param:elasticsearch_version}
bind:
address: 127.0.0.1
port: 9200
diff --git a/metadata/service/server/single.yml b/metadata/service/server/single.yml
index 264186c..397a0b6 100644
--- a/metadata/service/server/single.yml
+++ b/metadata/service/server/single.yml
@@ -3,9 +3,12 @@
classes:
- service.elasticsearch.support
parameters:
+ _param:
+ elasticsearch_version: 2
elasticsearch:
server:
enabled: true
+ version: ${_param:elasticsearch_version}
bind:
address: 0.0.0.0
port: 9200
diff --git a/tests/pillar/cluster.sls b/tests/pillar/cluster.sls
index 316438e..18a0194 100644
--- a/tests/pillar/cluster.sls
+++ b/tests/pillar/cluster.sls
@@ -15,4 +15,5 @@
port: 9300
index:
shards: 5
- replicas: 1
\ No newline at end of file
+ replicas: 1
+ version: 2
\ No newline at end of file
diff --git a/tests/pillar/curator.sls b/tests/pillar/curator.sls
index f4b8158..7425a81 100644
--- a/tests/pillar/curator.sls
+++ b/tests/pillar/curator.sls
@@ -4,6 +4,7 @@
bind:
address: 0.0.0.0
port: 9200
+ version: 2
curator:
timeout: 900
logfile: /var/log/elasticsearch/curator.log
diff --git a/tests/pillar/single.sls b/tests/pillar/single.sls
index c4f54e0..eec8541 100644
--- a/tests/pillar/single.sls
+++ b/tests/pillar/single.sls
@@ -9,3 +9,4 @@
index:
shards: 1
replicas: 0
+ version: 2