/* * Copyright (c) 2016 EMC Corporation * All Rights Reserved */ package com.emc.storageos.storagedriver; import com.emc.storageos.storagedriver.model.Initiator; import com.emc.storageos.storagedriver.model.StorageHostComponent; import com.emc.storageos.storagedriver.model.StorageObject; import com.emc.storageos.storagedriver.model.StoragePool; import com.emc.storageos.storagedriver.model.StoragePort; import com.emc.storageos.storagedriver.model.StorageProvider; import com.emc.storageos.storagedriver.model.StorageSystem; import com.emc.storageos.storagedriver.model.StorageVolume; import com.emc.storageos.storagedriver.model.VolumeClone; import com.emc.storageos.storagedriver.model.VolumeConsistencyGroup; import com.emc.storageos.storagedriver.model.VolumeMirror; import com.emc.storageos.storagedriver.model.VolumeSnapshot; import com.emc.storageos.storagedriver.storagecapabilities.CapabilityInstance; import com.emc.storageos.storagedriver.storagecapabilities.StorageCapabilities; import org.apache.commons.lang.mutable.MutableBoolean; import org.apache.commons.lang.mutable.MutableInt; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.List; import java.util.Map; import java.util.UUID; /** * Default, not-supported, implementation of SDK driver methods. * Can be use as a base class for SDK storage drivers. */ public class DefaultStorageDriver extends AbstractStorageDriver implements BlockStorageDriver { private static final Logger _log = LoggerFactory.getLogger(DefaultStorageDriver.class); @Override public DriverTask createVolumes(List<StorageVolume> volumes, StorageCapabilities capabilities) { String taskType = "create-storage-volumes"; String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, taskType, UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "createVolumes"); _log.warn(msg); task.setMessage(msg); return task; } @Override public DriverTask getStorageVolumes(StorageSystem storageSystem, List<StorageVolume> storageVolumes, MutableInt token) { String taskType = "get-storage-volumes"; String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, taskType, UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "getStorageVolumes"); _log.warn(msg); task.setMessage(msg); return task; } @Override public List<VolumeSnapshot> getVolumeSnapshots(StorageVolume volume) { String driverName = this.getClass().getSimpleName(); String msg = String.format("%s: %s --- operation is not supported.", driverName, "getVolumeSnapshots"); _log.warn(msg); throw new UnsupportedOperationException(msg); } @Override public List<VolumeClone> getVolumeClones(StorageVolume volume) { String driverName = this.getClass().getSimpleName(); String msg = String.format("%s: %s --- operation is not supported.", driverName, "getVolumeClones"); _log.warn(msg); throw new UnsupportedOperationException(msg); } @Override public List<VolumeMirror> getVolumeMirrors(StorageVolume volume) { String driverName = this.getClass().getSimpleName(); String msg = String.format("%s: %s --- operation is not supported.", driverName, "getVolumeMirrors"); _log.warn(msg); throw new UnsupportedOperationException(msg); } @Override public DriverTask expandVolume(StorageVolume volume, long newCapacity) { String taskType = "expandVolume"; String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, taskType, UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "expandVolume"); _log.warn(msg); task.setMessage(msg); return task; } @Override public DriverTask deleteVolume(StorageVolume volume) { String taskType = "delete-storage-volume"; String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, taskType, UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "deleteVolume"); _log.warn(msg); task.setMessage(msg); return task; } @Override public DriverTask createVolumeSnapshot(List<VolumeSnapshot> snapshots, StorageCapabilities capabilities) { String taskType = "create-volume-snapshot"; String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, taskType, UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "createVolumeSnapshot"); _log.warn(msg); task.setMessage(msg); return task; } @Override public DriverTask restoreSnapshot(List<VolumeSnapshot> snapshots) { String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, "restoreSnapshot", UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "restoreSnapshot"); _log.warn(msg); task.setMessage(msg); return task; } @Override public DriverTask stopManagement(StorageSystem driverStorageSystem){ _log.info("Stopping management for StorageSystem {}", driverStorageSystem.getNativeId()); String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, "stopManagement", UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "stopManagement"); _log.warn(msg); task.setMessage(msg); return task; } @Override public DriverTask deleteVolumeSnapshot(VolumeSnapshot snapshot) { String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, "deleteVolumeSnapshot", UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "deleteVolumeSnapshot"); _log.warn(msg); task.setMessage(msg); return task; } @Override public DriverTask createVolumeClone(List<VolumeClone> clones, StorageCapabilities capabilities) { String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, "createVolumeClone", UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "createVolumeClone"); _log.warn(msg); task.setMessage(msg); return task; } @Override public DriverTask detachVolumeClone(List<VolumeClone> clones) { String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, "detachVolumeClone", UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "detachVolumeClone"); _log.warn(msg); task.setMessage(msg); return task; } @Override public DriverTask restoreFromClone(List<VolumeClone> clones) { String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, "restoreFromClone", UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "restoreFromClone"); _log.warn(msg); task.setMessage(msg); return task; } @Override public DriverTask deleteVolumeClone(VolumeClone clone) { String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, "deleteVolumeClone", UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "deleteVolumeClone"); _log.warn(msg); task.setMessage(msg); return task; } @Override public DriverTask createVolumeMirror(List<VolumeMirror> mirrors, StorageCapabilities capabilities) { String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, "createVolumeMirror", UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "createVolumeMirror"); _log.warn(msg); task.setMessage(msg); return task; } @Override public DriverTask createConsistencyGroupMirror(VolumeConsistencyGroup consistencyGroup, List<VolumeMirror> mirrors, List<CapabilityInstance> capabilities) { String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, "createConsistencyGroupMirror", UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "createConsistencyGroupMirror"); _log.warn(msg); task.setMessage(msg); return task; } @Override public DriverTask deleteVolumeMirror(VolumeMirror mirror) { String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, "deleteVolumeMirror", UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "deleteVolumeMirror"); _log.warn(msg); task.setMessage(msg); return task; } @Override public DriverTask deleteConsistencyGroupMirror(List<VolumeMirror> mirrors) { String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, "deleteConsistencyGroupMirror", UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "deleteConsistencyGroupMirror"); _log.warn(msg); task.setMessage(msg); return task; } @Override public DriverTask addVolumesToConsistencyGroup (List<StorageVolume> volumes, StorageCapabilities capabilities){ _log.info("addVolumesToConsistencyGroup : unsupported operation."); String driverName = this.getClass().getSimpleName(); String taskType = "add-volumes-to-consistency-groupd"; String taskId = String.format("%s+%s+%s", driverName, taskType, UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("addVolumesToConsistencyGroup: unsupported operation"); _log.info(msg); task.setMessage(msg); return task; } @Override public DriverTask removeVolumesFromConsistencyGroup(List<StorageVolume> volumes, StorageCapabilities capabilities){ _log.info("removeVolumesFromConsistencyGroup : unsupported operation."); String taskType = "remove-volumes-to-consistency-groupd"; String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, taskType, UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("removeVolumesFromConsistencyGroup: unsupported operation"); _log.info(msg); task.setMessage(msg); return task; } @Override public DriverTask splitVolumeMirror(List<VolumeMirror> mirrors) { String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, "splitVolumeMirror", UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "splitVolumeMirror"); _log.warn(msg); task.setMessage(msg); return task; } @Override public DriverTask resumeVolumeMirror(List<VolumeMirror> mirrors) { String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, "resumeVolumeMirror", UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "resumeVolumeMirror"); _log.warn(msg); task.setMessage(msg); return task; } @Override public DriverTask restoreVolumeMirror(List<VolumeMirror> mirrors) { String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, "restoreVolumeMirror", UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "restoreVolumeMirror"); _log.warn(msg); task.setMessage(msg); return task; } @Override public Map<String, HostExportInfo> getVolumeExportInfoForHosts(StorageVolume volume) { String driverName = this.getClass().getSimpleName(); String msg = String.format("%s: %s --- operation is not supported.", driverName, "getVolumeExportInfoForHosts"); _log.warn(msg); throw new UnsupportedOperationException(msg); } @Override public Map<String, HostExportInfo> getSnapshotExportInfoForHosts(VolumeSnapshot snapshot) { String driverName = this.getClass().getSimpleName(); String msg = String.format("%s: %s --- operation is not supported.", driverName, "getSnapshotExportInfoForHosts"); _log.warn(msg); throw new UnsupportedOperationException(msg); } @Override public Map<String, HostExportInfo> getCloneExportInfoForHosts(VolumeClone clone) { String driverName = this.getClass().getSimpleName(); String msg = String.format("%s: %s --- operation is not supported.", driverName, "getCloneExportInfoForHosts"); _log.warn(msg); throw new UnsupportedOperationException(msg); } @Override public Map<String, HostExportInfo> getMirrorExportInfoForHosts(VolumeMirror mirror) { String driverName = this.getClass().getSimpleName(); String msg = String.format("%s: %s --- operation is not supported.", driverName, "getMirrorExportInfoForHosts"); _log.warn(msg); throw new UnsupportedOperationException(msg); } @Override public DriverTask exportVolumesToInitiators(List<Initiator> initiators, List<StorageVolume> volumes, Map<String, String> volumeToHLUMap, List<StoragePort> recommendedPorts, List<StoragePort> availablePorts, StorageCapabilities capabilities, MutableBoolean usedRecommendedPorts, List<StoragePort> selectedPorts) { String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, "exportVolumesToInitiators", UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "exportVolumesToInitiators"); _log.warn(msg); task.setMessage(msg); return task; } @Override public DriverTask unexportVolumesFromInitiators(List<Initiator> initiators, List<StorageVolume> volumes) { String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, "unexportVolumesFromInitiators", UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "unexportVolumesFromInitiators"); _log.warn(msg); task.setMessage(msg); return task; } @Override public DriverTask createConsistencyGroup(VolumeConsistencyGroup consistencyGroup) { String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, "createConsistencyGroup", UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "createConsistencyGroup"); _log.warn(msg); task.setMessage(msg); return task; } @Override public DriverTask deleteConsistencyGroup(VolumeConsistencyGroup consistencyGroup) { String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, "deleteConsistencyGroup", UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "deleteConsistencyGroup"); _log.warn(msg); task.setMessage(msg); return task; } @Override public DriverTask createConsistencyGroupSnapshot(VolumeConsistencyGroup consistencyGroup, List<VolumeSnapshot> snapshots, List<CapabilityInstance> capabilities) { String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, "createConsistencyGroupSnapshot", UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "createConsistencyGroupSnapshot"); _log.warn(msg); task.setMessage(msg); return task; } @Override public DriverTask deleteConsistencyGroupSnapshot(List<VolumeSnapshot> snapshots) { String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, "deleteConsistencyGroupSnapshot", UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "deleteConsistencyGroupSnapshot"); _log.warn(msg); task.setMessage(msg); return task; } @Override public DriverTask createConsistencyGroupClone(VolumeConsistencyGroup consistencyGroup, List<VolumeClone> clones, List<CapabilityInstance> capabilities) { String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, "createConsistencyGroupClone", UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "createConsistencyGroupClone"); _log.warn(msg); task.setMessage(msg); return task; } @Override public DriverTask discoverStorageSystem(StorageSystem storageSystem) { String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, "discoverStorageSystem", UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "discoverStorageSystem"); _log.warn(msg); task.setMessage(msg); return task; } @Override public DriverTask discoverStoragePools(StorageSystem storageSystem, List<StoragePool> storagePools) { String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, "discoverStoragePools", UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "discoverStoragePools"); _log.warn(msg); task.setMessage(msg); return task; } @Override public DriverTask discoverStoragePorts(StorageSystem storageSystem, List<StoragePort> storagePorts) { String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, "discoverStoragePorts", UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "discoverStoragePorts"); _log.warn(msg); task.setMessage(msg); return task; } @Override public DriverTask discoverStorageHostComponents(StorageSystem storageSystem, List<StorageHostComponent> embeddedStorageHostComponents) { String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, "discoverStorageHostComponents", UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "discoverStorageHostComponents"); _log.warn(msg); task.setMessage(msg); return task; } @Override public DriverTask discoverStorageProvider(StorageProvider storageProvider, List<StorageSystem> storageSystems) { String driverName = this.getClass().getSimpleName(); String taskId = String.format("%s+%s+%s", driverName, "discover-storage-provider", UUID.randomUUID().toString()); DriverTask task = new DefaultDriverTask(taskId); task.setStatus(DriverTask.TaskStatus.FAILED); String msg = String.format("%s: %s --- operation is not supported.", driverName, "discoverStorageProvider"); _log.warn(msg); task.setMessage(msg); return task; } @Override public RegistrationData getRegistrationData() { String driverName = this.getClass().getSimpleName(); String msg = String.format("%s: %s --- operation is not supported.", driverName, "getRegistrationData"); _log.warn(msg); throw new UnsupportedOperationException(msg); } @Override public DriverTask getTask(String taskId) { String driverName = this.getClass().getSimpleName(); String msg = String.format("%s: %s --- operation is not supported.", driverName, "getTask"); _log.warn(msg); throw new UnsupportedOperationException(msg); } @Override public <T extends StorageObject> T getStorageObject(String storageSystemId, String objectId, Class<T> type) { String driverName = this.getClass().getSimpleName(); String msg = String.format("%s: %s --- operation is not supported.", driverName, "getStorageObject"); _log.warn(msg); throw new UnsupportedOperationException(msg); } @Override public boolean validateStorageProviderConnection(StorageProvider storageProvider) { String driverName = this.getClass().getSimpleName(); String msg = String.format("%s: %s --- operation is not supported.", driverName, "validateStorageProviderConnection"); _log.warn(msg); throw new UnsupportedOperationException(msg); } }