2023-12-17 20:25:53 +01:00
The variables
2024-10-21 15:25:00 +02:00
==============
2023-12-17 20:25:53 +01:00
Synopsis
2024-10-21 15:25:00 +02:00
---------
2023-12-17 20:25:53 +01:00
.. glossary ::
variable
variables
2024-10-21 15:03:34 +02:00
A variable is an abstract black box (container) paired with an associated symbolic name, wmost often an option configuration, hich contains some defined or undefined data setting referred to as a :term: `value` .
2024-07-01 14:06:59 +02:00
2024-10-21 15:03:34 +02:00
value
2025-02-03 20:20:15 +01:00
A value is a variable's setting.
Variable can have a default value, that is a setting defined in the :term: `dictionary` structure,
or no value at all, then the value needs to be define later by the :term: `operator` .
2024-10-21 15:03:34 +02:00
.. discussion :: Discussion
2025-02-03 20:20:15 +01:00
The variable is, by definition, strongly typed.
Rougail uses static type definition and even type inference.
Indeed, the constistency handling system heavyly relies on the type system definition.
Variables may only be able to store a specified data type.
OK, variables are the containers for storing the values. It has something to do with typing.
But consitency handling system is is not just about strong typing. It is more than that.
2023-12-17 20:25:53 +01:00
2025-02-03 20:20:15 +01:00
Names
2024-10-21 15:25:00 +02:00
------
2024-07-01 14:06:59 +02:00
2025-02-03 20:20:15 +01:00
Variable name
2024-07-01 14:06:59 +02:00
2025-02-03 20:20:15 +01:00
Variable's associated symbolic name.
.. seealso ::
Have a look at the :ref: `convention on variable naming link <convention on variable names>` .
2023-12-17 20:25:53 +01:00
2024-07-01 14:06:59 +02:00
Shorthand declaration
----------------------------
Shorthand declaration is a way to declare a variable in a single line. But you can only define variable name, description, multi or default value.
To create a variable, just add a key with it's name and default value as value.
Be careful not to declare any other attributes.
To declare a multi variable just add a list as default value.
By default, the description of the variable is the variable name.
If you add a comment in the same line of the name, this comment will be used has a description.
.. code-block :: yaml
---
version: '1.1'
my_variable: 1 # This is a great integer variable
my_multi_variable: # This is a great multi string variable
- value1
- value2
2023-12-17 20:25:53 +01:00
Parameters
-------------
2024-07-01 14:06:59 +02:00
.. list-table ::
2023-12-17 20:25:53 +01:00
:widths: 15 45
:header-rows: 1
2024-07-01 14:06:59 +02:00
2023-12-17 20:25:53 +01:00
* - Parameter
- Comments
2024-07-01 14:06:59 +02:00
2023-12-17 20:25:53 +01:00
* - **help**
2024-07-01 14:06:59 +02:00
`string`
2023-12-17 20:25:53 +01:00
- Additional help associated with the variable.
2024-07-01 14:06:59 +02:00
* - **default**
2023-12-17 20:25:53 +01:00
- Default value(s) of the variable.
2024-07-01 14:06:59 +02:00
2023-12-17 20:25:53 +01:00
This value is typed, you must correctly fill out the YAML file to avoid defining a value with an incorrect type. For example, a `number` must be a digit type, a multiple variable must be a `list` type, ...
2024-07-01 14:06:59 +02:00
2023-12-17 20:25:53 +01:00
For a non :term: `leading` multiple variable, the first value defined in the list will also be the default value proposed if a new value is added to this variable.
* - **validators**
`list`
- Value validators.
2024-07-01 14:06:59 +02:00
Jinja template list. The value of the variable will be considered invalid if the template has a return value.
2023-12-17 20:25:53 +01:00
* - **auto_save**
2024-07-01 14:06:59 +02:00
`boolean`
2023-12-17 20:25:53 +01:00
- Variable with automatically modified value.
2024-07-01 14:06:59 +02:00
2023-12-17 20:25:53 +01:00
A variable with automatically modified value is a variable whose value will be considered as *modified* (that is, it is no longer the variable's default value).
For example, if the value of this variable comes from a calculation, the value will no longer be recalculated.
These variables are usually :term: `required` variables. In fact, these variables are only automatically modified if they have a value.
2024-07-01 14:06:59 +02:00
2023-12-17 20:25:53 +01:00
A :term: `leader` or :term: `follower` variable cannot have the `auto_save` property.
**Default value** : `false`
* - **mode**
`string`
- Variable's mode.
2024-07-01 14:06:59 +02:00
2023-12-17 20:25:53 +01:00
**Default value** : The `default` mode of a variable is the mode of the parent family.
Special cases :
2024-07-01 14:06:59 +02:00
2023-12-17 20:25:53 +01:00
- a variable with an automatically modified value or an automatic read-only variable is by default in `basic` mode
- if the variable is not in a family, the variable will have a `standard` mode by default
- a :term: `mandatory` variable without default value (calculate or not) will have a `basic` mode
* - **multi**
`boolean`
- The value of the variable is a list.
**Default value** : `false`
* - **unique**
`boolean`
- The :term: `multiple` type variable accepts the same value several times. If unique is set to `false` , a :term: `multiple` variable only accepts the same value once in the list.
**Default value** : `false`
* - **hidden**
2024-07-01 14:06:59 +02:00
`boolean` or :term: `calculation`
2023-12-17 20:25:53 +01:00
- Invisible variable.
2024-07-01 14:06:59 +02:00
2023-12-17 20:25:53 +01:00
Enables us to *hide* a variable.
This means that the variable will no longer be visible in `read-write` mode, but only for calculations or in `read-only` mode.
2024-07-01 14:06:59 +02:00
2023-12-17 20:25:53 +01:00
When a variable is made invisible, the user will not be able to modify its value; if he has already succeeded in modifying it, this value will not be taken into account.
**Default value** : `false`
* - **disabled**
2024-07-01 14:06:59 +02:00
`boolean` or :term: `calculation`
2023-12-17 20:25:53 +01:00
- Disabled variable.
Allows us to deactivate a variable.
This means that the variable will no longer be visible to the user but also to a :term: `calculation` .
**Default value** : `false` .
* - **mandatory**
2024-07-01 14:06:59 +02:00
`boolean` or :term: `calculation`
2023-12-17 20:25:53 +01:00
- Mandatory variable.
Variable whose value is `required` .
For a multiple variable, this means that the list shall not be empty.
**Default value** : `true`
* - **redefine**
`boolean`
- It is possible to define a variable in one :term: `dictionary` and change its behavior in a second :term: `dictionary` . In this case you must explicitly redefine the variable.
**Default value** : `false`
* - **exists**
`boolean`
- This attribute does two things:
- creates a variable if it does not exist in another :term: `dictionary` (otherwise do nothing), in this case the value of the attribute must be `true`
- in conjunction with the `redefine` attribute set to `true` , only modifies the behavior if it is pre-existing, in which case the attribute's value must be `false` .
2024-07-01 14:06:59 +02:00
2023-12-17 20:25:53 +01:00
**Default value** : `null`
* - **test**
`list`
- The `test` attribute is a special attribute that allows :term: `dictionary` designers to influence a test robot by specifying useful values to test.
2024-07-01 14:06:59 +02:00
2023-12-17 20:25:53 +01:00
Concretely, the content of this attribute is recorded in the `information` attribute of the corresponding `Tiramisu` option object.
Variables types
----------------
2024-07-01 14:06:59 +02:00
2023-12-17 20:25:53 +01:00
A variable **has a type** .
This type enables the variable to define the values that are accepted by this variable.
2024-07-01 14:06:59 +02:00
.. list-table ::
2023-12-17 20:25:53 +01:00
:widths: 15 25 20 15
:header-rows: 1
2024-07-01 14:06:59 +02:00
2023-12-17 20:25:53 +01:00
* - Value
- Comments
- Parameters
- Samples
2024-07-01 14:06:59 +02:00
2023-12-17 20:25:53 +01:00
* - string
- character string (default type)
2024-07-01 14:06:59 +02:00
-
2023-12-17 20:25:53 +01:00
- test
2024-07-01 14:06:59 +02:00
2023-12-17 20:25:53 +01:00
"1"
"true"
* - number
2024-07-01 14:06:59 +02:00
- a number
2023-12-17 20:25:53 +01:00
- `min_number` : minimum number allowed
2024-07-01 14:06:59 +02:00
2023-12-17 20:25:53 +01:00
`max_number` : maximum number allowed
- 1
* - float
- a floating number
2024-07-01 14:06:59 +02:00
-
2023-12-17 20:25:53 +01:00
- 1.2
* - boolean
- A boolean, if no value is defined the default value of this variable will be `true` , the variable will also be :term: `mandatory` by default
2024-07-01 14:06:59 +02:00
-
2023-12-17 20:25:53 +01:00
- `true`
2024-07-01 14:06:59 +02:00
2023-12-17 20:25:53 +01:00
`false`
* - secret
- a secret (like a password, a private key, etc.)
2024-07-01 14:06:59 +02:00
-
2023-12-17 20:25:53 +01:00
- `hO_'hi`
2024-07-01 14:06:59 +02:00
* - mail
- a mail address
-
2023-12-17 20:25:53 +01:00
- test@rougail.example
* - unix_filename
- a file name in the Unix meaning
2024-07-01 14:06:59 +02:00
-
2023-12-17 20:25:53 +01:00
- :file: `/etc/passwd`
2024-07-01 14:06:59 +02:00
* - date
2023-12-17 20:25:53 +01:00
- a date in the format `%Y-%m-%d`
2024-07-01 14:06:59 +02:00
-
2023-12-17 20:25:53 +01:00
- `2021-01-30`
* - unix_user
2024-07-01 14:06:59 +02:00
- a user in the Unix meaning
-
2023-12-17 20:25:53 +01:00
- test
* - ip
- any kind of IPv4 address
- `private_only` : only private IPs (`false` by default)
`allow_reserved` : allows reserved IPs (`true` by default)
- `1.2.3.4`
* - cidr
- any IPv4 address in the CIDR format
- `private_only` : only private IPs (`false` by default)
2024-07-01 14:06:59 +02:00
`allow_reserved` : allows reserved IPs (`false` by default)
2023-12-17 20:25:53 +01:00
- `1.2.3.4/24`
* - netmask
- mask of an IPv4 address
2024-07-01 14:06:59 +02:00
-
2023-12-17 20:25:53 +01:00
- `255.255.255.0`
* - network
- network address
2024-07-01 14:06:59 +02:00
-
2023-12-17 20:25:53 +01:00
- `192.168.1.0`
* - network_cidr
- network address in CIDR format
2024-07-01 14:06:59 +02:00
-
2023-12-17 20:25:53 +01:00
- `192.168.1.0/24`
* - broadcast
- broadcast address
2024-07-01 14:06:59 +02:00
-
2023-12-17 20:25:53 +01:00
- `255.255.255.255`
* - netbios
2024-07-01 14:06:59 +02:00
- netbios name
-
2023-12-17 20:25:53 +01:00
- machine
* - domainname
2024-07-01 14:06:59 +02:00
- domain name
2023-12-17 20:25:53 +01:00
- `allow_ip` : allows an IP rather than a domain name (`false` by default)
2024-07-01 14:06:59 +02:00
2023-12-17 20:25:53 +01:00
`allow_cidr_network` : allows a CIDR type network address (`false` by default)
2024-07-01 14:06:59 +02:00
2023-12-17 20:25:53 +01:00
`allow_without_dot` : allows names without a dot (`false` by default)
2024-07-01 14:06:59 +02:00
2023-12-17 20:25:53 +01:00
`allow_startswith_dot` : allows starting with a point (`false` by default)
- `rougail.example`
2024-07-01 14:06:59 +02:00
* - hostname
- host name
2023-12-17 20:25:53 +01:00
- `allow_ip` : allows an IP rather than a domain name (`false` by default)
- machine
* - web_address
- web address
- `allow_ip` : allows an IP rather than a domain name (`false` by default)
2024-07-01 14:06:59 +02:00
2023-12-17 20:25:53 +01:00
`allow_without_dot` : allows names without a dot (`true` by default)
- http://rougail.example
2024-07-01 14:06:59 +02:00
* - port
- port
2023-12-17 20:25:53 +01:00
- `allow_range` : allows a port range, for example 80:85 (`false` by default)
`allow_zero` : allows port 0 (false by default)
`allow_wellknown` : allows ports from 1 to 1023 (`true` by default)
2024-07-01 14:06:59 +02:00
2023-12-17 20:25:53 +01:00
`allow_registred` : allows ports from 1024 to 49151 (`true` by default)
2024-07-01 14:06:59 +02:00
2023-12-17 20:25:53 +01:00
`allow_private` : allows ports greater than 49152 (`true` by default)
2024-07-01 14:06:59 +02:00
2023-12-17 20:25:53 +01:00
`allow_protocol` : allows the addition of the protocol, for example tcp:80 (`false` by default)
2024-07-01 14:06:59 +02:00
2023-12-17 20:25:53 +01:00
- 8080
* - mac
- MAC address
2024-07-01 14:06:59 +02:00
-
2023-12-17 20:25:53 +01:00
- 11:11:11:11:11:11
* - unix_permissions
- access rights to the file, directory, etc.
2024-07-01 14:06:59 +02:00
-
2023-12-17 20:25:53 +01:00
- 644
2024-07-01 14:06:59 +02:00
* - choice
- choice variable
-
-