Last active
February 1, 2019 07:39
-
-
Save aduzsardi/4e4a5400c53b0d8d1286617a837379fe to your computer and use it in GitHub Desktop.
get ami image python script
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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