2016-04-08 3 views
0

Здесь вопрос:анзибль переменная вызова в шаблоне

У меня есть сборник пьес:

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

и вары в Пере/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} 

Теперь в моем шаблоне, Я также пытаюсь получить доступ к переменным в ProxyPass, например: dev, qual или prod.

Однако, когда я кладу это в моем шаблоне:

{{ item.proxyPass.dev }}

Это сказать, что это не определено ... Но, другие главные переменные в порядке ... Я знаю, что элементы в proxy_apache_vhost_dev «вызывается» в плейбуке через «with_items:» .... Но как мне сделать, чтобы напрямую вызвать его в ProxyPass?

ответ

2

Поскольку у вас есть только один элемент в списке, то задача будет выполняться один раз, с item набором для этого значения:

{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 }} в шаблоне выдает ошибку, потому что нет ничего под названием «PROXYPASS 'в том, что выше значение переменной item.

Если вы хотите просто ссылаться на свою переменную proxyPass, просто удалите элемент. Приставка с перед ним:

{{proxyPass.dev}}

0

В вашей ситуации нет необходимости использовать with_items (который сказал, ничто не мешает вам делать это), как proxyPass и proxy_apache_vhosts_dev две отдельные переменные , Если вы хотите получить доступ к PROXYPASS с помощью {{ item.proxyPass.dev }} вы можете определить ваши вары таким образом:

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

С этим определением, proxyPass будет просто еще одним элементом proxy_apache_vhosts_dev вар, и вы сможете получить к нему доступ, как {{ item.proxyPass.dev если используя with_items или как {{ proxy_apache_vhosts_dev.proxyPass.dev }}, если не используется with_items