# Config management

**URL:** <https://discuss.elastic.co/t/config-management/225>\
**Category:** Elastic Community and Ecosystem\
**Created:** [May 5, 2015, 2:32pm UTC](https://discuss.elastic.co/t/config-management/225 "2015-05-05T14:32:05Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![electrical](https://avatars.discourse-cdn.com/v4/letter/e/a6a055/32.png) [@electrical](https://discuss.elastic.co/u/electrical)\
**Post date:** [May 5, 2015, 2:32pm UTC](https://discuss.elastic.co/t/config-management/225/1 "2015-05-05T14:32:05Z")

</div>

I'm the creator of Elastic's Puppet Modules for Elasticsearch and Logstash. As you can imagine, I care a lot about configuration management and am a Puppet fan.

I'd welcome feedback from the community on the modules and other things you think we could do to make your life better with configuration management.

---

<div class="post-metadata">

**Author:** ![magnusbaeck](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/magnusbaeck/32/44943_2.png) [@magnusbaeck](https://discuss.elastic.co/u/magnusbaeck)\
**Post date:** [May 5, 2015, 6:44pm UTC](https://discuss.elastic.co/t/config-management/225/2 "2015-05-05T18:44:05Z")

</div>

We use Ansible so I can't comment on the Puppet module, but apart from obvious stuff like installing the software in the first place—which is easy to automate—I've had to (or will have to) write not-entirely-trivial Ansible tasks and/or modules for the following:

- Index template deployment.
- Dynamic cluster settings deployment.
- Supporting rolling restarts by waiting for the cluster to become green, taking the node out of the load balancer, disabling shard allocations, restarting the service, waiting until it's up (and then some), and finally getting it back in the load balancer and reenabling shard allocations.
- Figuring out a suitable discovery.zen.minimum\_master\_nodes value given that some nodes might have node.master set to false.

There are about a million Ansible roles and playbooks named after Elasticsearch on Ansible Galaxy and I haven't looked at them all, but those I _have_ looked at seem to be focused on the stuff that's easy anyway. If I'd ask for anything it'd be automation of the rest.

---

<div class="post-metadata">

**Author:** ![warkolm](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/warkolm/32/39224_2.png) [@warkolm](https://discuss.elastic.co/u/warkolm)\
**Post date:** [May 5, 2015, 9:52pm UTC](https://discuss.elastic.co/t/config-management/225/3 "2015-05-05T21:52:31Z")

</div>

We're working on an Ansible playbook at the moment, it's still under pretty heavy development so it's not publicly accessible for the moment, but keep your eye out for it!

---

<div class="post-metadata">

**Author:** ![spuder](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/spuder/32/44895_2.png) [@spuder](https://discuss.elastic.co/u/spuder)\
**Post date:** [May 8, 2015, 8:08pm UTC](https://discuss.elastic.co/t/config-management/225/4 "2015-05-08T20:08:50Z")

</div>

I've used both the puppet module and the chef cookbook to setup elasticsearch at my various employers.

Its been a while since I looked at the puppet module, but I remember that the chef cookbook had the following features that were very nice:

- Support optionally configuring nignx reverse proxy for authentication
- Prevent chef converges from triggering restarts of elasticsearch service.
- Validate downloads with checksums.
- Install multiple versions simultaneously and symlink the newest one to 'current' (easy rollback)
- Install plugins easily
- Generate elasticsearch.yml config file dynamically by passing a hash of values to a resource. (No need to have all config values defined in the .erb template)

The puppet module likely supported some of these, but not all.

---

<div class="post-metadata">

**Author:** ![electrical](https://avatars.discourse-cdn.com/v4/letter/e/a6a055/32.png) [@electrical](https://discuss.elastic.co/u/electrical)\
**Post date:** [May 11, 2015, 11:31am UTC](https://discuss.elastic.co/t/config-management/225/5 "2015-05-11T11:31:54Z")

</div>

Hi Spuder,

Most of the topics you noted are indeed supported by the Puppet module.  
The only things that are not included are the nginx proxy and multiple versions.

The nginx proxy is not included because it should not be part of the module.  
The ES module is focused on a single thing which is ES. There are allot of other modules that can handle proxying.

Regarding multiple versions it gets a bit harder since i handle installation using packages 😄

Hope this explains it a bit for the puppet module.

---

<div class="post-metadata">

**Author:** ![pieterl](https://avatars.discourse-cdn.com/v4/letter/p/f6c823/32.png) [@pieterl](https://discuss.elastic.co/u/pieterl)\
**Post date:** [May 25, 2015, 8:23am UTC](https://discuss.elastic.co/t/config-management/225/6 "2015-05-25T08:23:03Z")

</div>

The dependency on file\_concat is somewhat painful, as the errors thrown are very non-descriptive (ie sourcing a file that doesn't exist). Please consider switching to something like [http://github.com/ripienaar/puppet-concat/](http://github.com/ripienaar/puppet-concat/). This also removes the need for special types/providers and just uses native puppet code.

+1 on the rolling restarts. Not sure if this is even (cleanly) possible with puppet; sounds like an orchestration problem (ansible / mcollective?).

Thanks for your work on the puppet modules.

---

<div class="post-metadata">

**Author:** ![electrical](https://avatars.discourse-cdn.com/v4/letter/e/a6a055/32.png) [@electrical](https://discuss.elastic.co/u/electrical)\
**Post date:** [May 27, 2015, 12:48pm UTC](https://discuss.elastic.co/t/config-management/225/7 "2015-05-27T12:48:27Z")

</div>

Hi @pieterl,

puppetlabs-concat is much slower then the library implementation i have.  
However they are working on 2.0 which will be using my version under the hood.  
I might consider moving to it at some point.

Ps. file concat has been improved a lot over the past weeks.

---

<div class="post-metadata">

**Author:** ![mrlesmithjr](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/mrlesmithjr/32/3804_2.png) [@mrlesmithjr](https://discuss.elastic.co/u/mrlesmithjr)\
**Post date:** [July 22, 2015, 2:47am UTC](https://discuss.elastic.co/t/config-management/225/8 "2015-07-22T02:47:50Z")

</div>

I have just recently released some Ansible roles/plays and etc around highly available solutions. You can read more at the link below but I am looking for some valuable input on additional functionality and adjustments that may need to be made. Feel free to ping me by all means.

> **[Ansible - Highly Available ELK Stack](https://everythingshouldbevirtual.com/ansible-highly-available-elk-stack/)**
>
> A little over a year ago I provided installation scripts along withthispost to help setup a completely redundant ELK Stack. This post hasdefinitely been one of my most popular posts that I have ever put outand lot’s of great feedback provided. Over...

And my GitHub repo can be found [here](https://github.com/mrlesmithjr/Ansible)

---

<div class="post-metadata">

**Author:** ![daks](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/daks/32/3883_2.png) [@daks](https://discuss.elastic.co/u/daks)\
**Post date:** [July 28, 2015, 1:29pm UTC](https://discuss.elastic.co/t/config-management/225/9 "2015-07-28T13:29:39Z")

</div>

Hi @electrical,

I use several of your Puppet modules 'elasticsearch' and 'logstash' and want to thank you for your job 😄

---

<div class="post-metadata">

**Author:** ![Babadofar](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/babadofar/32/44803_2.png) [@Babadofar](https://discuss.elastic.co/u/Babadofar)\
**Post date:** [August 20, 2015, 11:25am UTC](https://discuss.elastic.co/t/config-management/225/10 "2015-08-20T11:25:50Z")

</div>

Hi Mark.  
Very interested to hear more about your experiences with Ansible! We recently started using Ansible and find it quite easy to work with. Any news on when/if you can share the playbook?

---

<div class="post-metadata">

**Author:** ![Babadofar](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/babadofar/32/44803_2.png) [@Babadofar](https://discuss.elastic.co/u/Babadofar)\
**Post date:** [August 20, 2015, 11:36am UTC](https://discuss.elastic.co/t/config-management/225/11 "2015-08-20T11:36:12Z")

</div>

We're using Puppet together with Vagrant to spin up an ELK box running as a virtual machine locally. We use this a lot for testing and developing, and it works great! Would perhaps be nice to have a Kibana puppet module.  
The vagrant-elk-box can be found [here](https://github.com/comperiosearch/vagrant-elk-box)

---

<div class="post-metadata">

**Author:** ![warkolm](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/warkolm/32/39224_2.png) [@warkolm](https://discuss.elastic.co/u/warkolm)\
**Post date:** [August 21, 2015, 7:40am UTC](https://discuss.elastic.co/t/config-management/225/12 "2015-08-21T07:40:34Z")

</div>

Not sure, but I'll ask 🙂

---

<div class="post-metadata">

**Author:** ![electrical](https://avatars.discourse-cdn.com/v4/letter/e/a6a055/32.png) [@electrical](https://discuss.elastic.co/u/electrical)\
**Post date:** [August 21, 2015, 8:07am UTC](https://discuss.elastic.co/t/config-management/225/13 "2015-08-21T08:07:35Z")

</div>

Its on the roadmap to build an official Puppet module for Kibana. No ETA yet though. will keep the tread updated.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [July 6, 2017, 1:45pm UTC](https://discuss.elastic.co/t/config-management/225/14 "2017-07-06T13:45:05Z")

</div>


