public static PortBinding fromPodContainerPortToPortBinding(ContainerPort podContainerPort) { PortBinding portBinding = new PortBinding(); portBinding.protocol = podContainerPort.protocol; portBinding.containerPort = String.valueOf(podContainerPort.containerPort); portBinding.hostIp = podContainerPort.hostIP; portBinding.hostPort = String.valueOf(podContainerPort.hostPort); return portBinding; }
/** * Process port binding properties * * @param containerState * @param networkSettings */ private static void mapPortBindingProperties(ContainerState containerState, Map<String, Object> networkSettings) { if (networkSettings == null) { return; } Map<String, List<Map<String, String>>> portMap = getMap(networkSettings, DOCKER_CONTAINER_NETWORK_SETTINGS_PORTS_PROP_NAME); if (containerState.ports == null) { containerState.ports = new ArrayList<PortBinding>(); } if (portMap != null) { List<DockerPortMapping> portMappings = DockerPortMapping.fromMap(portMap); containerState.ports = portMappings.stream() .map((m) -> PortBinding.fromDockerPortMapping(m)) .collect(Collectors.toList()); } }
private static String[] fromCompositePortBindingsToDockerPorts(PortBinding[] portBindings) { if (isNullOrEmpty(portBindings)) { return null; } String[] ports = new String[portBindings.length]; for (int i = 0; i < portBindings.length; i++) { ports[i] = portBindings[i].toString(); } return ports; }
public static PortBinding makePort(ContainerPort port) { PortBinding result = new PortBinding(); result.containerPort = Integer.toString(port.containerPort); result.hostPort = Integer.toString(port.hostPort); result.hostIp = port.hostIP; result.protocol = port.protocol; return result; }
private static PortBinding[] fromDockerPortsToCompositePortBindings(String[] ports) { if (isNullOrEmpty(ports)) { return null; } PortBinding[] portBindings = new PortBinding[ports.length]; for (int i = 0; i < ports.length; i++) { portBindings[i] = fromDockerPortMapping(DockerPortMapping.fromString(ports[i])); } return portBindings; }
/** * Map port binding to ExposedPorts and PortBinding * * ExposedPorts are only used by the API adapter, as the docker CLI will add that itself * * @param input * @param portBindings */ private void addPortBindings(CommandInput input, List<PortBinding> portBindings) { Map<String, Map<String, String>> exposedPortsMap = new HashMap<>(); input.withProperty(DOCKER_CONTAINER_EXPOSED_PORTS_PROP_NAME, exposedPortsMap); Map<String, Object> hostConfig = getOrAddMap(input, DOCKER_CONTAINER_HOST_CONFIG_PROP_NAME); Map<String, List<Map<String, String>>> portBindingsMap = new HashMap<>(); hostConfig.put(DOCKER_CONTAINER_PORT_BINDINGS_PROP_NAME, portBindingsMap); for (PortBinding portBinding : portBindings) { DockerPortMapping mapping = DockerPortMapping.fromString(portBinding.toString()); Map<String, List<Map<String, String>>> portDetails = mapping.toMap(); portBindingsMap.putAll(portDetails); exposedPortsMap.put(mapping.getContainerPortAndProtocol(), Collections.emptyMap()); } }
+ ":/usr/local/go/bin:/go/bin" }; PortBinding portBinding = new PortBinding(); portBinding.containerPort = "5000"; portBinding.hostPort = "5000";
"127.0.0.1:20080:80", "1234:1234/tcp" }) .map((s) -> PortBinding.fromDockerPortMapping(DockerPortMapping.fromString(s))) .collect(Collectors.toList()) .toArray(new PortBinding[0]);
PortBinding portBinding = new PortBinding();
public static ContainerDescription createContainerDescriptionWithPortBindingsHostPortSet() { ContainerDescription containerDesc = createContainerDescription("admiral-test"); containerDesc.portBindings = Arrays.stream(new String[] { "5000:5000", "127.0.0.1::20080", "127.0.0.1:20080:80", "1234:1234/tcp" }) .map((s) -> PortBinding.fromDockerPortMapping(DockerPortMapping.fromString(s))) .collect(Collectors.toList()) .toArray(new PortBinding[0]); return containerDesc; }
private ContainerState createContainerState(String parentLink, boolean isDiscovered) throws Throwable { ContainerState containerState = new ContainerState(); containerState.descriptionLink = isDiscovered ? String.format("%s-%s", SystemContainerDescriptions.DISCOVERED_DESCRIPTION_LINK, UUID.randomUUID().toString()) : UUID.randomUUID().toString(); containerState.image = "test-image"; containerState.tenantLinks = Collections.singletonList(TENANT_LINKS); containerState.command = new String[] { CONTAINER_COMMAND }; containerState.id = UUID.randomUUID().toString(); containerState.names = new ArrayList<>(Arrays.asList("name_" + containerState.id)); containerState.parentLink = parentLink; containerState = doPost(containerState, ContainerFactoryService.SELF_LINK); PortBinding[] ports = new PortBinding[1]; PortBinding port = new PortBinding(); port.containerPort = "8263"; ports[0] = port; containerState.ports = Arrays.asList(ports); containerState.extraHosts = new String[] { "extra-docker.host" }; return containerState; }
"127.0.0.1::80", "1234/tcp" }) .map((s) -> PortBinding.fromDockerPortMapping(DockerPortMapping.fromString(s))) .collect(Collectors.toList()) .toArray(new PortBinding[0]);
public static PortBinding fromDockerPortMapping(DockerPortMapping mapping) { PortBinding portBinding = new PortBinding(); portBinding.protocol = mapping.getProtocol().toString(); portBinding.containerPort = mapping.getContainerPort(); portBinding.hostIp = mapping.getHostIp(); portBinding.hostPort = mapping.getHostPort(); return portBinding; }
"5000:5000", "20080:80" }) .map((s) -> PortBinding.fromDockerPortMapping(DockerPortMapping.fromString(s))) .collect(Collectors.toList()); String configValue = String.format(
containerState.command = DEFAULT_CONTAINER_COMMAND_ARRAY; PortBinding portBinding = new PortBinding(); portBinding.hostIp = DEFAULT_CONTAINER_PUBLISHED_HOST_IP; portBinding.hostPort = DEFAULT_CONTAINER_PUBLISHED_HOST_PORT;
desc1.portBindings = Arrays.stream(new String[] { "80" }) .map((s) -> PortBinding.fromDockerPortMapping(DockerPortMapping.fromString(s))) .collect(Collectors.toList()) .toArray(new PortBinding[0]); "5008:80", "443" }) .map((s) -> PortBinding.fromDockerPortMapping(DockerPortMapping.fromString(s))) .collect(Collectors.toList()) .toArray(new PortBinding[0]);
protected void createContainerDescription(String image) throws Throwable { ContainerDescription containerDescription = new ContainerDescription(); containerDescription.image = image; // use a blocking command so the container doesn't terminate immediately containerDescription.command = new String[] { "cat" }; PortBinding portBinding = new PortBinding(); portBinding.protocol = "tcp"; portBinding.containerPort = "8080"; portBinding.hostIp = "0.0.0.0"; portBinding.hostPort = "9999"; containerDescription.portBindings = new PortBinding[] { portBinding }; containerDescription.env = TEST_ENV; containerDescription.restartPolicy = TEST_RESTART_POLICY_NAME; containerDescription.maximumRetryCount = TEST_RESTART_POLICY_RETRIES; containerDescriptionLink = doPost(containerDescription, ContainerDescriptionService.FACTORY_LINK).documentSelfLink; }
protected void createHostShellContainer() throws Throwable { waitForServiceAvailability(ContainerFactoryService.SELF_LINK); ContainerState state = new ContainerState(); String hostId = Service.getId(dockerHostState.documentSelfLink); state.documentSelfLink = SystemContainerDescriptions.getSystemContainerSelfLink( SystemContainerDescriptions.AGENT_CONTAINER_NAME, hostId); state.parentLink = dockerHostState.documentSelfLink; PortBinding portBinding = new PortBinding(); portBinding.containerPort = "80"; portBinding.hostPort = "80"; state.ports = new ArrayList<>(); state.ports.add(portBinding); shellContainerState = doPost(state, ContainerFactoryService.SELF_LINK); }
@Test public void testDuplicateHostPortsMultipleContainers() throws Throwable { PortBinding portBinding = new PortBinding(); portBinding.containerPort = "80"; portBinding.hostPort = "8080"; PortBinding[] bindings = new PortBinding[] { portBinding }; CompositeDescriptionExpanded expanded = createExpandedComposite(bindings, bindings, null); Map<String, ResourceNode> resourceNodes = new CompositionGraph().populateResourceNodesByName(expanded.componentDescriptions); ImplicitDependencyFilters filters = ImplicitDependencyFilters.build(resourceNodes, expanded); filters.apply(); assertTrue(resourceNodes.get(expanded.componentDescriptions.get(0).name).dependsOn != null ^ resourceNodes.get(expanded.componentDescriptions.get(1).name).dependsOn != null); expanded = createExpandedComposite(bindings, bindings, bindings); resourceNodes = new CompositionGraph().populateResourceNodesByName(expanded.componentDescriptions); filters = ImplicitDependencyFilters.build(resourceNodes, expanded); filters.apply(); int size = 0; if (resourceNodes.get(expanded.componentDescriptions.get(0).name).dependsOn != null) { size += resourceNodes.get(expanded.componentDescriptions.get(0).name).dependsOn.size(); } if (resourceNodes.get(expanded.componentDescriptions.get(1).name).dependsOn != null) { size += resourceNodes.get(expanded.componentDescriptions.get(1).name).dependsOn.size(); } if (resourceNodes.get(expanded.componentDescriptions.get(2).name).dependsOn != null) { size += resourceNodes.get(expanded.componentDescriptions.get(2).name).dependsOn.size(); } assertEquals(2, size); }
/** * Extend the setup of testDuplicateHostPortsWithPredefinedDependency with a second predefined dependency */ @Test public void testDuplicateHostPortsWithLinearDependencies() throws Throwable { PortBinding portBinding = new PortBinding(); portBinding.containerPort = "80"; portBinding.hostPort = "8080"; PortBinding[] bindings = new PortBinding[] { portBinding }; CompositeDescriptionExpanded expanded = createExpandedComposite(bindings, bindings, bindings); Map<String, ResourceNode> resourceNodes = new CompositionGraph().populateResourceNodesByName(expanded.componentDescriptions); // Add dependency ResourceNode n1 = resourceNodes.get(CONTAINER_DESC_BASE_NAME + 1); ResourceNode n2 = resourceNodes.get(CONTAINER_DESC_BASE_NAME + 2); n1.dependsOn = new HashSet<>(); n1.dependsOn.add(n2.name); ResourceNode n0 = resourceNodes.get(CONTAINER_DESC_BASE_NAME + 0); n2.dependsOn = new HashSet<>(); n2.dependsOn.add(n0.name); ImplicitDependencyFilters filters = ImplicitDependencyFilters.build(resourceNodes, expanded); filters.apply(); assertNull(n0.dependsOn); assertEquals(1, n1.dependsOn.size()); assertTrue(n1.dependsOn.contains(n2.name)); assertEquals(1, n2.dependsOn.size()); assertTrue(n2.dependsOn.contains(n0.name)); }