gpt4 book ai didi

json - Ansible:从 json 输出中获取特定的属性值

转载 作者:行者123 更新时间:2023-12-04 12:45:54 31 4
gpt4 key购买 nike

我有以下 Ansible 任务:

tasks:
- name: ensure instances are running
ec2:
aws_access_key: "{{aws_access_key}}"
aws_secret_key: "{{aws_secret_key}}"
...
user_data: "{{ lookup('template', 'userdata.txt.j2') }}"
register: ec2_result

- debug:
msg: "{{ ec2_result }}"

- set_fact:
win_instance_id: "{{ ec2_result | json_query('tagged_instances[*].id') }}"

输出:

TASK [debug] ***************
ok: [localhost] => {
"msg": {
"changed": false,
"failed": false,
"instance_ids": null,
"instances": [],
"tagged_instances": [
{
"ami_launch_index": "0",
"architecture": "x86_64",
"block_device_mapping": {
"/dev/sda1": {
"delete_on_termination": true,
"status": "attached",
"volume_id": "vol-01f217e489c681211"
}
},
"dns_name": "",
"ebs_optimized": false,
"groups": {
"sg-c63822ac": "WinRM RDP"
},
"hypervisor": "xen",
"id": "i-019c03c3e3929f76e",
"image_id": "ami-3204995d",
...
"tags": {
"Name": "Student01 _ Jumphost"
},
"tenancy": "default",
"virtualization_type": "hvm"
}
]
}
}

TASK [set_fact] ****************
ok: [localhost]

TASK [debug] ******************
ok: [localhost] => {
"msg": "The Windows Instance ID is: [u'i-019c03c3e3929f76e']"
}

如您所见,实例 ID 是正确的,但格式不正确。有没有办法将此输出转换为“人类可读”的输出?或者是否有更好的方法从 ec2 任务输出中解析实例 ID?

谢谢!

最佳答案

它不是非人类可读的格式,而是 Python 表示法中的列表对象,因为您查询的是一个列表。

如果你想要一个字符串,你应该通过一个first过滤器。

win_instance_id: "{{ ec2_result | json_query('tagged_instances[*].id') | first }}"

您也可以不使用 json_query 直接访问该值([0] 指的是列表的第一个元素):

win_instance_id: "{{ ec2_result.tagged_instances[0].id }}"

关于json - Ansible:从 json 输出中获取特定的属性值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48631428/

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