Config::Model enables a project developer to provide an interactive configuration editor (graphical, curses based or plain terminal) to his users. For this he must:
With the elements above, Config::Model will generate interactive configuration editors (with integrated help and data validation). These editors can be graphical (with Config::Model::TkUI), curses based (with Config::Model::CursesUI) or based on ReadLine.
Using this project, a typical configuration editor will be made of 3 parts :
The important part is the configuration model used by the validation engine. This model can be created or modified with a graphical editor (config-model-edit provided by Config::Model::Iself).
You're probably thinking of tools like webmin. Yes, these tools exist and work fine, but they have their set of drawbacks.
Usually, the validation of configuration data is done with a script which performs semantic validation and often ends up being quite complex (e.g. 2500 lines for Debian's xserver-xorg.config script which handles xorg.conf file).
In most cases, the configuration model is expressed in instructions (whatever programming language is used) and interspersed with a lot of processing to handle the actual configuration data.
Config::Model projects provide a way to get a validation engine where the configuration model is completely separated from the actual processing instructions.
A configuration model can be created and modified with the graphical interface provide by Config::Model::Itself. The model is saved in a declarative form (currently, a Perl data structure). Such a model is easier to maintain than a lot of code.
The model specifies:
So, in the end:
Config::Model interface can be:
All these interfaces are generated from the configuration model.
And configuration model can be created or modified with a graphical user interface (with Config::Model::Itself)
Since the syntax of configuration files vary wildly form one program to another, most people who want to use this framework will have to provide a dedicated parser/writer.
Nevertheless, this project provides a writer/parser for some common format: ini style file and perl file.
With the additional Config::Model::Backend::Augeas, Augeas library can be used to read and write some configuration files.
Subscribe to the config-model-users list: