package io.cattle.platform.process.network; import io.cattle.platform.core.constants.NetworkConstants; import io.cattle.platform.core.model.Network; import io.cattle.platform.engine.handler.HandlerResult; import io.cattle.platform.engine.handler.ProcessPreListener; import io.cattle.platform.engine.process.ProcessInstance; import io.cattle.platform.engine.process.ProcessState; import io.cattle.platform.object.util.DataAccessor; import io.cattle.platform.process.common.handler.AbstractObjectProcessLogic; import io.cattle.platform.resource.pool.PooledResource; import io.cattle.platform.resource.pool.PooledResourceOptions; import io.cattle.platform.resource.pool.ResourcePoolManager; import io.cattle.platform.resource.pool.util.ResourcePoolConstants; import io.cattle.platform.util.exception.ExecutionException; import io.cattle.platform.util.type.Priority; import javax.inject.Inject; import javax.inject.Named; import org.apache.commons.lang3.StringUtils; @Named public class MacAddressNetworkActivate extends AbstractObjectProcessLogic implements ProcessPreListener, Priority { ResourcePoolManager resourcePoolManager; @Override public HandlerResult handle(ProcessState state, ProcessInstance process) { Network network = (Network) state.getResource(); String field = DataAccessor.field(network, NetworkConstants.FIELD_MAC_PREFIX, String.class); if (StringUtils.isBlank(field)) { PooledResource mac = resourcePoolManager.allocateOneResource(ResourcePoolManager.GLOBAL, network, new PooledResourceOptions() .withQualifier(ResourcePoolConstants.MAC_PREFIX)); if (mac == null) { throw new ExecutionException("Mac prefix allocation error", "Failed to get mac prefix", network); } field = mac.getName(); } return new HandlerResult(NetworkConstants.FIELD_MAC_PREFIX, field).withShouldContinue(true); } @Override public String[] getProcessNames() { return new String[] { "network.activate" }; } @Override public int getPriority() { return Priority.DEFAULT; } public ResourcePoolManager getResourcePoolManager() { return resourcePoolManager; } @Inject public void setResourcePoolManager(ResourcePoolManager resourcePoolManager) { this.resourcePoolManager = resourcePoolManager; } }