package org.arquillian.cube.docker.impl.client;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.arquillian.cube.docker.impl.client.config.CubeContainer;
import org.arquillian.cube.docker.impl.client.config.DockerCompositions;
import org.arquillian.cube.spi.AutoStartParser;
import org.arquillian.cube.spi.Node;
public class AutomaticResolutionNetworkAutoStartParser implements AutoStartParser {
private List<String> deployableContainers;
private DockerCompositions containerDefinition;
public AutomaticResolutionNetworkAutoStartParser(List<String> deployableContainers,
DockerCompositions containerDefinitions) {
this.deployableContainers = deployableContainers;
this.containerDefinition = containerDefinitions;
}
@Override
public Map<String, Node> parse() {
Map<String, Node> nodes = new HashMap<>();
Set<String> networksIds = this.containerDefinition.getNetworkIds();
for (Map.Entry<String, CubeContainer> container : this.containerDefinition.getNoneManualContainers().entrySet()) {
// If cube is not named as the deployable container (this is done in this way because containers that are named as the deployable container are started by another process).
if (!this.deployableContainers.contains(container.getKey())) {
final String networkMode = container.getValue().getNetworkMode();
if (networkMode != null) {
// if the network that this cube must connect is registered in current cube definition
if (networksIds.contains(networkMode)) {
String name = container.getKey();
Node child = Node.from(name);
nodes.put(name, child);
}
}
}
}
return nodes;
}
}