package io.cattle.platform.process.host; import io.cattle.platform.core.constants.HostConstants; import io.cattle.platform.core.constants.MachineConstants; import io.cattle.platform.core.dao.HostDao; import io.cattle.platform.core.model.Host; import io.cattle.platform.core.model.PhysicalHost; 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.ObjectManager; import io.cattle.platform.object.util.DataUtils; import io.cattle.platform.process.common.handler.AbstractObjectProcessLogic; import java.util.Map; import javax.inject.Inject; import javax.inject.Named; import org.apache.commons.lang3.StringUtils; @Named public class HostCreateToProvision extends AbstractObjectProcessLogic implements ProcessPostListener { @Inject HostDao hostDao; @Inject ObjectManager objectManager; @Override public String[] getProcessNames() { return new String[] {HostConstants.PROCESS_CREATE}; } @Override public HandlerResult handle(ProcessState state, ProcessInstance process) { Host host = (Host)state.getResource(); String driver = getDriver(host); if (StringUtils.isBlank(driver)) { return new HandlerResult().withChainProcessName(HostConstants.PROCESS_ACTIVATE); } PhysicalHost phyHost = objectManager.loadResource(PhysicalHost.class, host.getPhysicalHostId()); if (phyHost == null) { phyHost = hostDao.createMachineForHost(host); } return new HandlerResult(MachineConstants.FIELD_DRIVER, driver).withChainProcessName(HostConstants.PROCESS_PROVISION); } public static String getDriver(Object obj) { Map<String, Object> fields = DataUtils.getFields(obj); for (Map.Entry<String, Object> field : fields.entrySet()) { if (StringUtils.endsWithIgnoreCase(field.getKey(), MachineConstants.CONFIG_FIELD_SUFFIX) && field.getValue() != null) { return StringUtils.removeEndIgnoreCase(field.getKey(), MachineConstants.CONFIG_FIELD_SUFFIX); } } return null; } }