def delete_volume(self, cluster_name, volume_id, mount_node_list): rlt = VolumeDB.instance().read_volume_info(cluster_name, volume_id) if not rlt.success: Log(1, 'DeleteStorageNodeWork.delete_volume read_volume_info[%s][%s]fail,as[%s]'%(cluster_name, volume_id, rlt.message)) return rlt volume = rlt.content app_node_list = [] mount_id_list = [] for node in rlt.mount_node_list: mount_id_list.append(node.get(ID)) app_node_list.append({'ip':node.get('ip'), 'port':node.get('port')}) if app_node_list: rlt = self.client.unmount_volume(volume, app_node_list) if not rlt.success: Log(1, 'DeleteStorageNodeWork.delete_volume unmount_volume[%s][%s]fail,as[%s]'%(cluster_name, volume.get('name'), rlt.message)) return rlt MountDB.instance().delete_mount_records(cluster_name, mount_id_list) cluster_id = self.get_cluster_id() rlt = self.client.delete_volume(cluster_id, volume.get('name')) if not rlt.success: Log(1, 'DeleteStorageNodeWork.delete_volume delete_volume[%s][%s]fail,as[%s]'%(cluster_name, volume.get('name'), rlt.message)) return rlt rlt = VolumeDB.instance().delete_volume(cluster_name, volume_id) if not rlt.success: Log(1, 'DeleteStorageNodeWork.delete_volume delete_volume[%s][%s] from etcd fail,as[%s]'%(cluster_name, volume_id, rlt.message)) return rlt
def unmount_host(self): if self.volume_type == STORAGE_SHARE_TYPE_NFS: return Result('nfs type volume') rlt = MountDB.instance().read_mount_list(self.cluster_name, self.pv_name) if not rlt.success: Log(1, 'AddPVWork.unmount_host read_mount_list[%s][%s]fail,as[%s]'%(self.cluster_name, self.pv_name, rlt.message)) return Result('done') app_node_list = [] mount_id_list = [] for host in rlt.content: mount_id_list.append(host.get(ID)) node = {} node['ip'] = host.get('ip') node['port'] = host.get('port') app_node_list.append(node) if not app_node_list: return Result('not mount') data = {} data['name'] = self.pv_name data['cluster_id'] = self.get_cluster_id() rlt = self.veclient.unmount_volume(data, app_node_list) if not rlt.success: Log(1, 'AddPVWork.mount_host mount_volume[%s]fail,as[%s]'%(str(data), rlt.message)) return rlt rlt = MountDB.instance().delete_mount_records(self.cluster_name, mount_id_list) if not rlt.success: Log(1, 'AddPVWork.mount_host save_mount_info[%s]fail,as[%s]'%(str(data), rlt.message)) return rlt
def delete_data_volume(self): if not self.volume_id: return Result('done') rlt = VolumeDB.instance().read_volume_info(self.cluster_name, self.volume_id) if not rlt.success: Log( 1, 'AddStorageClassWork.read_volume_info [%s][%s]from etcd fail,as[%s]' % (self.cluster_name, self.volume_id, rlt.message)) return rlt volume = rlt.content app_node_list = [] mount_id_list = [] rlt = MountDB.instance().read_mount_list(self.cluster_name, self.pv_name) if not rlt.success: Log( 1, 'AddStorageClassWork.delete_data_volume read_mount_list[%s][%s]fail,as[%s]' % (self.cluster_name, self.pv_name, rlt.message)) else: for node in rlt.content: mount_id_list.append(node.get(ID)) app_node_list.append({ 'ip': node.get('ip'), 'port': node.get('port') }) if app_node_list: rlt = self.veclient.unmount_volume(volume, app_node_list) if not rlt.success: Log( 1, 'AddStorageClassWork.delete_data_volume unmount_volume[%s][%s]fail,as[%s]' % (self.cluster_name, volume.get('name'), rlt.message)) return rlt MountDB.instance().delete_mount_records(self.cluster_name, mount_id_list) rlt = self.veclient.delete_volume(volume['cluster_id'], volume.get('name')) if not rlt.success: Log( 1, 'AddStorageClassWork.delete_data_volume delete_volume[%s][%s]fail,as[%s]' % (self.cluster_name, volume.get('name'), rlt.message)) return rlt rlt = VolumeDB.instance().delete_volume(self.cluster_name, self.volume_id) if not rlt.success: Log( 1, 'AddStorageClassWork.delete_data_volume delete_volume[%s][%s]from etcd fail,as[%s]' % (self.cluster_name, self.volume_id, rlt.message)) return rlt
def umount_volume(self, cluster_name, volume_id, mount_node_list): node_list = [] mount_id = '' for node in mount_node_list: if node.get('ip') == self.ip: node_list.append({'ip':node.get('ip'),'port':node.get('port')}) mount_id = node.get(ID) if not node_list: Log(1, 'umount_volume[%s][%s]fail,as the volume not mount to this host[%s]'%(cluster_name, volume_id, self.ip)) return Result('skip') rlt = VolumeDB.instance().read_volume_info(cluster_name, volume_id) if not rlt.success: Log(1, 'DeleteStorageNodeWork.delete_volume read_volume_info[%s][%s]fail,as[%s]'%(cluster_name, volume_id, rlt.message)) return rlt volume = rlt.content rlt = self.client.unmount_volume(volume, node_list) if not rlt.success: Log(1, 'DeleteStorageNodeWork.delete_volume unmount_volume[%s][%s]fail,as[%s]'%(cluster_name, volume.get('name'), rlt.message)) return rlt rlt = MountDB.instance().delete_mount_record(cluster_name, mount_id) if not rlt.success: Log(1, 'DeleteStorageNodeWork.umount_volume delete_mount_record[%s][%s] from etcd fail,as[%s]'%(cluster_name, mount_id, rlt.message)) return rlt
def delete_storage_class(self, cluster_name, info, operator): storage_class = info.get('storage_class_name') if info.get('status') == STORAGE_CLASS_STATUS_NOT_READY: Log(1, 'DeleteStorageNodeWork.delete_storage_class [%s][%s]fail,as[The storage class not ready]'%(cluster_name, storage_class)) return self.delete_storage_class_from_db(storage_class) kube_client = KubeClientMgr.instance().get_cluster_client(cluster_name) if kube_client is None: Log(1, 'DeleteStorageNodeWork.delete_storage_class get_cluster_client[%s]fail'%(cluster_name)) return Result('', INVALID_PARAM_ERR, 'cluster_name is invalid', http.BAD_REQUEST) rlt = kube_client.remove_storage_class_deploy(STORAGE_CLASS_DEFAULT_NAMESPACE, storage_class) if not rlt.success: Log(1, 'DeleteStorageNodeWork.delete_storage_class remove_storage_class_deploy[%s]fail,as[%s]'%(storage_class, rlt.message)) return rlt mount_node_list = [] rlt = MountDB.instance().read_mount_list(cluster_name, info.get('volume_name')) if not rlt.success: Log(1, 'DeleteStorageNodeWork.delete_storage_class read_mount_list[%s]fail,as[%s]'%(cluster_name, info.get('volume_name'), rlt.message)) else: mount_node_list = rlt.content rlt = self.delete_volume(cluster_name, info.get('volume_id'), mount_node_list) if not rlt.success: Log(1, 'DeleteStorageNodeWork.delete_storage_class delete_volume[%s]fail,as[%s]'%(storage_class, rlt.message)) rlt = kube_client.delete_storage_class(storage_class) if not rlt.success: Log(1, 'DeleteStorageNodeWork.delete_storage_class delete_storage_class[%s]fail,as[%s]'%(storage_class, rlt.message)) return self.delete_storage_class_from_db(storage_class)
def delete_pv(self, cluster_name, volume_name, operator): mount_node_list = [] rlt = MountDB.instance().read_mount_list(cluster_name, volume_name) if not rlt.success: Log(1, 'DeleteStorageNodeWork.delete_pv read_mount_list[%s]fail,as[%s]'%(cluster_name, volume_name, rlt.message)) else: mount_node_list = rlt.content if len(mount_node_list) > 1: return self.umount_volume(cluster_name, volume_name, mount_node_list) return self._delete_pv(cluster_name, volume_name, mount_node_list, operator)
def delete_pvs(self): rlt = MountDB.instance().get_volume_by_mount_ip(self.cluster_name, self.ip) if not rlt.success: Log(1, 'DeleteStorageNodeWork.delete_pvs get_volume_by_mount_ip[%s][%s]fail,as[%s]'%(self.cluster_name, self.ip, rlt.message)) return Result('done') if not len(rlt.content): Log(1, 'DeleteStorageNodeWork.delete_pvs [%s][%s]success,as[not mount volumes]'%(self.cluster_name, self.ip)) return Result('done') for volume_name in rlt.content: self.delete_pv(self.cluster_name, volume_name, self.operator) return Result(len(rlt.content))
def create_data_volume(self): data = {} data['ip'] = self.ip data['name'] = self.pv_name data['capacity'] = self.capacity data['share_type'] = self.volume_type data['replica'] = self.replica data['cluster_id'] = self.get_cluster_id() if self.volume_type == STORAGE_SHARE_TYPE_ISCSI: self.targetdport = VolumeDB.instance().get_iscsi_target_port(self.cluster_name) data['target_port'] = self.targetdport rlt = self.veclient.create_volume(data) if not rlt.success: Log(1, 'AddPVWork.create_data_volume create_volume[%s]fail,as[%s]'%(str(data), rlt.message)) return rlt rlt = self.veclient.get_volume_info(data['cluster_id'], DEFAULT_STORAGE_DOMAIN, DEFAULT_STORAGE_POOL_NAME, data['name']) if not rlt.success: Log(1, 'AddPVWork.create_data_volume get_volume_info[%s][%s]fail,as[%s]'%(data['cluster_id'], data['name'], rlt.message)) return rlt volume_info = rlt.content rlt = self.parse_volume_accesspath(volume_info.get('accesspath')) if not rlt.success: Log(1, 'AddPVWork.create_data_volume parse_volume_accesspath[%s]fail,as[%s]'%(str(volume_info.get('accesspath')), rlt.message)) return rlt rlt = MountDB.instance().create_mount_record(self.cluster_name, data) if not rlt.success: Log(1, 'AddPVWork.create_data_volume create_mount_record[%s]fail,as[%s]'%(str(data), rlt.message)) return rlt self.volume_status = volume_info.get('status', 0) data['creator'] = self.creator data['cluster_name'] = self.cluster_name data['bind'] = self.pv_name data['status'] = self.volume_status data['flag'] = volume_info.get('flag', 0) data['capacity_num'] = volume_info.get('capacity',0) data['mounted'] = volume_info.get('mounted',[]) data['accesspath'] = volume_info.get('accesspath',[]) data['controllerhosts'] = volume_info.get('controllerhosts',{}).get('default',[]) rlt = VolumeDB.instance().create_volume(self.cluster_name, data) if rlt.success: self.volume_id = rlt.content else: Log(1, 'AddPVWork.create_data_volume create_volume in etcd[%s]fail,as[%s]'%(str(data), rlt.message)) return rlt
def mount_host(self): if self.volume_type == STORAGE_SHARE_TYPE_NFS: return Result('done') rlt = StorageNodeDB.instance().read_app_node_list(self.cluster_name) if not rlt.success: Log(1, 'AddPVWork.mount_host read_app_node_list[%s]fail,as[%s]'%(self.cluster_name, rlt.message)) return Result('done') app_node_list = [] for node in rlt.content: if node.get('ip') == self.ip: continue app_node_list.append({'ip':node.get('ip'), 'port':node.get('app_api_port', APPLICATION_HOST_PORT)}) if not app_node_list: return Result('done') app_node_list = self._get_ramdom_host(app_node_list, 2) data = {} data['name'] = self.pv_name data['cluster_id'] = self.get_cluster_id() data['share_type'] = self.volume_type data['targetdport'] = self.targetdport rlt = self.veclient.mount_volume(data, app_node_list) if not rlt.success: Log(1, 'AddPVWork.mount_host mount_volume[%s]fail,as[%s]'%(str(data), rlt.message)) return rlt self.app_node_list = app_node_list rlt = MountDB.instance().save_mount_info(self.cluster_name, data, app_node_list) if not rlt.success: Log(1, 'AddPVWork.mount_host save_mount_info[%s]fail,as[%s]'%(str(data), rlt.message)) return rlt
if not rlt.success: Log( 1, 'Storage.add_volume create_volume[%s]fail,as[%s]' % (str(data), rlt.message)) return rlt rlt = client.get_volume_info(data['cluster_id'], DEFAULT_STORAGE_DOMAIN, DEFAULT_STORAGE_POOL_NAME, data['name']) if not rlt.success: Log( 1, 'Storage.add_volume get_volume_info[%s]fail,as[%s]' % (str(data), rlt.message)) return rlt rlt = MountDB.instance().create_mount_record(data['cluster_name'], data) if not rlt.success: Log( 1, 'Storage.add_volume create_mount_record[%s]fail,as[%s]' % (str(data), rlt.message)) return rlt volume_info = rlt.content data['creator'] = args.get('passport', {}).get('username', '') data['bind'] = '' data['status'] = volume_info.get('status', '-') data['flag'] = volume_info.get('flag', '-') data['capacity_num'] = volume_info.get('capacity', 0) data['mounted'] = volume_info.get('mounted', []) data['accesspath'] = volume_info.get('accesspath', []) data['controllerhosts'] = volume_info.get('controllerhosts',