/** * Get the server name of the postgres docker instance * * @param docker The used docker compose rule * @return postgresServerName */ public static String getPostgresServerName(DockerComposeRule docker) { DockerPort postgres = docker.containers().container("postgres").port(5432); return postgres.inFormat("$HOST"); }
private static HealthCheck<DockerPort> toBeOpen() { return port -> SuccessOrFailure.fromBoolean(port.isListeningNow(), "" + "" + port + " was not open"); }
public com.palantir.docker.compose.connection.Container getContainer(String containerName) { synchronized (Containers.class) { return dockerComposeRule.containers().container(containerName); } }
private static ConnectionConfig createConnectionConfig(int maxConnections) { DockerPort port = docker.containers() .container("postgres") .port(POSTGRES_PORT_NUMBER); InetSocketAddress postgresAddress = new InetSocketAddress(port.getIp(), port.getExternalPort()); return ImmutablePostgresConnectionConfig.builder() .dbName("atlas") .dbLogin("palantir") .dbPassword(ImmutableMaskedValue.of("palantir")) .host(postgresAddress.getHostName()) .port(postgresAddress.getPort()) .maxConnections(maxConnections) .checkoutTimeout(2000) .build(); }
private DockerMachine createDockerMachine() { return DockerMachine.localMachine() .withEnvironment(getEnvironment()) .build(); }
private static void killCassandraContainer(String containerName) throws IOException, InterruptedException { CONTAINERS.getContainer(containerName).kill(); DockerPort containerPort = new DockerPort(containerName, CASSANDRA_THRIFT_PORT, CASSANDRA_THRIFT_PORT); Awaitility.waitAtMost(10, TimeUnit.SECONDS).pollInterval(2, TimeUnit.SECONDS).until( () -> !containerPort.isListeningNow()); } }
private static InetSocketAddress connect(DockerComposeRule docker, int dbPort) { try { if (docker == null) { throw new IllegalStateException("Docker compose rule cannot be run, is null."); } else { docker.before(); return InetSocketAddress.createUnresolved( docker.containers().ip(), docker.hostNetworkedPort(dbPort).getExternalPort()); } } catch (IOException | InterruptedException | IllegalStateException e) { throw new RuntimeException("Could not run docker compose rule.", e); } }
public static void killCassandraContainer(String containerName) { Container container = EteSetup.getContainer(containerName); try { container.kill(); } catch (IOException | InterruptedException e) { throw Throwables.propagate(e); } }
private static void waitForCassandraContainer(Container container) { org.awaitility.Awaitility.await() .atMost(60, TimeUnit.SECONDS) .pollInterval(1, TimeUnit.SECONDS) .until(() -> { // TODO (jkong): hack String curlOutput = EteSetup.execCliCommand("ete1", String.format("bash -c 'curl %s:%s; echo $?; exit 0;'", container.getContainerName(), CASSANDRA_PORT)); return curlOutput.contains("52"); }); } }
public static void startCassandraContainer(String containerName) { Container container = EteSetup.getContainer(containerName); try { container.start(); } catch (IOException | InterruptedException e) { throw Throwables.propagate(e); } waitForCassandraContainer(container); }
/** * Get the external port of the postgres docker instance * * @param docker The used docker compose rule * @return postgresExternalPort */ public static String getPostgresExternalPort(DockerComposeRule docker) { DockerPort postgres = docker.containers().container("postgres").port(5432); return postgres.inFormat("$EXTERNAL_PORT"); }
public static DbKeyValueServiceConfig getKvsConfig() { DockerPort port = docker.containers() .container("postgres") .port(POSTGRES_PORT_NUMBER); InetSocketAddress postgresAddress = new InetSocketAddress(port.getIp(), port.getExternalPort()); ConnectionConfig connectionConfig = ImmutablePostgresConnectionConfig.builder() .dbName("atlas") .dbLogin("palantir") .dbPassword(ImmutableMaskedValue.of("palantir")) .host(postgresAddress.getHostName()) .port(postgresAddress.getPort()) .build(); return ImmutableDbKeyValueServiceConfig.builder() .connection(connectionConfig) .ddl(ImmutablePostgresDdlConfig.builder() .compactInterval(HumanReadableDuration.days(2)) .build()) .build(); }
private void setupDockerComposeRule() throws InterruptedException, IOException { Set<String> containerDockerComposeFiles = containersToStart.stream() .map(Container::getDockerComposeFile) .map(dockerComposeFilesToTemporaryCopies::getUnchecked) .collect(Collectors.toSet()); Map<String, String> environment = containersToStart.stream() .flatMap(container -> container.getEnvironment().entrySet().stream()) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (fst, snd) -> snd)); DockerMachine machine = DockerMachine.localMachine() .withEnvironment(environment) .build(); dockerComposeRule = DockerComposeRule.builder() .files(DockerComposeFiles.from(containerDockerComposeFiles.toArray(new String[0]))) .projectName(PROJECT_NAME) .machine(machine) .logCollector(currentLogCollector) .shutdownStrategy(ShutdownStrategy.AGGRESSIVE_WITH_NETWORK_CLEANUP) .build(); dockerComposeRule.before(); }
public static Container getContainer(String containerName) { return docker.containers().container(containerName); }
@Override public void after() { if (!initialized.get()) { return; } try { kvs.close(); containers.getContainer(containerInstance.getServiceName()).kill(); } catch (IOException | InterruptedException e) { throw Throwables.rewrapAndThrowUncheckedException(e); } }
/** * Set environment variable "etcd_endpoints" to the host and port specified by * docker */ public static void setEtcdEnvironment(DockerComposeRule docker) { DockerPort etcd = docker.containers().container("etcd").port(2379); Map<String, String> newEnv = new HashMap<>(); newEnv.put("etcd_endpoints", etcd.inFormat("http://$HOST:$EXTERNAL_PORT")); newEnv.putAll(System.getenv()); setEnv(newEnv); }
public static RuleChain setup( Class<?> eteClass, String composeFile, List<String> availableClientNames, Map<String, String> environment) { availableClients = ImmutableList.copyOf(availableClientNames); DockerMachine machine = DockerMachine.localMachine().withEnvironment(environment).build(); String logDirectory = EteSetup.class.getSimpleName() + "-" + eteClass.getSimpleName(); docker = DockerComposeRule.builder() .file(composeFile) .machine(machine) .saveLogsTo(LogDirectory.circleAwareLogDirectory(logDirectory)) .shutdownStrategy(ShutdownStrategy.AGGRESSIVE_WITH_NETWORK_CLEANUP) .build(); DockerProxyRule dockerProxyRule = DockerProxyRule.fromProjectName(docker.projectName(), eteClass); return RuleChain .outerRule(GRADLE_PREPARE_TASK) .around(docker) .around(dockerProxyRule) .around(waitForServersToBeReady()); }
/** * Set environment variable "registryServer" to the host and port specified by * docker */ public static void setConsulEnvironment(DockerComposeRule docker) { DockerPort consul = docker.containers().container("consul").port(8500); Map<String, String> newEnv = new HashMap<>(); newEnv.put(ServiceProperties.REGISTRY_SERVER_KEY, consul.inFormat("$HOST:$EXTERNAL_PORT")); newEnv.putAll(System.getenv()); setEnv(newEnv); }
/** * Set environment variable "kafkaServer" to the host and port specified by * docker */ public static void setKafkaEnvironment(DockerComposeRule docker) { DockerPort kafka = docker.containers().container("kafka").port(9092); Map<String, String> newEnv = new HashMap<>(); newEnv.put(ServiceProperties.KAFKA_SERVER_KEY, kafka.inFormat("$HOST:$EXTERNAL_PORT")); newEnv.putAll(System.getenv()); setEnv(newEnv); }
private ServiceProperties fillServiceProperties() { DockerPort kafka1 = docker.containers().container("kafka1").port(9092); DockerPort kafka2 = docker.containers().container("kafka2").port(9092); DockerPort kafka3 = docker.containers().container("kafka2").port(9092); StringBuilder kafkaServer = new StringBuilder(); kafkaServer.append(kafka2.inFormat("$HOST:$EXTERNAL_PORT")); kafkaServer.append(","); kafkaServer.append(kafka1.inFormat("$HOST:$EXTERNAL_PORT")); kafkaServer.append(","); kafkaServer.append(kafka3.inFormat("$HOST:$EXTERNAL_PORT")); String[] args = new String[2]; args[0] = "-" + ServiceProperties.KAFKA_SERVER_KEY; args[1] = kafkaServer.toString(); ServiceProperties serviceProperties = new ServiceProperties(); serviceProperties.initialize(args); return serviceProperties; }