rougail/docs/tutorial/boolean.rst

360 lines
10 KiB
ReStructuredText
Raw Normal View History

2025-05-14 13:17:08 +02:00
A new variable which has the `boolean` type
===============================================
.. objectives:: Objectives
In this section we will learn:
- how to make a boolean type variable
2025-05-26 22:09:29 +02:00
- how to reuse some value of a variable
(in this use case we will reuse the HTTP configuration variables values for the HTTPS configuration)
2025-05-14 13:17:08 +02:00
.. prerequisites:: Reminders
Let's summarize the configuration up to here
Whe have the `proxy_mode` configuration here:
.. extinclude:: https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/tag/v1.1_030/firefox/00-proxy.yml
:language: yaml
:caption: firefox/00-proxy.yml
..
---
proxy_mode:
description: Configure Proxy Access to the Internet
choices:
- No proxy
- Auto-detect proxy settings for this network
- Use system proxy settings
- Manual proxy configuration
- Automatic proxy configuration URL
default: No proxy
With the manual subfamily in case of the "Manual proxy configuration" configuration option has been chosen:
.. extinclude:: https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/tag/v1.1_030/firefox/10-manual.yml
:language: yaml
:caption: firefox/10-manual.yml
..
---
manual:
description: Manual proxy configuration
disabled:
variable: proxy_mode
when_not: 'Manual proxy configuration'
http_proxy:
description: HTTP Proxy
address:
description: HTTP address
type: domainname
params:
allow_ip: true
port:
description: HTTP Port
type: port
default: 8080
.. type-along:: The HTTPS mode
Now we will focus on configuring the HTTPS mode in case of "Manual proxy configuration".
.. image:: images/firefox_manual_https.png
2025-05-26 22:09:29 +02:00
Let's set two other variables for the HTTPS use only:
.. confval:: https_proxy.address
:type: `domainname`
This is an address setting for the manual HTTPS configuration
.. confval:: https_proxy.port
:type: `port`
This is a port setting for the manual HTTPS configuration
- So we have a `manual.http_proxy.address` variable and a `manual.https_proxy.address` variable
- In the same way, we have a `manual.http_proxy.port` variable and a `manual.https_proxy.port` variable
.. type-along:: What do we want to reuse?
2025-05-14 13:17:08 +02:00
Do we want to reuse, for the HTTPS mode, the same configuration as for the HTTP mode?
2025-05-27 15:33:32 +02:00
It depends on the context.
.. glossary::
context
A configuration is highly statefull and can change at any moment.
Sometimes somes minor changes in the :term:`user datas` involves chain reactions
in the whole :term:`configuration`.
The context is the state of the user datas at one moment, this term also refers
to the ability of a system to handle the *statefull* state of a configuration.
It expresses the transition between one situation to another situation,
that is, the deeply **statefull** aspects.
2025-05-14 13:17:08 +02:00
A new `boolean` type variable
-------------------------------
We have a new variable, named `use_for_https` here:
.. confval:: use_for_https
:type: `boolean`
:default: `true`
This is a setting that enables to reuse the HTTP proxy configuration for HTTPS
Its description in the structure file gives us this:
.. extinclude:: https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/tag/v1.1_030/firefox/20-manual.yml
:language: yaml
:caption: firefox/20-manual.yml
..
---
manual:
use_for_https:
description: Also use this proxy for HTTPS
type: boolean
default: true
2025-05-27 15:33:32 +02:00
.. type-along:: Update of the context
2025-05-26 22:09:29 +02:00
So now we have three new variables in the manual mode of the http proxy configuration.
.. extinclude:: https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/commit/v1.1_032/firefox/20-manual.yml
:language: yaml
:caption: firefox/20-manual.yml
..
---
manual:
use_for_https:
description: Also use this proxy for HTTPS
default: true
https_proxy:
description: HTTPS Proxy
address:
description: HTTPS address
type: domainname
params:
allow_ip: true
port:
description: HTTPS Port
type: port
default: 8080
And with this :confval:`use_for_https` boolean variable, there are two possibilities, and only two:
- The http proxy's configuration will be reused for the https proxy's configuration
- The http proxy's will not be reused for the https proxy's configuration
.. questions:: Question: disabled?
2025-05-27 11:03:29 +02:00
Is it relevant to use the :term:`disabled property <disabled>` here?
2025-05-26 22:09:29 +02:00
2025-05-27 11:03:29 +02:00
**answer**: No! Because we *need* to use these variables at any case,
2025-05-27 15:33:32 +02:00
we simply have to point their values in one direction or another depending on this or that context.
2025-05-27 11:03:29 +02:00
2025-05-27 15:33:32 +02:00
It is absolutely not a question of deactivating them. The `manual.https_proxy.address`
and the `manual.http_proxy.port` variables shall not be disabled (deactivated) in the manual mode.
2025-05-27 11:03:29 +02:00
Let's introduce here a new concept.
The hidden property
---------------------
.. glossary::
hidden
A variable or family's property is hidden if its value shall not be seen in a given consistency.
2025-05-27 15:33:32 +02:00
Anyway, these variables can be used again if the context evolves. This is the main difference
2025-05-27 11:03:29 +02:00
between the `hidden` and the `disabled` properties.
2025-05-27 15:33:32 +02:00
Now we can set a `hidden` property to the `https_proxy` family:
2025-05-27 11:03:29 +02:00
2025-05-27 15:33:32 +02:00
.. extinclude:: https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/tag/v1.1_033/firefox/20-manual.yml
:language: yaml
:caption: The `https_proxy` subfamily with the `hidden` property
:name: HiddenPropertySubfamily
2025-05-26 22:09:29 +02:00
2025-05-27 15:33:32 +02:00
..
---
manual:
use_for_https:
description: Also use this proxy for HTTPS
default: true
https_proxy:
description: HTTPS Proxy
hidden: true
address:
description: HTTPS address
type: domainname
params:
allow_ip: true
port:
description: HTTPS Port
type: port
default: 8080
The whole `https_proxy` family has been set to `hidden` here.
.. type-along:: A `hidden` variable with the `mandatory` parameter set still shall have a defined value
If we choose the manual proxy configuration mode,
.. extinclude:: https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/tag/v1.1_033/config/03/config.yaml
:language: yaml
:caption: The Manual proxy configuration value is set
..
---
proxy_mode: Manual proxy configuration
Note that in this context, if we don't set a value to the `manual.http_proxy.address` mandatory variable, even if it is `hidden`,
Rougail will raise an error:
.. todo:: Ce raw html là est sur manual.http_proxy.address et pas manual.https_proxy.address
.. raw:: html
:url: https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/tag/v1.1_033/config/03/output_ro.html
:class: error-box
..
<pre>🛑 ERRORS
<span style="color: #ff0000">┣━━ </span>The following variables are mandatory but have no value:
<span style="color: #ff0000">┗━━ </span> - manual.http_proxy.address (HTTP address)
</pre>
A conditional hidden family with a boolean variable
--------------------------------------------------------
But we want this `hidden` property to be assigned dynamically depending on the `use_for_https` `true` or `false` value.
How to achieve this.
It is possible to add a `variable` parameter to the `hidden` attribute like this:
.. extinclude:: https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/tag/v1.1_034/firefox/20-manual.yml
:language: yaml
:caption: The hidden property now depends on the value of `manual.use_for_https`
..
---
manual:
use_for_https:
description: Also use this proxy for HTTPS
default: true
https_proxy:
description: HTTPS Proxy
hidden:
variable: manual.use_for_https
address:
description: HTTPS address
type: domainname
params:
allow_ip: true
port:
description: HTTPS Port
type: port
default: 8080
2025-05-27 15:57:30 +02:00
A calculated default value
-------------------------------
There is something left in the https configuration mode of the proxy:
- if the use of the proxy variables for https are the same of the proxy variables for http,
that is, if `use_for_https` is true, the https configuration variables are hidden, that's OK.
- if the use of the proxy variables for https **are not** the same of the proxy variables for http,
we would like to set their default values to the http proxy variables values.
By now, the default settings are set like this:
.. code-block:: yaml
port:
description: HTTPS Port
type: port
default: 8080
The dynamic setting of a default can be achieved in this way:
.. extinclude:: https://forge.cloud.silique.fr/stove/rougail-tutorials/raw/tag/v1.1_035/firefox/20-manual.yml
:language: yaml
:caption: A default variable's value dynamically set
..
---
manual:
use_for_https:
description: Also use this proxy for HTTPS
default: true
https_proxy:
description: HTTPS Proxy
hidden:
variable: manual.use_for_https
address:
description: HTTPS address
type: domainname
params:
allow_ip: true
default:
variable: manual.http_proxy.address
port:
description: HTTPS Port
type: port
default:
variable: manual.http_proxy.port
.. note:: This is just a pointer to another variable's value.
The default values of the https address and port are pointing to the value of
the `manual.http_proxy.address` and the `manual.http_proxy.port` variables.
.. glossary::
calculated
We say that a variable's value or a default variable's value is calculated
when there is a pointer which refers to another variable's value
or if there is some :term:`jinja` code or a python function that calculates it.
2025-05-27 15:33:32 +02:00
.. keypoints:: Key points
**Keywords**
- The :term:`hidden` property set to a family
- The fact that a property can be set dynamically
- The conditional dependency of a `hidden` property that depends on a `boolean` variable.
2025-05-27 15:57:30 +02:00
- A calculated default value
2025-05-27 15:33:32 +02:00
**Progress**
2025-05-26 22:09:29 +02:00
2025-05-27 15:33:32 +02:00
We have arrived at the end of the proxy's manual configuration's section.