2016-04-08 1 views
0

Voici la question:Ansible appel variable modèle

J'ai un PlayBook:

tasks: 

- include_vars: vhosts_vars.yml 


- name: SSL vhost creation 
    template: src=templates/proxy_ssl_vhost.DOMAIN.j2 dest=/etc/httpd/vhosts.d/ssl_{{ item.servername }}.conf 
    with_items: 
    - "{{ proxy_apache_vhosts_dev }}" 

et vars vars/vhosts_vars.yml

proxy_apache_vhosts_dev: 
    - {servername: www.DOMAIN.com , machinename: domainsrv, documentroot: /var/www/html, vhost_ip: 1.2.3.4, vhost_name: DOMAIN.com.conf, serveradmin: "[email protected]" } 


    proxyPass: 
    - {dev: DOMAINdev , qual: DOMAINqual , prod: DOMAINprod} 

Maintenant, dans mon modèle, J'essaye aussi d'accéder aux variables dans ProxyPass, comme: dev, qual ou prod.

Cependant, quand je mets dans mon modèle:

{{ item.proxyPass.dev }}

Il dit qu'il est indéfini ... Mais, les autres variables sont OK ... top Je sais que les éléments proxy_apache_vhost_dev sont "appelés" dans le playbook via le "with_items:" .... Mais comment faire pour appeler directement celui dans ProxyPass?

Répondre

2

Puisque vous avez un seul élément dans la liste, la tâche sera exécutée une fois, avec item à cette valeur:

{servername: www.DOMAIN.com , machinename: domainsrv, documentroot: /var/www/html, vhost_ip: 1.2.3.4, vhost_name: DOMAIN.com.conf, serveradmin: "[email protected]" } 

En utilisant {{ item.proxyPass.dev }} dans votre modèle jette une erreur, car il n'y a rien nommé « PROXYPASS 'dans cette valeur ci-dessus de la variable item.

Si vous voulez simplement référencer votre variable proxyPass, alors supprimez simplement le 'item'. préfixe de l'avant de celui-ci:

{{}} proxyPass.dev

0

Dans votre situation, il n'y a pas besoin d'utiliser with_items (qui a dit, rien ne vous empêche de le faire) comme proxyPass et proxy_apache_vhosts_dev sont deux variables distinctes . Si vous souhaitez accéder PROXYPASS à l'aide {{ item.proxyPass.dev }} vous pouvez définir vos vars ainsi:

proxy_apache_vhosts_dev: 
    - { 
     servername: www.DOMAIN.com , 
     machinename: domainsrv, 
     documentroot: /var/www/html, 
     vhost_ip: 1.2.3.4, 
     vhost_name: DOMAIN.com.conf, 
     serveradmin: "[email protected]", 
     proxyPass: { 
      dev: DOMAINdev, 
      qual: DOMAINqual, 
      prod: DOMAINprod 
      } 
    } 

Avec cette définition, proxyPass aura juste un autre élément du proxy_apache_vhosts_dev var, et vous pourrez y accéder en {{ item.proxyPass.dev si en utilisant with_items ou {{ proxy_apache_vhosts_dev.proxyPass.dev }} si vous n'utilisez pas with_items