我有一个json对象,它看起来如下:
[
{
"id": "subnet-1",
"tags": {
"Name": "showcase"
}
},
{
"id": "subnet-2",
"tags": {
"Name": "qa"
}
}
]我想要创建一个新的字典,其中只有subnetIds,标记名' name‘用作键,'id’用作值,如下所示:
{
"showcase": "subnet-1",
"qa": "subnet-2",
}目前,我有以下代码,但没有帮助:
- name: Populate SubnetIds
set_fact:
SubnetIds: "{{ subnet_facts.subnets | map(attribute='tags.Name') | join(',') }}"发布于 2016-10-14 06:55:26
重组复杂数据结构的最简单方法是template查找。
知道了Ansible在模板化后对JSON数据进行评估这一事实,我们可以执行以下操作。
创建一个helper subnets.j2,它形成所需的对象:
{
{% for s in subnets %}
"{{ s.tags.Name }}":"{{ s.id }}" {% if not loop.last %},{% endif %}
{% endfor %}
}通过在你的剧本中查找它:
- name: Populate SubnetIds
set_fact:
SubnetIds: "{{ lookup('template', 'subnets.j2') }}"
vars:
subnets: "{{ subnet_facts.subnets }}"由于模板过程的最后一步Ansible试图将JSON计算为对象,因此SubnetIds在本例中成为一个普通字典。
如果您为特定任务创建了辅助模板,则可以在j2文件中使用subnet_facts.subnets而不是subnets,因此不需要传递带有subnets值的附加vars。
https://stackoverflow.com/questions/40034175
复制相似问题