structure files

This commit is contained in:
gwen 2024-10-21 19:50:26 +02:00
parent fbc0744f61
commit 5dc7d2b630
2 changed files with 61 additions and 47 deletions

View file

@ -30,15 +30,16 @@ What is a consistency handling system ?
Here is the :xref:`tiramisu library`. Here is the :xref:`tiramisu library`.
In the Rougail scope, we call it :term:`variable`\ s and :term:`families`. In the Rougail scope, we call it :term:`variable`\ s and :term:`families`.
In Rougail, the families and variables are located in the :term:`dictionaries`. In Rougail, the families and variables are located in the :term:`structure files <dictionaries>`.
And this is what we are going to explain in this page. And this is what we are going to explain in this page.
The dictionaries The structure files
--------------------- ---------------------
.. glossary:: .. glossary::
structure file
dictionary dictionary
dictionaries dictionaries
@ -49,6 +50,8 @@ The dictionaries
Rougail reads all the dictionaries and loads them into a single object Rougail reads all the dictionaries and loads them into a single object
that handles the variables consistency. that handles the variables consistency.
A dictionary file is a structure file, we call a dictionary a structure file.
.. image:: images/schema.png .. image:: images/schema.png
The main advantage is that declaring variables and writing consistency is as simple The main advantage is that declaring variables and writing consistency is as simple
@ -57,10 +60,10 @@ It simplifies a lot of things.
And rather than writing :term:`Tiramisu` code, we can declare variables and describe the relationships between variables in a declarative mode (that is, in a YAML file). And rather than writing :term:`Tiramisu` code, we can declare variables and describe the relationships between variables in a declarative mode (that is, in a YAML file).
Once the dictionaries are loaded by Rougail, we find all the power of the :term:`Tiramisu` configuration management tool. Once the structure files are loaded by Rougail, we find all the power of the :term:`Tiramisu` configuration management tool.
The YAML dictionaries format The YAML structure files format
----------------------------- ------------------------------------
Before getting started with Rougail we need to learn the specifics of the YAML dictionaries file format (as well as some templating concepts). Before getting started with Rougail we need to learn the specifics of the YAML dictionaries file format (as well as some templating concepts).
@ -95,7 +98,7 @@ You can see that there is just a `version` specification.
The variables The variables
----------------- -----------------
Here is a :term:`dictionary` example with a variable into it: Here is a :term:`structure file <dictionary>` example with a variable into it:
.. extinclude:: https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/commit/v1.1_003/firefox/00-proxy.yml .. extinclude:: https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/commit/v1.1_003/firefox/00-proxy.yml
:linenos: :linenos:
@ -105,7 +108,7 @@ Here is a :term:`dictionary` example with a variable into it:
:download:`source file <https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/commit/v1.1_003/firefox/00-proxy.yml>` :download:`source file <https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/commit/v1.1_003/firefox/00-proxy.yml>`
Here we declare a **variable** named `proxy_mode` without a :term:`default value`. Here we declare a **variable** named `proxy_mode` without a default value.
A variable can be defined with no default value at all. A variable can be defined with no default value at all.
Here is the same variable with a description label: Here is the same variable with a description label:

View file

@ -5,7 +5,7 @@ Preliminaries
We will learn how to: We will learn how to:
- create a Rougail :term:`dictionary` (the structure description file) - create a Rougail :term:`structure description file <dictionary>`
- define a Rougail format version - define a Rougail format version
- define a Rougail :term:`variable` and set its :term:`value` - define a Rougail :term:`variable` and set its :term:`value`
@ -13,7 +13,7 @@ Preliminaries
We already learned in other workshops how to: We already learned in other workshops how to:
- define a Rougail :term:`dictionary` - define a Rougail :term:`structure description file <dictionary>`
:ref:`Here is an empty Rougail dictionnary <RougailDictionaryEmptyFile>` :ref:`Here is an empty Rougail dictionnary <RougailDictionaryEmptyFile>`
@ -29,41 +29,6 @@ Preliminaries
:ref:`Here is a Rougail variable with a default value <RougailDictionaryFirstVariableDefault>` :ref:`Here is a Rougail variable with a default value <RougailDictionaryFirstVariableDefault>`
Values are mandatory
-------------------------
If, like in this situation:
.. extinclude:: https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/tag/v1.1_004/firefox/00-proxy.yml
:linenos:
:language: yaml
:caption: The :file:`config/01/config.yaml` rougail dictionnary file, with no default value set.
:name: RougailDictionaryNoDefaultUseCase
In this situation there are no default value set. The rougail CLI will output an error :
.. code-block:: shell
:caption: A rougail Command Line Utility call with the :file:`config/01/config.yaml` rougail dictionnary file
foo@bar:~$ rougail -v 1.1 -m firefox -u file -ff config/01/config.yaml
.. raw:: html
<pre>
.. raw:: html
:url: https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/commit/v1.1_003/config/01/output_ro.html
.. raw:: html
</pre>
Rougail waits for a value to be set, that's why.
.. seealso:: To go further, have a look at the :tiramisu:`mandatory option <glossary.html#term-mandatory-option>` Tiramisu's definition.
The integrator role The integrator role
---------------------- ----------------------
@ -72,7 +37,7 @@ The integrator role
integrator integrator
An integrator in the Rougail logic is the person who writes the dictionaries. An integrator in the Rougail logic is the person who writes the :term:`structure files <dictionaries>`\ .
He has the responsibilité of the integration process, that is, He has the responsibilité of the integration process, that is,
defines the variables and the relationship between them, the variables that are allowed defines the variables and the relationship between them, the variables that are allowed
(or not) to be set, and so on. His responsabilites are the **structuration** and the **consistency** (or not) to be set, and so on. His responsabilites are the **structuration** and the **consistency**
@ -94,7 +59,7 @@ The operator role
his responsabilities are to set variable values correctly. his responsabilities are to set variable values correctly.
The user :term:`value`\ s, that is the values that have been set by the operator, are validated The user :term:`value`\ s, that is the values that have been set by the operator, are validated
by the dictionary structure. by the :term:`structure file <dictionary>`.
.. image:: images/operator.png .. image:: images/operator.png
@ -108,11 +73,57 @@ The Rougail CLI can output a rather complete view of the dataset:
.. image:: images/UserDataOutput.png .. image:: images/UserDataOutput.png
Values are mandatory
-------------------------
It is the operator's responsibility to set configuration options values.
So, if :
- there is no default value set in the structure file,
- no value is set in the value file:
.. extinclude:: https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/tag/v1.1_004/firefox/00-proxy.yml
:linenos:
:language: yaml
:caption: The :file:`config/01/config.yaml` rougail dictionnary file, with no default value set.
:name: RougailDictionaryNoDefaultUseCase
In this situation there are no default value set. The rougail CLI will output an error :
.. code-block:: shell
:caption: A rougail Command Line Utility call with the :file:`config/01/config.yaml` rougail dictionnary file
foo@bar:~$ rougail -v 1.1 -m firefox -u file -ff config/01/config.yaml
.. raw:: html
:url: https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/commit/v1.1_003/config/01/output_ro.html
Rougail waits for a value to be set, that's why.
.. seealso:: To go further, have a look at the :tiramisu:`mandatory option <glossary.html#term-mandatory-option>` Tiramisu's definition.
Type inférence
-----------------
By default, rougail infers a `string` type.
If the operator sets an option value with the `string` type, like this:
.. extinclude:: https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/commit/v1.1_003/config/05/config.yaml
:linenos:
:language: yaml
:caption: The :file:`config/05/config.yaml` rougail dictionnary file, with no default value set.
:name: RougailDictionaryNoDefaultUseCaseIntOptionValue
.. raw:: html
:url: https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/commit/v1.1_003/config/05/output_ro.html
.. keypoints:: Key points progress .. keypoints:: Key points progress
**Keywords** **Keywords**
- :term:`dictionary`: structure description file - :term:`structure file <dictionary>`: structure description file
- :term:`variable`: an option's name which has a value - :term:`variable`: an option's name which has a value
- a variable's description - a variable's description
- a variable's default value - a variable's default value