==================================
`Tiramisu` - Getting Started 
==================================

What is Configuration handling ?
================================= 

Due to more and more available configuration options required to set up 
an operating system, it became quite annoying to hand the necessary 
options to where they are actually used and even more annoying to add 
new options. To circumvent these problems the configuration management 
was introduced.

What is Tiramisu ?
=================== 

Tiramisu is yet another configuration handler, wich aims at producing 
flexible and fast configuration options access. The main advantages are 
its access :ref:`glossary#rules` and the fact that the configuration 's 
consistency is preserved at any time, see :ref:`glossary#consistency`.

There are type and structures's validations for configuration options, 
and validations towards the whole configuration.

Last but not least, configuration options can be reached and changed 
according to the access rules from nearly everywhere in the OS boxes, 
e.g. the containers via the `http/json` server.

Just the facts 
============== 

.. _gettingtiramisu: 

Download
---------

To obtain a copy of the sources, check it out from the repository using 
`git`. We suggest using `git` if one wants to access the current development.

::

    git clone git://git.labs.libre-entreprise.org/tiramisu.git

This will get you a fresh checkout of the code repository in a local 
directory named ``tiramisu``.

Understanding Tiramisu's architecture
--------------------------------------

The :ref:`glossary#schema` is loaded from an XML file, and the values of 
the configuration options are recovered from a `.ini` like file.

By now, all the in-depth informations about the configuration are stored 
in a **single** object, the :api:`config.Config()` object, wich is 
responsible of nearly everything. All the necessary options are stored 
into a configuration object, which is available nearly everywhere, so 
that adding new options becomes trivial.

This `Config()` is available from everywhere with the help of an http server
that serves configuration datas as `json` strings. 

.. figure:: architecture.png
   
   The basics of Tiramisu's architecture.
   Once loaded, http server serves the :api:`config.Config()` object, that is,
   the configuration options and the configuration groups. 

