You even make the conflicts "reliably handled" by processing the contents of, 
say, /etc/config/wireless.d/* in sort order (the old "01-blah", "02-foo" 
trick).  This way, if one package drops in a config file that you want to 
override, you only have to make sure that your override comes "after" the file 
it's overriding.

> On Mar 5, 2015, at 11:25 AM, David Lang <da...@lang.hm> wrote:
> 
> On Thu, 05 Mar 2015 13:36:10 +0100, Matthias Schiffer wrote:
>> Hi,
>> during the development of our Freifunk firmware framework "Gluon" we've
>> come to the conclusion that the current UCI configuration format using
>> static files doesn't always fit our needs. Therefore we propose a new
>> feature we've called "UCI overlays".
>> 
>> The basic idea is that we'd like to provide UCI configuration by other
>> means than the static files in /etc/config, for example from a database
>> or generated by scripts on the fly (the latter being our main usecase -
>> we'd like to generate configuration for netifd and fw3 based on
>> meta-configuration data). This should work transparently, without
>> needing changes in the config consumers (applications).
>> 
>> The overlay-provided configuration packages should be merged with the
>> config read from /etc/config. We'd like to generate both config sections
>> which may be overruled by corresponding options in /etc/config, and
>> read-only sections which can't be changed by the user through UCI.
>> 
>> We see two different ways to implement this:
>> 
>> (1) Make the "overlay" an alternative backend which uses the "file"
>> backend to merge generated config with the one from files
>> 
>> (2) Introduce overlays as a new concept in libuci
>> 
>> 
>> While the first option would need less changes in libuci, it doesn't
>> allow stacking different overlays, so we're in favour of option 2.
>> 
>> Both ways would need a config file (/etc/uci.conf?) to configure the
>> overlays being used. Our plan is to implement overlays as dlopen-able
>> plugins loaded from somewhere like /lib/uci/overlay so it is possible
>> for other packages to provide overlay implementations.
>> 
>> In addition, we'd like to add a new attribute "readonly" to the
>> uci_element structure so changing read-only configuration will fail as
>> soon as someone tries to uci_set it.
>> 
>> Does this sound reasonable? We can develop the needed extensions
>> ourselves, but of course we'd like to get this feature upstream to avoid
>> carrying the patches downstream indefinitly, so we're eager to know what
>> you think of this proposal.
> 
> Should this be built in to uci, or should this be a set of utilities that 
> take /etc/config/wireless.d/* and create /etc/config/wireless when run (which 
> then gets used normally)?
> 
> You can then have scripts, database tools, config management tools (puppet, 
> chef, etc) drop things in such directories and the utilities can run in cron 
> (or use inotify in an advanced setup) to notice that there was a change and 
> do the appropriate thing to re-read the config.
> 
> Building it into uci is more elegant, but I worry that having it that 
> integrated will mean that each new way to create config info will end up 
> requiring changes to uci. File based is a little less elegant, but it makes 
> it much easier for people to add new ways to do things.
> 
> If you are assembling /etc/config/wireless from /etc/config/wireless.d/* you 
> can just say that the resulting file is the combination of all the included 
> files, and it's up to the admin to avoid conflicts between the pieces. If you 
> take /etc/config/wireless and overlay other things on it, you have the 
> question of how do you negate something that was in the base file.
> 
> 
> 
> I do think that something along these lines should be done. It would be very 
> nice to be able to break up existing config files a little bit (for example, 
> /etc/config/network split raw interfaces from bridge configs from switch 
> configs). And it would be great to be able to have a config management tool 
> be able to just add-on to the base config, replacing part of it, without the 
> config management tool needing to manage everything in the file.
> 
> Over on the CeroWRT list we are discussing what things are in CeroWRT that 
> have not yet been unstreamed into OpenWRT, and most of them come down to 
> config items. Some of them are 'fairly' small (like renaming interfaces by 
> function, so you have an interface named WAN rather than eth0), while others 
> are very fundamental (routing between each wifi interface and the wired 
> network instead of bridging). An overlay or name.d approach would make it 
> much easier for these different approaches to be presented as packages that 
> can be added to OpenWRT without forcing everyone to change to them.
> 
> David Lang
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel@lists.openwrt.org
> https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to