Ansible:从json输出中获取特定属性值
我有以下任务:Ansible:从json输出中获取特定属性值,json,parsing,amazon-ec2,ansible,output,Json,Parsing,Amazon Ec2,Ansible,Output,我有以下任务: 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 - de
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表示法中的列表对象,因为您需要查询列表 如果需要字符串,应首先将其通过
过滤器
win_instance_id: "{{ ec2_result | json_query('tagged_instances[*].id') | first }}"
您也可以直接访问该值,而无需使用json\u query
([0]
指列表的第一个元素):
这真的帮助了我。有没有办法绕过set\u fact
直接从变量访问json,比如ec2\u result.taged\u instances[*].id
?@peteconnell有。就这么做吧。我在模板字符串时遇到了“模板错误:意外的“*”
我正在使用ec2\u实例\u事实
模块,所以可能输出类型有所不同。@PeteCornell抱歉,我不知道您正在运行什么代码。如果您有新问题,请不要忘记添加。
win_instance_id: "{{ ec2_result.tagged_instances[0].id }}"