2016-09-01 1 views
1

Avant de commencer, permettez-moi de donner un détail peu sur ma structure de répertoire ansibleAnsible conditionnelle variable

  • environnement
    • production # fichier d'inventaire pour les serveurs de production
      • group_vars
      • host_vars
      • hôtes
    • mise en scène fichier # inventaire pour l'environnement de la mise en scène
      • de group_vars
      • host_vars
      • hôtes
  • rôles
    • nginx
    • mysql
    • etc
  • deploy_app.yml

donc en ce moment, si je veux déployer une des applications à la mise en scène, je peux tout simplement exécuter cette commande PlayBook:

ansible-playbook -i environments/staging/hosts deploy-app.yml 

par exemple, j'ai défini le chemin pour mon répertoire app1 dans staging/group_vars/webserver à "/var/www/staging.app1.com". mais j'ai aussi besoin de déployer sur le même serveur pour app2 mais avec un répertoire différent. Est-il possible d'utiliser une variable conditionnelle dans group_vars?

Donc, si je lance:

ansible-playbook -i environments/staging/hosts deploy-app.yml --extra-vars "app_name=app1" 

il déploiera à la mise en scène serveur sur /var/www/staging.app1.com et:

ansible-playbook -i environments/staging/hosts deploy-app.yml --extra-vars "app_name=app2" 

il déploiera à la mise en scène sur le serveur /var/www/staging.app2.com

Je sais que la méthode la plus simple pourrait simplement définir la variable app_dir lors de l'exécution de playbook, mais si possible, je préfère définir l'app_name puis app_dir être utilisé en fonction de l'app_name spécifié.

if app_name = app1, then app_dir = /var/www/staging.app1.com 

elif app_name = app2, then app_dir = /var/www/staging.app2.com 

S'il vous plaît veuillez en informer

Répondre

1

Vous pouvez modèle app_dir dans votre groupe vars:

app_dir: '/var/www/staging.{{ app_name }}.com' 

Si vous avez plusieurs variables dépendantes-app et ils ne sont pas templatable, vous pouvez utiliser apps dict dans vos fichiers variables:

apps: 
    app1: 
    dir: '/var/www/app1' 
    key: 'klg23sdkjfsdf' 
    db_host: '127.0.0.1' 
    app2: 
    dir: '/opt/apps/app2' 
    key: 'askjh233423444' 
    db_host: '127.0.1.1' 

et d'utiliser apps[app_name].dir lorsque vous avez besoin d'app_dir et ainsi de suite.

+0

cela pourrait fonctionner mais l'autre problème est que j'ai aussi d'autres variables qui ont besoin d'une conditionnelle comme la base de données ip, la clé d'application, et d'autres variables qui sont différentes entre ces 2 applications. On dirait que la solution la plus faisable pour l'instant est de diviser les 2 applications dans son propre hôte et group_vars – AlamHo

+0

J'ai mis à jour la réponse. Veuillez noter que vous obtiendrez généralement des réponses plus pertinentes si vous spécifiez tous les détails dans la question. –

+0

Merci. c'est exactement ce que je cherche. Au début, j'essaie déjà d'utiliser votre première solution, puis j'ai réalisé qu'il y a une variable qui est différente sur chaque application – AlamHo