我想在 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"}
有任何线索可以解决这个问题吗?
最佳答案
不要在变量名称中使用点。点表示法用于引用字典键。
阅读What Makes A Valid Variable Name :
foo-port
,foo port
,foo.port
and12
are not valid variable names.
尽管实际上,可以使用名称中带有点的变量,并使用 vars
查找插件引用其值:
fos.broker.host={{ lookup('vars', 'fos.broker.host') }}
关于模板模块中的 Ansible group_vars,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52204368/