如何在jinja2模板中动态访问嵌套变量

时间:2015-10-29 16:19:10

标签: python jinja2 ansible

我有ansible工作,其工作是根据命令行提供的输入动态构建配置文件。

主机文件

[ABC_Production]
<ip_address>

yml文件

- hosts: "{{cluster}}"
  remote_user: ubuntu
  sudo: True

  vars:
   ABC_Production: {
        dataSourceUsername: bobDb

   }

  tasks:
     - name: copy test
       template: src=templates/{{cluster}}.j2 dest=/tmp/test_file owner=root group=root mode=755

ABC_Production.j2:

bobDBuser={{ cluster+'.dataSourceUsername'] }}
当以cluster=ABC_Production作为参数运行ansible作业时,

test_file中的预期输出:

bobDBuser=bobDb

实际输出:

bobDBuser=ABC_Production.dataSourceUsername

如何告诉jinja ABC_Production是变量并访问它?

1 个答案:

答案 0 :(得分:2)

如果你想动态访问变量名,你必须得到更多的python-y和少一点jinja-y:

- hosts: localhost
  remote_user: ubuntu
  sudo: True

  vars:
   ABC_Production:
        dataSourceUsername: bobDb
   cluster: ABC_Production

  tasks:
     - debug:
        msg: "The value is {{ vars[cluster]['dataSourceUsername'] }}"