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()));
}
}
}
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));
}
}
}
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()));
}
}
}
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);
}
}
}
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));
}
}
Aggregations