package io.cattle.platform.process.port; import io.cattle.platform.core.constants.InstanceConstants; import io.cattle.platform.core.dao.NetworkDao; import io.cattle.platform.core.model.Instance; import io.cattle.platform.core.model.Port; 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.object.process.StandardProcess; import io.cattle.platform.object.util.DataUtils; import io.cattle.platform.process.common.handler.AbstractObjectProcessLogic; import io.cattle.platform.util.type.Priority; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.inject.Inject; import javax.inject.Named; @Named public class InstancePortCreate extends AbstractObjectProcessLogic implements ProcessPostListener, Priority { @Inject NetworkDao ntwkDao; @Override public String[] getProcessNames() { return new String[] { "instance.create" }; } @Override public HandlerResult handle(ProcessState state, ProcessInstance process) { Instance instance = (Instance)state.getResource(); List<String> portDefs = DataUtils.getFieldList(instance.getData(), InstanceConstants.FIELD_PORTS, String.class); if (portDefs == null) { return null; } List<Port> toCreate = new ArrayList<>(); Map<String, Port> toRetain = new HashMap<>(); ntwkDao.updateInstancePorts(instance, portDefs, toCreate, new ArrayList<Port>(), toRetain); for (Port port : toCreate) { port = objectManager.create(port); } for (Port port : toRetain.values()) { getObjectProcessManager().executeStandardProcess(StandardProcess.CREATE, port, state.getData()); } return null; } @Override public int getPriority() { return Priority.DEFAULT; } }