gpt4 book ai didi

ansible - 在 Ansible 中访问嵌套变量

转载 作者:行者123 更新时间:2023-12-01 23:46:36 29 4
gpt4 key购买 nike

这是我的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

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

最佳答案

如果你的“环境指令”不在根源上,你会让你的生活变得更轻松,就像这样:

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 模板、任务)。

不过要注意太多的“巢穴”!

关于ansible - 在 Ansible 中访问嵌套变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30501711/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com