ansible - Ansible中变量dict名称中的变量
问题描述
我有这样的字典:
mydatabases:
group1:
db_name: group1_database
group2:
db_name: group2_database
我希望能够在运行时传入a_group变量来检索db_name。所以像这样
{{ mydatabases.{{ a_group }}.db_name }}
但我知道这种方法是不可能的。
像下面这样的东西当然有效,我可以获得返回 group1_database 但不完全是我想要的值。
- debug:
msg:"{{ mydatabases.group1.db_name }}"
这给了我一个未定义的变量
- debug:
msg: "{{ hostvars[inventory_hostname]['mydatabases' + a_group + 'db_name'] }}"
有没有办法我可以做到这一点?
解决方案
您可以使用 pythonic 方式访问变量:
剧本test.yml
。注意任务中的引号debug
。
- name: Print var
hosts: localhost
gather_facts: false
vars:
mydatabases:
group1:
db_name: group1_database
group2:
db_name: group2_database
required_db: group2
tasks:
- name: Print a var
debug:
msg: "{{ mydatabases[required_db]['db_name'] }}"
运行示例:
$ ansible-playbook -i localhost, playbooks/tests/test.yml
PLAY [Print var] ****************************************************
TASK [Print a var] *************************************************************
Wednesday 21 April 2021 15:23:21 +0200 (0:00:00.023) 0:00:00.023 *******
ok: [localhost] => {
"msg": "group2_database"
}
PLAY RECAP *********************************************************************
localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Playbook run took 0 days, 0 hours, 0 minutes, 0 seconds
Wednesday 21 April 2021 15:23:21 +0200 (0:00:00.047) 0:00:00.070 *******
===============================================================================
Print a var ------------------------------------------------------------- 0.05s
推荐阅读
- firebase - Firebase firestore 获取未经身份验证的用户文档
- python - Django根据日期发送电子邮件提醒如何?
- react-native - 在本机反应中的输入中想要根据我的用户提供的 ID 获取数据
- react-native - React Native 博览会 youtube 播放器
- rtools - 我可以在 Rtools 中使用 gcc 10 来编译 R 包吗?
- ionic-framework - 尝试在 ionic 中构建 apk 时产生错误
- react-native - 如何创建新的构建类型反应原生android
- javascript - D3 Reactangle Bar,颜色渐变取决于值
- python - NoReverseMatch 尝试从 html 渲染为 pdf 时出错
- reactjs - Jest 的问题和异步函数的调度