[Cialug] JSON Querying
Todd Walton
tdwalton at gmail.com
Thu Jun 14 13:34:05 UTC 2018
I'm having trouble figuring out this JSON query using jq. Maybe someone
here can help?
I do a 'aws ec2 describe-instances' and I get back a JSON document (pasted
in below, truncated for clarity). So now I want to use jq to return the
InstanceId of any instance with less than 2 BlockDeviceMappings. You'll
notice that the first instance, i-0f7771a48c88ec8fc, has 3 block device
mappings: /dev/sda1, /dev/xvdcp, and /dev/xvdcc, while the second instance,
i-0fcf111d64bc97558, only has 1, /dev/sda1. I want to pass all that through
jq such that I return the InstanceId of the second one.
Any suggestions? I'd take a non-jq suggestion if it were possible.
References:
https://stedolan.github.io/jq/
https://jqplay.org/
The doc:
{
"Reservations": [
{
"Instances": [
{
"Monitoring": {
"State": "enabled"
},
"PublicDnsName": "ec2-xx-xx-x-xx.name-1.amazonaws.com",
"State": {
"Code": 16,
"Name": "running"
},
"LaunchTime": "2018-06-13T12:00:20.000Z",
"PublicIpAddress": "xx.xx.x.xx",
"PrivateIpAddress": "xx.xx.x.xx",
"VpcId": "vpc-rjf271d9",
"CpuOptions": {
"CoreCount": 2,
"ThreadsPerCore": 2
},
"StateTransitionReason": "",
"InstanceId": "i-0f7771a48c88ec8fc",
"ImageId": "ami-60812a1d",
"PrivateDnsName": "ip-xx-xx-x-xx.ec2.internal",
"SubnetId": "subnet-xxxxxxxxxx",
"InstanceType": "m4.xlarge",
"SourceDestCheck": true,
"Hypervisor": "xen",
"BlockDeviceMappings": [
{
"DeviceName": "/dev/sda1",
"Ebs": {
"Status": "attached",
"DeleteOnTermination": true,
"VolumeId": "vol-xxxxxxxxxxx",
"AttachTime": "2018-04-09T19:41:10.000Z"
}
},
{
"DeviceName": "/dev/xvdcp",
"Ebs": {
"Status": "attached",
"DeleteOnTermination": false,
"VolumeId": "vol-xxxxxxxxxxx",
"AttachTime": "2018-05-17T12:03:23.000Z"
}
},
{
"DeviceName": "/dev/xvdcc",
"Ebs": {
"Status": "attached",
"DeleteOnTermination": false,
"VolumeId": "vol-xxxxxxxxxxx",
"AttachTime": "2018-05-18T19:34:56.000Z"
}
}
],
"Architecture": "x86_64",
"RootDeviceType": "ebs",
"RootDeviceName": "/dev/sda1",
"VirtualizationType": "hvm",
"AmiLaunchIndex": 0
},
{
"Monitoring": {
"State": "enabled"
},
"PublicDnsName": "ec2-xx-xx-x-xx.name-1.amazonaws.com",
"State": {
"Code": 16,
"Name": "running"
},
"LaunchTime": "2018-06-13T12:00:20.000Z",
"PublicIpAddress": "xx.xx.x.xx",
"PrivateIpAddress": "xx.xx.x.xx",
"VpcId": "vpc-rjf271d9",
"CpuOptions": {
"CoreCount": 2,
"ThreadsPerCore": 2
},
"StateTransitionReason": "",
"InstanceId": "i-0fcf111d64bc97558",
"ImageId": "ami-60812a1d",
"PrivateDnsName": "ip-xx-xx-x-xx.ec2.internal",
"SubnetId": "subnet-xxxxxxxxxx",
"InstanceType": "m4.xlarge",
"SourceDestCheck": true,
"Hypervisor": "xen",
"BlockDeviceMappings": [
{
"DeviceName": "/dev/sda1",
"Ebs": {
"Status": "attached",
"DeleteOnTermination": true,
"VolumeId": "vol-xxxxxxxxxxx",
"AttachTime": "2018-04-09T19:41:10.000Z"
}
}
],
"Architecture": "x86_64",
"RootDeviceType": "ebs",
"RootDeviceName": "/dev/sda1",
"VirtualizationType": "hvm",
"AmiLaunchIndex": 1
}
]
}
]
}
--
Todd
More information about the Cialug
mailing list