I would like to set an ansible variable to some default value but only if the variable is undefined. Otherwise I would like to keep it unchanged.
I tried these two approaches and both of them produce recursive loop:
namespace: "{{namespace|default(default_namespace)}}" namespace: "{% if namespace is defined %}{{namespace}}{% else %}{{default_namespace}}{% endif %}"
As per latest Ansible Version 2.5, to check if a variable is defined and depending upon this if you want to run any task, use undefined keyword. Show activity on this post.
1.1 Defined / not defined variable A variable is defined when it has been declared in the current scope using a declaration statement. The usual way to declarate variables is const , let and var statements, plus the function and class declaration statements.
It seems like you are taking a wrong approach.
Take a look at the Ansible documentation concerning variable precedence. It is a built-in feature of Ansible to use the default variable if the variable is not defined.
In Ansible 2.x the variable precedence starts like this:
role defaults
inventory vars
So if you want to define a default value for a variable you should set it in role/defaults/main.yml
. Ansible will use that value only if the variable is not defined somewhere else.
Another option is to use a Jinja2 filter. With a Jinja filter you can set a default value for a variable like this:
{{ some_variable | default(5) }}
- set_fact: namespace="default_namespace" when: namespace is undefined
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With