from __future__ import unicode_literals
from moto.core.responses import BaseResponse
from moto.ec2.utils import filters_from_querystring
class AmisResponse(BaseResponse):
def create_image(self):
name = self.querystring.get('Name')[0]
description = self._get_param('Description', if_none='')
instance_id = self._get_param('InstanceId')
if self.is_not_dryrun('CreateImage'):
image = self.ec2_backend.create_image(
instance_id, name, description, context=self)
template = self.response_template(CREATE_IMAGE_RESPONSE)
return template.render(image=image)
def copy_image(self):
source_image_id = self._get_param('SourceImageId')
source_region = self._get_param('SourceRegion')
name = self._get_param('Name')
description = self._get_param('Description')
if self.is_not_dryrun('CopyImage'):
image = self.ec2_backend.copy_image(
source_image_id, source_region, name, description)
template = self.response_template(COPY_IMAGE_RESPONSE)
return template.render(image=image)
def deregister_image(self):
ami_id = self._get_param('ImageId')
if self.is_not_dryrun('DeregisterImage'):
success = self.ec2_backend.deregister_image(ami_id)
template = self.response_template(DEREGISTER_IMAGE_RESPONSE)
return template.render(success=str(success).lower())
def describe_images(self):
ami_ids = self._get_multi_param('ImageId')
filters = filters_from_querystring(self.querystring)
owners = self._get_multi_param('Owner')
exec_users = self._get_multi_param('ExecutableBy')
images = self.ec2_backend.describe_images(
ami_ids=ami_ids, filters=filters, exec_users=exec_users,
owners=owners, context=self)
template = self.response_template(DESCRIBE_IMAGES_RESPONSE)
return template.render(images=images)
def describe_image_attribute(self):
ami_id = self._get_param('ImageId')
groups = self.ec2_backend.get_launch_permission_groups(ami_id)
users = self.ec2_backend.get_launch_permission_users(ami_id)
template = self.response_template(DESCRIBE_IMAGE_ATTRIBUTES_RESPONSE)
return template.render(ami_id=ami_id, groups=groups, users=users)
def modify_image_attribute(self):
ami_id = self._get_param('ImageId')
operation_type = self._get_param('OperationType')
group = self._get_param('UserGroup.1')
user_ids = self._get_multi_param('UserId')
if self.is_not_dryrun('ModifyImageAttribute'):
if (operation_type == 'add'):
self.ec2_backend.add_launch_permission(
ami_id, user_ids=user_ids, group=group)
elif (operation_type == 'remove'):
self.ec2_backend.remove_launch_permission(
ami_id, user_ids=user_ids, group=group)
return MODIFY_IMAGE_ATTRIBUTE_RESPONSE
def register_image(self):
if self.is_not_dryrun('RegisterImage'):
raise NotImplementedError(
'AMIs.register_image is not yet implemented')
def reset_image_attribute(self):
if self.is_not_dryrun('ResetImageAttribute'):
raise NotImplementedError(
'AMIs.reset_image_attribute is not yet implemented')
CREATE_IMAGE_RESPONSE = """
59dbff89-35bd-4eac-99ed-be587EXAMPLE
{{ image.id }}
"""
COPY_IMAGE_RESPONSE = """
60bc441d-fa2c-494d-b155-5d6a3EXAMPLE
{{ image.id }}
"""
# TODO almost all of these params should actually be templated based on
# the ec2 image
DESCRIBE_IMAGES_RESPONSE = """
59dbff89-35bd-4eac-99ed-be587EXAMPLE
{% for image in images %}
-
{{ image.id }}
{{ image.image_location }}
{{ image.state }}
{{ image.owner_id }}
{{ image.is_public_string }}
{{ image.architecture }}
{{ image.image_type }}
{{ image.kernel_id }}
ari-1a2b3c4d
amazon
{{ image.creation_date }}
{{ image.name }}
{% if image.platform %}
{{ image.platform }}
{% endif %}
{{ image.description }}
{{ image.root_device_type }}
{{ image.root_device_name }}
-
{{ image.root_device_name }}
{{ image.ebs_snapshot.id }}
15
false
{{ image.root_device_type }}
{{ image.virtualization_type }}
{% for tag in image.get_tags() %}
-
{{ tag.resource_id }}
{{ tag.resource_type }}
{{ tag.key }}
{{ tag.value }}
{% endfor %}
xen
{% endfor %}
"""
DESCRIBE_IMAGE_RESPONSE = """
59dbff89-35bd-4eac-99ed-be587EXAMPLE
{{ image.id }}
<{{ key }}>
{{ value }}
{{key }}>
"""
DEREGISTER_IMAGE_RESPONSE = """
59dbff89-35bd-4eac-99ed-be587EXAMPLE
{{ success }}
"""
DESCRIBE_IMAGE_ATTRIBUTES_RESPONSE = """
59dbff89-35bd-4eac-99ed-be587EXAMPLE
{{ ami_id }}
{% if not groups and not users %}
{% else %}
{% if groups %}
{% for group in groups %}
-
{{ group }}
{% endfor %}
{% endif %}
{% if users %}
{% for user in users %}
-
{{ user }}
{% endfor %}
{% endif %}
{% endif %}
"""
MODIFY_IMAGE_ATTRIBUTE_RESPONSE = """
true
"""