web-dev-qa-db-fra.com

Comment détruire / supprimer / annuler une valeur de variable dans Ansible?

Existe-t-il un moyen de détruire la variable dans Ansible?

En fait, j'ai une variable {{version}} utilisée dans tous mes rôles pour les packages respectifs. Lorsque j'exécute plusieurs rôles, la valeur de version d'un rôle est transmise à un autre - cela est dû au fait que pour certains rôles, je ne donne pas de valeur de version afin qu'il puisse installer la version par défaut de ce package disponible pour les m/c respectifs comme ubuntu/redhat etc.

Voici mon modèle de rôle. La valeur de {{version}} de mysql est passée à rabbitmq.

    roles:
- { role: mysql }
- { role: rabbitmq}

Si je peux destory/supprimer la valeur de la version dans chaque rôle, cela devrait résoudre le problème, je crois.

8
MMA

Comme déjà souligné, il n'est pas possible de désactiver une variable dans Ansible.

Évitez cette situation en ajoutant un préfixe à vos noms de variables comme rabbitmq_version etc. À mon humble avis, c'est une meilleure pratique.

En plus d'éviter la situation dans laquelle vous êtes tombé, cela ajoutera de la clarté à votre Host_vars et group_vars.

8
Henrik Pingel

Pour annuler la définition d'une variable, essayez d'exécuter une tâche set_fact en définissant la variable sur null, comme:

- name: Unset variables
  set_fact:
    version:
    other_var:

Si vous avez un dictionnaire complet qui pourrait simplement remplacer le dict par null, comme:

- name: Set dict
  set_fact:
    dict:
      rabbitmq_version: 1
      other_version: 2

- name: override dict to null
  set_fact:
    dict:

Quelque chose comme other_var: est juste "other_var": null en JSON. C'est ainsi que vous pouvez annuler les variables dans Ansible. Bonne journée.

6
Jordan Stewart

Non, il n'y a aucun moyen de désactiver une variable (niveau supérieur) dans Ansible.

La seule chose que vous pouvez faire est de créer un dictionnaire et de stocker la variable comme clé dans ce dictionnaire. L'effacement du dictionnaire "parent" fera essentiellement le dictionary.key is defined travail d'expression conditionnelle.

4
techraf

vous devez plutôt utiliser une variable par rôle:

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

ou

  roles:
    - { role: mysql, version: mysql_version }
    - { role: rabbitmq, version: rabbitmq_version }
3
Radu Toader