Ansible:如何使用其他变量值构建变量名

时间:2019-07-02 10:33:45

标签: ansible jinja2

我是Ansible新手,我尝试使用由其他变量组成的变量名

在group_vars目录中有all.yml文件,其中包含以下变量:

device_name: nycisco
remote_site: sydney
nycisco_ipsec_sydney: 10.10.10.10

在我的剧本中,我希望能够使用 device_name 变量和 remote_site 变量来显示 nycisco_ipsec_sydney 变量。

我尝试了以下操作:

- name: Display remote peer IP address
  debug: msg="{{ device_name + '_ipsec_' + remote_site }}" 

但是它返回“ nycisco_ipsec_sydney”,而不是我希望显示的预期变量值10.10.10.10。

我不明白,因为当我尝试:

- name: Display remote peer IP address
  debug: msg="{{ nycisco_ipsec_sydney }}" 

它正确返回10.10.10.10。

在此先感谢您的帮助;)

3 个答案:

答案 0 :(得分:0)

尝试定义一个临时变量,为其分配以下值

var="{{ device_name }}_ipsec_{{ remote_site }}"

然后像这样打印出味精:

msg="{{ var }}"

可能是,您必须将不同的{{}}用引号引起来,但我对此不是100%肯定。

我们项目中的另一个示例是:

remote_home: "{{ansible_env.HOME}}"
jboss_home: "{{remote_home}}/example/jboss-project"
希望有帮助。

编辑:另一种解决方案

答案 1 :(得分:0)

我已经可以使用查找模块解决问题。 以下代码正确返回 nycisco_ipsec_sydney 变量值,即10.10.10.10。

msg="{{ lookup('vars', device_name + '_ipsec_remote_' + remote_site) }}"

答案 2 :(得分:0)

我能够通过以下代码解决

  vars:
    app: xxx
    xxx_header: this is a new variable

  - debug:
    msg: "{{vars[app + '_header']}}"