[SSSD] [INI] Ding-libs, controversial points in the design to allow merging configuration snippets

Dmitri Pal dpal at redhat.com
Mon Apr 7 23:20:01 UTC 2014


Hello,

This is the continuation of the discussion of the following design page:
https://fedorahosted.org/sssd/wiki/DesignDocs/ding-libs/INIConfigMerge

I see three controversial items in this design based on the previous 
discussion:

a) Merging values
This horse has been beaten in the other thread.
The answer is simple. If we can make SSSD to make a change to not use 
lists or domains or providers as Simo suggest we can remove this 
consideration from the merge design. If we can't then we need to make it 
optionally available in the merge logic. To make a final decision here 
we need Jakub's input on how hard it is to implement Simo's idea.

c) Snippets in a directory vs. snippets in a subdirectory per application.
The design is built around the fact that it is better to put snippets 
into different subdirectories per source/application that updated them 
so that we can make sure that different sources of config info do not 
step on each other. We also can jail the config files with SELinux and 
allow different access to different subdirectories. This is a deviation 
from the current approaches where all snippets are supposed to go into a 
single directory.
IMO this is quite limiting and I see an opportunity to change it for 
better. However if people agree with Simo that this is too over 
engineered and complicated I can understand. It is in fact more complex. 
So chime in. If you think single directory is good enough so be it.

d) .merge files
I do not like them either.
If we:
a) Can avoid value merges
b) Will require each snippet to have a section header ( the problem is 
really the fact that INI automatically generates one called "default" if 
there is none so it is hard to say whether the parse filled the blank or 
the snippet section really is called "[default]"). I think I can work 
around it but it would require a change that I wanted to avoid with the 
design.
c) Do not allow overwrites
we can drop the .merge files.

They are needed to support any of the three use cases above.
I am mostly concerned about the last one because allowing overwrites on 
per section basis was something was requested in one of the RFEs.
However here is how we can work around this because IMO it is a corner case.

- The merge code will read snippets from a single directory.
- It will inspect the name. If the name is <xxx>.over.conf then it will 
treat this file as the snippet that the author of the snippet wants to 
use to overwrite sections in the original config file. If the name of 
the file is <yyyy>.conf it will user it to do additive merge. If file 
has any other extension it will be ignored.

Common rules about snippets:
- Snippets must have a section defined - absence will cause an error and 
snippet will be ignored
- Snippets can't have the same section defined in more than one .conf 
file. If same name is detected it will be treated as a collision and all 
snippets will be ignored

Additional rules about <xxx>.over.conf:
- Snippets of this kind will be applied only on top of the core config 
file and only if the application is running in the mode that allows such 
overwrite.
- The overwrite will be done on the section by section basis, i.e. no 
merging of the values between the two sections (though merge logic 
supports this too)
- If there is more than one section in the file then each section will 
be processed according to these rules

If we go with something like this we can avoid .merge files and rely on 
the naming convention. Is this acceptable? I though not, this is why I 
invented .merge files but if we think this way is better I am fine with it.


Next week I am traveling, I will have some time to do prototyping while 
I am flying so I want to get to consensus before the end of the week.

-- 
Thank you,
Dmitri Pal

Sr. Engineering Manager IdM portfolio
Red Hat, Inc.




More information about the sssd-devel mailing list