def __unlock_consul_path(self, path): try: logger.debug("Unlock {} path locked by session {}.".format( path, self.__session)) consul_api = ConsulAPI() consul_api.release_disk_path( self.__app_conf.get_consul_disks_path() + path, self.__session, None) logger.info("Unlock path %s" % path) except Exception as e: logger.error("Could not unlock path %s" % path) raise e
def clean_source_node(self, ip, disk_id): if not self.update_path(ip, ReassignPathStatus.moving): return False # pool = CephAPI().get_pool_bydisk(disk_id) pool = self._get_pool_by_disk(disk_id) if not pool: logger.error('Could not find pool for disk ' + disk_id) return False disk = CephAPI().get_disk_meta(disk_id, pool) paths_list = disk.paths disk_path = None path_index = -1 for i in xrange(0, len(paths_list)): path_str = paths_list[i] path = Path() path.load_json(json.dumps(path_str)) if path.ip == ip: disk_path = path path_index = i break if disk_path: self._clean_iscsi_config(disk_id, path_index, disk.iqn) network = Network() NetworkAPI().delete_ip(path.ip, path.eth, path.subnet_mask) if network.is_ip_configured(ip): logger.error( "Move action,cannot clean newtwork config for disk {} path {}." .format(disk_id, path_index)) self.update_path(ip, ReassignPathStatus.failed) return False logger.info( "Move action,clean newtwork config for disk {} path {}.". format(disk_id, path_index)) key = self.__app_conf.get_consul_disks_path( ) + disk_id + "/" + str(path_index + 1) consul_api = ConsulAPI() session = self._get_node_session(configuration().get_node_name()) if ConsulAPI().is_path_locked_by_session(key, session): consul_api.release_disk_path(key, session, None) logger.info("Move action,release disk {} path {}.".format( disk_id, path_index + 1)) else: self.update_path(ip, ReassignPathStatus.failed) return False return True