Refactor the TestcontainersCassandraConfiguration class to resolve non-Spring Docker Images from 'dockerhub-proxy-cache' context in the VMware Harbor Proxy.
This commit is contained in:
@@ -103,6 +103,16 @@ public class TestcontainersCassandraConfiguration extends TestCassandraConfigura
|
||||
return logContainerConfiguration(withCassandraServer(cassandraContainer, environment));
|
||||
}
|
||||
|
||||
@Bean
|
||||
CqlSessionBuilderCustomizer cqlSessionBuilderCustomizer(CassandraProperties properties,
|
||||
@Qualifier("CassandraContainer") GenericContainer<?> cassandraContainer) {
|
||||
|
||||
return cqlSessionBuilder -> cqlSessionBuilder
|
||||
.addContactPoint(resolveContactPoint(cassandraContainer))
|
||||
.withLocalDatacenter(properties.getLocalDatacenter())
|
||||
.withKeyspace(properties.getKeyspaceName());
|
||||
}
|
||||
|
||||
protected @NonNull Logger getLogger() {
|
||||
return this.logger;
|
||||
}
|
||||
@@ -177,7 +187,6 @@ public class TestcontainersCassandraConfiguration extends TestCassandraConfigura
|
||||
.withEnv("TESTCONTAINERS_PULL_PAUSE_TIMEOUT", TESTCONTAINERS_PULL_PAUSE_TIMEOUT)
|
||||
: cassandraContainer.withEnv("TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX", TESTCONTAINERS_SPRINGCI_HUB_IMAGE_NAME_PREFIX)
|
||||
.withEnv("TESTCONTAINERS_PULL_PAUSE_TIMEOUT", TESTCONTAINERS_PULL_PAUSE_TIMEOUT);
|
||||
//: cassandraContainer;
|
||||
}
|
||||
|
||||
private @NonNull GenericContainer<?> withCassandraServer(@NonNull GenericContainer<?> cassandraContainer,
|
||||
@@ -237,16 +246,6 @@ public class TestcontainersCassandraConfiguration extends TestCassandraConfigura
|
||||
//assertThat(template.count(Customer.class)).isOne(); // Table Customers not found; needs to use the Keyspace
|
||||
}
|
||||
|
||||
@Bean
|
||||
CqlSessionBuilderCustomizer cqlSessionBuilderCustomizer(CassandraProperties properties,
|
||||
@Qualifier("CassandraContainer") GenericContainer<?> cassandraContainer) {
|
||||
|
||||
return cqlSessionBuilder -> cqlSessionBuilder
|
||||
.addContactPoint(resolveContactPoint(cassandraContainer))
|
||||
.withLocalDatacenter(properties.getLocalDatacenter())
|
||||
.withKeyspace(properties.getKeyspaceName());
|
||||
}
|
||||
|
||||
private @NonNull InetSocketAddress resolveContactPoint(@NonNull GenericContainer<?> cassandraContainer) {
|
||||
return new InetSocketAddress(cassandraContainer.getHost(),
|
||||
cassandraContainer.getMappedPort(CASSANDRA_DEFAULT_PORT));
|
||||
|
||||
@@ -34,11 +34,16 @@ import org.testcontainers.utility.ImageNameSubstitutor;
|
||||
@SuppressWarnings("unused")
|
||||
public class VmwHarborProxyImageNameSubstitutor extends ImageNameSubstitutor {
|
||||
|
||||
private static final String CASSANDRA_KEYWORD = "cassandra";
|
||||
private static final String JENKINS_KEYWORD = "jenkins";
|
||||
private static final String VMWARE_HARBOR_PROXY_URL = "harbor-repo.vmware.com";
|
||||
|
||||
private static final String TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX =
|
||||
VMWARE_HARBOR_PROXY_URL.concat("/dockerhub-proxy-cache/");
|
||||
|
||||
private static final String TESTCONTAINERS_HUB_IMAGE_NAME_TEMPLATE =
|
||||
TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX.concat("%s");
|
||||
|
||||
private static final String TESTCONTAINERS_SPRINGCI_HUB_IMAGE_NAME_PREFIX =
|
||||
TESTCONTAINERS_HUB_IMAGE_NAME_PREFIX.concat("springci/");
|
||||
|
||||
@@ -56,8 +61,6 @@ public class VmwHarborProxyImageNameSubstitutor extends ImageNameSubstitutor {
|
||||
@Override
|
||||
public @NonNull DockerImageName apply(@NonNull DockerImageName original) {
|
||||
|
||||
logInfo("Is Jenkins Environment [{}]", isJenkinsEnvironment());
|
||||
|
||||
String originalDockerImageName = original.asCanonicalNameString();
|
||||
String resolvedDockerImageName = resolveDockerImageName(originalDockerImageName);;
|
||||
|
||||
@@ -66,34 +69,45 @@ public class VmwHarborProxyImageNameSubstitutor extends ImageNameSubstitutor {
|
||||
|
||||
DockerImageName dockerImageName = DockerImageName.parse(resolvedDockerImageName);
|
||||
|
||||
return dockerImageName.asCanonicalNameString().contains("cassandra")
|
||||
? dockerImageName.asCompatibleSubstituteFor("cassandra")
|
||||
return dockerImageName.asCanonicalNameString().contains(CASSANDRA_KEYWORD)
|
||||
? dockerImageName.asCompatibleSubstituteFor(CASSANDRA_KEYWORD)
|
||||
: dockerImageName;
|
||||
}
|
||||
|
||||
private boolean isJenkinsEnvironment() {
|
||||
return Boolean.TRUE.equals(Boolean.getBoolean("jenkins"));
|
||||
return Boolean.TRUE.equals(Boolean.getBoolean(JENKINS_KEYWORD));
|
||||
}
|
||||
|
||||
private boolean isSpringDockerImageName(String dockerImageName) {
|
||||
return dockerImageName.contains("spring");
|
||||
}
|
||||
|
||||
private boolean isVMwareHarborProxyAvailable(String dockerImageName) {
|
||||
return dockerImageName.contains(VMWARE_HARBOR_PROXY_URL) || isJenkinsEnvironment();
|
||||
}
|
||||
|
||||
private String resolveDockerImageName(String originalDockerImageName) {
|
||||
|
||||
logInfo("Is Jenkins Environment [{}]", isJenkinsEnvironment());
|
||||
|
||||
String resolvedDockerImageName = originalDockerImageName;
|
||||
|
||||
if (originalDockerImageName.contains(VMWARE_HARBOR_PROXY_URL)) {
|
||||
logInfo("VMware Harbor Proxy URL detected");
|
||||
originalDockerImageName = originalDockerImageName.substring(originalDockerImageName.lastIndexOf("/") + 1);
|
||||
resolvedDockerImageName = String.format(TESTCONTAINERS_SPRINGCI_HUB_IMAGE_NAME_TEMPLATE,
|
||||
substituteCassandraDockerImageName(originalDockerImageName));
|
||||
}
|
||||
else if (isJenkinsEnvironment()) {
|
||||
logInfo("VMware Jenkins CI environment detected");
|
||||
resolvedDockerImageName = String.format(TESTCONTAINERS_SPRINGCI_HUB_IMAGE_NAME_TEMPLATE,
|
||||
substituteCassandraDockerImageName(originalDockerImageName));
|
||||
if (isVMwareHarborProxyAvailable(originalDockerImageName)) {
|
||||
logInfo("VMware Harbor Proxy detected [{}]", originalDockerImageName);
|
||||
originalDockerImageName = toUnqualifiedDockerImageName(originalDockerImageName);
|
||||
resolvedDockerImageName = doResolveDockerImageName(originalDockerImageName);
|
||||
}
|
||||
|
||||
return resolvedDockerImageName;
|
||||
}
|
||||
|
||||
private String doResolveDockerImageName(String originalDockerImageName) {
|
||||
|
||||
return isSpringDockerImageName(originalDockerImageName)
|
||||
? String.format(TESTCONTAINERS_SPRINGCI_HUB_IMAGE_NAME_TEMPLATE, substituteCassandraDockerImageName(originalDockerImageName))
|
||||
: String.format(TESTCONTAINERS_HUB_IMAGE_NAME_TEMPLATE, originalDockerImageName);
|
||||
}
|
||||
|
||||
private String substituteCassandraDockerImageName(String originalDockerImageName) {
|
||||
|
||||
return originalDockerImageName.contains("cassandra")
|
||||
@@ -101,12 +115,16 @@ public class VmwHarborProxyImageNameSubstitutor extends ImageNameSubstitutor {
|
||||
: originalDockerImageName;
|
||||
}
|
||||
|
||||
private String toUnqualifiedDockerImageName(String dockerImageName) {
|
||||
return dockerImageName.substring(dockerImageName.lastIndexOf("/") + 1);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getDescription() {
|
||||
return "VMware Harbor Proxy Image Name Substitutor";
|
||||
}
|
||||
|
||||
protected Logger getLogger() {
|
||||
protected @NonNull Logger getLogger() {
|
||||
return this.logger;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user