[tripleo] Configuration Management without Puppet
Bogdan Dobrelya
bdobreli at redhat.com
Tue May 28 09:31:07 UTC 2019
On 28.05.2019 1:35, Emilien Macchi wrote:
> (First of all: thanks to Alex Schultz who initiated the discussion
> during the last PTG).
>
> Context:
> With the containerization of the services in TripleO, our usage of
> Puppet is pretty much limited to laying down parameters into
> configuration files.
> Our long term goal is to reduce our number of tools in TripleO and
> converge toward more Ansible and we are currently investigating how to
> make it happen for Configuration Management, in a backward compatible
> and non-disruptive way.
>
> Problems:
> - Our current interface to configure things is very tight to Puppet and
> Hiera, which would make it complicated to bind it with Hiera. Some of us
> have tried (to create some Hiera module in Ansible) but clearly this is
> not the path we want to take as far I know.
> - We don't use the logic (generally) in the Puppet modules and again
> only care about the configuration providers (in puppet-openstacklib and
> for some services, templates files), so the Puppet modules now do too
> much for what we need in TripleO.
>
> Proposals:
> - Create an interface in THT that will define what the configuration
> looks like for each service. The format will be simple and easy to
> consume from any tool (Puppet to start for backward compatibility but
> also Ansible and why not etcd one day).
>
> Example with Glance in deployment/glance/glance-api-container-puppet.yaml:
> param_config:
> map_merge:
> - glance_api_config:
> DEFAULT:
> enable_v2_api: true
> log_dir: /var/log/glance
> oslo_middleware:
> enable_proxy_headers_parsing: true
> - glance_image_import_config:
> image_import_opts:
> image_import_plugins: {get_param:
> GlanceImageImportPlugins}
>
> https://review.opendev.org/#/c/660791/29/deployment/glance/glance-api-container-puppet.yaml
>
> It's not tight to Hiera and it's generating param_config which is JSON
> and consumable by Ansible or etcd later.
> Here, glance_api_config and glance_image_import_config are the Puppet
> providers which configure a specific file for Glance but we could
> imagine a binding for Ansible like:
> glance_api_config: /etc/glance/glance-api.conf
>
> - Move the services to use this new interface and I think it'll take
> multiple cycles to do that due to our amount of services.
>
> Things I haven't figured out (yet):
> - I'm still working on figuring out how we will handle ExtraConfig,
> service_config_settings and all the Hiera datafiles that we support in
> puppet/role.role.j2.yaml (ideas welcome).
> I can only imagine something like:
> ExtraConfig:
> - glance_api_config:
> DEFAULT:
> log_dir: /var/log/glance-2
>
> Which somehow would override a previous hash. The blocker I found is
> that map_merge doesn't do deep merges, so if you merge
> glance_api_config, you overrides all keys... which is problematic if you
> only want to update one key. I'll investigate that further.
>
> - Backward compatibility for things like "ExtraConfig:
> glance::api::workers". Since we wouldn't rely on the classes anymore,
> our users calling the parameters from the classes will be broken. This
> also needs to be investigated.
>
> - non Puppet OpenStack modules like mysql, apache, etc, mostly use erb
> templates. This is, for now, out of scope and the plan is to look at
> OpenStack services first. But ideas welcome here as well. Of course we
> would prefer to consume upstream roles if they are well tested & maintained.
I believe we should "translate" hiera & puppet configurations we have in
t-h-t directly into k8s-native (or at least looking-like) YAML
structures, to have those consumable either as k8s config-maps or
ansible vars, or etcd keys transparently and interchangeable. That would
allow us to omit any additional translation work and intermediate data
abstractions in future, when/if we'd decided to convert t-h-t to manage
container pods and/or deploy it via k8s operators framework.
I know there had been the translation work done for adapting
ceph-ansible data structures (right, not really puppet...) into Rook
[0], an operator for Kubernetes clusters. So perhaps we should add the
ceph clusters deployment automation folks and teams in the loop and
leverage their experience with the subject.
[0] https://github.com/rook/rook
>
> If you want to review the ongoing work, here are the links:
> https://review.opendev.org/#/c/660726
> https://review.opendev.org/#/c/661377
> https://review.opendev.org/#/c/661093
> https://review.opendev.org/#/c/660791
>
> Thanks for reading that far, feel free to comment and contribute. I plan
> to continue this work and evaluate if all of this is actually worth it.
> --
> Emilien Macchi
--
Best regards,
Bogdan Dobrelya,
Irc #bogdando
More information about the openstack-discuss
mailing list