package io.cattle.platform.process.driver; import io.cattle.platform.core.constants.StorageDriverConstants; import io.cattle.platform.core.constants.VolumeConstants; import io.cattle.platform.core.model.StorageDriver; import io.cattle.platform.engine.handler.HandlerResult; import io.cattle.platform.engine.process.ProcessInstance; import io.cattle.platform.engine.process.ProcessState; import io.cattle.platform.object.meta.ObjectMetaDataManager; import io.cattle.platform.object.util.DataAccessor; import io.cattle.platform.process.base.AbstractDefaultProcessHandler; import java.util.HashSet; import java.util.List; import javax.inject.Named; @Named public class StorageDriverActivate extends AbstractDefaultProcessHandler { @Override public HandlerResult handle(ProcessState state, ProcessInstance process) { StorageDriver storageDriver = (StorageDriver)state.getResource(); String scope = DataAccessor.fieldString(storageDriver, StorageDriverConstants.FIELD_SCOPE); if (!StorageDriverConstants.VALID_SCOPES.contains(scope)) { scope = StorageDriverConstants.SCOPE_ENVIRONMENT; } String accessMode = DataAccessor.fieldString(storageDriver, StorageDriverConstants.FIELD_VOLUME_ACCESS_MODE); if (!VolumeConstants.VALID_ACCESS_MODES.contains(accessMode)) { accessMode = VolumeConstants.DEFAULT_ACCESS_MODE; } List<String> capabilities = DataAccessor.fieldStringList(storageDriver, ObjectMetaDataManager.CAPABILITIES_FIELD); if (StorageDriverConstants.SCOPE_LOCAL.equals(scope)) { if(!new HashSet<String>(capabilities).contains(StorageDriverConstants.CAPABILITY_SCHEDULE_SIZE)) { capabilities.add(StorageDriverConstants.CAPABILITY_SCHEDULE_SIZE); } } return new HandlerResult(StorageDriverConstants.FIELD_SCOPE, scope, StorageDriverConstants.FIELD_VOLUME_ACCESS_MODE, accessMode, ObjectMetaDataManager.CAPABILITIES_FIELD, capabilities); } }