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

Python 如何在jinja2模板中动态访问嵌套变量,python,jinja2,ansible,Python,Jinja2,Ansible,我有一个ansible作业,它的工作是根据从命令行提供的输入动态构建配置文件 主机文件 ABC_Production.j2: 当ansible作业以cluster=ABC\u Production作为参数运行时,测试文件中的预期输出: bobDBuser=bobDb 实际产量: bobDBuser=ABC_Production.dataSourceUsername 如何告诉jinja ABC_Production是一个变量并访问它?如果您想动态访问变量名,您必须获得多一点python-y,少

我有一个ansible作业,它的工作是根据从命令行提供的输入动态构建配置文件

主机文件 ABC_Production.j2: 当ansible作业以
cluster=ABC\u Production
作为参数运行时,测试文件中的预期输出:

bobDBuser=bobDb
实际产量:

bobDBuser=ABC_Production.dataSourceUsername

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

如果您想动态访问变量名,您必须获得多一点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'] }}"

如果您希望动态访问变量名,则必须获得更多的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'] }}"

看一看你的模板,现在告诉我们这是如何给你预期的输出的。您明确地使用了
集群
变量,因此它至少会包括(因此包括
ABC\u生产
)我不想静态地包括ABC\u生产。它必须是动态的。从逻辑上讲,我尝试了一些语法,如{{{{cluster}}.dataSourceUsername}。但它不起作用。我可以得到工作语法来实现这一点。在模板中还使用了python语法,如{%set temp=cluster+'.dataSourceUsername'%};bobDBuser=温度。python还能够将temp插入为ABC_Production.dataSourceUsername。请看一下您的模板,现在告诉我们这是如何为您提供预期输出的。您明确地使用了
集群
变量,因此它至少会包括(因此包括
ABC\u生产
)我不想静态地包括ABC\u生产。它必须是动态的。从逻辑上讲,我尝试了一些语法,如{{{{cluster}}.dataSourceUsername}。但它不起作用。我可以得到工作语法来实现这一点。在模板中还使用了python语法,如{%set temp=cluster+'.dataSourceUsername'%};bobDBuser=温度。python还能够将temp插值为ABC_Production.dataSourceUsername
region:1dev1\u-ips:1,2{{dev[region]\u-ips}}
您可以使用
vars['dev{}\u-ips'.format(region)]
。如果您对此还有任何问题,您可能希望打开一个新的问题,而不是继续在这里的评论。这是有效的,谢谢。如何做到这一点
region:1dev1\u-ips:1,2{{dev[region]\u-ips}}
您可以使用
vars['dev{}\u-ips'.format(region)]
。如果您对此还有任何问题,您可能希望打开一个新的问题,而不是继续在这里的评论。这很有效,谢谢。
bobDBuser=ABC_Production.dataSourceUsername
- hosts: localhost
  remote_user: ubuntu
  sudo: True

  vars:
   ABC_Production:
        dataSourceUsername: bobDb
   cluster: ABC_Production

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