json - 变量中的变量 Ansible
问题描述
我正在尝试在变量中使用变量。
我有一个 JSON 变量:
os: {
"centos_7_5": {
offer: "CentOS",
publisher: "OpenLogic",
sku: "7.5",
version: "latest"
},
"debian_9": {
offer: "Debian",
publisher: "credativ",
sku: "9",
version: "latest"
}
}
如果我使用
- debug:
msg: " {{ os.debian_9.offer }}"
输出如所愿:
"msg": " Debian"
现在,我正在尝试将操作系统名称放入一个变量中(以便该变量可以位于配置文件中),如下所示:
desired_os: debian_9
我想做这样的事情:
- debug:
msg: " {{ os.desired_os.offer }}"
但我找不到让它工作的方法。我在 set_fact 中尝试了一些连接,'{{ "os."~desired_os~".offer" }}'
但输出不符合预期:
"msg": "stuff.os.debian_9.offer"
谢谢。
解决方案
您可以使用varname[var]
符号。
- hosts: localhost
gather_facts: no
vars:
os: {
"centos_7_5": {
offer: "CentOS",
publisher: "OpenLogic",
sku: "7.5",
version: "latest"
},
"debian_9": {
offer: "Debian",
publisher: "credativ",
sku: "9",
version: "latest"
}
}
desired_os: debian_9
tasks:
- debug:
msg: " {{ os['debian_9'].offer }}"
- debug:
msg: " {{ os[desired_os].offer }}"
推荐阅读
- reactjs - “在'@superset-ui/core'中找不到导出'Metric'(./node_modules/@superset-ui/chart-controls/esm/types.js 中的错误)Angular/React
- django - 为什么 Django 检索所有反向异物
- javascript - 如何在 nuxt auth 模块中发送 refreshToken 和 token?
- linux - 在不同的机器上在 valgrind 下运行太慢 - 在 strace'ing 进程时已修复?
- javascript - 什么是创建递归函数上限的好方法和好语言?
- asp.net-core - 从第 3 方 websocket 流出并流出 SignalR 集线器
- javascript - 为什么 ko.ObservableArray 中的替换值没有更新我的视图?
- javascript - 无法读取 client.users 的属性“缓存”
- react-native - react native asyncStorage 更新相同的产品编号
- geocoding - 如何在 here.com revgeocode API 调用中返回多个结果?