Source code for SoftLayer.managers.image

"""
    SoftLayer.image
    ~~~~~~~~~~~~~~~
    Image Manager/helpers

    :license: MIT, see LICENSE for more details.
"""

from SoftLayer import utils

IMAGE_MASK = ('id,accountId,name,globalIdentifier,blockDevices,parentId,'
              'createDate')


[docs]class ImageManager(utils.IdentifierMixin, object): """ Manages server images :param SoftLayer.API.Client client: an API client instance """ def __init__(self, client): self.client = client self.vgbdtg = self.client['Virtual_Guest_Block_Device_Template_Group'] self.resolvers = [self._get_ids_from_name_public, self._get_ids_from_name_private]
[docs] def get_image(self, image_id, **kwargs): """ Get details about an image :param int image: The ID of the image. :param dict \\*\\*kwargs: response-level options (mask, limit, etc.) """ if 'mask' not in kwargs: kwargs['mask'] = IMAGE_MASK return self.vgbdtg.getObject(id=image_id, **kwargs)
[docs] def delete_image(self, image_id): """ deletes the specified image. :param int image: The ID of the image. """ self.vgbdtg.deleteObject(id=image_id)
[docs] def list_private_images(self, guid=None, name=None, **kwargs): """ List all private images. :param string guid: filter based on GUID :param string name: filter based on name :param dict \\*\\*kwargs: response-level options (mask, limit, etc.) """ if 'mask' not in kwargs: kwargs['mask'] = IMAGE_MASK _filter = utils.NestedDict(kwargs.get('filter') or {}) if name: _filter['privateBlockDeviceTemplateGroups']['name'] = ( utils.query_filter(name)) if guid: _filter['privateBlockDeviceTemplateGroups']['globalIdentifier'] = ( utils.query_filter(guid)) kwargs['filter'] = _filter.to_dict() account = self.client['Account'] return account.getPrivateBlockDeviceTemplateGroups(**kwargs)
[docs] def list_public_images(self, guid=None, name=None, **kwargs): """ List all public images. :param string guid: filter based on GUID :param string name: filter based on name :param dict \\*\\*kwargs: response-level options (mask, limit, etc.) """ if 'mask' not in kwargs: kwargs['mask'] = IMAGE_MASK _filter = utils.NestedDict(kwargs.get('filter') or {}) if name: _filter['name'] = utils.query_filter(name) if guid: _filter['globalIdentifier'] = utils.query_filter(guid) kwargs['filter'] = _filter.to_dict() return self.vgbdtg.getPublicImages(**kwargs)
def _get_ids_from_name_public(self, name): """ Get public images which match the given name """ results = self.list_public_images(name=name) return [result['id'] for result in results] def _get_ids_from_name_private(self, name): """ Get private images which match the given name """ results = self.list_private_images(name=name) return [result['id'] for result in results]
[docs] def edit(self, image_id, name=None, note=None, tag=None): """ Edit image related details :param int image: The ID of the image :param string name: Name of the Image. :param string note: Note of the image. :param string tag: Tags of the image to be updated to. """ obj = {} if name: obj['name'] = name if note: obj['note'] = note if obj: self.vgbdtg.editObject(obj, id=image_id) if tag: self.vgbdtg.setTags(str(tag), id=image_id) if name or note or tag: return True else: return False