Skip to content

Instantly share code, notes, and snippets.

@aduzsardi
Last active February 1, 2019 07:39
Show Gist options
  • Save aduzsardi/4e4a5400c53b0d8d1286617a837379fe to your computer and use it in GitHub Desktop.
Save aduzsardi/4e4a5400c53b0d8d1286617a837379fe to your computer and use it in GitHub Desktop.
get ami image python script
#!/usr/bin/env python3
import boto3
from dateutil import parser
import argparse
import json
vendor_ami_filters = {
'amazon' : [{ 'Name': 'owner-id', 'Values': ['137112412989']}, {'Name': 'name', 'Values': ['amzn-ami-hvm-*'] }],
'ubuntu' : [{ 'Name': 'owner-id', 'Values': ['099720109477']}, {'Name': 'name', 'Values': ['ubuntu/images/hvm-*'] }]
}
# These filters don't have a CLI parameter, but we can add it if needed
default_ami_filters = [{
'Name': 'architecture',
'Values': ['x86_64']
}, {
'Name': 'state',
'Values': ['available']
}, {
'Name': 'root-device-type',
'Values': ['ebs']
}, {
'Name': 'hypervisor',
'Values': ['xen']
}, {
'Name': 'virtualization-type',
'Values': ['hvm']
}, {
'Name': 'image-type',
'Values': ['machine']
}]
def merge_filters(default_filters,vendor_filters):
filters = default_filters + vendor_filters
return filters
def get_latest_image(ami_list):
latest = None
for image in ami_list:
if not latest:
latest = image
continue
if parser.parse(image['CreationDate']) > parser.parse(latest['CreationDate']):
latest = image
return latest
def get_ami_id(region, filters):
client = boto3.client('ec2', region)
response = client.describe_images(Filters=filters)
if response['Images'] == []:
ami_id = 'n/a'
else:
amiobj = get_latest_image(response['Images'])
ami_id = amiobj['ImageId']
return ami_id
## Testing json output
# return amiobj
def parese_arguments():
parser = argparse.ArgumentParser(add_help=True)
parser.add_argument(
'-d', '--distribution',
dest='distribution',
required=True,
help='Linux distribution , i.e. amzon,ubuntu')
parser.add_argument(
'-r', '--region',
dest='region',
required=True,
help='AWS region , i.e. us-east-1,eu-west-1')
return parser.parse_args()
def main():
cmd_args = parese_arguments()
v = vendor_ami_filters.get(cmd_args.distribution)
f = merge_filters(default_ami_filters,v)
r = cmd_args.region
ami_id = get_ami_id(r,f)
print(ami_id)
# Testing json output
#print(json.dumps(ami_id, indent=4))
if __name__ == '__main__': main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment