我正在尝试在变量中使用变量。
我有一个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 }}"
但是我找不到使它工作的方法。
我使用'{{ "os."~desired_os~".offer" }}'
在set_fact中尝试了一些串联,但是输出不是所需的:
"msg": "stuff.os.debian_9.offer"
谢谢。
答案 0 :(得分:0)
嗨,请尝试使用以下代码段:
json
tarifs()->get()
剧本:
{
"os": {
"centos_7_5": {
"offer": "CentOS",
"publisher": "OpenLogic",
"sku": "7.5",
"version": "latest"
},
"debian_9": {
"offer": "Debian",
"publisher": "credativ",
"sku": "9",
"version": "latest"
}
}
}
答案 1 :(得分:0)
您可以使用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 }}"
答案 2 :(得分:0)
只需在双括号内添加变量。
- debug:
msg: " {{ os.{{ desired_os }}.offer }}"
答案 3 :(得分:0)
请尝试如下
debug: msg= "{{os.vars[desired_os].offer}}"