[requirements][oslo] Inclusion of CONFspirator in openstack/requirements

Adrian Turjak adriant at catalystcloud.nz
Mon Aug 17 04:42:32 UTC 2020


Hey OpenStackers!

I'm hoping to add CONFspirator to openstack/requirements as I'm using it 
Adjutant:
https://review.opendev.org/#/c/746436/

The library has been in Adjutant for a while but I didn't add it to 
openstack/requirements, so I'm trying to remedy that now. I think it is 
different enough from oslo.config and I think the features/differences 
are ones that are unlikely to ever make sense in oslo.config without 
breaking it for people who do use it as it is, or adding too much 
complexity.

I wanted to use oslo.config but quickly found that the way I was 
currently doing config in Adjutant was heavily dependent on yaml, and 
the ability to nest things. I was in a bind because I didn't have a 
declarative config system like oslo.config, and the config for Adjutant 
was a mess to maintain and understand (even for me, and I wrote it) with 
random parts of the code pulling config that may or may not have been 
set/declared.

After finding oslo.config was not suitable for my rather weird needs, I 
took oslo.config as a starting point and ended up writing another 
library specific to my requirements in Adjutant, and rather than keeping 
it internal to Adjutant, moved it to an external library.

CONFspirator was built for a weird and complex edge case, because I have 
plugins that need to dynamically load config on startup, which then has 
to be lazy_loaded. I also have weird overlay logic for defaults that can 
be overridden, and building it into the library made Adjutant simpler. I 
also have nested config groups that need to be named dynamically to 
allow plugin classes to be extended without subclasses sharing the same 
config group name. I built something specific to my needs, that just so 
happens to also be a potentially useful library for people wanting 
something like oslo.config but that is targeted towards yaml and toml, 
and the ability to nest groups.

The docs are here: https://confspirator.readthedocs.io/
The code is here: https://gitlab.com/catalyst-cloud/confspirator

And for those interested in how I use it in Adjutant here are some 
places of interest (be warned, it may be a rabbit hole):
https://opendev.org/openstack/adjutant/src/branch/master/adjutant/config
https://opendev.org/openstack/adjutant/src/branch/master/adjutant/feature_set.py 

https://opendev.org/openstack/adjutant/src/branch/master/adjutant/core.py
https://opendev.org/openstack/adjutant/src/branch/master/adjutant/api/v1/openstack.py#L35-L44 

https://opendev.org/openstack/adjutant/src/branch/master/adjutant/actions/v1/projects.py#L155-L164 

https://opendev.org/openstack/adjutant/src/branch/master/adjutant/actions/v1/base.py#L146 

https://opendev.org/openstack/adjutant/src/branch/master/adjutant/tasks/v1/base.py#L30 

https://opendev.org/openstack/adjutant/src/branch/master/adjutant/tasks/v1/base.py#L293 


If there are strong opinions about working to add this to oslo.config, 
let's chat, as I'm not against merging this into it somehow if we find a 
way that make sense, but while some aspects where similar, I felt that 
this was cleaner without being part of oslo.config because the mindset I 
was building towards seemed different and oslo.config didn't need my 
complexity.

Cheers,
Adrian
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstack.org/pipermail/openstack-discuss/attachments/20200817/a827b202/attachment-0001.html>


More information about the openstack-discuss mailing list