Ansible变量调用模板

时间:2016-04-08 16:51:15

标签: templates variables ansible

问题在于:

我有一本剧本:

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

和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: "webmaster@domain.com" }


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

现在,在我的模板中,我也尝试访问ProxyPass中的变量,例如:dev,qual或prod。

然而,当我把它放在我的模板中时:

{{ item.proxyPass.dev }}

它说它未定义......但是,其他顶级变量都可以...... 我知道proxy_apache_vhost_dev中的项目是"名为"在剧本中通过" with_items:" ....但是如何直接调用ProxyPass中的那个?

2 个答案:

答案 0 :(得分:2)

由于列表中只有一个项目,因此任务将运行一次,item设置为此值:

{servername: www.DOMAIN.com , machinename: domainsrv, documentroot: /var/www/html, vhost_ip: 1.2.3.4, vhost_name: DOMAIN.com.conf,  serveradmin: "webmaster@domain.com" }

在模板中使用{{ item.proxyPass.dev }}会引发错误,因为没有任何名为' proxyPass'在变量item的上述值中。

如果您只想引用proxyPass变量,只需删除该项目。'前面的前缀:

{{proxyPass.dev}}

答案 1 :(得分:0)

在你的情况下,没有必要使用with_items(也就是说,没有什么能阻止你这样做),proxyPassproxy_apache_vhosts_dev是两个独立的变量。 如果您想使用{{ item.proxyPass.dev }}访问proxyPass,您可以通过以下方式定义您的变种:

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: "webmaster@domain.com",
         proxyPass: {
            dev: DOMAINdev,
            qual: DOMAINqual,
            prod: DOMAINprod
            }
     }

根据此定义,proxyPass只是proxy_apache_vhosts_dev var的另一个元素,如果使用{{ item.proxyPass.dev或{with_items,您将可以{{ proxy_apache_vhosts_dev.proxyPass.dev }}访问它{1}}如果不使用with_items