/** * Allows the user to get data for the storage system with the passed system id that is associated * with the storage provider with the passed provider id. * * @param id the URN of a ViPR Storage provider * @param systemId The id of the storage system. * @brief Show Storage provider storage system * @return A StorageSystemRestRep reference specifying the data for the storage system. */ @GET @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) @Path("/{id}/storage-systems/{systemId}") @CheckPermission(roles = {Role.SYSTEM_ADMIN, Role.SYSTEM_MONITOR}) public StorageSystemRestRep getStorageSystem( @PathParam("id") URI id, @PathParam("systemId") URI systemId) { // Validate the provider. ArgValidator.checkFieldUriType(id, StorageProvider.class, "id"); StorageProvider provider = _dbClient.queryObject(StorageProvider.class, id); ArgValidator.checkEntityNotNull(provider, id, isIdEmbeddedInURL(id)); ArgValidator.checkFieldUriType(systemId, StorageSystem.class, "id"); // Return the storage system if found. StringSet providerSystemURIStrs = provider.getStorageSystems(); if (providerSystemURIStrs != null) { for (String providerSystemURIStr : providerSystemURIStrs) { if (providerSystemURIStr.equals(systemId.toString())) { StorageSystem storageSystem = _dbClient.queryObject(StorageSystem.class, URI.create(providerSystemURIStr)); if (storageSystem != null) { return map(storageSystem); } break; } } } throw APIException.notFound.unableToFindEntityInURL(id); }
@Override protected Bucket queryResource(URI id) { ArgValidator.checkUri(id); Bucket bucket = _permissionsHelper.getObjectById(id, Bucket.class); ArgValidator.checkEntityNotNull(bucket, id, isIdEmbeddedInURL(id)); return bucket; }
/** * Allows the user to get the id, name, and self link for all storage systems visible to the * provider with the passed id. * * @param id the URN of a ViPR Storage provider * @brief List Storage provider storage systems * @return A StorageSystemList reference specifying the id, name, and self link for the storage * systems visible to the provider. */ @GET @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) @Path("/{id}/storage-systems") @CheckPermission(roles = {Role.SYSTEM_ADMIN, Role.SYSTEM_MONITOR}) public StorageSystemList getStorageSystems(@PathParam("id") URI id) { // Validate the provider ArgValidator.checkFieldUriType(id, StorageProvider.class, "id"); StorageProvider provider = _dbClient.queryObject(StorageProvider.class, id); ArgValidator.checkEntityNotNull(provider, id, isIdEmbeddedInURL(id)); // Return the list of storage systems for the provider. StorageSystemList storageSystemsForProvider = new StorageSystemList(); StringSet providerSystemURIStrs = provider.getStorageSystems(); if (providerSystemURIStrs != null) { for (String providerSystemURIStr : providerSystemURIStrs) { StorageSystem storageSystem = _dbClient.queryObject(StorageSystem.class, URI.create(providerSystemURIStr)); if (storageSystem != null) { storageSystemsForProvider.getStorageSystems().add(toNamedRelatedResource(storageSystem)); } } } return storageSystemsForProvider; }
@Override protected QuotaDirectory queryResource(URI id) { ArgValidator.checkUri(id); QuotaDirectory qd = _permissionsHelper.getObjectById(id, QuotaDirectory.class); ArgValidator.checkEntityNotNull(qd, id, isIdEmbeddedInURL(id)); return qd; }
@POST @Path("/{id}/deactivate") @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) @CheckPermission(roles = {Role.SYSTEM_ADMIN, Role.RESTRICTED_SYSTEM_ADMIN}) public Response deleteStorageProvider(@PathParam("id") URI id) { // Validate the provider ArgValidator.checkFieldUriType(id, StorageProvider.class, "id"); StorageProvider provider = _dbClient.queryObject(StorageProvider.class, id); ArgValidator.checkEntityNotNull(provider, id, isIdEmbeddedInURL(id)); // Verify the provider can be removed without leaving "dangling" storages. StringSet providerStorageSystems = provider.getStorageSystems(); if (null != providerStorageSystems && !providerStorageSystems.isEmpty()) { // First we need to verify that all related storage systems has at least 2 providers for (String system : providerStorageSystems) { StorageSystem storageSys = _dbClient.queryObject(StorageSystem.class, URI.create(system)); if (storageSys != null && !storageSys.getInactive() && storageSys.getProviders() != null && storageSys.getProviders().size() == 1) { throw APIException.badRequests.cannotDeleteProviderWithManagedStorageSystems( storageSys.getId()); } } // Next we can clear this provider from storage systems. for (String system : providerStorageSystems) { StorageSystem storageSys = _dbClient.queryObject(StorageSystem.class, URI.create(system)); provider.removeStorageSystem(_dbClient, storageSys); } } StringSet decommissionedSystems = provider.getDecommissionedSystems(); if (null != decommissionedSystems && !decommissionedSystems.isEmpty()) { for (String decommissioned : decommissionedSystems) { DecommissionedResource oldRes = _dbClient.queryObject(DecommissionedResource.class, URI.create(decommissioned)); if (oldRes != null) { _dbClient.markForDeletion(oldRes); } } } // Set to inactive. _dbClient.markForDeletion(provider); auditOp( OperationTypeEnum.DELETE_STORAGEPROVIDER, true, null, provider.getId().toString(), provider.getLabel(), provider.getIPAddress(), provider.getPortNumber(), provider.getUserName(), provider.getInterfaceType()); return Response.ok().build(); }
/** * Allows the user to remove a storage system from the list of decommisioned resources After that * corresponding provider should be able to be rescanned and add this system back to the list of * managed systems. * * @param id id the URN of a ViPR Storage provider * @param param The storage system details. * @brief removes the storage system from the list of decommissioned systems and rescans the * provider. * @return An asynchronous task corresponding to the scan job scheduled for the provider. * @throws BadRequestException When the system type is not valid or a storage system with the same * native guid already exists. * @throws com.emc.storageos.db.exceptions.DatabaseException When an error occurs querying the * database. * @throws ControllerException When an error occurs discovering the storage system. */ @PUT @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) @CheckPermission(roles = {Role.SYSTEM_ADMIN}) @Path("/{id}/storage-systems") public TaskResourceRep addStorageSystem( @PathParam("id") URI id, StorageSystemProviderRequestParam param) throws ControllerException { TaskResourceRep taskRep; URIQueryResultList list = new URIQueryResultList(); ArgValidator.checkFieldNotEmpty(param.getSystemType(), "system_type"); if (!StorageSystem.Type.isProviderStorageSystem( DiscoveredDataObject.Type.valueOf(param.getSystemType()))) { throw APIException.badRequests.cannotAddStorageSystemTypeToStorageProvider( param.getSystemType()); } StorageProvider provider = _dbClient.queryObject(StorageProvider.class, id); ArgValidator.checkEntityNotNull(provider, id, isIdEmbeddedInURL(id)); ArgValidator.checkFieldNotEmpty(param.getSerialNumber(), "serialNumber"); String nativeGuid = NativeGUIDGenerator.generateNativeGuid(param.getSystemType(), param.getSerialNumber()); // check for duplicate StorageSystem. List<StorageSystem> systems = CustomQueryUtility.getActiveStorageSystemByNativeGuid(_dbClient, nativeGuid); if (systems != null && !systems.isEmpty()) { throw APIException.badRequests.invalidParameterProviderStorageSystemAlreadyExists( "nativeGuid", nativeGuid); } int cleared = DecommissionedResource.removeDecommissionedFlag(_dbClient, nativeGuid, StorageSystem.class); if (cleared == 0) { log.info("Cleared {} decommissioned systems", cleared); } else { log.info("Did not find any decommissioned systems to clear. Continue to scan."); } ArrayList<AsyncTask> tasks = new ArrayList<AsyncTask>(1); String taskId = UUID.randomUUID().toString(); tasks.add(new AsyncTask(StorageProvider.class, provider.getId(), taskId)); BlockController controller = getController(BlockController.class, provider.getInterfaceType()); DiscoveredObjectTaskScheduler scheduler = new DiscoveredObjectTaskScheduler(_dbClient, new ScanJobExec(controller)); TaskList taskList = scheduler.scheduleAsyncTasks(tasks); return taskList.getTaskList().listIterator().next(); }
protected FileShare queryFileShareResource(URI id) { ArgValidator.checkUri(id); FileShare fs = _permissionsHelper.getObjectById(id, FileShare.class); ArgValidator.checkEntityNotNull(fs, id, isIdEmbeddedInURL(id)); return fs; }