package io.cattle.platform.servicediscovery.process;
import io.cattle.platform.core.constants.HealthcheckConstants;
import io.cattle.platform.core.constants.InstanceConstants;
import io.cattle.platform.core.constants.ServiceConstants;
import io.cattle.platform.core.model.Instance;
import io.cattle.platform.core.model.Service;
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.process.common.handler.AbstractObjectProcessHandler;
import io.cattle.platform.servicediscovery.deployment.DeploymentManager;
import io.cattle.platform.servicediscovery.service.ServiceLookup;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
@Named
public class ServicesReconcileTrigger extends AbstractObjectProcessHandler {
@Inject
DeploymentManager deploymentManager;
@Inject
List<ServiceLookup> serviceLookups;
@Override
public String[] getProcessNames() {
return new String[] { HealthcheckConstants.PROCESS_UPDATE_HEALTHY,
HealthcheckConstants.PROCESS_UPDATE_UNHEALTHY, InstanceConstants.PROCESS_STOP,
InstanceConstants.PROCESS_REMOVE, ServiceConstants.PROCESS_SERVICE_UPDATE };
}
@Override
public HandlerResult handle(ProcessState state, ProcessInstance process) {
List<Service> services = new ArrayList<>();
if (state.getResource() instanceof Service) {
services.add((Service) state.getResource());
} else {
if (state.getResource() instanceof Instance) {
if (state.getData().containsKey(InstanceConstants.PROCESS_DATA_ERROR)
|| state.getData().containsKey(ServiceConstants.PROCESS_DATA_SERVICE_RECONCILE)) {
return null;
}
}
for (ServiceLookup lookup : serviceLookups) {
Collection<? extends Service> lookupSvs = lookup.getServices(state.getResource());
if (lookupSvs != null) {
services.addAll(lookupSvs);
}
}
}
deploymentManager.reconcileServices(services);
return null;
}
}