1

I am trying to execute an AWS CLI query for EC2. I have crafted the query below, but the triple nesting seems to be throwing things off for InstanceStatus.Details.Status.

aws ec2 describe-instance-status --query 'InstanceStatuses[*].{InstanceId:InstanceId,AvailabilityZone:AvailabilityZone,InstanceState:InstanceState.Name,InstanceStatusDetails:InstanceStatus.Details.Status,Status:SystemStatus.Status}' --profile $PROFILE --output table

| DescribeInstanceStatus | +------------------+----------------------+----------------+-------------------------+----------+ | AvailabilityZone | InstanceId | InstanceState | InstanceStatusDetails | Status | +------------------+----------------------+----------------+-------------------------+----------+ | us-east-1a | i-asdfasdfasfdsdfsa | running | None | ok | 

If I strip off the .Status it will return the whole table which I don't want.

aws ec2 describe-instance-status --query 'InstanceStatuses[*].{InstanceId:InstanceId,AvailabilityZone:AvailabilityZone,InstanceState:InstanceState.Name,InstanceStatusDetails:InstanceStatus.Details,Status:SystemStatus.Status}' --profile $PROFILE --output table

| DescribeInstanceStatus | +-------------------+-----------------------+----------------+---------+ | AvailabilityZone | InstanceId | InstanceState | Status | +-------------------+-----------------------+----------------+---------+ | us-east-1a | i-asdfasdfasfdsdfsa | running | ok | +-------------------+-----------------------+----------------+---------+ || InstanceStatusDetails || |+-----------------------------------------+--------------------------+| || Name | Status || |+-----------------------------------------+--------------------------+| || reachability | passed || |+-----------------------------------------+--------------------------+| 

What do I need to do to return the results of InstanceStatus.Details.Status with the rest of my query?

Thanks!

1 Answer 1

0

dict structure as reminder:

{ "AvailabilityZone": "eu-west-1b", "InstanceId": "i-00aabb11cc22dd33", "InstanceState": { "Code": 16, "Name": "running" }, "InstanceStatus": { "Details": [ { "Name": "reachability", "Status": "passed" } ], "Status": "ok" }, "SystemStatus": { "Details": [ { "Name": "reachability", "Status": "passed" } ], "Status": "ok" } }, 

InstanceStatus.Details is an array. you have to tell from which element of the array you want to get the "Status" key

so, add [0] after InstanceStatus.Details

thus:

aws ec2 describe-instance-status --query 'InstanceStatuses[*].{InstanceId:InstanceId,AvailabilityZone:AvailabilityZone,InstanceState:InstanceState.Name,InstanceStatusDetails:InstanceStatus.Details[0].Status,Status:SystemStatus.Status}' --profile $PROFILE --output table 
1
  • 1
    improved filter: InstanceStatus.Details[?Name=='reachability'] | [0].Status to be sure to catch the reachability status in case more than one element is possible Commented Jan 3, 2024 at 15:24

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.