# Copyright (c) 2006,2007 Mitch Garnaat http://garnaat.org/
#
# Permission is hereby granted, free of charge, to any person obtaining a
# copy of this software and associated documentation files (the
# "Software"), to deal in the Software without restriction, including
# without limitation the rights to use, copy, modify, merge, publish, dis-
# tribute, sublicense, and/or sell copies of the Software, and to permit
# persons to whom the Software is furnished to do so, subject to the fol-
# lowing conditions:
#
# The above copyright notice and this permission notice shall be included
# in all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
# ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
# SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
# IN THE SOFTWARE.
"""
Represents an EC2 Image
"""
class Image:
def __init__(self, connection=None):
self.connection = connection
self.id = None
self.location = None
self.state = None
self.ownerId = None
self.is_public = False
self.product_codes = []
def __repr__(self):
return 'Image:%s' % self.id
def startElement(self, name, attrs, connection):
return None
def endElement(self, name, value, connection):
if name == 'imageId':
self.id = value
elif name == 'imageLocation':
self.location = value
elif name == 'imageState':
self.state = value
elif name == 'imageOwnerId':
self.ownerId = value
elif name == 'isPublic':
if value == 'false':
self.is_public = False
elif value == 'true':
self.is_public = True
else:
raise Exception(
'Unexpected value of isPublic %s for image %s'%(
value,
self.id
)
)
elif name == 'productCode':
self.product_codes.append(value)
else:
setattr(self, name, value)
def run(self, min_count=1, max_count=1, key_name=None,
security_groups=None, user_data=None,
addressing_type=None, instance_type='m1.small'):
return self.connection.run_instances(self.id, min_count, max_count,
key_name, security_groups,
user_data, addressing_type,
instance_type)
def deregister(self):
return self.connection.deregister_image(self.id)
def get_launch_permissions(self):
img_attrs = self.connection.get_image_attribute(self.id,
'launchPermission')
return img_attrs.attrs
def set_launch_permissions(self, user_ids=None, group_names=None):
return self.connection.modify_image_attribute(self.id,
'launchPermission',
'add',
user_ids,
group_names)
def remove_launch_permissions(self, user_ids=None, group_names=None):
return self.connection.modify_image_attribute(self.id,
'launchPermission',
'remove',
user_ids,
group_names)
def reset_launch_attributes(self):
return self.connection.reset_image_attribute(self.id,
'launchPermission')
class ImageAttribute:
def __init__(self, parent=None):
self.name = None
self.attrs = {}
def startElement(self, name, attrs, connection):
return None
def endElement(self, name, value, connection):
if name == 'launchPermission':
self.name = 'launch_permission'
elif name == 'productCodes':
self.name = 'product_codes'
self.attrs[self.name] = []
elif name == 'group':
if self.attrs.has_key('groups'):
self.attrs['groups'].append(value)
else:
self.attrs['groups'] = [value]
elif name == 'userId':
if self.attrs.has_key('user_ids'):
self.attrs['user_ids'].append(value)
else:
self.attrs['user_ids'] = [value]
elif name == 'imageId':
self.image_id = value
elif name == 'productCode':
self.attrs['product_codes'].append(value)
else:
setattr(self, name, value)
syntax highlighted by Code2HTML, v. 0.9.1