Adoptable Cookbooks List

Looking for a cookbook to adopt? You can now see a list of cookbooks available for adoption!
List of Adoptable Cookbooks

Supermarket Belongs to the Community

Supermarket belongs to the community. While Chef has the responsibility to keep it running and be stewards of its functionality, what it does and how it works is driven by the community. The chef/supermarket repository will continue to be where development of the Supermarket application takes place. Come be part of shaping the direction of Supermarket by opening issues and pull requests or by joining us on the Chef Mailing List.

Select Badges

Select Supported Platforms

Select Status


elasticsearch-cluster (16) Versions 0.5.0

Installs/Configures ElasticSearch Cluster

cookbook 'elasticsearch-cluster', '= 0.5.0', :supermarket
cookbook 'elasticsearch-cluster', '= 0.5.0'
knife supermarket install elasticsearch-cluster
knife supermarket download elasticsearch-cluster
Quality 100%

elasticsearch-cluster Cookbook

Cookbook Build Status

This is a Chef cookbook to manage ElasticSearch Cluster.

More features and attributes will be added over time, feel free to contribute
what you find missing!

For Production environment, always prefer the most recent release.


Most Recent Release

cookbook 'elasticsearch-cluster', '~> 0.5.0'

From Git

cookbook 'elasticsearch-cluster', github: 'vkhatri/chef-elasticsearch-cluster'


Major Changes


  • resource elasticsearch_plugin attribute install_name has been renamed to install_source

Supported OS

This cookbook was tested on Amazon (2015-03) & Ubuntu (14.04) Linux and expected to work on similar platform family OS.

Supported ElasticSearch Version

This cookbook was tested for ElasticSearch v1.6.0+.

Supported ElasticSearch Deployment

This cookbook supports both Package and Tarball based installation.

Cookbook Dependencies

  • java cookbook
  • yum cookbook
  • apt cookbook


  • add more locations to nginx vhost
  • add specs


  • elasticsearch-cluster::default - default recipe (use it for run_list)

  • elasticsearch-cluster::install - install elasticsearch via package or tarball

  • elasticsearch-cluster::java - install java using java cookbook

  • elasticsearch-cluster::package - install elasticsearch using repository package

  • elasticsearch-cluster::tarball - install elasticsearch using tarball

  • elasticsearch-cluster::user - create elasticsearch user/group when node['elasticsearch']['install_method'] is set to tarball

  • elasticsearch-cluster::config - configure elasticsearch

  • elasticsearch-cluster::plugins - install / remove plugins using node attribute node['elasticsearch']['plugins']

  • elasticsearch-cluster::scripts - install / remove scripts using node attribute node['elasticsearch']['scripts']

HWRP elasticsearch_plugin

HWRP elasticsearch_plugin manages elasticsearch plugins install / remove. It is a wrapper for plugin binary.

For plugins validation (exists or not), it uses node API call to verify wheter required plugin or plugin version is installed.

version is evaluated to verify the correct installed version. Github plugins version vX.Y.Z is not the same as plugin installed version X.Y.Z discovered by provider. Check provider for more details.

Install Plugin

elasticsearch_plugin 'cloud-aws' do
  install_source   'elasticsearch/elasticsearch-cloud-aws'
  version        '2.7.0'

elasticsearch_plugin 'kopf' do
  install_source 'lmenezes/elasticsearch-kopf'

Above HWRP resource will install two plugins: cloud-aws and kopf.

Remove Plugin

elasticsearch_plugin 'kopf' do
  action :remove

Above HWRP resource will remove the kopf plugin.

HWRP Options

  • action (optional) - default :install, options: :install, :remove, :nothing
  • host (optional, String) - elasticsearch host (default: node['elasticsearch']['config']['network.bind_host'])
  • port (optional, Integer) - elasticsearch port (default: node['elasticsearch']['config']['http.port'])
  • install_source (optional, String) - plugin source to install, e.g. to install kopf plugin, install_source would be lmenezes/elasticsearch-kopf
  • url (optional, String) - plugin url
  • timeout (optional, String) - plugin install timeout
  • notify_restart (optional, TrueClass, FalseClass) - whether to restart elasticsearch service post plugin install (default: false)
  • ignore_error (optional, TrueClass,FlaseClass) - whether to ignore error like unable to fetch installed plugins when service is down, could ignore other errors in the future (default: true)
  • version (optional, String) - plugin install version

HWRP elasticsearch_script

HWRP elasticsearch_script manages elasticsearch scripts under directory node['elasticsearch']['scripts_dir']. It is a wrapper for cookbook_file resource to manage scripts.

Install Script

elasticsearch_script 'foo' do
  cookbook 'cookbook'
  source 'source'

Above HWRP resource will add script foo.

Remove Script

elasticsearch_script 'foo' do
  action :delete

Above HWRP resource will remove script foo.

HWRP Options

  • action (optional) - default :add, options: :add, :delete, :nothing
  • cookbook (optional, String) - script cookbook name for cookbook_file resource, required for action :add
  • source (optional, String) - default :name, script cookbook file source for cookbook_file resource

Manage Plugins using Node attribute

Using recipe plugins, plugins can be installed or removed by node attribute node['elasticsearch']['plugins']. Below is the role attributes to install and remove plugins.

  "default_attributes": {
    "elasticsearch": {
      "plugins": {
        "bigdesk": {
          "install_source": "lukas-vlcek/bigdesk"
        "kopf": {
          "install_source": "lmenezes/elasticsearch-kopf"
        "head": {
          "action": "remove"

Check out HWRP elasticsearch_plugin or recipe plugins for more info on attributes.

Manage Scripts using Node attribute

Using recipe scripts, scripts can be added or deleted by node attribute node['elasticsearch']['scripts']. Below is the role attributes to add and delete scripts.

  "default_attributes": {
    "elasticsearch": {
      "plugins": {
        "script-name": {
          "cookbook": "foo",
          "source": "foo"

Check out HWRP elasticsearch_script or recipe scripts for more info on attributes.

Cookbook Advanced Attributes

  • default['elasticsearch']['config'][''] (default: nil): elasticsearch cluster name, required to setup elasticsearch cluster

  • default['elasticsearch']['install_method'] (default: package): elasticsearch install method, options: package tarball

  • default['elasticsearch']['install_java'] (default: true): whether to install java using cookbook java

  • default['elasticsearch']['service_action'] (default: [:enable, :start]): elasticsearch service resource action

  • default['elasticsearch']['notify_restart'] (default: false): whether to notify elasticsearch service on any config change

  • default['elasticsearch']['setup_user'] (default: true): whether to setup elasticsearch service user when installing via tarball

  • default['elasticsearch']['cookbook'] (default: elasticsearch-cluster): cookbook to use for elasticsearch configuration file/template source

  • default['elasticsearch']['plugins'] (default: {}): node Hash attribute to install/remove elasticsearch plugins.

  • default['elasticsearch']['scripts'] (default: {}): node Hash attribute to install/remove elasticsearch scripts.

  • default['elasticsearch']['auto_java_memory'] (default: false): whether to allocate maximum possible heap size

  • default['elasticsearch']['auto_system_memory'] (default: 768): minimum memory to keep for OS while allocating maximum possible memory to elasticsearch, used with node['elasticsearch']['auto_java_memory']

  • default['elasticsearch']['use_chef_search'] (default: false): whether to use Chef Search to find elasticsearch cluster nodes in an environment
    for a given chef elasticsearch role

  • default['elasticsearch']['search_role_name'] (default: elasticsearch_cluster): chef role associated with elasticsearch nodes which add this cookbook
    to elasticsearch nodes run list

  • default['elasticsearch']['search_cluster_name_attr'] (default: nil): node attribute to match elasticsearch cluster name, not necessary applicable to all

  • default['elasticsearch']['tarball_purge'] (default: false): purge older installed versions for tarball install method

  • default['elasticsearch']['enable_sensitive'] (default: true): enable sensitive resource attribute for configuration resources

Cookbook Core Attributes

  • default['elasticsearch']['version'] (default: 1.7.2): elasticsearch version to install

  • default['elasticsearch']['version_suffix'] (default: calculated): elasticsearch package version suffix

  • default['elasticsearch']['user'] (default: elasticsearch): elasticsearch service user

  • default['elasticsearch']['group'] (default: elasticsearch): elasticsearch service group

  • default['elasticsearch']['conf_dir'] (default: /etc/elasticsearch): elasticsearch configuration directory

  • default['elasticsearch']['data_dir'] (default: /var/lib/elasticsearch): elasticsearch data directory

  • default['elasticsearch']['log_dir'] (default: /var/log/elasticsearch): elasticsearch log directory

  • default['elasticsearch']['work_dir'] (default: /tmp/elasticsearch): elasticsearch temporary files directory

  • default['elasticsearch']['plugins_dir'] (default: calcualted): elasticsearch plugins directory

  • default['elasticsearch']['conf_file'] (default: /etc/elasticsearch/elasticsearch.yml): elasticsearch configuration file

  • default['elasticsearch']['logging_conf_file'] (default: /etc/elasticsearch/logging.yml): elasticsearch logging configuration file

  • default['elasticsearch']['tarball_url'] (default: auto): elasticsearch tarball download url

  • default['elasticsearch']['tarball_checksum'] (default: versions): elasticsearch tarball version source sha256sum

  • default['elasticsearch']['parent_dir'] (default: /usr/local/elasticsearch): elasticsearch directory for tarball based installation

  • default['elasticsearch']['install_dir'] (default: /usr/local/elasticsearch/elasticsearch): elasticsearch symlink to current version source directory (for tarball based installation)

  • default['elasticsearch']['source_dir'] (default: calculated): elasticsearch current version directory (for tarball based installation)

  • default['elasticsearch']['home_dir'] (default: calculated): elasticsearch home directory

  • default['elasticsearch']['sysconfig_file'] (default: calculated): elasticsearch service config file location

  • default['elasticsearch']['umask'] (default: 0022): file/directory umask for execute resource (for tarball based installation)

  • default['elasticsearch']['mode'] (default: 0755): file/directory resource mode

Service Attributes

  • default['elasticsearch']['sysconfig']['ES_HEAP_NEWSIZE'] (default: calculated): elasticsearch service config file parameter

  • default['elasticsearch']['sysconfig']['ES_DIRECT_SIZE'] (default: nil): elasticsearch service config file parameter

  • default['elasticsearch']['sysconfig']['ES_JAVA_OPTS'] (default: nil): elasticsearch service config file parameter

  • default['elasticsearch']['sysconfig']['MAX_OPEN_FILES'] (default: 65_535): elasticsearch service config file parameter

  • default['elasticsearch']['sysconfig']['MAX_LOCKED_MEMORY'] (default: unlimited): elasticsearch service config file parameter

  • default['elasticsearch']['sysconfig']['MAX_MAP_COUNT'] (default: 262_144): elasticsearch service config file parameter

  • default['elasticsearch']['sysconfig']['ES_RESTART_ON_UPGRADE'] (default: true): elasticsearch service config file parameter

  • default['elasticsearch']['sysconfig']['ES_HEAP_SIZE'] (default: calculated): elasticsearch service config file parameter

ElasticSearch Configuration File Attributes

  • default['elasticsearch']['config'][''] (default: nil): elasticsearch configuration parameter

  • default['elasticsearch']['config'][''] (default: elasticsearch configuration parameter

  • default['elasticsearch']['config']['node.master'] (default: true): elasticsearch configuration parameter

  • default['elasticsearch']['config'][''] (default: true): elasticsearch configuration parameter

  • default['elasticsearch']['config']['node.max_local_storage_nodes'] (default: 1): elasticsearch configuration parameter

  • default['elasticsearch']['config']['index.number_of_shards'] (default: 5): elasticsearch configuration parameter

  • default['elasticsearch']['config']['index.number_of_replicas'] (default: 1): elasticsearch configuration parameter

  • default['elasticsearch']['config']['path.conf'] (default: node['elasticsearch']['conf_dir']): elasticsearch configuration parameter

  • default['elasticsearch']['config'][''] (default: node['elasticsearch']['data_dir']): elasticsearch configuration parameter

  • default['elasticsearch']['config'][''] (default: node['elasticsearch']['work_dir']): elasticsearch configuration parameter

  • default['elasticsearch']['config']['path.logs'] (default: node['elasticsearch']['log_dir']): elasticsearch configuration parameter

  • default['elasticsearch']['config']['path.plugins'] (default: node['elasticsearch']['plugins_dir']): elasticsearch configuration parameter

  • default['elasticsearch']['config']['bootstrap.mlockall'] (default: true): elasticsearch configuration parameter

  • default['elasticsearch']['config']['network.bind_host'] (default: node['ipaddress']): elasticsearch configuration parameter

  • default['elasticsearch']['config']['network.publish_host'] (default: node['ipaddress']): elasticsearch configuration parameter

  • default['elasticsearch']['config']['transport.tcp.port'] (default: 9300): elasticsearch configuration parameter

  • default['elasticsearch']['config']['transport.tcp.compress'] (default: true): elasticsearch configuration parameter

  • default['elasticsearch']['config']['http.port'] (default: 9200): elasticsearch configuration parameter

  • default['elasticsearch']['config']['discovery.zen.minimum_master_nodes'] (default: 1): elasticsearch configuration parameter

  • default['elasticsearch']['config'][''] (default: 3s): elasticsearch configuration parameter

  • default['elasticsearch']['config'][''] (default: false): elasticsearch configuration parameter

  • default['elasticsearch']['config'][''] (default: []): elasticsearch configuration parameter

  • default['elasticsearch']['config']['action.auto_create_index'] (default: true): elasticsearch configuration parameter

  • default['elasticsearch']['config']['action.disable_delete_all_indices'] (default: true): elasticsearch configuration parameter

  • default['elasticsearch']['config']['script.disable_dynamic'] (default: true): elasticsearch configuration parameter

ElasticSearch Configuration From Data Bag Item

  • default['elasticsearch']['databag_configs'] (default: nil): elasticsearch configuration parameters from data bag
    • For example, following configuration will get data bag named 'aws_keys' and data bag item 'elasticsearch'.
    • The key of 'config_items' will be used as configuration name.
    • The value of 'config_items' will be used for fetching value from data bag.
'elasticsearch' => {
    'databag_configs' => [
        'name' => 'aws_keys',
        'item' => 'elasticsearch',
        'config_items' => {
          '' => 'data_bag_key_for_access_key',
          '' => 'data_bag_key_for_secret_key'

Elasticsearch YUM/APT Repository Attributes

  • default['elasticsearch']['repo_version'] (default: calculated): elasticsearch repository version

  • default['elasticsearch']['yum']['description'] (default: calculated): elasticsearch yum reporitory attribute

  • default['elasticsearch']['yum']['gpgcheck'] (default: true): elasticsearch yum reporitory attribute

  • default['elasticsearch']['yum']['enabled'] (default: true): elasticsearch yum reporitory attribute

  • default['elasticsearch']['yum']['baseurl'] (default: calculated): elasticsearch yum reporitory attribute

  • default['elasticsearch']['yum']['gpgkey'] (default: elasticsearch yum reporitory attribute

  • default['elasticsearch']['yum']['mirrorlist'] (default: nil): elasticsearch yum reporitory attribute

  • default['elasticsearch']['yum']['action'] (default: :create): elasticsearch yum reporitory attribute

  • default['elasticsearch']['apt']['description'] (default: calculated): elasticsearch apt reporitory attribute

  • default['elasticsearch']['apt']['components'] (default: ['stable', 'main']): elasticsearch apt reporitory attribute

  • default['elasticsearch']['apt']['uri'] (default: calculated): elasticsearch apt reporitory attribute

  • default['elasticsearch']['apt']['key'] (default: elasticsearch apt reporitory attribute

  • default['elasticsearch']['apt']['action'] (default: :add): elasticsearch apt reporitory attribute


  1. Fork the repository on Github
  2. Create a named feature branch (like add_component_x)
  3. Write your change
  4. Write tests for your change (if applicable)
  5. Run the tests (rake & rake knife), ensuring they all pass
  6. Write new resource/attribute description to
  7. Write description about changes to PR
  8. Submit a Pull Request using Github

Authors:: Virender Khatri and Contributors

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

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
See the License for the specific language governing permissions and
limitations under the License.

Dependent cookbooks

java >= 0.0.0
yum >= 0.0.0
apt >= 0.0.0

Contingent cookbooks

There are no cookbooks that are contingent upon this one.

elasticsearch-cluster CHANGELOG

This file is used to list changes made in each version of the elasticsearch-cluster cookbook.


  • Virender Khatri - #49, fix for plugin syntax changed in es 2.x

  • Virender Khatri - #50, bump es version to 1.7.3

  • Virender Khatri - #51, plugins dir should be created under install_dir for tarball installation

  • Virender Khatri - #52, rename resource plugin attribute install_name to install_source


  • Virender Khatri - #39, script.disable_dynamic is not supported in v2.x

  • Virender Khatri - #40, update init.d scripts resource type from template to cookbook_file

  • Virender Khatri - #41, update cookbook for wrapper cookbook support

  • Virender Khatri - #42, move default attribute tarball_url to recipe tarball

  • Virender Khatri - #43, manage logging.yml configuration file

  • Virender Khatri - #44, add attribute to enable sensitive

  • Virender Khatri - #46, link node['elasticsearch']['install_dir'] should always notify service restart and does
    not require service restart

  • Virender Khatri - #47, added path.scripts directory resource config

  • Virender Khatri - #48, add resource script


  • WEI WU - set databag config related attributes before generating template file. Instead of storing in chef node.

  • WEI WU - add sensitive flag only if chef respond to this flag

  • Virender Khatri - #32, move tarball checksum to helper method

  • Virender Khatri - #33, move install recipe directory resources to install method recipe

  • Virender Khatri - #34, bump elasticsearch version to 1.7.2

  • Virender Khatri - #35, manage es config dir in favor of tarball install method

  • Virender Khatri - #36, update sysv init templates

  • Virender Khatri - #37, add feature to purge old tarball es revisions


  • WEI WU - Fixed config file location issue on CentOS7

  • Grant Ridder - Updated .rubocop.yml

  • Grant Ridder - Fixed ruby syntax

  • Grant Ridder - Updated test kitchen platforms


  • Virender Khatri - issue #23, Consider using directory-based plugin detection

  • Virender Khatri - issue #24, add attribute host & port to plugin resource

  • Virender Khatri - issue #25, plugin version is not the same as installed version

  • Virender Khatri - issue #26, bump elasticsearch version to 1.7.1


  • Michael Klishin - Update

  • Virender Khatri - issue #15, kopf and bigdesk are always installed, removed default plugins

  • Virender Khatri - issue #17, update elasticsearch service resource to delayed start

  • Virender Khatri - issue #18, add attribute ignore_error to plugin resource for issue #16

  • Virender Khatri - issue #19, add attribute notify_restart to plugin resource


  • Michael Klishin - Provide dependency info in the README

  • Virender Khatri - issue #13, added 1.7.0 checksum attribute default['elasticsearch']['tarball_checksum']['1.7.0']


  • Virender Khatri - added lwrp elasticsearch_plugin

  • Virender Khatri - bumped elasticsearch version to 1.7.0

  • Virender Khatri - added attribute default[elasticsearch][bin_dir]

  • Virender Khatri - move common directory resources to recipe install


  • Virender Khatri - added os support and README update

  • Virender Khatri - issue #1, package install needs to manage ES data, work and log dir

  • Virender Khatri - issue #2, add ES_JAVA_OPTS with double quotes

  • Virender Khatri - issue #3, added missing attribute default['elasticsearch']['cookbook']

  • Virender Khatri - issue #4, added config attribute name for elasticsearch.yml file

  • Virender Khatri - issue #5, disable auto_java_memory by default

  • Virender Khatri - issue #6, set default ES_HEAP_SIZE value to half of the memory


  • Virender Khatri - README and minor updates


  • Virender Khatri - Initial release of elasticsearch-cluster

Check the Markdown Syntax Guide for help with Markdown.

The Github Flavored Markdown page describes the differences between markdown on github and standard markdown.

Foodcritic Metric

0.5.0 passed this metric