我想在ansible中使用jinja2模板复制文件。
templates / file.j2中有一个文件,并且在该文件中我定义了一个变量
fos.broker.host={{ fos.broker.host }}
在group_vars / stage内部,我将此变量的值设置为
fos.broker.host: 'api_vl.vlstage.fidor.de'
最后,我通过main.yml部署它,看起来像这样。
---
- hosts: vlstage
vars_files:
- group_vars/vlstage
tasks:
- name: copy files to host
template: src=templates/file.j2 dest=/opt/tomcat/lib/file.conf
backup=yes owner=zoaib group=zoaib
但是当我运行命令ansible-playbook -i hosts main.yml -u zoaib
我遇到以下错误:
TASK [copy files to host] *************************************************************************************************************************************************************
fatal: [s-vl-idl-app02.fidor.intern]: FAILED! => {"changed": false, "msg": "AnsibleUndefinedVariable: 'fos' is undefined"}
有什么办法可以解决这个问题?
答案 0 :(得分:3)
不要在变量名称中使用点。点符号用于指代字典键。
阅读What Makes A Valid Variable Name:
foo-port
,foo port
,foo.port
和12
不是有效的变量名。
尽管实际上,可以使用名称中带有点的变量,并通过vars
查找插件引用其值:
fos.broker.host={{ lookup('vars', 'fos.broker.host') }}