2017-05-05 4 views
0

J'ai un comportement étrange. Je suis toujours un novice Ansible, alors je m'excuse d'avance.Exécution de rôles basés sur des variables

Je suis en train d'exécuter conditionnellement un rôle, basé sur un exemple que j'ai vu ici: https://github.com/atomicobject/ansible-laptop-playbook-example/blob/1785f25014fa5a7776de5b332d093b60bf59c8e0/laptop.yml

Quoi qu'il en soit, j'ai un host_vars/localhost:

has_thing: true 

Dans mon haut niveau site.yml, je :

-name: Title 
    hosts: all 

    roles: 
    - { role: myrole, when: has_thing is defined and has_thing == "true" } 

Ceci ignore le rôle.

Si je fais ceci:

-name: Title 
    hosts: all 

    roles: 
    - { role: myrole, when: has_thing is defined } 

le rôle est exécuté.

Si je fais ceci:

-name: Title 
    hosts: all 

    roles: 
    - { role: myrole, when: has_thing == "true" } 

Il ne fonctionne pas.

Si je fais:

-name: Title 
    hosts: all 

    roles: 
    - { role: myrole, when: has_thing != "true" } 

Il ne fonctionne toujours pas. Je ne comprends pas pourquoi, les variables has_thing sont clairement définies car cela fonctionne tant que je ne teste pas sa valeur.

Qu'est-ce qui me manque ici?

Répondre

0

has_thing: true est un booléen, vous pouvez tester avec has_thing: 'true'.

Mais mieux vaut modifier votre instruction when pour gérer les valeurs booléennes.

P.S. Et vous ne pouvez pas exécuter conditionnellement un rôle un rôle de cette façon, le rôle sera toujours exécuté, mais l'instruction when sera ajoutée à chaque tâche de ce rôle générant un grand nombre de tâches ignorées dans la sortie.

+0

Merci beaucoup Konstantin. J'ai essayé de faire '- {role: myrole, quand: has_thing est défini et has_thing: 'true'}' mais a une erreur de syntaxe sur 'has_thing: 'true'}'. Une idée pourquoi? – prelic

+0

Utilisez 'debug: var = has_thing', chaîne de sortie moyenne, non citée - autres types. Quelque chose comme 'when: has_thing | default (false) | bool' devrait faire ce que vous voulez. –

+0

Désolé pour le edit ninja. Je comprends ce que vous dites maintenant. Merci beaucoup pour votre aide. – prelic