How to destroy/delete/unset a variable value in Ansible?
Solution 1:
As already pointed out it is not possible to unset a variable in Ansible.
Avoid this situation by adding a prefix to your variable names like rabbitmq_version
and so on. IMHO this a best practice.
Beside avoiding the situation you ran into, this will add clarity to your host_vars
and group_vars
.
Solution 2:
To unset a variable, try running a set_fact task setting the variable to null, like:
- name: Unset variables
set_fact:
version:
other_var:
If you have a full dictionary that could just override the dict with null
, like:
- name: Set dict
set_fact:
dict:
rabbitmq_version: 1
other_version: 2
- name: override dict to null
set_fact:
dict:
Something like other_var:
just is "other_var": null
in JSON. That is how you can unset variables in Ansible. Have a nice day.
Solution 3:
No, there is no way to unset a variable (top level) in Ansible.
The only thing you can do, is to create a dictionary and store the variable as a key in this dictionary. Clearing the "parent" dictionary will essentially make the dictionary.key is defined
conditional expression work.
Solution 4:
you should use variable per role instead:
roles:
- role: mysql
version: mysql_version
- role: rabbitmq
version: rabbitmq_version
or
roles:
- { role: mysql, version: mysql_version }
- { role: rabbitmq, version: rabbitmq_version }