The program looks short but the way Python handles JSON is not very elegant. JSON is supposed to be a serialized object, so it should be processed as an object. But here, it’s processed as an array.
[python]
#!/usr/bin/python
import json
import sys
print "Usage: cat JSON | BasicParse.py | column -t"
jsonInput = sys.stdin
awsObject = json.load(jsonInput)
instances = awsObject[‘Reservations’]
for instance in instances:
print instance[‘Instances’][0][‘Tags’][0][‘Value’], instance[‘Instances’][0][‘InstanceId’], instance[‘Instances’][0][‘PublicDnsName’]
[/python]
Not only that, there is no type definition with any of the variables. I have no idea what was returned by json.load.
Also, exception handling is quite poor. I tried to do a try-except block but the program got stuck with no stdin was piped. If I try to read from stdin and calculate the length, the read line is consumed and I couldn’t go back.
Anyway, this program will take output from awscli (json format) and extract 3 fields that I want.
On a relevant note, it is also possible to use the –query option to narrow down the search fields. For example
$ aws ec2 describe-volumes --output=text --query 'Volumes[*].{ID:VolumeId,Size:Size}' vol-d74xxx93 30 vol-784xxx3c 30 vol-854xxxc1 60