模板模块中的 Ansible group_vars

标签 ansible ansible-template

我想在 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 and 12 are not valid variable names.


尽管实际上,可以使用名称中带有点的变量,并使用 vars 查找插件引用其值:

fos.broker.host={{ lookup('vars', 'fos.broker.host') }}

关于模板模块中的 Ansible group_vars,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52204368/

相关文章:

jenkins - 当jenkins重写其配置时,如何使这个ansible jenkins脚本具有幂等性?

ansible - 如何修复 'ansible.utils.unsafe_proxy.AnsibleUnsafeText object' 没有属性 'value' 错误

Ansible/jinja2 : Use filter result in if condition

ansible - 如何从ansible中的另一个角色访问角色的默认变量

Ansible 从结果中检索多个数组值

redis - Ansible:不同主机的配置文件中相同变量的不同值

Ansible:获取当前目标主机的IP地址

Docker 卷 : Docker Volume does not get mounted correctly on Amazon Linux

Ansible:从字典中删除项目

ansible - 获取 splunk 版本,如果版本不满足,则使用 ansible 更新它