Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move rocks building in build phase #68

Merged
merged 3 commits into from
Jun 2, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
## [Unreleased]
- Fix problem if topology isn't applied correctly
- Bump testcontainers to 1.18.0
- Move rocks building in build phase

## [0.5.4] - 2023-03-31
- Use tarantool image as base instead of centos in cartridge container
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ public TarantoolCartridgeContainer(String dockerFile, String buildImageName,
*/
public TarantoolCartridgeContainer(String dockerFile, String buildImageName, String instancesFile,
String topologyConfigurationFile, final Map<String, String> buildArgs) {
this(buildImage(dockerFile, buildImageName), instancesFile, topologyConfigurationFile, buildArgs);
this(buildImage(dockerFile, buildImageName, buildArgs), instancesFile, topologyConfigurationFile, buildArgs);
}

private TarantoolCartridgeContainer(ImageFromDockerfile image, String instancesFile, String topologyConfigurationFile,
Expand Down Expand Up @@ -238,12 +238,17 @@ private static Map<String, String> mergeBuildArguments(Map<String, String> build
return args;
}

private static ImageFromDockerfile buildImage(String dockerFile, String buildImageName) {
private static ImageFromDockerfile buildImage(String dockerFile, String buildImageName,
final Map<String, String> buildArgs) {
ImageFromDockerfile image;
if (buildImageName != null && !buildImageName.isEmpty()) {
return new ImageFromDockerfile(buildImageName, false)
.withFileFromClasspath("Dockerfile", dockerFile);
image = new ImageFromDockerfile(buildImageName, false);
} else {
image = new ImageFromDockerfile();
}
return new ImageFromDockerfile().withFileFromClasspath("Dockerfile", dockerFile);
return image.withFileFromClasspath("Dockerfile", dockerFile)
.withFileFromClasspath("cartridge", buildArgs.get("CARTRIDGE_SRC_DIR") == null ?
"cartridge" : buildArgs.get("CARTRIDGE_SRC_DIR"));
}

/**
Expand Down
29 changes: 17 additions & 12 deletions src/main/resources/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,21 +1,26 @@
ARG TARANTOOL_VERSION=2.10.5
FROM tarantool/tarantool:${TARANTOOL_VERSION}-centos7 AS tarantool-base
FROM tarantool/tarantool:${TARANTOOL_VERSION}-centos7 AS cartridge-base

# system preparations because docker mount directory as a root
ARG TARANTOOL_SERVER_USER="root"
ARG TARANTOOL_SERVER_GROUP="root"
ARG TARANTOOL_WORKDIR="/app"
ARG TARANTOOL_RUNDIR="/tmp/run"
ARG TARANTOOL_DATADIR="/tmp/data"
ARG TARANTOOL_INSTANCES_FILE="./instances.yml"
ENV TARANTOOL_WORKDIR=$TARANTOOL_WORKDIR
ENV TARANTOOL_RUNDIR=$TARANTOOL_RUNDIR
ENV TARANTOOL_DATADIR=$TARANTOOL_DATADIR
ENV TARANTOOL_INSTANCES_FILE=$TARANTOOL_INSTANCES_FILE
USER $TARANTOOL_SERVER_USER:$TARANTOOL_SERVER_GROUP
RUN groupadd $TARANTOOL_SERVER_GROUP && useradd -m -s /bin/bash $TARANTOOL_SERVER_USER || true

# install dependencies
RUN yum -y install cmake make gcc gcc-c++ git unzip cartridge-cli && \
yum clean all
RUN groupadd $TARANTOOL_SERVER_GROUP && useradd -m -s /bin/bash $TARANTOOL_SERVER_USER || true
USER $TARANTOOL_SERVER_USER:$TARANTOOL_SERVER_GROUP
RUN cartridge version

FROM tarantool-base AS cartridge-base
# build
ARG CARTRIDGE_SRC_DIR="cartridge"
ARG TARANTOOL_WORKDIR="/app"
COPY $CARTRIDGE_SRC_DIR $TARANTOOL_WORKDIR
WORKDIR $TARANTOOL_WORKDIR
RUN cartridge build --verbose

ENV TARANTOOL_RUNDIR="/tmp/run"
ENV TARANTOOL_DATADIR="/tmp/data"
ENV TARANTOOL_INSTANCES_FILE="./instances.yml"

CMD cartridge build && cartridge start --run-dir=$TARANTOOL_RUNDIR --data-dir=$TARANTOOL_DATADIR --cfg=$TARANTOOL_INSTANCES_FILE
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
package org.testcontainers.containers;

import java.time.Duration;

import org.junit.jupiter.api.Test;
import org.rnorth.ducttape.RetryCountExceededException;
import org.slf4j.LoggerFactory;
import org.testcontainers.containers.exceptions.CartridgeTopologyException;
import org.testcontainers.containers.output.Slf4jLogConsumer;
import org.testcontainers.junit.jupiter.Container;
import org.testcontainers.junit.jupiter.Testcontainers;
import org.testcontainers.utility.MountableFile;

import java.time.Duration;

import static org.junit.Assert.assertThrows;
import static org.junit.jupiter.api.Assertions.assertEquals;

Expand All @@ -22,18 +20,18 @@ public class TarantoolCartridgeBootstrapFromLuaWithFixedPortsTest {

@Container
private static final TarantoolCartridgeContainer container =
new TarantoolCartridgeContainer(
"Dockerfile",
"cartridge/instances_fixedport.yml",
"cartridge/topology_fixedport.lua")
.withDirectoryBinding("cartridge")
.withEnv("TARANTOOL_INSTANCES_FILE", "instances_fixedport.yml")
.withStartupTimeout(Duration.ofSeconds(300))
.withUseFixedPorts(true)
.withAPIPort(18081)
.withRouterPort(13301)
.withLogConsumer(new Slf4jLogConsumer(
LoggerFactory.getLogger(TarantoolCartridgeBootstrapFromLuaWithFixedPortsTest.class)));
new TarantoolCartridgeContainer(
"Dockerfile",
"cartridge",
"cartridge/instances_fixedport.yml",
"cartridge/topology_fixedport.lua")
.withEnv("TARANTOOL_INSTANCES_FILE", "instances_fixedport.yml")
.withStartupTimeout(Duration.ofSeconds(300))
.withUseFixedPorts(true)
.withAPIPort(18081)
.withRouterPort(13301)
.withLogConsumer(new Slf4jLogConsumer(
LoggerFactory.getLogger(TarantoolCartridgeBootstrapFromLuaWithFixedPortsTest.class)));

@Test
public void test_StaticClusterContainer_StartsSuccessfully_ifFilesAreCopied() throws Exception {
Expand All @@ -45,9 +43,9 @@ public void test_retryingSetupTopology_shouldWork() {
try (TarantoolCartridgeContainer testContainer =
new TarantoolCartridgeContainer(
"Dockerfile",
"cartridge",
"cartridge/instances.yml",
"cartridge/incorrect_topology.lua")
.withDirectoryBinding("cartridge")
.withLogConsumer(new Slf4jLogConsumer(
LoggerFactory.getLogger(TarantoolCartridgeBootstrapFromLuaWithFixedPortsTest.class)))) {
ContainerLaunchException ex = assertThrows(ContainerLaunchException.class, testContainer::start);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ public class TarantoolCartridgeBootstrapFromYamlTest {
private static final TarantoolCartridgeContainer container =
new TarantoolCartridgeContainer(
"Dockerfile",
"cartridge",
"cartridge/instances.yml",
"cartridge/replicasets.yml")
.withCopyFileToContainer(MountableFile.forClasspathResource("cartridge"), "/app")
.withStartupTimeout(Duration.ofSeconds(300))
.withLogConsumer(new Slf4jLogConsumer(
LoggerFactory.getLogger(TarantoolCartridgeBootstrapFromYamlTest.class)));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ void test_should_createTarantoolContainerFromSdk() throws URISyntaxException {
);
final Map<String, String> buildArgs = new HashMap<>();
buildArgs.put("DOWNLOAD_SDK_URI", System.getenv("DOWNLOAD_SDK_URI"));
buildArgs.put("SDK_VERSION", "tarantool-enterprise-bundle-2.7.3-0-gdddf926c3-r443");
buildArgs.put("SDK_VERSION", "tarantool-enterprise-sdk-nogc64-2.10.6-0-r557.linux.x86_64");

try (final TarantoolContainer tarantoolContainer = new TarantoolContainer(
new TarantoolImageParams("tarantool-enterprise-bundle:latest", dockerfile, buildArgs))
Expand All @@ -47,7 +47,7 @@ void test_should_createTarantoolContainerFromSdk() throws URISyntaxException {
final TarantoolVersion version = client.getVersion();

assertEquals("test", result.get(0));
assertTrue(version.toString().startsWith("Tarantool 2.7.3 (Binary)"));
assertTrue(version.toString().startsWith("Tarantool 2.10.6 (Binary)"));
}
}
}