I'm working on configuration management in cloud environment [1]. I put some finding in the ticket [1] but let me tell you more about the options I investigated:
- Kubernetes/OpenShift ConfigMaps [2][3]
- Those structures are specially designed to hold configuration data in any format (yaml, json, properties, xml, doesn't matter).
- The configuration can be mounted into a pod as a directory (technically a volume). We can not mount it as a single file. Having said that we would need to either store cloud.xml file separately (standalone/cloud/configuration?) or ask users to build configuration from whole standalone/configuration directory. Both options are valid in my opinion.
- OpenShift S2I [4] builder
- S2I builder takes a git repository and a Docker image and combines those two together.
- We could store a cloud.xml file inside a git repository and modify our infinispan Docker image to support S2I scripts (if cloud.xml is detected in a git repository - replace the default configuration).
- Unfortunately it's OpenShift specific thing.
- Extend the Infinispan Docker image
- We could ask users to extend our Docker image and put their specific configuration there
- The biggest advantage - it will work regardless to the environment (pure Docker, Kubernetes, OpenShift, doesn't matter)
All options require restarting pods to update configuration (remember, pods were designed to be immutable).
I think we should support 2 options - ConfigMaps for Kubernetes and OpenShift and extending our Docker image for all other use cases (because this option gives the most flexibility).