package io.cattle.platform.iaas.api.filter.instance; import io.cattle.platform.core.constants.InstanceConstants; import io.cattle.platform.core.model.Instance; import io.cattle.platform.core.util.SystemLabels; import io.cattle.platform.iaas.api.filter.common.AbstractDefaultResourceManagerFilter; import io.cattle.platform.object.util.DataUtils; import io.github.ibuildthecloud.gdapi.exception.ClientVisibleException; import io.github.ibuildthecloud.gdapi.request.ApiRequest; import io.github.ibuildthecloud.gdapi.request.resource.ResourceManager; import io.github.ibuildthecloud.gdapi.util.ResponseCodes; import io.github.ibuildthecloud.gdapi.validation.ValidationErrorCodes; import java.util.Map; public class InstanceVolumeCleanupStrategyValidationFilter extends AbstractDefaultResourceManagerFilter { @Override public String[] getTypes() { return InstanceConstants.CONTAINER_LIKE.toArray(new String[InstanceConstants.CONTAINER_LIKE.size()]); } @Override public Class<?>[] getTypeClasses() { return new Class<?>[] { Instance.class }; } @Override public Object create(String type, ApiRequest request, ResourceManager next) { Map<?, ?> labels = DataUtils.getFieldFromRequest(request, InstanceConstants.FIELD_LABELS, Map.class); if (labels != null) { Object l = labels.get(SystemLabels.LABEL_VOLUME_CLEANUP_STRATEGY); if (l != null && !InstanceConstants.VOLUME_REMOVE_STRATEGIES.contains(l)) { throw new ClientVisibleException(ResponseCodes.BAD_REQUEST, ValidationErrorCodes.INVALID_OPTION, String.format( "%s is an invalid value for the %s label.", l.toString(), SystemLabels.LABEL_VOLUME_CLEANUP_STRATEGY), null); } } return super.create(type, request, next); } }