package io.cattle.platform.process.agent;
import io.cattle.platform.agent.impl.AgentLocatorImpl;
import io.cattle.platform.agent.util.AgentUtils;
import io.cattle.platform.core.constants.AgentConstants;
import io.cattle.platform.core.model.Agent;
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.engine.process.impl.ProcessCancelException;
import io.cattle.platform.object.process.StandardProcess;
import io.cattle.platform.process.common.handler.AbstractObjectProcessLogic;
import io.cattle.platform.process.common.util.ProcessUtils;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Named;
@Named
public class AgentResourceRemove extends AbstractObjectProcessLogic implements ProcessPostListener {
@Override
public String[] getProcessNames() {
List<String> result = new ArrayList<>();
for (String i : AgentUtils.AGENT_RESOURCES.get()) {
result.add(String.format("%s.remove", i).toLowerCase());
}
return result.toArray(new String[result.size()]);
}
@Override
public HandlerResult handle(ProcessState state, ProcessInstance process) {
Object resource = state.getResource();
Long agentId = AgentLocatorImpl.getAgentId(resource);
Agent agent = objectManager.loadResource(Agent.class, agentId);
if (agent == null || agent.getRemoved() != null) {
return null;
}
try {
objectProcessManager.scheduleStandardProcess(StandardProcess.DEACTIVATE,
agent, ProcessUtils.chainInData(state.getData(), AgentConstants.PROCESS_DEACTIVATE,
AgentConstants.PROCESS_REMOVE));
} catch (ProcessCancelException e) {
objectProcessManager.scheduleStandardProcess(StandardProcess.REMOVE, agent, state.getData());
}
return null;
}
}