From c5be1e18145a2520e589111256989f8e49ea562a Mon Sep 17 00:00:00 2001 From: "M.-Leander Reimer" Date: Thu, 21 Oct 2021 22:37:30 +0200 Subject: [PATCH 01/17] Added some Git ignores. --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 201acaa5fc..ada73aa036 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ #Ignore Mac OS X DS Store .DS_Store +.dccache *~ *.swp @@ -17,6 +18,8 @@ target *.iws *.ipr +.vscode/ + # Ignore all log files *.log From 96b992e21131aa90a4bcc6c18fb964b11f185752 Mon Sep 17 00:00:00 2001 From: "M.-Leander Reimer" Date: Thu, 21 Oct 2021 23:04:59 +0200 Subject: [PATCH 02/17] Added stubbed default K8s bridge implementation. --- docker-java-bridge-k8s/pom.xml | 73 +++ .../k8s/K8sBridgeDockerClientImpl.java | 525 ++++++++++++++++++ 2 files changed, 598 insertions(+) create mode 100644 docker-java-bridge-k8s/pom.xml create mode 100644 docker-java-bridge-k8s/src/main/java/com/github/dockerjava/k8s/K8sBridgeDockerClientImpl.java diff --git a/docker-java-bridge-k8s/pom.xml b/docker-java-bridge-k8s/pom.xml new file mode 100644 index 0000000000..0c03d8a883 --- /dev/null +++ b/docker-java-bridge-k8s/pom.xml @@ -0,0 +1,73 @@ + + 4.0.0 + + + com.github.docker-java + docker-java-parent + 0-SNAPSHOT + ../pom.xml + + + docker-java-bridge-k8s + jar + + docker-java-core + https://github.com/docker-java/docker-java + Java API Client for Docker + + + + ${project.groupId} + docker-java-api + ${project.version} + + + + io.kubernetes + client-java + 13.0.1 + + + + org.slf4j + slf4j-api + ${slf4j-api.version} + + + + commons-lang + commons-lang + ${commons-lang.version} + + + + com.google.code.findbugs + annotations + 3.0.1u2 + provided + + + + + + + org.apache.felix + maven-bundle-plugin + true + + + com.github.dockerjava.core.* + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + + diff --git a/docker-java-bridge-k8s/src/main/java/com/github/dockerjava/k8s/K8sBridgeDockerClientImpl.java b/docker-java-bridge-k8s/src/main/java/com/github/dockerjava/k8s/K8sBridgeDockerClientImpl.java new file mode 100644 index 0000000000..8d02a26a1a --- /dev/null +++ b/docker-java-bridge-k8s/src/main/java/com/github/dockerjava/k8s/K8sBridgeDockerClientImpl.java @@ -0,0 +1,525 @@ +package com.github.dockerjava.k8s; + +import com.github.dockerjava.api.DockerClient; +import com.github.dockerjava.api.command.AttachContainerCmd; +import com.github.dockerjava.api.command.AuthCmd; +import com.github.dockerjava.api.command.BuildImageCmd; +import com.github.dockerjava.api.command.CommitCmd; +import com.github.dockerjava.api.command.ConnectToNetworkCmd; +import com.github.dockerjava.api.command.ContainerDiffCmd; +import com.github.dockerjava.api.command.CopyArchiveFromContainerCmd; +import com.github.dockerjava.api.command.CopyArchiveToContainerCmd; +import com.github.dockerjava.api.command.CopyFileFromContainerCmd; +import com.github.dockerjava.api.command.CreateConfigCmd; +import com.github.dockerjava.api.command.CreateContainerCmd; +import com.github.dockerjava.api.command.CreateImageCmd; +import com.github.dockerjava.api.command.CreateNetworkCmd; +import com.github.dockerjava.api.command.CreateSecretCmd; +import com.github.dockerjava.api.command.CreateServiceCmd; +import com.github.dockerjava.api.command.CreateVolumeCmd; +import com.github.dockerjava.api.command.DisconnectFromNetworkCmd; +import com.github.dockerjava.api.command.EventsCmd; +import com.github.dockerjava.api.command.ExecCreateCmd; +import com.github.dockerjava.api.command.ExecStartCmd; +import com.github.dockerjava.api.command.InfoCmd; +import com.github.dockerjava.api.command.InitializeSwarmCmd; +import com.github.dockerjava.api.command.InspectConfigCmd; +import com.github.dockerjava.api.command.InspectContainerCmd; +import com.github.dockerjava.api.command.InspectExecCmd; +import com.github.dockerjava.api.command.InspectImageCmd; +import com.github.dockerjava.api.command.InspectNetworkCmd; +import com.github.dockerjava.api.command.InspectServiceCmd; +import com.github.dockerjava.api.command.InspectSwarmCmd; +import com.github.dockerjava.api.command.InspectVolumeCmd; +import com.github.dockerjava.api.command.JoinSwarmCmd; +import com.github.dockerjava.api.command.KillContainerCmd; +import com.github.dockerjava.api.command.LeaveSwarmCmd; +import com.github.dockerjava.api.command.ListConfigsCmd; +import com.github.dockerjava.api.command.ListContainersCmd; +import com.github.dockerjava.api.command.ListImagesCmd; +import com.github.dockerjava.api.command.ListNetworksCmd; +import com.github.dockerjava.api.command.ListSecretsCmd; +import com.github.dockerjava.api.command.ListServicesCmd; +import com.github.dockerjava.api.command.ListSwarmNodesCmd; +import com.github.dockerjava.api.command.ListTasksCmd; +import com.github.dockerjava.api.command.ListVolumesCmd; +import com.github.dockerjava.api.command.LoadImageCmd; +import com.github.dockerjava.api.command.LogContainerCmd; +import com.github.dockerjava.api.command.LogSwarmObjectCmd; +import com.github.dockerjava.api.command.PauseContainerCmd; +import com.github.dockerjava.api.command.PingCmd; +import com.github.dockerjava.api.command.PruneCmd; +import com.github.dockerjava.api.command.PullImageCmd; +import com.github.dockerjava.api.command.PushImageCmd; +import com.github.dockerjava.api.command.RemoveConfigCmd; +import com.github.dockerjava.api.command.RemoveContainerCmd; +import com.github.dockerjava.api.command.RemoveImageCmd; +import com.github.dockerjava.api.command.RemoveNetworkCmd; +import com.github.dockerjava.api.command.RemoveSecretCmd; +import com.github.dockerjava.api.command.RemoveServiceCmd; +import com.github.dockerjava.api.command.RemoveVolumeCmd; +import com.github.dockerjava.api.command.RenameContainerCmd; +import com.github.dockerjava.api.command.ResizeContainerCmd; +import com.github.dockerjava.api.command.ResizeExecCmd; +import com.github.dockerjava.api.command.RestartContainerCmd; +import com.github.dockerjava.api.command.SaveImageCmd; +import com.github.dockerjava.api.command.SaveImagesCmd; +import com.github.dockerjava.api.command.SearchImagesCmd; +import com.github.dockerjava.api.command.StartContainerCmd; +import com.github.dockerjava.api.command.StatsCmd; +import com.github.dockerjava.api.command.StopContainerCmd; +import com.github.dockerjava.api.command.TagImageCmd; +import com.github.dockerjava.api.command.TopContainerCmd; +import com.github.dockerjava.api.command.UnpauseContainerCmd; +import com.github.dockerjava.api.command.UpdateContainerCmd; +import com.github.dockerjava.api.command.UpdateServiceCmd; +import com.github.dockerjava.api.command.UpdateSwarmCmd; +import com.github.dockerjava.api.command.UpdateSwarmNodeCmd; +import com.github.dockerjava.api.command.VersionCmd; +import com.github.dockerjava.api.command.WaitContainerCmd; +import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.model.AuthConfig; +import com.github.dockerjava.api.model.Identifier; +import com.github.dockerjava.api.model.PruneType; +import com.github.dockerjava.api.model.SecretSpec; +import com.github.dockerjava.api.model.ServiceSpec; +import com.github.dockerjava.api.model.SwarmSpec; +import java.io.Closeable; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import io.kubernetes.client.openapi.ApiClient; +import io.kubernetes.client.openapi.Configuration; +import io.kubernetes.client.util.Config; + +public class K8sBridgeDockerClientImpl implements DockerClient, Closeable { + + private final ApiClient client; + + K8sBridgeDockerClientImpl(final ApiClient client) { + this.client = client; + } + + /** + * Returns the default K8s Bridge client instance. + * + * @return the default instance + * @throws IOException in case of I/O problems with K8s + */ + public static DockerClient getInstance() throws IOException { + ApiClient client = Config.defaultClient(); + Configuration.setDefaultApiClient(client); + + return new K8sBridgeDockerClientImpl(client); + } + + @Override + public AuthConfig authConfig() throws DockerException { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public AuthCmd authCmd() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public InfoCmd infoCmd() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public PingCmd pingCmd() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public VersionCmd versionCmd() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public PullImageCmd pullImageCmd(String repository) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public PushImageCmd pushImageCmd(String name) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public PushImageCmd pushImageCmd(Identifier identifier) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public CreateImageCmd createImageCmd(String repository, InputStream imageStream) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public LoadImageCmd loadImageCmd(InputStream imageStream) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public SearchImagesCmd searchImagesCmd(String term) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public RemoveImageCmd removeImageCmd(String imageId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public ListImagesCmd listImagesCmd() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public InspectImageCmd inspectImageCmd(String imageId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public SaveImageCmd saveImageCmd(String name) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public SaveImagesCmd saveImagesCmd() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public ListContainersCmd listContainersCmd() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public CreateContainerCmd createContainerCmd(String image) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public StartContainerCmd startContainerCmd(String containerId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public ExecCreateCmd execCreateCmd(String containerId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public ResizeExecCmd resizeExecCmd(String execId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public InspectContainerCmd inspectContainerCmd(String containerId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public RemoveContainerCmd removeContainerCmd(String containerId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public WaitContainerCmd waitContainerCmd(String containerId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public AttachContainerCmd attachContainerCmd(String containerId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public ExecStartCmd execStartCmd(String execId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public InspectExecCmd inspectExecCmd(String execId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public LogContainerCmd logContainerCmd(String containerId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public CopyArchiveFromContainerCmd copyArchiveFromContainerCmd(String containerId, String resource) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public CopyFileFromContainerCmd copyFileFromContainerCmd(String containerId, String resource) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public CopyArchiveToContainerCmd copyArchiveToContainerCmd(String containerId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public ContainerDiffCmd containerDiffCmd(String containerId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public StopContainerCmd stopContainerCmd(String containerId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public KillContainerCmd killContainerCmd(String containerId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public UpdateContainerCmd updateContainerCmd(String containerId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public RenameContainerCmd renameContainerCmd(String containerId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public RestartContainerCmd restartContainerCmd(String containerId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public ResizeContainerCmd resizeContainerCmd(String containerId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public CommitCmd commitCmd(String containerId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public BuildImageCmd buildImageCmd() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public BuildImageCmd buildImageCmd(File dockerFileOrFolder) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public BuildImageCmd buildImageCmd(InputStream tarInputStream) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public TopContainerCmd topContainerCmd(String containerId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public TagImageCmd tagImageCmd(String imageId, String imageNameWithRepository, String tag) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public PauseContainerCmd pauseContainerCmd(String containerId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public UnpauseContainerCmd unpauseContainerCmd(String containerId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public EventsCmd eventsCmd() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public StatsCmd statsCmd(String containerId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public CreateVolumeCmd createVolumeCmd() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public InspectVolumeCmd inspectVolumeCmd(String name) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public RemoveVolumeCmd removeVolumeCmd(String name) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public ListVolumesCmd listVolumesCmd() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public ListNetworksCmd listNetworksCmd() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public InspectNetworkCmd inspectNetworkCmd() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public CreateNetworkCmd createNetworkCmd() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public RemoveNetworkCmd removeNetworkCmd(String networkId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public ConnectToNetworkCmd connectToNetworkCmd() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public DisconnectFromNetworkCmd disconnectFromNetworkCmd() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public InitializeSwarmCmd initializeSwarmCmd(SwarmSpec swarmSpec) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public InspectSwarmCmd inspectSwarmCmd() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public JoinSwarmCmd joinSwarmCmd() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public LeaveSwarmCmd leaveSwarmCmd() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public UpdateSwarmCmd updateSwarmCmd(SwarmSpec swarmSpec) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public UpdateSwarmNodeCmd updateSwarmNodeCmd() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public ListSwarmNodesCmd listSwarmNodesCmd() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public ListServicesCmd listServicesCmd() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public CreateServiceCmd createServiceCmd(ServiceSpec serviceSpec) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public InspectServiceCmd inspectServiceCmd(String serviceId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public UpdateServiceCmd updateServiceCmd(String serviceId, ServiceSpec serviceSpec) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public RemoveServiceCmd removeServiceCmd(String serviceId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public ListTasksCmd listTasksCmd() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public LogSwarmObjectCmd logServiceCmd(String serviceId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public LogSwarmObjectCmd logTaskCmd(String taskId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public PruneCmd pruneCmd(PruneType pruneType) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public ListSecretsCmd listSecretsCmd() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public CreateSecretCmd createSecretCmd(SecretSpec secretSpec) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public RemoveSecretCmd removeSecretCmd(String secretId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public ListConfigsCmd listConfigsCmd() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public CreateConfigCmd createConfigCmd() { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public InspectConfigCmd inspectConfigCmd(String configId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public RemoveConfigCmd removeConfigCmd(String configId) { + throw new UnsupportedOperationException("Not supported yet."); + } + + @Override + public void close() throws IOException { + throw new UnsupportedOperationException("Not supported yet."); + } +} From a35fed3f2a0fc025967d2ab3a4cb9be087182b67 Mon Sep 17 00:00:00 2001 From: "M.-Leander Reimer" Date: Thu, 21 Oct 2021 23:50:00 +0200 Subject: [PATCH 03/17] Added K8s bridge module. --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index bb1a424e1f..e9719d1186 100644 --- a/pom.xml +++ b/pom.xml @@ -94,6 +94,7 @@ docker-java-api docker-java-bom + docker-java-bridge-k8s docker-java-core docker-java-transport docker-java-transport-netty From 0b21a4d61087ff1b5236fecf8dd088c7a6614ef3 Mon Sep 17 00:00:00 2001 From: "M.-Leander Reimer" Date: Thu, 21 Oct 2021 23:51:07 +0200 Subject: [PATCH 04/17] Fixed module name. --- docker-java-bridge-k8s/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-java-bridge-k8s/pom.xml b/docker-java-bridge-k8s/pom.xml index 0c03d8a883..9268079ff5 100644 --- a/docker-java-bridge-k8s/pom.xml +++ b/docker-java-bridge-k8s/pom.xml @@ -11,7 +11,7 @@ docker-java-bridge-k8s jar - docker-java-core + docker-java-bridge-k8s https://github.com/docker-java/docker-java Java API Client for Docker From 25c48669a26739d60a4847090e2eef8196f972bf Mon Sep 17 00:00:00 2001 From: "M.-Leander Reimer" Date: Fri, 22 Oct 2021 00:27:00 +0200 Subject: [PATCH 05/17] Added first draft for K8s bridge implementation. --- docker-java-bridge-k8s/pom.xml | 26 +++++++++++ .../k8s/K8sBridgeDockerClientImpl.java | 6 +-- .../k8s/command/VersionCmdImpl.java | 44 +++++++++++++++++++ .../k8s/K8sBridgeDockerClientImplTest.java | 23 ++++++++++ .../k8s/command/VersionCmdImplTest.java | 28 ++++++++++++ 5 files changed, 124 insertions(+), 3 deletions(-) create mode 100644 docker-java-bridge-k8s/src/main/java/com/github/dockerjava/k8s/command/VersionCmdImpl.java create mode 100644 docker-java-bridge-k8s/src/test/java/com/github/dockerjava/k8s/K8sBridgeDockerClientImplTest.java create mode 100644 docker-java-bridge-k8s/src/test/java/com/github/dockerjava/k8s/command/VersionCmdImplTest.java diff --git a/docker-java-bridge-k8s/pom.xml b/docker-java-bridge-k8s/pom.xml index 9268079ff5..e75b32cb51 100644 --- a/docker-java-bridge-k8s/pom.xml +++ b/docker-java-bridge-k8s/pom.xml @@ -33,6 +33,12 @@ slf4j-api ${slf4j-api.version} + + org.slf4j + slf4j-simple + ${slf4j-api.version} + test + commons-lang @@ -46,6 +52,26 @@ 3.0.1u2 provided + + + org.junit.jupiter + junit-jupiter + 5.7.2 + test + + + org.mockito + mockito-core + ${mockito.version} + test + + + org.mockito + mockito-junit-jupiter + ${mockito.version} + test + + diff --git a/docker-java-bridge-k8s/src/main/java/com/github/dockerjava/k8s/K8sBridgeDockerClientImpl.java b/docker-java-bridge-k8s/src/main/java/com/github/dockerjava/k8s/K8sBridgeDockerClientImpl.java index 8d02a26a1a..19bfce811f 100644 --- a/docker-java-bridge-k8s/src/main/java/com/github/dockerjava/k8s/K8sBridgeDockerClientImpl.java +++ b/docker-java-bridge-k8s/src/main/java/com/github/dockerjava/k8s/K8sBridgeDockerClientImpl.java @@ -91,6 +91,7 @@ import io.kubernetes.client.openapi.ApiClient; import io.kubernetes.client.openapi.Configuration; import io.kubernetes.client.util.Config; +import com.github.dockerjava.k8s.command.VersionCmdImpl; public class K8sBridgeDockerClientImpl implements DockerClient, Closeable { @@ -135,7 +136,7 @@ public PingCmd pingCmd() { @Override public VersionCmd versionCmd() { - throw new UnsupportedOperationException("Not supported yet."); + return new VersionCmdImpl(client); } @Override @@ -519,7 +520,6 @@ public RemoveConfigCmd removeConfigCmd(String configId) { } @Override - public void close() throws IOException { - throw new UnsupportedOperationException("Not supported yet."); + public void close() { } } diff --git a/docker-java-bridge-k8s/src/main/java/com/github/dockerjava/k8s/command/VersionCmdImpl.java b/docker-java-bridge-k8s/src/main/java/com/github/dockerjava/k8s/command/VersionCmdImpl.java new file mode 100644 index 0000000000..ae1e54aac6 --- /dev/null +++ b/docker-java-bridge-k8s/src/main/java/com/github/dockerjava/k8s/command/VersionCmdImpl.java @@ -0,0 +1,44 @@ +package com.github.dockerjava.k8s.command; + +import com.github.dockerjava.api.command.VersionCmd; +import com.github.dockerjava.api.exception.DockerException; +import io.kubernetes.client.openapi.ApiClient; +import io.kubernetes.client.openapi.ApiException; +import io.kubernetes.client.openapi.models.VersionInfo; +import io.kubernetes.client.util.version.Version; +import org.apache.commons.lang3.builder.ToStringBuilder; +import org.apache.commons.lang3.builder.ToStringStyle; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; + +public class VersionCmdImpl implements VersionCmd { + + private static final Logger LOGGER = LoggerFactory.getLogger(VersionCmdImpl.class); + + private final ApiClient client; + + public VersionCmdImpl(final ApiClient client) { + this.client = client; + } + + @Override + public com.github.dockerjava.api.model.Version exec() { + Version k8sVersion = new Version(client); + VersionInfo info; + try { + info = k8sVersion.getVersion(); + LOGGER.info("Got K8s {}", ToStringBuilder.reflectionToString(info, ToStringStyle.SHORT_PREFIX_STYLE)); + } catch (ApiException | IOException e) { + throw new DockerException("Could not get K8s version.", 500, e); + } + + com.github.dockerjava.api.model.Version dockerVersion = new com.github.dockerjava.api.model.Version(); + return dockerVersion; + } + + @Override + public void close() { + } +} diff --git a/docker-java-bridge-k8s/src/test/java/com/github/dockerjava/k8s/K8sBridgeDockerClientImplTest.java b/docker-java-bridge-k8s/src/test/java/com/github/dockerjava/k8s/K8sBridgeDockerClientImplTest.java new file mode 100644 index 0000000000..873b743fc4 --- /dev/null +++ b/docker-java-bridge-k8s/src/test/java/com/github/dockerjava/k8s/K8sBridgeDockerClientImplTest.java @@ -0,0 +1,23 @@ +package com.github.dockerjava.k8s; + +import com.github.dockerjava.api.DockerClient; +import com.github.dockerjava.api.command.VersionCmd; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class K8sBridgeDockerClientImplTest { + + @Test + void versionCmd() throws Exception { + DockerClient client = K8sBridgeDockerClientImpl.getInstance(); + VersionCmd versionCmd = client.versionCmd(); + assertNotNull(versionCmd); + } + + @Test + void close() throws Exception { + DockerClient client = K8sBridgeDockerClientImpl.getInstance(); + client.close(); + } +} diff --git a/docker-java-bridge-k8s/src/test/java/com/github/dockerjava/k8s/command/VersionCmdImplTest.java b/docker-java-bridge-k8s/src/test/java/com/github/dockerjava/k8s/command/VersionCmdImplTest.java new file mode 100644 index 0000000000..b12ef82fcb --- /dev/null +++ b/docker-java-bridge-k8s/src/test/java/com/github/dockerjava/k8s/command/VersionCmdImplTest.java @@ -0,0 +1,28 @@ +package com.github.dockerjava.k8s.command; + +import com.github.dockerjava.api.model.Version; +import io.kubernetes.client.openapi.ApiClient; +import io.kubernetes.client.util.ClientBuilder; +import io.kubernetes.client.util.KubeConfig; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; + +import java.io.FileReader; +import java.io.IOException; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +@ExtendWith(MockitoExtension.class) +class VersionCmdImplTest { + + @Test + void execLocalKubeConfigClient() throws IOException { + String kubeConfigPath = System.getenv("HOME") + "/.kube/config"; + ApiClient client = ClientBuilder.kubeconfig(KubeConfig.loadKubeConfig(new FileReader(kubeConfigPath))).build(); + + VersionCmdImpl cmd = new VersionCmdImpl(client); + Version version = cmd.exec(); + assertEquals(null, version.getGoVersion()); + } +} From 8f462df708e93c8742d8689b1101aa1b460103ea Mon Sep 17 00:00:00 2001 From: Huluvu424242 alias Thomas Schubert Date: Wed, 27 Oct 2021 22:51:59 +0200 Subject: [PATCH 06/17] [feature/k8sbridge-continue] java 11 used --- pom.xml | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index e9719d1186..ec585183b2 100644 --- a/pom.xml +++ b/pom.xml @@ -145,8 +145,7 @@ maven-compiler-plugin ${maven-compiler-plugin.version} - ${jdk.source} - ${jdk.target} + 11 ${jdk.debug} ${jdk.optimize} @@ -213,15 +212,16 @@ org.apache.maven.plugins maven-javadoc-plugin - 2.10.4 + 3.3.1 - -Xdoclint:none + true + none attach-javadocs - jar + aggregate-jar @@ -301,6 +301,7 @@ org.apache.maven.plugins maven-gpg-plugin + 1.6 sign-artifacts From e03ee1b78d420d11612d123fabe300876e8ce998 Mon Sep 17 00:00:00 2001 From: Huluvu424242 alias Thomas Schubert Date: Wed, 27 Oct 2021 23:07:18 +0200 Subject: [PATCH 07/17] [feature/k8sbridge-continue] feature build added --- .github/workflows/ci-features.yml | 40 +++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 .github/workflows/ci-features.yml diff --git a/.github/workflows/ci-features.yml b/.github/workflows/ci-features.yml new file mode 100644 index 0000000000..11283f7693 --- /dev/null +++ b/.github/workflows/ci-features.yml @@ -0,0 +1,40 @@ +name: CI + +on: [push] + +jobs: + build: + runs-on: ubuntu-18.04 + strategy: + fail-fast: false + matrix: + include: + - { name: "default" } + - { name: "over TCP", dockerHost: "tcp://127.0.0.1:2375" } + - { name: "Docker 18.06.3", dockerVersion: "18.06.3~ce~3-0~ubuntu" } + + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 8 + uses: actions/setup-java@v1 + with: + java-version: 8 + - name: Configure Docker + env: + DOCKER_VERSION: ${{matrix.dockerVersion}} + DOCKER_HOST: ${{matrix.dockerHost}} + run: .ci/setup_docker.sh + - name: Build with Maven + env: + DOCKER_HOST: ${{matrix.dockerHost}} + run: ./mvnw --no-transfer-progress verify + - name: Aggregate test reports with ciMate + if: always() + continue-on-error: true + env: + CIMATE_PROJECT_ID: lodr9d83 + CIMATE_CI_KEY: "CI / ${{matrix.name}}" + run: | + wget -q https://get.cimate.io/release/linux/cimate + chmod +x cimate + ./cimate "**/TEST-*.xml" From 9e4f6c93499ddbd62069fab0a99d8ba3d16b4b7f Mon Sep 17 00:00:00 2001 From: Huluvu424242 alias Thomas Schubert Date: Wed, 27 Oct 2021 23:10:51 +0200 Subject: [PATCH 08/17] [feature/k8sbridge-continue] feature build configured --- .github/workflows/ci-features.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci-features.yml b/.github/workflows/ci-features.yml index 11283f7693..f0d416bad6 100644 --- a/.github/workflows/ci-features.yml +++ b/.github/workflows/ci-features.yml @@ -1,4 +1,4 @@ -name: CI +name: CI - Features on: [push] @@ -15,10 +15,10 @@ jobs: steps: - uses: actions/checkout@v2 - - name: Set up JDK 8 - uses: actions/setup-java@v1 + - name: Set up JDK 11 + uses: actions/setup-java@v2 with: - java-version: 8 + java-version: 11 - name: Configure Docker env: DOCKER_VERSION: ${{matrix.dockerVersion}} @@ -33,7 +33,7 @@ jobs: continue-on-error: true env: CIMATE_PROJECT_ID: lodr9d83 - CIMATE_CI_KEY: "CI / ${{matrix.name}}" + CIMATE_CI_KEY: "CI - Features / ${{matrix.name}}" run: | wget -q https://get.cimate.io/release/linux/cimate chmod +x cimate From 76e729b3c093729531637d15c46ddb3d33734197 Mon Sep 17 00:00:00 2001 From: Huluvu424242 alias Thomas Schubert Date: Wed, 27 Oct 2021 23:13:44 +0200 Subject: [PATCH 09/17] [feature/k8sbridge-continue] feature build config fixed --- .github/workflows/ci-features.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci-features.yml b/.github/workflows/ci-features.yml index f0d416bad6..300c3abfa9 100644 --- a/.github/workflows/ci-features.yml +++ b/.github/workflows/ci-features.yml @@ -16,7 +16,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Set up JDK 11 - uses: actions/setup-java@v2 + uses: actions/setup-java@v1 with: java-version: 11 - name: Configure Docker From e6823ada7962993a70f9fa09c10ccf32c78eec3a Mon Sep 17 00:00:00 2001 From: Huluvu424242 alias Thomas Schubert Date: Thu, 28 Oct 2021 18:47:01 +0200 Subject: [PATCH 10/17] =?UTF-8?q?[feature/k8sbridge-continue]=20Verzeichni?= =?UTF-8?q?s=20Auswahl=20Systemunabh=C3=A4ngig=20fixed?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dockerjava/k8s/command/VersionCmdImplTest.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/docker-java-bridge-k8s/src/test/java/com/github/dockerjava/k8s/command/VersionCmdImplTest.java b/docker-java-bridge-k8s/src/test/java/com/github/dockerjava/k8s/command/VersionCmdImplTest.java index b12ef82fcb..b6f0d19843 100644 --- a/docker-java-bridge-k8s/src/test/java/com/github/dockerjava/k8s/command/VersionCmdImplTest.java +++ b/docker-java-bridge-k8s/src/test/java/com/github/dockerjava/k8s/command/VersionCmdImplTest.java @@ -4,13 +4,13 @@ import io.kubernetes.client.openapi.ApiClient; import io.kubernetes.client.util.ClientBuilder; import io.kubernetes.client.util.KubeConfig; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.junit.jupiter.MockitoExtension; -import java.io.FileReader; -import java.io.IOException; - import static org.junit.jupiter.api.Assertions.assertEquals; @ExtendWith(MockitoExtension.class) @@ -18,7 +18,9 @@ class VersionCmdImplTest { @Test void execLocalKubeConfigClient() throws IOException { - String kubeConfigPath = System.getenv("HOME") + "/.kube/config"; + + final String kubeConfigPath = System.getProperty("user.home")+ File.separator + ".kube"+File.separator+"config"; + ApiClient client = ClientBuilder.kubeconfig(KubeConfig.loadKubeConfig(new FileReader(kubeConfigPath))).build(); VersionCmdImpl cmd = new VersionCmdImpl(client); From f7edd7dfe6792c721d63296781cfd7bc1e36e52f Mon Sep 17 00:00:00 2001 From: Huluvu424242 alias Thomas Schubert Date: Thu, 28 Oct 2021 18:50:41 +0200 Subject: [PATCH 11/17] =?UTF-8?q?[feature/k8sbridge-continue]=20Verzeichni?= =?UTF-8?q?s=20Auswahl=20Systemunabh=C3=A4ngig=20fixed=20again?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/github/dockerjava/k8s/command/VersionCmdImplTest.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker-java-bridge-k8s/src/test/java/com/github/dockerjava/k8s/command/VersionCmdImplTest.java b/docker-java-bridge-k8s/src/test/java/com/github/dockerjava/k8s/command/VersionCmdImplTest.java index b6f0d19843..80d33d934b 100644 --- a/docker-java-bridge-k8s/src/test/java/com/github/dockerjava/k8s/command/VersionCmdImplTest.java +++ b/docker-java-bridge-k8s/src/test/java/com/github/dockerjava/k8s/command/VersionCmdImplTest.java @@ -7,6 +7,7 @@ import java.io.File; import java.io.FileReader; import java.io.IOException; +import java.nio.file.Paths; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.junit.jupiter.MockitoExtension; @@ -19,7 +20,7 @@ class VersionCmdImplTest { @Test void execLocalKubeConfigClient() throws IOException { - final String kubeConfigPath = System.getProperty("user.home")+ File.separator + ".kube"+File.separator+"config"; + final String kubeConfigPath = Paths.get(System.getProperty("user.home")+ File.separator + ".kube"+File.separator+"config").toString(); ApiClient client = ClientBuilder.kubeconfig(KubeConfig.loadKubeConfig(new FileReader(kubeConfigPath))).build(); From 82d5280f7976f00bbf793c0d930a097c54d681e8 Mon Sep 17 00:00:00 2001 From: Huluvu424242 alias Thomas Schubert Date: Thu, 28 Oct 2021 20:16:50 +0200 Subject: [PATCH 12/17] [feature/k8sbridge-continue] unix specific tests excludes --- docker-java-bridge-k8s/pom.xml | 12 ++++++++++++ pom.xml | 23 +++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/docker-java-bridge-k8s/pom.xml b/docker-java-bridge-k8s/pom.xml index e75b32cb51..70f480955f 100644 --- a/docker-java-bridge-k8s/pom.xml +++ b/docker-java-bridge-k8s/pom.xml @@ -94,6 +94,18 @@ 8 + + org.apache.maven.plugins + maven-surefire-plugin + + + TLSv1.2 + + + + + + diff --git a/pom.xml b/pom.xml index ec585183b2..43e6c993cf 100644 --- a/pom.xml +++ b/pom.xml @@ -319,6 +319,29 @@ + + windows + + + Windows + + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + **/DefaultDockerClientConfigTest* + **/CompressArchiveUtilTest* + + + + + + docker-java-analyses From 586e52a1f927eb7f7bcccf6f192fd33af3cf9e5f Mon Sep 17 00:00:00 2001 From: Huluvu424242 alias Thomas Schubert Date: Thu, 28 Oct 2021 20:24:19 +0200 Subject: [PATCH 13/17] [feature/k8sbridge-continue] start ci with minikube --- .github/workflows/ci-features.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/ci-features.yml b/.github/workflows/ci-features.yml index 300c3abfa9..0f01398030 100644 --- a/.github/workflows/ci-features.yml +++ b/.github/workflows/ci-features.yml @@ -24,6 +24,9 @@ jobs: DOCKER_VERSION: ${{matrix.dockerVersion}} DOCKER_HOST: ${{matrix.dockerHost}} run: .ci/setup_docker.sh + - name: start minikube + id: minikube + uses: medyagh/setup-minikube@master - name: Build with Maven env: DOCKER_HOST: ${{matrix.dockerHost}} From ba267a1e5dda79f311a4ff535adb292760d37520 Mon Sep 17 00:00:00 2001 From: Huluvu424242 alias Thomas Schubert Date: Thu, 28 Oct 2021 20:37:25 +0200 Subject: [PATCH 14/17] [feature/k8sbridge-continue] generated sources excludes from checkstyle --- pom.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pom.xml b/pom.xml index 43e6c993cf..33e1356c67 100644 --- a/pom.xml +++ b/pom.xml @@ -362,6 +362,9 @@ + + src/main/java + UTF-8 true true From 3c0c1afeb82d05c5c7d7dd9876187ebc071f55d7 Mon Sep 17 00:00:00 2001 From: "M.-Leander Reimer" Date: Thu, 28 Oct 2021 20:54:35 +0200 Subject: [PATCH 15/17] Added reflective property mapping and unit tests for version command. --- docker-java-bridge-k8s/pom.xml | 6 +++++ .../k8s/command/VersionCmdImpl.java | 26 +++++++++++++++++++ .../k8s/command/VersionCmdImplTest.java | 17 +++++++++--- 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/docker-java-bridge-k8s/pom.xml b/docker-java-bridge-k8s/pom.xml index e75b32cb51..71bf80aeb0 100644 --- a/docker-java-bridge-k8s/pom.xml +++ b/docker-java-bridge-k8s/pom.xml @@ -28,6 +28,12 @@ 13.0.1 + + commons-beanutils + commons-beanutils + 1.9.4 + + org.slf4j slf4j-api diff --git a/docker-java-bridge-k8s/src/main/java/com/github/dockerjava/k8s/command/VersionCmdImpl.java b/docker-java-bridge-k8s/src/main/java/com/github/dockerjava/k8s/command/VersionCmdImpl.java index ae1e54aac6..9801f51caf 100644 --- a/docker-java-bridge-k8s/src/main/java/com/github/dockerjava/k8s/command/VersionCmdImpl.java +++ b/docker-java-bridge-k8s/src/main/java/com/github/dockerjava/k8s/command/VersionCmdImpl.java @@ -2,16 +2,24 @@ import com.github.dockerjava.api.command.VersionCmd; import com.github.dockerjava.api.exception.DockerException; +import com.github.dockerjava.api.model.VersionPlatform; import io.kubernetes.client.openapi.ApiClient; import io.kubernetes.client.openapi.ApiException; import io.kubernetes.client.openapi.models.VersionInfo; import io.kubernetes.client.util.version.Version; +import org.apache.commons.beanutils.BeanUtils; +import org.apache.commons.beanutils.PropertyUtils; +import org.apache.commons.lang.reflect.FieldUtils; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; + +import static org.apache.commons.beanutils.BeanUtils.setProperty; +import static org.apache.commons.lang.reflect.FieldUtils.*; public class VersionCmdImpl implements VersionCmd { @@ -35,6 +43,24 @@ public com.github.dockerjava.api.model.Version exec() { } com.github.dockerjava.api.model.Version dockerVersion = new com.github.dockerjava.api.model.Version(); + try { + writeField(dockerVersion, "goVersion", info.getGoVersion(), true); + writeField(dockerVersion, "version", info.getGitVersion(), true); + writeField(dockerVersion, "gitCommit", info.getGitCommit(), true); + writeField(dockerVersion, "buildTime", info.getBuildDate(), true); + + writeField(dockerVersion, "platform", new VersionPlatform().withName(info.getPlatform()), true); + writeField(dockerVersion, "operatingSystem", info.getPlatform().split("/")[0], true); + writeField(dockerVersion, "arch", info.getPlatform().split("/")[1], true); + + writeField(dockerVersion, "apiVersion", info.getMajor() + "." + info.getMinor(), true); + writeField(dockerVersion, "version", info.getMajor() + "." + info.getMinor(), true); + + writeField(dockerVersion, "experimental", Boolean.FALSE, true); + } catch (IllegalAccessException e) { + throw new RuntimeException("Unable to set bean field.", e); + } + return dockerVersion; } diff --git a/docker-java-bridge-k8s/src/test/java/com/github/dockerjava/k8s/command/VersionCmdImplTest.java b/docker-java-bridge-k8s/src/test/java/com/github/dockerjava/k8s/command/VersionCmdImplTest.java index b12ef82fcb..147257299b 100644 --- a/docker-java-bridge-k8s/src/test/java/com/github/dockerjava/k8s/command/VersionCmdImplTest.java +++ b/docker-java-bridge-k8s/src/test/java/com/github/dockerjava/k8s/command/VersionCmdImplTest.java @@ -10,19 +10,30 @@ import java.io.FileReader; import java.io.IOException; +import java.nio.file.Paths; -import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; @ExtendWith(MockitoExtension.class) class VersionCmdImplTest { @Test void execLocalKubeConfigClient() throws IOException { - String kubeConfigPath = System.getenv("HOME") + "/.kube/config"; + String kubeConfigPath = Paths.get(System.getProperty("user.home"), ".kube", "config").toString(); ApiClient client = ClientBuilder.kubeconfig(KubeConfig.loadKubeConfig(new FileReader(kubeConfigPath))).build(); VersionCmdImpl cmd = new VersionCmdImpl(client); Version version = cmd.exec(); - assertEquals(null, version.getGoVersion()); + + assertNotNull(version.getGoVersion()); + assertNotNull(version.getGitCommit()); + assertNotNull(version.getBuildTime()); + assertNotNull(version.getApiVersion()); + assertNotNull(version.getVersion()); + assertNotNull(version.getArch()); + assertNotNull(version.getOperatingSystem()); + assertNotNull(version.getPlatform()); + assertFalse(version.getExperimental()); } } From b359ed345d61f50522f26109cc32bee02d41685f Mon Sep 17 00:00:00 2001 From: "M.-Leander Reimer" Date: Thu, 28 Oct 2021 20:54:59 +0200 Subject: [PATCH 16/17] Added initial README to describe the solution architecture. --- docker-java-bridge-k8s/README.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 docker-java-bridge-k8s/README.md diff --git a/docker-java-bridge-k8s/README.md b/docker-java-bridge-k8s/README.md new file mode 100644 index 0000000000..a8f5526e1b --- /dev/null +++ b/docker-java-bridge-k8s/README.md @@ -0,0 +1,7 @@ +# Docker API to K8s Bridge + +This implementation of the Docker API tries to bridge all calls to K8s. For example, a CreateContainer command should roughly translate to +running a Pod in Kubernetes. The idea is kind of inspired by kubedock (https://github.com/joyrex2001/kubedock), a minimal implementation of +the Docker API to run containers in a K8s cluster. Also, we take some inspiration from BuildKit CLI for +Kubernetes (https://github.com/vmware-tanzu/buildkit-cli-for-kubectl). + From 5391ebc2210789849f52bc4a7940e99ebb41fc26 Mon Sep 17 00:00:00 2001 From: "M.-Leander Reimer" Date: Thu, 28 Oct 2021 21:06:38 +0200 Subject: [PATCH 17/17] Fixed compile and formatting issues. --- .../com/github/dockerjava/k8s/command/VersionCmdImpl.java | 7 +------ .../github/dockerjava/k8s/command/VersionCmdImplTest.java | 5 ----- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/docker-java-bridge-k8s/src/main/java/com/github/dockerjava/k8s/command/VersionCmdImpl.java b/docker-java-bridge-k8s/src/main/java/com/github/dockerjava/k8s/command/VersionCmdImpl.java index 9801f51caf..c327ed1846 100644 --- a/docker-java-bridge-k8s/src/main/java/com/github/dockerjava/k8s/command/VersionCmdImpl.java +++ b/docker-java-bridge-k8s/src/main/java/com/github/dockerjava/k8s/command/VersionCmdImpl.java @@ -7,19 +7,14 @@ import io.kubernetes.client.openapi.ApiException; import io.kubernetes.client.openapi.models.VersionInfo; import io.kubernetes.client.util.version.Version; -import org.apache.commons.beanutils.BeanUtils; -import org.apache.commons.beanutils.PropertyUtils; -import org.apache.commons.lang.reflect.FieldUtils; import org.apache.commons.lang3.builder.ToStringBuilder; import org.apache.commons.lang3.builder.ToStringStyle; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import static org.apache.commons.beanutils.BeanUtils.setProperty; -import static org.apache.commons.lang.reflect.FieldUtils.*; +import static org.apache.commons.lang.reflect.FieldUtils.writeField; public class VersionCmdImpl implements VersionCmd { diff --git a/docker-java-bridge-k8s/src/test/java/com/github/dockerjava/k8s/command/VersionCmdImplTest.java b/docker-java-bridge-k8s/src/test/java/com/github/dockerjava/k8s/command/VersionCmdImplTest.java index 4507da4a05..ce37e9ac12 100644 --- a/docker-java-bridge-k8s/src/test/java/com/github/dockerjava/k8s/command/VersionCmdImplTest.java +++ b/docker-java-bridge-k8s/src/test/java/com/github/dockerjava/k8s/command/VersionCmdImplTest.java @@ -4,7 +4,6 @@ import io.kubernetes.client.openapi.ApiClient; import io.kubernetes.client.util.ClientBuilder; import io.kubernetes.client.util.KubeConfig; -import java.io.File; import java.io.FileReader; import java.io.IOException; import java.nio.file.Paths; @@ -12,10 +11,6 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.junit.jupiter.MockitoExtension; -import java.io.FileReader; -import java.io.IOException; -import java.nio.file.Paths; - import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull;