bootstrap-vz/tests/integration/images/ami.py
2015-04-16 22:22:46 +02:00

38 lines
1.4 KiB
Python

from image import Image
import logging
from contextlib import contextmanager
log = logging.getLogger(__name__)
def initialize_image(manifest, credentials, bootstrap_info):
image = AmazonMachineImage(manifest, bootstrap_info._ec2['image'],
bootstrap_info._ec2['region'], credentials)
return image
class AmazonMachineImage(Image):
def __init__(self, manifest, image_id, region, credentials):
super(AmazonMachineImage, self).__init__(manifest)
from boto.ec2 import connect_to_region as ec2_connect
self.ec2_connection = ec2_connect(region, aws_access_key_id=credentials['access-key'],
aws_secret_access_key=credentials['secret-key'])
from boto.vpc import connect_to_region as vpc_connect
self.vpc_connection = vpc_connect(region, aws_access_key_id=credentials['access-key'],
aws_secret_access_key=credentials['secret-key'])
self.ami = self.ec2_connection.get_image(image_id)
def destroy(self):
log.debug('Deleting AMI')
self.ami.deregister()
for device, block_device_type in self.ami.block_device_mapping.items():
self.ec2_connection.delete_snapshot(block_device_type.snapshot_id)
del self.ami
@contextmanager
def get_instance(self, instance_type):
from ..instances.ec2 import boot_image
with boot_image(self.ami, instance_type, self.ec2_connection, self.vpc_connection) as instance:
yield instance