Search in sources :

Example 6 with StorageSystemType

use of com.emc.storageos.db.client.model.StorageSystemType in project coprhd-controller by CoprHD.

the class StorageDriverService method upgrade.

@POST
@CheckPermission(roles = { Role.SYSTEM_ADMIN, Role.RESTRICTED_SYSTEM_ADMIN })
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Path("/{driverName}")
public Response upgrade(@PathParam("driverName") String driverName, @FormDataParam("driver") InputStream uploadedInputStream, @FormDataParam("driver") FormDataContentDisposition details, @FormDataParam("force") @DefaultValue("false") Boolean force) {
    log.info("Start to upgrade driver for {} ...", driverName);
    String fileName = details.getFileName();
    precheckForDriverFileName(fileName);
    long fileSize = details.getSize();
    log.info("Received driver jar file: {}, size: {}", fileName, fileSize);
    if (fileSize >= MAX_DRIVER_SIZE) {
        throw APIException.badRequests.fileSizeExceedsLimit(MAX_DRIVER_SIZE);
    }
    precheckForEnv();
    File driverFile = saveToTmpDir(fileName, uploadedInputStream);
    StorageDriverMetaData metaData = parseDriverMetaData(driverFile);
    if (!StringUtils.equals(driverName, metaData.getDriverName())) {
        throw APIException.internalServerErrors.upgradeDriverPrecheckFailed(String.format("Driver name specified in jar file is not %s", driverName));
    }
    precheckForMetaData(metaData, true, force);
    InterProcessLock lock = getStorageDriverOperationLock();
    try {
        moveDriverToDataDir(driverFile);
        // save new meta data to ZK
        coordinator.persistServiceConfiguration(metaData.toConfiguration());
        // update status to UPGRADING in db
        StorageDriversInfo targetInfo = coordinator.getTargetInfo(StorageDriversInfo.class);
        if (targetInfo == null) {
            targetInfo = new StorageDriversInfo();
        }
        List<StorageSystemType> types = filterTypesByDriver(driverName);
        for (StorageSystemType type : types) {
            type.setDriverStatus(StorageSystemType.STATUS.UPGRADING.toString());
            dbClient.updateObject(type);
            // remove old driver file name from target list
            targetInfo.getInstalledDrivers().remove(type.getDriverFileName());
        }
        coordinator.setTargetInfo(targetInfo);
        log.info("Successfully triggered upgrade operation for driver", metaData.getDriverName());
        auditOperation(OperationTypeEnum.UPGRADE_STORAGE_DRIVER, AuditLogManager.AUDITLOG_SUCCESS, AuditLogManager.AUDITOP_BEGIN, driverName);
        return Response.ok().build();
    } catch (Exception e) {
        log.error("Error happened when upgrading driver file", e);
        auditOperation(OperationTypeEnum.UPGRADE_STORAGE_DRIVER, AuditLogManager.AUDITLOG_FAILURE, null, driverName);
        throw APIException.internalServerErrors.upgradeDriverFailed(e.getMessage());
    } finally {
        try {
            lock.release();
        } catch (Exception ignore) {
            log.error(String.format("Lock release failed when upgrading driver %s", metaData.getDriverName()));
        }
    }
}
Also used : StorageDriverMetaData(com.emc.storageos.coordinator.client.model.StorageDriverMetaData) InterProcessLock(org.apache.curator.framework.recipes.locks.InterProcessLock) StorageDriversInfo(com.emc.storageos.coordinator.client.model.StorageDriversInfo) StorageSystemType(com.emc.storageos.db.client.model.StorageSystemType) ZipFile(java.util.zip.ZipFile) File(java.io.File) APIException(com.emc.storageos.svcs.errorhandling.resources.APIException) FileNotFoundException(java.io.FileNotFoundException) IOException(java.io.IOException) Path(javax.ws.rs.Path) POST(javax.ws.rs.POST) Consumes(javax.ws.rs.Consumes) CheckPermission(com.emc.storageos.security.authorization.CheckPermission)

Example 7 with StorageSystemType

use of com.emc.storageos.db.client.model.StorageSystemType in project coprhd-controller by CoprHD.

the class StorageDriverService method uninstall.

@DELETE
@CheckPermission(roles = { Role.SYSTEM_ADMIN, Role.RESTRICTED_SYSTEM_ADMIN })
@Path("/{driverName}")
public Response uninstall(@PathParam("driverName") String driverName) {
    log.info("Start to uninstall driver {} ...", driverName);
    Set<String> driverNames = getAllDriverNames();
    if (!driverNames.contains(driverName)) {
        throw APIException.badRequests.driverNameNotFound(driverName);
    }
    precheckForEnv();
    List<StorageSystemType> toUninstallTypes = filterTypesByDriver(driverName);
    precheckForDriverStatus(toUninstallTypes, driverName);
    InterProcessLock lock = getStorageDriverOperationLock();
    try {
        StorageDriversInfo info = coordinator.getTargetInfo(StorageDriversInfo.class);
        if (info == null) {
            info = new StorageDriversInfo();
        }
        for (StorageSystemType type : toUninstallTypes) {
            type.setDriverStatus(StorageSystemType.STATUS.UNISNTALLING.toString());
            dbClient.updateObject(type);
            info.getInstalledDrivers().remove(type.getDriverFileName());
        }
        // update target list in ZK
        coordinator.setTargetInfo(info);
        log.info("Successfully triggered uninstall operation for driver {}", driverName);
        auditOperation(OperationTypeEnum.UNINSTALL_STORAGE_DRIVER, AuditLogManager.AUDITLOG_SUCCESS, AuditLogManager.AUDITOP_BEGIN, driverName);
        return Response.ok().build();
    } catch (Exception e) {
        log.error("Error happened when installing driver file", e);
        auditOperation(OperationTypeEnum.UNINSTALL_STORAGE_DRIVER, AuditLogManager.AUDITLOG_FAILURE, null, driverName);
        throw APIException.internalServerErrors.uninstallDriverFailed(e.getMessage());
    } finally {
        try {
            lock.release();
        } catch (Exception ignore) {
            log.error(String.format("Lock release failed when uninstalling driver %s", driverName));
        }
    }
}
Also used : InterProcessLock(org.apache.curator.framework.recipes.locks.InterProcessLock) StorageSystemType(com.emc.storageos.db.client.model.StorageSystemType) StorageDriversInfo(com.emc.storageos.coordinator.client.model.StorageDriversInfo) APIException(com.emc.storageos.svcs.errorhandling.resources.APIException) FileNotFoundException(java.io.FileNotFoundException) IOException(java.io.IOException) Path(javax.ws.rs.Path) DELETE(javax.ws.rs.DELETE) CheckPermission(com.emc.storageos.security.authorization.CheckPermission)

Example 8 with StorageSystemType

use of com.emc.storageos.db.client.model.StorageSystemType in project coprhd-controller by CoprHD.

the class StorageDriverService method install.

@POST
@CheckPermission(roles = { Role.SYSTEM_ADMIN, Role.RESTRICTED_SYSTEM_ADMIN })
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response install(@FormDataParam("driver") InputStream uploadedInputStream, @FormDataParam("driver") FormDataContentDisposition details) {
    String fileName = details.getFileName();
    precheckForDriverFileName(fileName);
    long fileSize = details.getSize();
    log.info("Received driver jar file: {}, size: {}", fileName, fileSize);
    if (fileSize >= MAX_DRIVER_SIZE) {
        throw APIException.badRequests.fileSizeExceedsLimit(MAX_DRIVER_SIZE);
    }
    precheckForEnv();
    File driverFile = saveToTmpDir(fileName, uploadedInputStream);
    StorageDriverMetaData metaData = parseDriverMetaData(driverFile);
    precheckForMetaData(metaData);
    InterProcessLock lock = getStorageDriverOperationLock();
    try {
        // move file from /tmp to /data/drivers
        moveDriverToDataDir(driverFile);
        // insert meta data int db
        List<StorageSystemType> types = StorageDriverMapper.map(metaData);
        for (StorageSystemType type : types) {
            type.setDriverStatus(StorageSystemType.STATUS.INSTALLING.toString());
            type.setIsNative(false);
            dbClient.createObject(type);
            log.info("Added storage system type {}, set status to INSTALLING", type.getStorageTypeName());
        }
        // update local list in ZK
        Set<String> localDrivers = localRepo.getLocalDrivers();
        StorageDriversInfo info = new StorageDriversInfo();
        info.setInstalledDrivers(localDrivers);
        coordinatorExt.setNodeSessionScopeInfo(info);
        log.info("Updated local driver list to syssvc service beacon: {}", Arrays.toString(localDrivers.toArray()));
        // update target list in ZK
        info = coordinator.getTargetInfo(StorageDriversInfo.class);
        if (info == null) {
            info = new StorageDriversInfo();
        }
        info.getInstalledDrivers().add(metaData.getDriverFileName());
        coordinator.setTargetInfo(info);
        log.info("Successfully triggered install operation for driver", metaData.getDriverName());
        auditOperation(OperationTypeEnum.INSTALL_STORAGE_DRIVER, AuditLogManager.AUDITLOG_SUCCESS, AuditLogManager.AUDITOP_BEGIN, metaData.getDriverName());
        return Response.ok().build();
    } catch (Exception e) {
        log.error("Error happened when installing driver file", e);
        auditOperation(OperationTypeEnum.INSTALL_STORAGE_DRIVER, AuditLogManager.AUDITLOG_FAILURE, null, metaData.getDriverName());
        throw APIException.internalServerErrors.installDriverFailed(e.getMessage());
    } finally {
        try {
            lock.release();
        } catch (Exception ignore) {
            log.error(String.format("Lock release failed when installing driver %s", metaData.getDriverName()));
        }
    }
}
Also used : StorageDriverMetaData(com.emc.storageos.coordinator.client.model.StorageDriverMetaData) InterProcessLock(org.apache.curator.framework.recipes.locks.InterProcessLock) StorageSystemType(com.emc.storageos.db.client.model.StorageSystemType) StorageDriversInfo(com.emc.storageos.coordinator.client.model.StorageDriversInfo) ZipFile(java.util.zip.ZipFile) File(java.io.File) APIException(com.emc.storageos.svcs.errorhandling.resources.APIException) FileNotFoundException(java.io.FileNotFoundException) IOException(java.io.IOException) POST(javax.ws.rs.POST) Consumes(javax.ws.rs.Consumes) CheckPermission(com.emc.storageos.security.authorization.CheckPermission)

Example 9 with StorageSystemType

use of com.emc.storageos.db.client.model.StorageSystemType in project coprhd-controller by CoprHD.

the class StorageDriverService method precheckForDriverStatus.

private void precheckForDriverStatus(List<StorageSystemType> toUninstallTypes, String driverName) {
    Set<String> usedProviderTypes = getUsedStorageProviderTypes();
    Set<String> usedSystemTypes = getUsedStorageSystemTypes();
    for (StorageSystemType type : toUninstallTypes) {
        if (usedProviderTypes.contains(type.getStorageTypeName()) || usedSystemTypes.contains(type.getStorageTypeName())) {
            throw APIException.badRequests.cantUninstallDriverInUse(driverName);
        }
    }
}
Also used : StorageSystemType(com.emc.storageos.db.client.model.StorageSystemType)

Example 10 with StorageSystemType

use of com.emc.storageos.db.client.model.StorageSystemType in project coprhd-controller by CoprHD.

the class StorageDriverService method precheckForMetaData.

private void precheckForMetaData(StorageDriverMetaData metaData, boolean upgrade, boolean force) {
    List<StorageSystemType> types = listStorageSystemTypes();
    Set<String> drivers = new HashSet<String>();
    boolean driverNameExists = false;
    for (StorageSystemType type : types) {
        if (upgrade && StringUtils.equals(type.getDriverName(), metaData.getDriverName())) {
            driverNameExists = true;
            if (!force) {
                String oldVersion = type.getDriverVersion();
                String newVersion = metaData.getDriverVersion();
                compareVersion(oldVersion, newVersion);
            }
        } else {
            precheckForDupField(type.getDriverName(), metaData.getDriverName(), "driver name");
            precheckForDupField(type.getStorageTypeName(), metaData.getStorageName(), "storage name");
            precheckForDupField(type.getStorageTypeDispName(), metaData.getStorageDisplayName(), "display name");
            precheckForDupField(type.getStorageTypeName(), metaData.getProviderName(), "provider name");
            precheckForDupField(type.getStorageTypeDispName(), metaData.getProviderDisplayName(), "provider display name");
            precheckForDupField(type.getDriverClassName(), metaData.getDriverClassName(), "driver class name");
        }
        precheckForDupField(type.getDriverFileName(), metaData.getDriverFileName(), "driver file name");
        drivers.add(type.getDriverName());
    }
    if (upgrade && !driverNameExists) {
        throw APIException.internalServerErrors.upgradeDriverPrecheckFailed(String.format("Can't find specified driver name: %s", metaData.getDriverName()));
    }
    if (!upgrade && drivers.size() >= MAX_DRIVER_NUMBER) {
        throw APIException.internalServerErrors.installDriverPrecheckFailed(String.format("Can't install more drivers as max driver number %s has been reached", MAX_DRIVER_NUMBER));
    }
}
Also used : StorageSystemType(com.emc.storageos.db.client.model.StorageSystemType) HashSet(java.util.HashSet)

Aggregations

StorageSystemType (com.emc.storageos.db.client.model.StorageSystemType)29 URI (java.net.URI)10 ArrayList (java.util.ArrayList)10 StorageDriversInfo (com.emc.storageos.coordinator.client.model.StorageDriversInfo)8 HashMap (java.util.HashMap)5 InterProcessLock (org.apache.curator.framework.recipes.locks.InterProcessLock)5 StorageDriverMetaData (com.emc.storageos.coordinator.client.model.StorageDriverMetaData)4 CheckPermission (com.emc.storageos.security.authorization.CheckPermission)4 APIException (com.emc.storageos.svcs.errorhandling.resources.APIException)4 FileNotFoundException (java.io.FileNotFoundException)4 IOException (java.io.IOException)4 Path (javax.ws.rs.Path)4 File (java.io.File)3 HashSet (java.util.HashSet)3 BaseCollectionException (com.emc.storageos.plugins.BaseCollectionException)2 AbstractStorageDriver (com.emc.storageos.storagedriver.AbstractStorageDriver)2 ZipFile (java.util.zip.ZipFile)2 Consumes (javax.ws.rs.Consumes)2 GET (javax.ws.rs.GET)2 POST (javax.ws.rs.POST)2