/*
* Copyright (c) 2017 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.volumecontroller.impl.validators.vnxe;
import java.net.URI;
import java.util.Collection;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.emc.storageos.db.client.DbClient;
import com.emc.storageos.db.client.model.BlockSnapshot;
import com.emc.storageos.db.client.model.ExportMask;
import com.emc.storageos.db.client.model.Initiator;
import com.emc.storageos.db.client.model.StorageSystem;
import com.emc.storageos.db.client.model.Volume;
import com.emc.storageos.vnxe.VNXeApiClientFactory;
import com.emc.storageos.volumecontroller.impl.validators.StorageSystemValidatorFactory;
import com.emc.storageos.volumecontroller.impl.validators.ValCk;
import com.emc.storageos.volumecontroller.impl.validators.Validator;
import com.emc.storageos.volumecontroller.impl.validators.ValidatorConfig;
import com.emc.storageos.volumecontroller.impl.validators.ValidatorLogger;
import com.emc.storageos.volumecontroller.impl.validators.contexts.ExportMaskValidationContext;
/**
* Factory class for creating VNXe specific validators for DU prevention.
*/
public class VNXeSystemValidatorFactory implements StorageSystemValidatorFactory {
private static final Logger log = LoggerFactory.getLogger(VNXeSystemValidatorFactory.class);
private DbClient dbClient;
private VNXeApiClientFactory clientFactory;
private ValidatorLogger logger;
private ValidatorConfig config;
public DbClient getDbClient() {
return dbClient;
}
public void setDbClient(DbClient dbClient) {
this.dbClient = dbClient;
}
public VNXeApiClientFactory getVnxeApiClientFactory() {
return clientFactory;
}
public void setVnxeApiClientFactory(VNXeApiClientFactory clientFactory) {
this.clientFactory = clientFactory;
}
public ValidatorConfig getConfig() {
return config;
}
public void setConfig(ValidatorConfig config) {
this.config = config;
}
/**
* Common configuration for VNXe validators.
*
* @param logger ValidatorLogger
* @param validators List of AbstractVNXeValidator instances
*/
private void configureValidators(ValidatorLogger logger, AbstractVNXeValidator... validators) {
for (AbstractVNXeValidator validator : validators) {
validator.setFactory(this);
validator.setLogger(logger);
}
}
@Override
public Validator exportMaskDelete(ExportMaskValidationContext ctx) {
// removing initiators from mask will be ViPR DB only operation if there is unknown volume, hence no volume validation
logger = new ValidatorLogger(log, ctx.getExportMask().forDisplay(), ctx.getStorage().forDisplay());
VNXeExportMaskInitiatorsValidator initiatorValidator = new VNXeExportMaskInitiatorsValidator(ctx.getStorage(),
ctx.getExportMask());
initiatorValidator.setExceptionContext(ctx);
configureValidators(logger, initiatorValidator);
return initiatorValidator;
}
@Override
public Validator removeVolumes(ExportMaskValidationContext ctx) {
logger = new ValidatorLogger(log, ctx.getExportMask().forDisplay(), ctx.getStorage().forDisplay());
VNXeExportMaskInitiatorsValidator validator = new VNXeExportMaskInitiatorsValidator(ctx.getStorage(),
ctx.getExportMask());
validator.setExceptionContext(ctx);
configureValidators(logger, validator);
return validator;
}
@Override
public List<Volume> volumes(StorageSystem storageSystem, List<Volume> volumes, boolean delete, boolean remediate,
ValCk[] checks) {
return null;
}
@Override
public Validator expandVolumes(StorageSystem storageSystem, Volume volume) {
return null;
}
@Override
public Validator createSnapshot(StorageSystem storage, BlockSnapshot snapshot, Volume volume) {
return null;
}
@Override
public Validator removeInitiators(ExportMaskValidationContext ctx) {
logger = new ValidatorLogger(log, ctx.getExportMask().forDisplay(), ctx.getStorage().forDisplay());
VNXeExportMaskVolumesValidator volumeValidator = new VNXeExportMaskVolumesValidator(ctx.getStorage(),
ctx.getExportMask(), ctx.getBlockObjects());
volumeValidator.setExceptionContext(ctx);
configureValidators(logger, volumeValidator);
return volumeValidator;
}
@Override
public Validator addVolumes(StorageSystem storage, URI exportMaskURI, Collection<Initiator> initiators) {
return null;
}
@Override
public Validator addInitiators(StorageSystem storage, ExportMask exportMask, Collection<URI> volumeURIList) {
return null;
}
@Override
public Validator deleteVolumes(StorageSystem storage, Collection<Volume> volumes) {
return null;
}
}