问题在于:
我有一本剧本:
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中的那个?
答案 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
(也就是说,没有什么能阻止你这样做),proxyPass
和proxy_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