/** * Parses a textual link specification (as used by the Docker CLI) to a {@link Link}. * * @param serialized * the specification, e.g. <code>name:alias</code> or <code>/name1:/name2/alias</code> * @return a {@link Link} matching the specification * @throws IllegalArgumentException * if the specification cannot be parsed */ public static Link parse(final String serialized) throws IllegalArgumentException { try { final String[] parts = serialized.split(":"); switch (parts.length) { case 2: { String[] nameSplit = parts[0].split("/"); String[] aliasSplit = parts[1].split("/"); return new Link(nameSplit[nameSplit.length - 1], aliasSplit[aliasSplit.length - 1]); } default: { throw new IllegalArgumentException(); } } } catch (final Exception e) { throw new IllegalArgumentException("Error parsing Link '" + serialized + "'"); } }
@Override public Links deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException { final List<Link> binds = new ArrayList<Link>(); final ObjectCodec oc = jsonParser.getCodec(); final JsonNode node = oc.readTree(jsonParser); for (final Iterator<JsonNode> it = node.elements(); it.hasNext();) { final JsonNode element = it.next(); if (!element.equals(NullNode.getInstance())) { binds.add(Link.parse(element.asText())); } } return new Links(binds.toArray(new Link[0])); } }
@Override public void serialize(final Links links, final JsonGenerator jsonGen, final SerializerProvider serProvider) throws IOException, JsonProcessingException { jsonGen.writeStartArray(); for (final Link link : links.getLinks()) { jsonGen.writeString(link.toString()); } jsonGen.writeEndArray(); }
@Override public void serialize(final Links links, final JsonGenerator jsonGen, final SerializerProvider serProvider) throws IOException, JsonProcessingException { jsonGen.writeStartArray(); for (final Link link : links.getLinks()) { jsonGen.writeString(link.toString()); } jsonGen.writeEndArray(); }
private Set<Link> findLinksFromThisContainer(String alias, LinkableContainer linkableContainer) { return dockerClient.listContainersCmd() .withStatusFilter(Arrays.asList("running")) .exec().stream() .flatMap(container -> Stream.of(container.getNames())) .filter(name -> name.endsWith(linkableContainer.getContainerName())) .map(name -> new Link(name, alias)) .collect(Collectors.toSet()); }
public static Links parseLinks(String linksStr) throws IllegalArgumentException { if(linksStr == null || linksStr.equals("")) return new Links(); String[] linksSplit = linksStr.split(LINK_SEPARATOR); Link[] links = new Link[linksSplit.length]; for(int i = 0; i < linksSplit.length; i++) { links[i] = Link.parse(linksSplit[i]); } return new Links(links); }
private Set<Link> findLinksFromThisContainer(String alias, LinkableContainer linkableContainer) { return dockerClient.listContainersCmd().withStatusFilter(Arrays.asList("running")).exec().stream().flatMap(container -> Stream.of(container.getNames())).filter(name -> name.endsWith(linkableContainer.getContainerName())).map(name -> new Link(name, alias)).collect(Collectors.toSet()); }
public static String asString(Links links) { if (links == null || links.getLinks() == null || links.getLinks().length == 0) return ""; StringBuilder sb = new StringBuilder(); for(Link link : links.getLinks()) { sb.append(link.getName()).append(ALIAS_SEPARATOR).append(link.getAlias()).append(LINK_SEPARATOR); } sb.deleteCharAt(sb.length() - 1); //remove trailing comma, size is always non-zero return sb.toString(); }
@Override public Links deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException { final List<Link> binds = new ArrayList<Link>(); final ObjectCodec oc = jsonParser.getCodec(); final JsonNode node = oc.readTree(jsonParser); for (final Iterator<JsonNode> it = node.elements(); it.hasNext();) { final JsonNode element = it.next(); if (!element.equals(NullNode.getInstance())) { binds.add(Link.parse(element.asText())); } } return new Links(binds.toArray(new Link[0])); } }
/** * Parses a textual link specification (as used by the Docker CLI) to a {@link Link}. * * @param serialized * the specification, e.g. <code>name:alias</code> or <code>/name1:/name2/alias</code> * @return a {@link Link} matching the specification * @throws IllegalArgumentException * if the specification cannot be parsed */ public static Link parse(final String serialized) throws IllegalArgumentException { try { final String[] parts = serialized.split(":"); switch (parts.length) { case 2: { String[] nameSplit = parts[0].split("/"); String[] aliasSplit = parts[1].split("/"); return new Link(nameSplit[nameSplit.length - 1], aliasSplit[aliasSplit.length - 1]); } default: { throw new IllegalArgumentException(); } } } catch (final Exception e) { throw new IllegalArgumentException("Error parsing Link '" + serialized + "'"); } }
private static final Link[] toLinks(Collection<org.arquillian.cube.docker.impl.client.config.Link> linkList) { Link[] links = new Link[linkList.size()]; int i = 0; for (org.arquillian.cube.docker.impl.client.config.Link link : linkList) { links[i] = new Link(link.getName(), link.getAlias()); i++; } return links; }
private static final Link[] toLinks(Collection<org.arquillian.cube.docker.impl.client.config.Link> linkList) { Link[] links = new Link[linkList.size()]; int i = 0; for (org.arquillian.cube.docker.impl.client.config.Link link : linkList) { links[i] = new Link(link.getName(), link.getAlias()); i++; } return links; }
private Link[] links(Id id) { final List<com.alexecollins.docker.orchestration.model.Link> links = conf(id).getLinks(); final Link[] out = new Link[links.size()]; final Set<String> seenAliases = Sets.newHashSet(); for (int i = 0; i < links.size(); i++) { com.alexecollins.docker.orchestration.model.Link link = links.get(i); Container container = findContainer(link.getId()); if (container == null) { throw new OrchestrationException(String.format("Could not find container for link %s", link.getId())); } final String name = com.alexecollins.docker.orchestration.util.Links.name(container.getNames()); final String alias = link.getAlias(); if (seenAliases.contains(alias)) { throw new OrchestrationException(String.format("Alias %s already used for a link with container %s", alias, id)); } seenAliases.add(alias); out[i] = new Link(name, alias); } return out; }
private CreateContainerCmd getBaseCommand() { String hostDir = MesosCluster.getClusterHostDir().getAbsolutePath(); List<Bind> binds = new ArrayList<>(); binds.add(Bind.parse("/var/run/docker.sock:/var/run/docker.sock:rw")); binds.add(Bind.parse("/sys/fs/cgroup:/sys/fs/cgroup")); binds.add(Bind.parse(hostDir + ":" + hostDir)); if (getCluster().getMapAgentSandboxVolume()) { binds.add(Bind.parse(String.format("%s:%s:rw", hostDir + "/.minimesos/sandbox-" + getClusterId() + "/" + hostName, MESOS_AGENT_WORK_DIR + hostName + "/slaves"))); } CreateContainerCmd cmd = DockerClientFactory.build().createContainerCmd(getImageName() + ":" + getImageTag()) .withName(getName()) .withHostName(hostName) .withPrivileged(true) .withVolumes(new Volume(MESOS_AGENT_WORK_DIR + hostName)) .withEnv(newEnvironment() .withValues(getMesosAgentEnvVars()) .withValues(getSharedEnvVars()) .createEnvironment()) .withPidMode("host") .withLinks(new Link(getZooKeeper().getContainerId(), "minimesos-zookeeper")) .withBinds(binds.stream().toArray(Bind[]::new)); MesosDns mesosDns = getCluster().getMesosDns(); if (mesosDns != null) { cmd.withDns(mesosDns.getIpAddress()); } return cmd; }