Calculated default values
Synopsis
A value can be calculated. In this case we have four possibilities:
calculation via Jinja template
calculation via a variable
calculation via an information
calculation via a identifier: in a dynamically built family returns the current identifier
calculation via an index: in the case of a follower variable returns the current index
calculation via the current namespace name
If the user modifies the value of the variable, the default value is no longer used, so the calculation is no longer carried out. This is also the case if the variable has the auto_save attribute.
On the other hand, if the variable is hidden (with the hidden parameter), it is the default value that is used and not the value customized by the user.
Note
A follower variable cannot be calculated automatically.
See also
The tutorial with a real world sample calculation
Parameters
Jinja template
Calculation type |
Comment |
|---|---|
type
|
The value is |
jinja
|
Please set a Jinja template. |
params
|
Additional parameters passed to the Jinja template (see below). |
description
|
Additional information for the documentation and the error message in case of return_type is a boolean. |
Variable
Parameter |
Comment |
Sample |
|---|---|---|
type
|
Calculation type. This parameter is optional. It is deduced from the presence of the parameter “variable” in a calculation. |
variable |
variable
|
Name of the associated variable. It’s better to use relative path notation. |
_.my_variable |
propertyerror
|
If access to the variable is not possible due to a property
(for example Default value: |
false |
optional
|
The variable in calculation may not exist. This generates an error. Overall coherence is not guaranteed.
To avoid this set the optional parameter to |
true |
default
|
If optional parameter is set to |
false |
description
|
Rougail engine create a description like “depends on a calculation”. You can personnalize here the calculation description |
Information
Parameter |
Comments |
Sample |
|---|---|---|
information
|
Name of the information whose value we want to retrieve. |
doc |
variable
|
Variable’s name. If not specified, the information is retrieve in Tiramisu Config. It’s better to use relative path notation. |
_.my_variable |
Params
In the case of a Jinja type calculation, it is possible to have parameters.
There are two types of params:
the standard parameters (string, boolean, integer, float or null), in this case just do: “key: value”
advanced settings (with something like “key: {}”:
parameter via a variable
parameter via an information
parameter via an identifier: in a dynamically built family returns the current identifier
parameter via an index: in the case of a follower variable returns the current index
parameter via the current namespace name
Variable params
Parameter |
Comments |
Sample |
|---|---|---|
type
|
Type of parameter, which is variable. |
variable |
variable
|
Variable’s path. |
my_variable |
propertyerror
|
If access to the variable is not possible due to a property
(for example Default value: |
|
optional
|
If the variable is not defined the value is always Default value: |
|
whole
|
In dynamically built family only the value of the current index is retrieve. If this parameter is set to Default value: |
|
Information params
Parameter |
Comments |
Sample |
|---|---|---|
type
|
Type of parameter, which is information |
information |
information
|
Name of the information whose value we want to retrieve. |
doc |
variable
|
By default, the information is a context information. It is possible to get a variable information. In this case just specify a path. |
my_variable |
Sample
Calculation via a Jinja template
Let’s start with an example from a simple Jinja template:
%YAML 1.2
---
version: 1.1
my_calculated_variable:
default:
jinja: 'no'
...
Here is a second example with a boolean variable:
%YAML 1.2
---
version: 1.1
my_calculated_variable:
type: boolean
default:
jinja: 'false'
...
And a multiple value of the integer type:
%YAML 1.2
---
version: 1.1
my_calculated_variable:
type: integer
multi: true
default:
jinja: |
1
2
3
...
Let’s create a variable whose value is returned by a python function:
%YAML 1.2
---
version: 1.1
my_calculated_variable:
default:
jinja: '{{ return_no() }}'
...
Then let’s create the return_no function:
def return_no():
return 'no'
An example with parameters:
%YAML 1.2
---
version: 1.1
my_calculated_variable:
description: my description
default:
jinja: |
{{ param1 }}{% if param2 is defined %}_{{ param2 }}{% endif %}_{{ param3 }}
params:
param1: value
param2:
type: variable
variable: _.unknown_variable
optional: true
param3:
type: information
information: doc
variable: _.my_calculated_variable
...
An example with a identifier type parameter:
%YAML 1.2
---
version: 1.1
my_dyn_family_{{ identifier }}:
dynamic:
- val1
- val2
description: 'Describe {{ identifier }}'
my_dyn_var:
default:
jinja: 'the identifier is: {{ param1 }}'
params:
param1:
type: identifier
In this example, we see a dynamically built family. Two families will be created: my_dyn_family_val1.my_dyn_var and my_dyn_family_val2.my_dyn_var.
The value of the variable inside this family ‘this identifier is: ‘ + the value of the identifier (val1 and val2 respectively).
An example with an index type parameter:
%YAML 1.2
---
version: 1.1
family:
type: sequence
leader:
- val1
- val2
follower1:
default:
type: jinja
jinja: 'the index is: {{ param1 }}'
params:
param1:
type: index
...
Calculation via a variable
Copy a variable in another:
%YAML 1.2
---
version: 1.1
my_variable:
default:
- val1
- val2
my_calculated_variable:
default:
type: variable
variable: _.my_variable
...
Copy the default value from a variable, means copy type, params and multi attribute too if not define in second variable.
%YAML 1.2
---
version: 1.1
my_variable:
multi: true
type: domainname
params:
allow_ip: true
my_calculated_variable:
default:
type: variable
variable: _.var1
Here my_calculated_variable is a domainname variable with parameter allow_ip=True and multi to true.
Copy one variable to another if the source has no property problem:
%YAML 1.2
---
version: 1.1
my_variable:
default: val1
disabled: true
my_calculated_variable:
multi: true
default:
variable: _.my_variable
propertyerror: false
...
Copy two non-multiple variables into a multiple variable:
%YAML 1.2
---
version: 1.1
my_variable_1: val1
my_variable_2: val2
my_calculated_variable:
default:
- variable: _.my_variable_1
- variable: _.my_variable_2
A variable in a dynamically built family can also be used in a calculation.
For example using the variable for a particular identifier:
%YAML 1.2
---
version: 1.1
varname:
- val1
- val2
my_dyn_family_{{ identifier }}:
dynamic:
- val1
- val2
description: 'Describe {{ identifier }}'
my_dyn_var_{{ identifier }}:
default:
type: identifier
all_dyn_var:
default:
variable: _.my_dyn_family_val1.my_dyn_var_val1
In this case, we recover the value val1.
Second example using the variable for all identifieres:
%YAML 1.2
---
version: 1.1
varname:
my_dyn_family_{{ identifier }}:
dynamic:
- val1
- val2
description: 'Describe {{ identifier }}'
my_dyn_var_{{ identifier }}:
default:
type: identifier
all_dyn_var:
multi: true
default:
variable: _.my_dyn_family_.my_dyn_var_
...
In this case, we recover the val1 and val2 list.
Calculation via a identifier
%YAML 1.2
---
version: 1.1
my_dyn_family_{{ identifier }}:
dynamic:
- val1
- val2
description: 'Describe {{ identifier }}'
my_dyn_var_{{ identifier }}:
type: string
default:
type: identifier
...
Calculation via an index
%YAML 1.2
---
version: 1.1
family:
type: sequence
leader:
- val1
- val2
follower1:
type: integer
default:
type: index
...