Browse Source
When run on CI servers, leverage an internal proxy service using Testcontainers ability to plugin a custom ImageNameSubstitor. See #1518 Original Pull Request: #1516pull/1649/head
6 changed files with 101 additions and 0 deletions
@ -0,0 +1,83 @@ |
|||||||
|
/* |
||||||
|
* Copyright 2023 the original author or authors. |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
package org.springframework.data; |
||||||
|
|
||||||
|
import java.util.List; |
||||||
|
|
||||||
|
import org.slf4j.Logger; |
||||||
|
import org.slf4j.LoggerFactory; |
||||||
|
import org.testcontainers.utility.DockerImageName; |
||||||
|
import org.testcontainers.utility.ImageNameSubstitutor; |
||||||
|
|
||||||
|
/** |
||||||
|
* An {@link ImageNameSubstitutor} only used on CI servers to leverage internal proxy solution, that needs to vary the |
||||||
|
* prefix based on which container image is needed. |
||||||
|
* |
||||||
|
* @author Greg Turnquist |
||||||
|
*/ |
||||||
|
public class ProxyImageNameSubstitutor extends ImageNameSubstitutor { |
||||||
|
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(ProxyImageNameSubstitutor.class); |
||||||
|
|
||||||
|
private static final List<String> NAMES_TO_PROXY_PREFIX = List.of("ryuk", "arm64v8/mariadb", "ibmcom/db2", |
||||||
|
"gvenzl/oracle-xe"); |
||||||
|
|
||||||
|
private static final List<String> NAMES_TO_LIBRARY_PROXY_PREFIX = List.of("mariadb", "mysql", "postgres"); |
||||||
|
|
||||||
|
private static final String PROXY_PREFIX = "harbor-repo.vmware.com/dockerhub-proxy-cache/"; |
||||||
|
|
||||||
|
private static final String LIBRARY_PROXY_PREFIX = PROXY_PREFIX + "library/"; |
||||||
|
|
||||||
|
@Override |
||||||
|
public DockerImageName apply(DockerImageName dockerImageName) { |
||||||
|
|
||||||
|
if (NAMES_TO_PROXY_PREFIX.stream().anyMatch(s -> dockerImageName.asCanonicalNameString().contains(s))) { |
||||||
|
|
||||||
|
String transformedName = applyProxyPrefix(dockerImageName.asCanonicalNameString()); |
||||||
|
LOG.info("Converting " + dockerImageName.asCanonicalNameString() + " to " + transformedName); |
||||||
|
return DockerImageName.parse(transformedName); |
||||||
|
} |
||||||
|
|
||||||
|
if (NAMES_TO_LIBRARY_PROXY_PREFIX.stream().anyMatch(s -> dockerImageName.asCanonicalNameString().contains(s))) { |
||||||
|
|
||||||
|
String transformedName = applyProxyAndLibraryPrefix(dockerImageName.asCanonicalNameString()); |
||||||
|
LOG.info("Converting " + dockerImageName.asCanonicalNameString() + " to " + transformedName); |
||||||
|
return DockerImageName.parse(transformedName); |
||||||
|
} |
||||||
|
|
||||||
|
LOG.info("Not changing " + dockerImageName.asCanonicalNameString() + "..."); |
||||||
|
return dockerImageName; |
||||||
|
} |
||||||
|
|
||||||
|
@Override |
||||||
|
protected String getDescription() { |
||||||
|
return "Spring Data Proxy Image Name Substitutor"; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Apply a non-library-based prefix. |
||||||
|
*/ |
||||||
|
private static String applyProxyPrefix(String imageName) { |
||||||
|
return PROXY_PREFIX + imageName; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* Apply a library based prefix. |
||||||
|
*/ |
||||||
|
private static String applyProxyAndLibraryPrefix(String imageName) { |
||||||
|
return LIBRARY_PROXY_PREFIX + imageName; |
||||||
|
} |
||||||
|
} |
||||||
Loading…
Reference in new issue