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.iaas.api.filter.common.AbstractDefaultResourceManagerFilter;
import io.cattle.platform.object.ObjectManager;
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 javax.inject.Inject;
public class InstanceAgentValidationFilter extends AbstractDefaultResourceManagerFilter {
@Inject
ObjectManager objectManager;
@Override
public String[] getTypes() {
return new String[] {InstanceConstants.TYPE_CONTAINER};
}
@Override
public Class<?>[] getTypeClasses() {
return new Class<?>[] { Instance.class };
}
@Override
public Object delete(String type, String id, ApiRequest request, ResourceManager next) {
Object instance = objectManager.loadResource(type, id);
if (instance == null || !(instance instanceof Instance)) {
return super.delete(type, id, request, next);
}
if (InstanceConstants.isRancherAgent((Instance)instance)) {
throw new ClientVisibleException(ResponseCodes.UNPROCESSABLE_ENTITY, ValidationErrorCodes.ACTION_NOT_AVAILABLE,
"Can not delete rancher-agent", null);
}
return super.delete(type, id, request, next);
}
}