package io.cattle.platform.servicediscovery.api.filter; import io.cattle.platform.core.addon.InServiceUpgradeStrategy; import io.cattle.platform.core.addon.ServiceUpgrade; import io.cattle.platform.core.constants.ServiceConstants; import io.cattle.platform.core.model.Service; import io.cattle.platform.iaas.api.filter.common.AbstractDefaultResourceManagerFilter; import io.cattle.platform.json.JsonMapper; import io.cattle.platform.object.ObjectManager; import io.cattle.platform.object.util.DataAccessor; import io.cattle.platform.servicediscovery.api.util.ServiceDiscoveryUtil; import io.github.ibuildthecloud.gdapi.request.ApiRequest; import io.github.ibuildthecloud.gdapi.request.resource.ResourceManager; import javax.inject.Inject; import javax.inject.Named; @Named public class ServiceRollbackValidationFilter extends AbstractDefaultResourceManagerFilter { @Inject ObjectManager objectManager; @Inject JsonMapper jsonMapper; @Override public Class<?>[] getTypeClasses() { return new Class<?>[] { Service.class }; } @Override public String[] getTypes() { return new String[] { "service", "dnsService", "externalService" }; } @Override public Object resourceAction(String type, ApiRequest request, ResourceManager next) { if (request.getAction().equals(ServiceConstants.ACTION_SERVICE_ROLLBACK)) { Service service = objectManager.loadResource(Service.class, request.getId()); ServiceUpgrade upgrade = DataAccessor.field(service, ServiceConstants.FIELD_UPGRADE, jsonMapper, ServiceUpgrade.class); if (upgrade != null && upgrade.getInServiceStrategy() != null) { InServiceUpgradeStrategy strategy = upgrade.getInServiceStrategy(); if (strategy.getPreviousLaunchConfig() != null || strategy.getPreviousSecondaryLaunchConfigs() != null) { ServiceDiscoveryUtil.upgradeServiceConfigs(service, strategy, true); } objectManager.persist(service); } } return super.resourceAction(type, request, next); } }