<p>I highly recommend Consul for configuration management as it is a high reliability, distributed system that provides quite a few and easy to use features with a simple Rest API. Also the community edition is free :), although for a large enterprises there is an enterprise offering.</p>

<p>I am a particular fan of the Key Value store, because it allows me to have separate configurations for my micro-services and back-end services (written in C#/.Net Core and Java respectively) in all three environments (Dev, Beta, Prod). </p>

<p>Whenever I add a new service or application, the configuration for each environment is added to the Key Value store and a simple config client downloads the configuration during the application's bootstrap/loading routines.</p>

<p>You can read a bit more <a href="https://www.consul.io/intro/index.html" rel="nofollow noreferrer">here</a> but in a nutshell:</p>

<blockquote>
  <p>Consul has multiple components, but as a whole, it is a tool for
  discovering and configuring services in your infrastructure. It
  provides several key features:</p>
  
  <p>Service Discovery: Clients of Consul can provide a service, such as
  api or mysql, and other clients can use Consul to discover providers
  of a given service. Using either DNS or HTTP, applications can easily
  find the services they depend upon.</p>
  
  <p>Health Checking: Consul clients can provide any number of health
  checks, either associated with a given service ("is the webserver
  returning 200 OK"), or with the local node ("is memory utilization
  below 90%"). This information can be used by an operator to monitor
  cluster health, and it is used by the service discovery components to
  route traffic away from unhealthy hosts.</p>
  
  <p>KV Store: Applications can make use of Consul's hierarchical key/value
  store for any number of purposes, including dynamic configuration,
  feature flagging, coordination, leader election, and more. The simple
  HTTP API makes it easy to use.</p>
  
  <p>Multi Datacenter: Consul supports multiple datacenters out of the box.
  This means users of Consul do not have to worry about building
  additional layers of abstraction to grow to multiple regions.</p>
  
  <p>Consul is designed to be friendly to both the DevOps community and
  application developers, making it perfect for modern, elastic
  infrastructures.</p>
</blockquote>

CC BY-SA 3.0
2017-08-30T05:47:59.643Z
2017-08-30T05:47:59.643Z
bleepzter
<p>Consider using something like Puppet, Salt Stack or Chef - all of which can be installed on Linux or Windows. You should then make it the responsibility of the respective development teams for managing a module for their application - just like they should be managing their installers.</p>

<p>The configuration code for the management system can then be managed in git or some other version control system just like your existing code. Upgrades are then  as simple as checking out the latest module version, or a specific commit ID or tag into the module directory.</p>

<p>For certain things (eg, time source) you can use an NTP module that applies to all hosts instead of just a specific host. This will allow your project managers, customers, ops team, whatever to manage some things at the organizational level/domain and some developers or teams to manage some things at the individual level/domain.</p>

<p>This can even work for your networking team who can use these configuration management system to manage firewalls and switches using SDN (Software Defined Networking) technology.</p>

CC BY-SA 3.0
2017-08-30T17:20:59.890Z
2017-08-30T17:20:59.890Z
James Shewey
<p>For a complex, distributed Enterprise system running on premise, I'll be driving an initiative to harness application configuration management. Today we have software delivered by almost 20 various scrum teams with only some coordination, having central and embedded software in Java, .NET, C++ and SQL worlds (MSSQL+Oracle). Creating a consistent system configuration addressing project specific functional requirements every time becomes a painful project.</p>

<p>What I would like to introduce is a type of configuration meta model starting from the business layer (domain of customers, product managers, etc) going down to individual parameters (domain of developers an system engineers). I imagine something like a web car configurator which in the end generates a consistent configuration. The whole complexity of relations between functionalities (hundreds)  and parameters (tens of thousands) would become explicitly maintained in such a tool.</p>

<p>Now, are there any off the shelve tools/frameworks supporting something like this? Gut feeling tells me that adapting any existing solution to a very specific needs of a large enterprise system might actually be more complex than building it by ourselves. </p>

CC BY-SA 3.0
2017-08-28T15:02:57.160Z
Sounds like any configuration management system (chef,puppet,ansible,salt) could fit as a framework to implement your logic, I highly doubt any tool implementing your own logic will exists somewhere.
Tensibai
CC BY-SA 3.0
2017-08-29T05:47:43.330Z
There is certainly no tool reflecting our logic, on certain level the problem is generic, though. One has to model relations between functions and the underlying parameters, store them it, version, etc. While the tools that you mention can be used as an element of a solution, I was wondering if there is something more available. I all the time have this car configurator analogy in my mind.
Piotr Tyburski
CC BY-SA 3.0
2017-08-29T06:36:40.490Z
And for the car analogy, each brand has its own configuration, tailored to its cars, they may use the same programming language below, but there's no universal car configurator cross brand... What your car combination are is specific to your brand and an impossible one on X could be allowed on Y. Declaring dependencies is a daily part of configuration management, validating it is usually part of the configuration process... Handling it at a higher level is just begging for a double maintenance task when a update has to be done
Tensibai
CC BY-SA 3.0
2017-08-29T06:40:43.253Z
I may misunderstand your problem, but the car analogy doesn't really stand, each car is independent from the other, I can't really tell if the car is an app or an environment, and you don't order a car like you ask for an application.
Tensibai
<configuration-management>
Application configuration of a complex enterprise system
Piotr Tyburski
# Application configuration of a complex enterprise system

(Asked by: username_0 on 2017-08-28)

For a complex, distributed Enterprise system running on premise, I'll be driving an initiative to harness application configuration management. Today we have software delivered by almost 20 various scrum teams with only some coordination, having central and embedded software in Java, .NET, C++ and SQL worlds (MSSQL+Oracle). Creating a consistent system configuration addressing project specific functional requirements every time becomes a painful project.

What I would like to introduce is a type of configuration meta model starting from the business layer (domain of customers, product managers, etc) going down to individual parameters (domain of developers an system engineers). I imagine something like a web car configurator which in the end generates a consistent configuration. The whole complexity of relations between functionalities (hundreds) and parameters (tens of thousands) would become explicitly maintained in such a tool.

Now, are there any off the shelve tools/frameworks supporting something like this? Gut feeling tells me that adapting any existing solution to a very specific needs of a large enterprise system might actually be more complex than building it by ourselves.

**Tags:** configuration-management

> **Comments:**
> **username_1**: Sounds like any configuration management system (chef,puppet,ansible,salt) could fit as a framework to implement your logic, I highly doubt any tool implementing your own logic will exists somewhere.  
> **username_0**: There is certainly no tool reflecting our logic, on certain level the problem is generic, though. One has to model relations between functions and the underlying parameters, store them it, version, etc. While the tools that you mention can be used as an element of a solution, I was wondering if there is something more available. I all the time have this car configurator analogy in my mind.  
> **username_1**: And for the car analogy, each brand has its own configuration, tailored to its cars, they may use the same programming language below, but there's no universal car configurator cross brand... What your car combination are is specific to your brand and an impossible one on X could be allowed on Y. Declaring dependencies is a daily part of configuration management, validating it is usually part of the configuration process... Handling it at a higher level is just begging for a double maintenance task when a update has to be done  
> **username_1**: I may misunderstand your problem, but the car analogy doesn't really stand, each car is independent from the other, I can't really tell if the car is an app or an environment, and you don't order a car like you ask for an application.  

---

## 2 answers

### Answer by username_2 on 2017-08-30. Score: 2

I highly recommend Consul for configuration management as it is a high reliability, distributed system that provides quite a few and easy to use features with a simple Rest API. Also the community edition is free :), although for a large enterprises there is an enterprise offering.

I am a particular fan of the Key Value store, because it allows me to have separate configurations for my micro-services and back-end services (written in C#/.Net Core and Java respectively) in all three environments (Dev, Beta, Prod).

Whenever I add a new service or application, the configuration for each environment is added to the Key Value store and a simple config client downloads the configuration during the application's bootstrap/loading routines.

You can read a bit more [here](https://www.consul.io/intro/index.html) but in a nutshell:

> Consul has multiple components, but as a whole, it is a tool for
> discovering and configuring services in your infrastructure. It
> provides several key features:
>
> Service Discovery: Clients of Consul can provide a service, such as
> api or mysql, and other clients can use Consul to discover providers
> of a given service. Using either DNS or HTTP, applications can easily
> find the services they depend upon.
>
> Health Checking: Consul clients can provide any number of health
> checks, either associated with a given service ("is the webserver
> returning 200 OK"), or with the local node ("is memory utilization
> below 90%"). This information can be used by an operator to monitor
> cluster health, and it is used by the service discovery components to
> route traffic away from unhealthy hosts.
>
> KV Store: Applications can make use of Consul's hierarchical key/value
> store for any number of purposes, including dynamic configuration,
> feature flagging, coordination, leader election, and more. The simple
> HTTP API makes it easy to use.
>
> Multi Datacenter: Consul supports multiple datacenters out of the box.
> This means users of Consul do not have to worry about building
> additional layers of abstraction to grow to multiple regions.
>
> Consul is designed to be friendly to both the DevOps community and
> application developers, making it perfect for modern, elastic
> infrastructures.


---

### Answer by username_3 on 2017-08-30. Score: 1

Consider using something like Puppet, Salt Stack or Chef - all of which can be installed on Linux or Windows. You should then make it the responsibility of the respective development teams for managing a module for their application - just like they should be managing their installers.

The configuration code for the management system can then be managed in git or some other version control system just like your existing code. Upgrades are then as simple as checking out the latest module version, or a specific commit ID or tag into the module directory.

For certain things (eg, time source) you can use an NTP module that applies to all hosts instead of just a specific host. This will allow your project managers, customers, ops team, whatever to manage some things at the organizational level/domain and some developers or teams to manage some things at the individual level/domain.

This can even work for your networking team who can use these configuration management system to manage firewalls and switches using SDN (Software Defined Networking) technology.


---

