[Cialug] JSON Querying

Adam Shannon adamkshannon at gmail.com
Thu Jun 14 14:06:53 UTC 2018


Does this work for you?

$ jq .Reservations[].Instances[] /tmp/aws.json | jq 'select(
.BlockDeviceMappings | length <= 2)'
{
  "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
}


On Thu, Jun 14, 2018 at 8:34 AM, Todd Walton <tdwalton at gmail.com> wrote:

> 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
> _______________________________________________
> Cialug mailing list
> Cialug at cialug.org
> http://cialug.org/mailman/listinfo/cialug
>


More information about the Cialug mailing list