2017-07-18 3 views
0

Mon rôle ansible a cette main.ymlVérifiez plusieurs conditions à Ansible comprennent

more tasks/main.yml 
--- 

- include: ssl_pull.yml 
    when: ACTION == 'renewal' 
- include: ssl_gen.yml 
    when: ACTION == 'generate' 
- include: ssl_push.yml 
    when: ACTION == 'install' 
- include: ssl_install.yml 
    when: ACTION == 'install' 

Je veux le donner à l'utilisateur la possibilité de transmettre plusieurs ACTION comme le renouvellement & installer il comprend

- include: ssl_pull.yml 
- include: ssl_push.yml 
- include: ssl_install.yml 

Je sais comment passer une valeur unique pour variable d'action comme ci-dessous

ansible-playbook -v -i /web/hosts.txt site.yml -e "ACTION=renewal" 

Comment , puis-je passer une ou plusieurs valeurs et inclure des fichiers en fonction de la valeur/s passée?

Pouvez-vous me suggérer les modifications que je dois apporter à ma commande/yml?

+3

Isn » t que les tags ont été implémentés? – techraf

Répondre

1

Est-ce que Tags est ce que vous cherchez?

Vous marquez les tâches telles que:

- include: ssl_pull.yml 
    tags: renewal 

- include: ssl_push.yml 
    tags: install 

- include: ssl_install.yml 
    tags: install 

Spécifiez ensuite les balises en utilisant l'argument -t:

ansible-playbook -v -i /web/hosts.txt site.yml -t "renewal,generate" 

Si vous ne pouvez pas utiliser des balises pour certaines raisons, nous pouvons aussi faire quelque chose de similaire avec des vars.

Indiquez le var en tant que valeurs séparées par des virgules:

ansible-playbook -v -i /web/hosts.txt site.yml -e "ACTIONS=renewal,generate" 

et mettre à jour la condition de diviser le var par des virgules:

- include: ssl_pull.yml 
    when: "'renewal' in ACTIONS.split(',')" 
+0

Mon site.yml ne comprend pas l'include. Il a trois rôles et chacun de ces rôles main.yml a l'instruction include. – shifahim

+0

Peu importe. –

+0

Vous êtes incroyable .. Merci pour le conseil – shifahim

1

Ansible tags sont conçus pour faire ce genre de sélection des tâches.


Si vous vraiment voulez pas utiliser des balises, vous pouvez passer un objet JSON en extra-vars:

ansible-playbook --inventory-file /web/hosts.txt site.yml \ 
       --extra-vars '{"ACTIONS": ["renewal", "install"]}' 

Ensuite essai contre un tableau:

- include: ssl_pull.yml 
    when: "'renewal' in ACTIONS"