2016-04-08 27 views
0

Hier ist die Frage:ansible Variable Aufruf in Vorlage

Ich habe ein Textbuch:

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 }}" 

und Vars in 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} 

Nun, in meiner Vorlage, Ich versuche auch auf die Variablen in ProxyPass zuzugreifen, wie: dev, qual oder prod.

Allerdings, wenn ich diese in meiner Vorlage:

{{ item.proxyPass.dev }}

Es sagt, dass es nicht definiert ist ... Aber die anderen Top-Variablen sind OK ... Ich weiß, dass die Einzelteile in proxy_apache_vhost_dev werden im playbook über die "with_items:" ... "angerufen" .... Aber wie mache ich das direkt in ProxyPass anzurufen?

Antwort

2

Da Sie nur ein einzelnes Element in der Liste haben dann die Aufgabe, einmal mit item Satz auf diesen Wert laufen wird:

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

{{ item.proxyPass.dev }} in Ihrer Vorlage wirft einen Fehler, weil es nichts Proxypass namens ‚ 'in diesem oberen Wert der Variablen item.

Wenn Sie einfach auf Ihre proxyPass Variable verweisen möchten, dann entfernen Sie einfach den "Artikel". Präfix von der Vorderseite davon:

{{}} proxyPass.dev

0

In Ihrer Situation gibt es keine Notwendigkeit with_items zu verwenden (das sagte, nichts hindert Sie daran, es zu tun) als proxyPass und proxy_apache_vhosts_dev sind zwei separate Variablen . Wenn Sie Proxypass mit {{ item.proxyPass.dev }} zugreifen möchten Sie Ihre Vars auf diese Weise definieren könnte:

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 
      } 
    } 

Mit dieser Definition wird proxyPass nur ein weiteres Element des proxy_apache_vhosts_dev var sein, und Sie werden es als {{ item.proxyPass.dev zugreifen können, wenn mit with_items oder als {{ proxy_apache_vhosts_dev.proxyPass.dev }}, wenn nicht with_items

Verwandte Themen