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

If you have a full dictionary that could just override the dict with null, like:

- name: Set dict
      rabbitmq_version: 1
      other_version: 2

- name: override dict to null

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:

    - role: mysql
      version: mysql_version
    - role: rabbitmq
      version: rabbitmq_version


    - { role: mysql, version: mysql_version }
    - { role: rabbitmq, version: rabbitmq_version }