Esempio n. 1
0
 def save(self):
     try:
         from storage.api import CephStorageAPI
         cephpool = CephStorageAPI().get_pool_by_id(self.cephpool_id)
         if cephpool:
             if not cephpool.exists(self.snap):
                 create_success = cephpool.create_snap(self.snap)
                 protect_success = cephpool.protect_snap(self.snap)
                 if create_success and protect_success:
                     self.snap_exists = True
                 else:
                     self.snap_exists = False
     except:
         self.snap_exists = False
         print('auto create snap error.')
     super(self.__class__, self).save()
Esempio n. 2
0
    def save(self):
        try:
            from storage.api import CephStorageAPI

            cephpool = CephStorageAPI().get_pool_by_id(self.cephpool_id)
            if cephpool:
                if not cephpool.exists(self.snap):
                    create_success = cephpool.create_snap(self.snap)
                    protect_success = cephpool.protect_snap(self.snap)
                    if create_success and protect_success:
                        self.snap_exists = True
                    else:
                        self.snap_exists = False
        except:
            self.snap_exists = False
            print("auto create snap error.")
        super(self.__class__, self).save()
Esempio n. 3
0
class ImageAPI(object):
    def __init__(self, manager=None, storage_api=None):
        if manager:
            self.manager = manager
        else:
            self.manager = ImageManager()
        if storage_api:
            self.storage_api = storage_api
        else:
            self.storage_api = CephStorageAPI()

    def _valid_diskname(self, disk_name):
        try:
            disk_name = str(disk_name)
        except:
            return False
        if len(disk_name) <= 0:
            return False
        return True

    def init_disk(self, image_id, disk_name):
        '''初始化磁盘'''
        image = self.manager.get_image_by_id(image_id)
        if not self._valid_diskname(disk_name):
            raise Error(ERR_DISK_NAME)
        return self.storage_api.clone(image.cephpool_id, image.snap, disk_name)

    def rm_disk(self, image_id, disk_name):
        image = self.manager.get_image_by_id(image_id)
        if not self._valid_diskname(disk_name):
            raise Error(ERR_DISK_NAME)
        return self.storage_api.rm(image.cephpool_id, disk_name)

    def archive_disk(self, image_id, disk_name, archive_disk_name=None):
        if archive_disk_name == None:
            archive_disk_name = 'x_' + str(
                disk_name) + '_' + datetime.now().strftime("%Y%m%d%H%M%S%f")
        else:
            if not self._valid_diskname(disk_name):
                raise Error(ERR_DISK_NAME)
        image = self.manager.get_image_by_id(image_id)
        if self.storage_api.mv(image.cephpool_id, disk_name,
                               archive_disk_name):
            return archive_disk_name
        return False

    def disk_exists(self, image_id, disk_name):
        image = self.manager.get_image_by_id(image_id)
        return self.storage_api.exists(image.cephpool_id, disk_name)

    def restore_disk(self, image_id, archive_disk_name):
        try:
            disk_name = archive_disk_name[2:38]
        except:
            raise Error(ERR_DISK_NAME)
        if not self._valid_diskname(disk_name):
            raise Error(ERR_DISK_NAME)
        image = self.manager.get_image_by_id(image_id)
        if self.storage_api.mv(image.cephpool_id, archive_disk_name,
                               disk_name):
            return True
        return False

    def get_image_info_by_id(self, image_id):
        '''根据镜像ID获取镜像相关的信息, 返回数据格式: {
                    'image_snap': *******,
                    'image_name': *******,
                    'image_version': ***,
                    'ceph_id': *,
                    'ceph_host': *.*.*.*,
                    'ceph_port': ****,
                    'ceph_uuid': ************************,
                    'ceph_pool': ******,
                    'ceph_username': *****

                }
        '''
        res = self.manager.get_image_info(image_id)
        if not res:
            raise Error(ERR_IMAGE_INFO)
        return res

    def get_xml_tpl(self, image_id):
        image = self.manager.get_image_by_id(image_id)
        return image.xml

    def get_image_by_id(self, image_id):
        return self.manager.get_image_by_id(image_id)

    def get_image_list_by_pool_id(self, pool_id, enable=None):
        return self.manager.get_image_list_by_pool_id(pool_id, enable)

    def get_image_type_list(self):
        return self.manager.get_image_type_list()
Esempio n. 4
0
class ImageAPI(object):
    def __init__(self, manager=None, storage_api=None):
        if manager:
            self.manager = manager
        else:
            self.manager = ImageManager()
        if storage_api:
            self.storage_api = storage_api
        else:
            self.storage_api = CephStorageAPI()

    def _valid_diskname(self, disk_name):
        try:
            disk_name = str(disk_name)
        except:
            return False
        if len(disk_name) <= 0:
            return False
        return True

    def init_disk(self, image_id, disk_name):
        '''初始化磁盘'''
        image = self.manager.get_image_by_id(image_id)
        if not self._valid_diskname(disk_name):
            raise Error(ERR_DISK_NAME)
        return self.storage_api.clone(image.cephpool_id, image.snap, disk_name)

    def rm_disk(self, image_id, disk_name):
        image = self.manager.get_image_by_id(image_id)
        if not self._valid_diskname(disk_name):
            raise Error(ERR_DISK_NAME)
        return self.storage_api.rm(image.cephpool_id, disk_name)

    def archive_disk(self, image_id, disk_name, archive_disk_name=None):
        if archive_disk_name == None:
            archive_disk_name = 'x_'+str(disk_name)+'_'+datetime.now().strftime("%Y%m%d%H%M%S%f")
        else:
            if not self._valid_diskname(disk_name):
                raise Error(ERR_DISK_NAME)
        image = self.manager.get_image_by_id(image_id)
        if self.storage_api.mv(image.cephpool_id, disk_name, archive_disk_name):
            return archive_disk_name
        return False

    def disk_exists(self, image_id, disk_name):
        image = self.manager.get_image_by_id(image_id)
        return self.storage_api.exists(image.cephpool_id, disk_name)

    def restore_disk(self, image_id, archive_disk_name):
        try:
            disk_name = archive_disk_name[2:38]
        except:
            raise Error(ERR_DISK_NAME)
        if not self._valid_diskname(disk_name):
            raise Error(ERR_DISK_NAME)
        image = self.manager.get_image_by_id(image_id)
        if self.storage_api.mv(image.cephpool_id, archive_disk_name, disk_name):
            return True
        return False        

    def get_image_info_by_id(self, image_id):
        '''根据镜像ID获取镜像相关的信息, 返回数据格式: {
                    'image_snap': *******,
                    'image_name': *******,
                    'image_version': ***,
                    'ceph_id': *,
                    'ceph_host': *.*.*.*,
                    'ceph_port': ****,
                    'ceph_uuid': ************************,
                    'ceph_pool': ******,
                    'ceph_username': *****

                }
        '''
        res = self.manager.get_image_info(image_id)
        if not res:
            raise Error(ERR_IMAGE_INFO)
        return res

    def get_xml_tpl(self, image_id):
        image = self.manager.get_image_by_id(image_id)
        return image.xml

    def get_image_by_id(self, image_id):
        return self.manager.get_image_by_id(image_id)

    def get_image_list_by_pool_id(self, pool_id):
        return self.manager.get_image_list_by_pool_id(pool_id)

    def get_image_type_list(self):
        return self.manager.get_image_type_list()