访问ansible中的嵌套变量变量

时间:2015-05-28 08:55:56

标签: ansible

这是我的group_vars / all文件:

app_env: staging

staging:
  app_a:
    db_host: localhost
  app_b:
    db_host: localhost
production:
  app_a:
    db_host: app_a-db.example.net
  app_b:
    db_host: app_b-db.example.com

如果必须生成app_env环境,我会通过库存变量覆盖它。这样,除非您明确地进行生产,否则所有部署都将暂存。

所以,当我想在剧本中打印变量时,我可以做到

---
  - debug: var={{app_env}}.app_a.db_host

这有效!

但是如何在另一个模块中访问变量,即lineinfile?

一些没有成功的例子:

- lineinfile: dest=/etc/profile line='export APP_A_DB_HOST="{{ app_env.app_a.db_host }}"'
- lineinfile: dest=/etc/profile line='export APP_A_DB_HOST="{{ app_env[app_a][db_host] }}"'
- lineinfile: dest=/etc/profile line='export APP_A_DB_HOST="{{ {{app_env}}.app_a.db_host }}"'

工作解决方案将使用set_fact模块(双行代码,不是非常智能)或包含不同的变量文件,具体取决于app_env。

但我真的想知道是否有一个符号来访问嵌套变量变量;)

1 个答案:

答案 0 :(得分:17)

您可以通过环境设置让您的生活更轻松。不是根本就是这样:

app_env: staging

app_environments:
  staging:
    app_a:
      db_host: localhost
    app_b:
      db_host: localhost
  production:
    app_a:
      db_host: app_a-db.example.net
    app_b:
      db_host: app_b-db.example.com

然后,您应该可以在任何地方使用{{app_environments[app_env].app_a.db_host}}{{app_environments[app_env]['app_a']['db_host']}}(Jinja模板,任务)。

注意太多"嵌套"虽然!