from openstack.exceptions import ResourceNotFound from interface.storage.StorageManager import StorageManager from interface.storage.Volume import Volume class OpenstackStorageManager(StorageManager): def __init__(self, openstack) -> None: super().__init__() self.openstack = openstack @staticmethod def os_volume_to_rc_volume(os_volume): return Volume( os_volume.id, os_volume.image_id, os_volume.size, os_volume.is_bootable, os_volume.status, os_volume.created_at ) def create(self, size): os_volume = self.openstack.block_storage.create_volume( size=size ) return self.os_volume_to_rc_volume(os_volume) def create_from_image(self, id, size, bootable): os_volume = self.openstack.block_storage.create_volume( image_id=id, size=size, bootable=bootable ) return self.os_volume_to_rc_volume(os_volume) def create_from_snapshot(self, id): os_volume = self.openstack.block_storage.create_volume( snapshot_id=id ) return self.os_volume_to_rc_volume(os_volume) def get(self, id): try: os_volume = self.openstack.block_storage.get_volume(id) except ResourceNotFound: return None return self.os_volume_to_rc_volume(os_volume) def delete(self, id): try: self.openstack.block_storage.delete_volume(id) except ResourceNotFound: return False return True def list(self): volumes = [] for os_volume in self.openstack.block_storage.volumes(): volumes.append(self.os_volume_to_rc_volume(os_volume)) return volumes