#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You 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.
#

#
# Setup an ElasticSearch Cluster
# 

# Read the Configuration Guide for more info:
# http://whirr.apache.org/docs/latest/configuration-guide.html

# Change the cluster name here
whirr.cluster-name=elasticsearch

# Change the name of cluster admin user
whirr.cluster-user=${sys:user.name}

# Setup your cloud credentials by copying conf/credentials.sample
# to ~/.whirr/credentials and editing as needed

# Change the number of machines in the cluster here
whirr.instance-templates=2 elasticsearch
whirr.hardware-min-ram=2048

# By default use the user system SSH keys. Override them here.
# whirr.private-key-file=${sys:user.home}/.ssh/id_rsa
# whirr.public-key-file=${whirr.private-key-file}.pub

# You can specify the version by setting the tarball url
# whirr.elasticsearch.tarball.url=http://github.com/downloads/elasticsearch/elasticsearch/elasticsearch-0.15.2.tar.gz

#
# elasticsearch specific settings (Expert)
#

# 1. Gateway Persistence settings
# See: http://www.elasticsearch.org/guide/reference/modules/gateway/
# Defaults: the index is only stored in memory and all data is lost on shutdown

# 1.1 Enable persistence on S3
# See: http://www.elasticsearch.org/guide/reference/modules/gateway/s3.html

# es.gateway.type=s3
# es.gateway.s3.bucket: elasticsearch

# 1.2 Enable persistence on the local filesystem
# See: http://www.elasticsearch.org/guide/reference/modules/gateway/local.html

# es.gateway.type=fs
# es.gateway.recovery_after_nodes=1
# es.gateway.recovery_after_time=5m
# es.expected_nodes=2

# 1.3 Enable persistence on HDFS
# See: http://www.elasticsearch.org/guide/reference/modules/gateway/hadoop.html

# es.gateway.type=hdfs
# es.gateway.hdfs.uri=hdfs://myhost:8022
# es.gateway.hdfs.path=/some/path

# 2. Scripting Support
# See: http://www.elasticsearch.org/guide/reference/modules/scripting.html
# The scripting module uses by default mvel

# Just add them to the list of installed plugins
# es.plugins=lang-javascript, lang-groovy, lang-python,

# 3. Memcached protocol support
# See: http://www.elasticsearch.org/guide/reference/modules/memcached.html

# es.plugins=transport-memcached

# 4. Thrift protocol support
# See: http://www.elasticsearch.org/guide/reference/modules/thrift.html

# es.plugins=transport-thrift
