239 lines
8.1 KiB
ReStructuredText
239 lines
8.1 KiB
ReStructuredText
Preliminaries
|
|
================
|
|
|
|
.. objectives:: Objectives
|
|
|
|
We will learn how to:
|
|
|
|
- create a Rougail :term:`structure description file <dictionary>`
|
|
- define a Rougail format version
|
|
- define a Rougail :term:`variable` and set its :term:`value`
|
|
|
|
.. type-along:: Reminders
|
|
|
|
We already learned in other workshops how to:
|
|
|
|
- define a Rougail :term:`structure description file <dictionary>`
|
|
|
|
:ref:`Here is an empty Rougail dictionnary <RougailDictionaryEmptyFile>`
|
|
|
|
- define a variable and its default value
|
|
|
|
:ref:`Here is a first Rougail variable in a Rougail dictionnary <RougailDictionaryFirstVariable>`
|
|
|
|
- define a variable with a description
|
|
|
|
:ref:`Here is a Rougail variable with a description <RougailDictionaryFirstVariableDescription>`
|
|
|
|
- define a variable with a description and a default value
|
|
|
|
:ref:`Here is a Rougail variable with a default value <RougailDictionaryFirstVariableDefault>`
|
|
|
|
|
|
The integrator role
|
|
----------------------
|
|
|
|
.. glossary::
|
|
|
|
integrator
|
|
|
|
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,
|
|
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**
|
|
of the variables.
|
|
|
|
.. image:: images/integrator.png
|
|
|
|
.. important:: Note that there is a strong consistency, it means that the validation is done across
|
|
the entire structure, not only with a schema (type) validation system.
|
|
|
|
The operator role
|
|
---------------------
|
|
|
|
.. glossary::
|
|
|
|
operator
|
|
|
|
An operator ih the Rougail logic is the person who gives :term:`value`\ s to the pre-defined variables,
|
|
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
|
|
by the :term:`structure file <dictionary>`.
|
|
|
|
.. image:: images/operator.png
|
|
|
|
The operator can use the Rougail CLI interface:
|
|
|
|
.. image:: images/QuestionaryChoice.png
|
|
|
|
.. index:: Rougail CLI
|
|
|
|
The Rougail CLI can output a rather complete view of the dataset:
|
|
|
|
.. image:: images/UserDataOutput.png
|
|
|
|
Values are mandatory
|
|
-------------------------
|
|
|
|
.. important:: 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_010/firefox/00-proxy.yml
|
|
:linenos:
|
|
:language: yaml
|
|
:caption: The :file:`firefox/00-proxy.yaml` rougail structure file, with no default value set.
|
|
:name: RougailDictionaryNoDefault
|
|
|
|
..
|
|
---
|
|
proxy_mode:
|
|
|
|
Then 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_010/config/01/output_ro.html
|
|
|
|
..
|
|
<pre>🛑 ERRORS
|
|
<span style="color: #ff0000">┣━━ </span>The following variables are mandatory but have no value:
|
|
<span style="color: #ff0000">┗━━ </span> - proxy_mode
|
|
</pre>
|
|
|
|
.. important:: Once defined, an option configuration :term:`value` is :term:`mandatory`.
|
|
|
|
Rougail waits for the `proxy_mode` configuration option's value to be set.
|
|
|
|
.. seealso:: To go further, have a look at the :tiramisu:`mandatory option <glossary.html#term-mandatory-option>` Tiramisu's definition.
|
|
|
|
.. glossary::
|
|
|
|
mandatory
|
|
|
|
A variable is mandatory when a value is required, that is, `None` is not an option.
|
|
|
|
Typing a variable
|
|
-----------------
|
|
|
|
If the `type` attribute is not set, rougail infers a `string` type for the `proxy_mode` configuration option variable type as defined in the structure file.
|
|
|
|
If the operator sets an option value for example with the `number` type, like this:
|
|
|
|
.. code-block:: yaml
|
|
|
|
---
|
|
example_var:
|
|
description: Configure Proxy Access to the Internet
|
|
type: number
|
|
|
|
Then rougail will expect a `int` or a `float` as a value for the `example_var` variable.
|
|
In our firefox use case, the real type of the `proxy_mode` variable is a `choice` type:
|
|
|
|
.. extinclude:: https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/tag/v1.1_013/firefox/00-proxy.yml
|
|
:linenos:
|
|
:language: yaml
|
|
:caption: The :file:`firefox/00-proxy.yml` rougail dictionnary file, with a default value set.
|
|
:name: RougailDictionaryChoiceTypeWitheDefault
|
|
|
|
..
|
|
---
|
|
proxy_mode:
|
|
description: Configure Proxy Access to the Internet
|
|
type: choice
|
|
choices:
|
|
- No proxy
|
|
- Auto-detect proxy settings for this network
|
|
- Use system proxy settings
|
|
- Manual proxy configuration
|
|
- Automatic proxy configuration URL
|
|
default: No proxy
|
|
|
|
.. raw:: html
|
|
:url: https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/commit/v1.1_013/config/01/output_ro.html
|
|
|
|
..
|
|
<pre>╭────────────────────────── Caption ──────────────────────────╮
|
|
│ Variable <span style="color: #ffd700">Default value</span> │
|
|
│ <span style="color: #5c5cff">Undocumented variable</span> Modified value │
|
|
│ <span style="color: #ff0000">Undocumented but modified variable</span> (<span style="color: #00aa00">Original default value</span>) │
|
|
│ <span style="color: #ffaf00">Unmodifiable variable</span> │
|
|
╰─────────────────────────────────────────────────────────────╯
|
|
Variables:
|
|
<span style="color: #5c5cff">┗━━ </span>📓 proxy_mode: <span style="color: #ffd700">No proxy</span>
|
|
</pre>
|
|
|
|
The `proxy_mode` variable here, implicitely requires a value. It is a :term:`mandatory` variable.
|
|
|
|
It shall have a value, but what if the user *does not* specify any value?
|
|
There is a possibility of setting a default value, wich is set as `No proxy` by default.
|
|
|
|
Container type
|
|
-----------------
|
|
|
|
We say that the `proxy_mode` variable is *constrained* (by the `choice` type).
|
|
|
|
We have the list of the possible (authorized) values:
|
|
|
|
- `No proxy`
|
|
- `Auto-detect proxy settings for this network`
|
|
- `Use system proxy settings`
|
|
- `Manual proxy configuration`
|
|
- `Automatic proxy configuration URL`
|
|
|
|
.. glossary::
|
|
|
|
choice type
|
|
|
|
The `proxy_mode` setting is "choice" (`type: choice`) means that
|
|
there is a list of available values that can be selected.
|
|
|
|
.. note:: Indeed, in the Firefox configuration, it is possible to define several configuration modes,
|
|
from no proxy at all (`no proxy`) to a kind of automatic configuration mode from a file (`set up proxy configuration from a file`).
|
|
|
|
.. keypoints:: Key points progress
|
|
|
|
**Keywords**
|
|
|
|
- :term:`structure file <dictionary>`: structure description file
|
|
- :term:`variable`: an option's name which has a value
|
|
- a variable's description
|
|
- a variable's type
|
|
- a variable's default value
|
|
- the :term:`integrator` and :term:`operator` roles
|
|
- a mandatory value
|
|
- a choice type
|
|
|
|
To sum up, we have arrived at this point in writing the structure file:
|
|
|
|
**Structure description file**
|
|
|
|
.. extinclude:: https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/tag/v1.1_013/firefox/00-proxy.yml
|
|
:linenos:
|
|
:language: yaml
|
|
:caption: A rougail dictionnary file with a variable named `proxy_mode`, with a default value.
|
|
|
|
..
|
|
|
|
.. raw:: text
|
|
|
|
---
|
|
proxy_mode:
|
|
description: Configure Proxy Access to the Internet
|
|
type: choice
|
|
choices:
|
|
- No proxy
|
|
- Auto-detect proxy settings for this network
|
|
- Use system proxy settings
|
|
- Manual proxy configuration
|
|
- Automatic proxy configuration URL
|
|
default: No proxy
|
|
|