这是我的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
Run Code Online (Sandbox Code Playgroud)
如果必须生成app_env环境,我会通过库存变量覆盖它.这样,除非您明确地进行生产,否则所有部署都将暂存.
所以,当我想在剧本中打印变量时,我能做到
---
- debug: var={{app_env}}.app_a.db_host
Run Code Online (Sandbox Code Playgroud)
这有效!
但是如何在另一个模块中访问变量,即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 }}"'
Run Code Online (Sandbox Code Playgroud)
工作解决方案将使用set_fact模块(双行代码,不是非常智能)或包含不同的变量文件,具体取决于app_env.
但我真的想知道是否有一个符号来访问嵌套变量变量;)
leu*_*cos 18
你的'环境字典'不是根本就会让你的生活变得更轻松,就像这样:
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
Run Code Online (Sandbox Code Playgroud)
然后,你应该可以使用{{app_environments[app_env].app_a.db_host}}或{{app_environments[app_env]['app_a']['db_host']}}在任何地方(Jinja模板,任务).
但是要注意太多"嵌套"!
| 归档时间: |
|
| 查看次数: |
18135 次 |
| 最近记录: |