From 5163dfb7b145991603a877b6e862c877ac0f3962 Mon Sep 17 00:00:00 2001 From: Filip Pytloun Date: Tue, 6 Oct 2015 16:28:31 +0200 Subject: [PATCH 1/1] Initial commit --- CHANGELOG.rst | 6 + LICENSE | 13 + README.rst | 24 ++ VERSION | 1 + debian/changelog | 11 + debian/compat | 1 + debian/control | 15 + debian/copyright | 15 + debian/docs | 3 + debian/install | 2 + debian/rules | 5 + debian/source/format | 1 + elasticsearch/files/elasticsearch.yml | 384 ++++++++++++++++++ elasticsearch/init.sls | 5 + elasticsearch/map.jinja | 13 + elasticsearch/server.sls | 26 ++ metadata/service/server/single.yml | 9 + .../service/server/vendor_repo_debian.yml | 8 + 18 files changed, 542 insertions(+) create mode 100644 CHANGELOG.rst create mode 100644 LICENSE create mode 100644 README.rst create mode 100644 VERSION create mode 100644 debian/changelog create mode 100644 debian/compat create mode 100644 debian/control create mode 100644 debian/copyright create mode 100644 debian/docs create mode 100644 debian/install create mode 100755 debian/rules create mode 100644 debian/source/format create mode 100644 elasticsearch/files/elasticsearch.yml create mode 100644 elasticsearch/init.sls create mode 100644 elasticsearch/map.jinja create mode 100644 elasticsearch/server.sls create mode 100644 metadata/service/server/single.yml create mode 100644 metadata/service/server/vendor_repo_debian.yml diff --git a/CHANGELOG.rst b/CHANGELOG.rst new file mode 100644 index 0000000..b0431fa --- /dev/null +++ b/CHANGELOG.rst @@ -0,0 +1,6 @@ +elasticsearch-formula +============== + +0.0.1 (2015-08-03) + +- Initial formula setup \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..6f2b42f --- /dev/null +++ b/LICENSE @@ -0,0 +1,13 @@ +Copyright (c) 2014-2015 tcp cloud a.s. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. \ No newline at end of file diff --git a/README.rst b/README.rst new file mode 100644 index 0000000..c37299b --- /dev/null +++ b/README.rst @@ -0,0 +1,24 @@ + +============= +ElasticSearch +============= + +Sample pillars +============== + +.. code-block:: yaml + + elasticsearch: + server: + enabled: true + version: 1.0.1 + bind: + address: 0.0.0.0 + port: 9200 + +Read more +========= + +* http://alex.nederlof.com/blog/2012/11/19/installing-elasticsearch-with-jenkins-on-ubuntu/ +* http://websightdesigns.com/wiki/Setting_up_Centralized_Event_Parsing_on_Ubuntu_12.04 +* https://gist.github.com/wingdspur/2026107 diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..3b04cfb --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +0.2 diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..681cf1b --- /dev/null +++ b/debian/changelog @@ -0,0 +1,11 @@ +salt-formula-elasticsearch (0.2) trusty; urgency=medium + + * First public release + + -- Filip Pytloun Tue, 06 Oct 2015 16:38:39 +0200 + +salt-formula-elasticsearch (0.1) trusty; urgency=medium + + * Initial release + + -- Jakub Pavlik Thu, 13 Aug 2015 23:23:41 +0200 diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..ec63514 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +9 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..14c1084 --- /dev/null +++ b/debian/control @@ -0,0 +1,15 @@ +Source: salt-formula-elasticsearch +Maintainer: Jakub Pavlik +Section: admin +Priority: optional +Build-Depends: debhelper (>= 9) +Standards-Version: 3.9.6 +Homepage: http://www.tcpcloud.eu +Vcs-Browser: https://github.com/tcpcloud/salt-formula-elasticsearch +Vcs-Git: https://github.com/tcpcloud/salt-formula-elasticsearch.git + +Package: salt-formula-elasticsearch +Architecture: all +Depends: ${misc:Depends}, salt-master, reclass +Description: ElasticSearch Salt formula + Install and configure ElasticSearch server and client. diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..b98e252 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,15 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: salt-formula-elasticsearch +Upstream-Contact: Jakub Pavlik +Source: https://github.com/tcpcloud/salt-formula-elasticsearch + +Files: * +Copyright: 2014-2015 tcp cloud +License: Apache-2.0 + Copyright (C) 2014-2015 tcp cloud + . + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + . + On a Debian system you can find a copy of this license in + /usr/share/common-licenses/Apache-2.0. diff --git a/debian/docs b/debian/docs new file mode 100644 index 0000000..d585829 --- /dev/null +++ b/debian/docs @@ -0,0 +1,3 @@ +README.rst +CHANGELOG.rst +VERSION diff --git a/debian/install b/debian/install new file mode 100644 index 0000000..aff1125 --- /dev/null +++ b/debian/install @@ -0,0 +1,2 @@ +elasticsearch/* /usr/share/salt-formulas/env/elasticsearch/ +metadata/service/* /usr/share/salt-formulas/reclass/service/elasticsearch/ diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..abde6ef --- /dev/null +++ b/debian/rules @@ -0,0 +1,5 @@ +#!/usr/bin/make -f + +%: + dh $@ + diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 0000000..89ae9db --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (native) diff --git a/elasticsearch/files/elasticsearch.yml b/elasticsearch/files/elasticsearch.yml new file mode 100644 index 0000000..92c6a33 --- /dev/null +++ b/elasticsearch/files/elasticsearch.yml @@ -0,0 +1,384 @@ +{%- 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 . +# +# The installation procedure is covered at +# . +# +# 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 +# + + +################################### 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.clustername is defined %} + +cluster.name: {{ server.clustername }} + +{% 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" + +# 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: true +# +# Allow this node to store data (enabled by default): +# +# node.data: true + +# 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 , +# , +# and +# 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 + +# 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 + + +#################################### 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 and +# +# for more information. + +# Set the number of shards (splits) of an index (5 by default): +# +# index.number_of_shards: 5 + +# Set the number of replicas (additional copies) of an index (1 by default): +# +# index.number_of_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 () to inspect +# the index status. + + +#################################### Paths #################################### + +# Path to directory containing configuration (this file and logging.yml): +# +# path.conf: /path/to/conf + +# Path to directory where to store index data allocated for this node. +# +# path.data: /path/to/data +# +# 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 + +# Path to where plugins are installed: +# +# path.plugins: /path/to/plugins + + +#################################### 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 + +# 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 the bind address specifically (IPv4 or IPv6): +# +# +network.bind_host: {{ server.bind.address }} +http.port: {{ server.bind.port }} +http.enabled: true +# Set 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. +# +# network.publish_host: 192.168.0.1 + +# Set both 'bind_host' and 'publish_host': +# +# network.host: 192.168.0.1 + +# 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 + +# Set a custom allowed content length: +# +# http.max_content_length: 100mb + +# Disable HTTP completely: +# +# http.enabled: false + + +################################### 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 +# . + +# 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 + +# 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 + +# 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 + + +############################# 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: 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 +# + +# 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: false +# +# 2. Configure an initial list of master nodes in the cluster +# to perform discovery when new nodes (master or data) are started: +# +# discovery.zen.ping.unicast.hosts: ["host1", "host2:port"] + +# 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 +# +# +# See +# 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 . + +# 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 . + +################################## 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 diff --git a/elasticsearch/init.sls b/elasticsearch/init.sls new file mode 100644 index 0000000..fadf2bf --- /dev/null +++ b/elasticsearch/init.sls @@ -0,0 +1,5 @@ + +{% if pillar.elasticsearch.server is defined %} +include: +- elasticsearch.server +{% endif %} diff --git a/elasticsearch/map.jinja b/elasticsearch/map.jinja new file mode 100644 index 0000000..3c03785 --- /dev/null +++ b/elasticsearch/map.jinja @@ -0,0 +1,13 @@ + +{% set server = salt['grains.filter_by']({ + 'Debian': { + 'pkgs': ['elasticsearch'], + 'service': 'elasticsearch', + 'version': '1.4.4', + }, + 'RedHat': { + 'pkgs': ['elasticsearch'], + 'service': 'elasticsearch', + 'version': '1.4.4', + }, +}, merge=salt['pillar.get']('elasticsearch:server')) %} diff --git a/elasticsearch/server.sls b/elasticsearch/server.sls new file mode 100644 index 0000000..a074d01 --- /dev/null +++ b/elasticsearch/server.sls @@ -0,0 +1,26 @@ +{%- from "elasticsearch/map.jinja" import server with context %} +{%- if server.enabled %} + +include: + - java + +elasticsearch_packages: + pkg.installed: + - names: {{ server.pkgs }} + +elasticsearch_config: + file.managed: + - name: /etc/elasticsearch/elasticsearch.yml + - source: salt://elasticsearch/files/elasticsearch.yml + - template: jinja + - require: + - pkg: elasticsearch_packages + +elasticsearch_service: + service.running: + - enable: true + - name: {{ server.service }} + - watch: + - file: elasticsearch_config + +{%- endif %} \ No newline at end of file diff --git a/metadata/service/server/single.yml b/metadata/service/server/single.yml new file mode 100644 index 0000000..2d39640 --- /dev/null +++ b/metadata/service/server/single.yml @@ -0,0 +1,9 @@ +applications: +- elasticsearch +parameters: + elasticsearch: + server: + enabled: true + bind: + address: 0.0.0.0 + port: 9200 diff --git a/metadata/service/server/vendor_repo_debian.yml b/metadata/service/server/vendor_repo_debian.yml new file mode 100644 index 0000000..7973db3 --- /dev/null +++ b/metadata/service/server/vendor_repo_debian.yml @@ -0,0 +1,8 @@ +parameters: + linux: + system: + repo: + elasticsearch: + enabled: true + source: 'deb http://packages.elasticsearch.org/elasticsearch/1.4/debian stable main' + key_url: 'http://packages.elasticsearch.org/GPG-KEY-elasticsearch' -- 2.32.7