package io.cattle.platform.servicediscovery.process; import io.cattle.platform.core.constants.PortConstants; import io.cattle.platform.core.dao.GenericMapDao; import io.cattle.platform.core.dao.HostDao; import io.cattle.platform.core.dao.InstanceDao; import io.cattle.platform.core.model.Host; import io.cattle.platform.core.model.Instance; import io.cattle.platform.core.model.Port; import io.cattle.platform.core.model.Service; import io.cattle.platform.engine.handler.HandlerResult; import io.cattle.platform.engine.handler.ProcessPostListener; import io.cattle.platform.engine.process.ProcessInstance; import io.cattle.platform.engine.process.ProcessState; import io.cattle.platform.process.common.handler.AbstractObjectProcessLogic; import io.cattle.platform.servicediscovery.service.ServiceDiscoveryService; import io.cattle.platform.util.type.Priority; import java.util.List; import javax.inject.Inject; import javax.inject.Named; @Named public class PortActivateDeactivatePostListener extends AbstractObjectProcessLogic implements ProcessPostListener, Priority { @Inject InstanceDao instanceDao; @Inject ServiceDiscoveryService sdService; @Inject HostDao hostDao; @Inject GenericMapDao mapDao; @Override public String[] getProcessNames() { return new String[] { PortConstants.PROCESS_PORT_ACTIVATE, PortConstants.PROCESS_PORT_UPDATE, PortConstants.PROCESS_PORT_DEACTIVATE }; } @Override public HandlerResult handle(ProcessState state, ProcessInstance process) { Port port = (Port) state.getResource(); List<? extends Host> hosts = instanceDao.findHosts(port.getAccountId(), port.getInstanceId()); Instance instance = objectManager.loadResource(Instance.class, port.getInstanceId()); List<? extends Service> services = instanceDao.findServicesFor(instance); for (Host host : hosts) { sdService.reconcileHostEndpoints(host); } for (Service service : services) { sdService.reconcileServiceEndpoints(service); } return null; } @Override public int getPriority() { return Priority.DEFAULT; } }