Skip to content
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.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions src/main/java/com/github/dockerjava/api/DockerClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
import com.github.dockerjava.api.command.UpdateContainerCmd;
import com.github.dockerjava.api.command.VersionCmd;
import com.github.dockerjava.api.command.WaitContainerCmd;
import com.github.dockerjava.api.command.RenameContainerCmd;
import com.github.dockerjava.api.exception.DockerException;
import com.github.dockerjava.api.model.AuthConfig;
import com.github.dockerjava.api.model.Identifier;
Expand Down Expand Up @@ -185,6 +186,15 @@ public interface DockerClient extends Closeable {
*/
UpdateContainerCmd updateContainerCmd(@Nonnull String containerId);

/**
* Rename container.
*
* @param containerId id of the container
* @return command
* @since {@link RemoteApiVersion#VERSION_1_17}
*/
RenameContainerCmd renameContainerCmd(@Nonnull String containerId);

RestartContainerCmd restartContainerCmd(@Nonnull String containerId);

CommitCmd commitCmd(@Nonnull String containerId);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import javax.net.ssl.SSLContext;

import com.github.dockerjava.core.DockerClientConfig;
import com.github.dockerjava.core.RemoteApiVersion;

public interface DockerCmdExecFactory extends Closeable {

Expand Down Expand Up @@ -71,6 +72,13 @@ public interface DockerCmdExecFactory extends Closeable {

UpdateContainerCmd.Exec createUpdateContainerCmdExec();

/**
* Rename container.
*
* @since {@link RemoteApiVersion#VERSION_1_17}
*/
RenameContainerCmd.Exec createRenameContainerCmdExec();

RestartContainerCmd.Exec createRestartContainerCmdExec();

CommitCmd.Exec createCommitCmdExec();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package com.github.dockerjava.api.command;

import com.github.dockerjava.api.exception.NotFoundException;
import com.github.dockerjava.core.RemoteApiVersion;

import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;

/**
* Rename a container.
*
* @since {@link RemoteApiVersion#VERSION_1_17}
*/
public interface RenameContainerCmd extends SyncDockerCmd<Void> {

@CheckForNull
String getContainerId();

RenameContainerCmd withContainerId(@Nonnull String containerId);

@CheckForNull
String getName();

RenameContainerCmd withName(@Nonnull String name);

/**
* @throws NotFoundException No such container
*/
@Override
Void exec() throws NotFoundException;

interface Exec extends DockerCmdSyncExec<RenameContainerCmd, Void> {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@
import com.github.dockerjava.api.command.UpdateContainerCmd;
import com.github.dockerjava.api.command.VersionCmd;
import com.github.dockerjava.api.command.WaitContainerCmd;
import com.github.dockerjava.api.command.RenameContainerCmd;
import com.github.dockerjava.api.model.AuthConfig;
import com.github.dockerjava.api.model.Identifier;
import com.github.dockerjava.core.command.AttachContainerCmdImpl;
Expand Down Expand Up @@ -109,6 +110,7 @@
import com.github.dockerjava.core.command.UpdateContainerCmdImpl;
import com.github.dockerjava.core.command.VersionCmdImpl;
import com.github.dockerjava.core.command.WaitContainerCmdImpl;
import com.github.dockerjava.core.command.RenameContainerCmdImpl;

import javax.annotation.Nonnull;

Expand Down Expand Up @@ -364,6 +366,11 @@ public UpdateContainerCmd updateContainerCmd(@Nonnull String containerId) {
return new UpdateContainerCmdImpl(getDockerCmdExecFactory().createUpdateContainerCmdExec(), containerId);
}

@Override
public RenameContainerCmd renameContainerCmd(@Nonnull String containerId) {
return new RenameContainerCmdImpl(getDockerCmdExecFactory().createRenameContainerCmdExec(), containerId);
}

@Override
public RestartContainerCmd restartContainerCmd(String containerId) {
return new RestartContainerCmdImpl(getDockerCmdExecFactory().createRestartContainerCmdExec(), containerId);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package com.github.dockerjava.core.command;

import com.github.dockerjava.api.command.RenameContainerCmd;
import com.github.dockerjava.api.exception.NotFoundException;

import javax.annotation.Nonnull;

import static com.google.common.base.Preconditions.checkNotNull;

public class RenameContainerCmdImpl extends AbstrDockerCmd<RenameContainerCmd, Void> implements RenameContainerCmd {

private String containerId;

private String name;

public RenameContainerCmdImpl(RenameContainerCmd.Exec exec, String containerId) {
super(exec);
withContainerId(containerId);
}

@Override
public String getContainerId() {
return containerId;
}

@Override
public String getName() {
return name;
}

@Override
public RenameContainerCmd withContainerId(@Nonnull String containerId) {
checkNotNull(containerId, "containerId was not specified");
this.containerId = containerId;
return this;
}

@Override
public RenameContainerCmd withName(@Nonnull String name) {
checkNotNull(name, "name was not specified");
this.name = name;
return this;
}

/**
* @throws NotFoundException No such container
*/
@Override
public Void exec() throws NotFoundException {
return super.exec();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@
import com.github.dockerjava.api.command.UnpauseContainerCmd;
import com.github.dockerjava.api.command.VersionCmd;
import com.github.dockerjava.api.command.WaitContainerCmd;
import com.github.dockerjava.api.command.RenameContainerCmd;
import com.github.dockerjava.api.exception.DockerClientException;
import com.github.dockerjava.core.DockerClientConfig;
import com.github.dockerjava.core.LocalDirectorySSLConfig;
Expand Down Expand Up @@ -417,6 +418,11 @@ public UpdateContainerCmd.Exec createUpdateContainerCmdExec() {
return new UpdateContainerCmdExec(getBaseResource(), getDockerClientConfig());
}

@Override
public RenameContainerCmd.Exec createRenameContainerCmdExec() {
return new RenameContainerCmdExec(getBaseResource(), getDockerClientConfig());
}

@Override
public RestartContainerCmd.Exec createRestartContainerCmdExec() {
return new RestartContainerCmdExec(getBaseResource(), getDockerClientConfig());
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.github.dockerjava.jaxrs;

import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;

import com.github.dockerjava.api.command.RenameContainerCmd;
import com.github.dockerjava.core.DockerClientConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class RenameContainerCmdExec extends AbstrSyncDockerCmdExec<RenameContainerCmd, Void>
implements RenameContainerCmd.Exec {
private static final Logger LOG = LoggerFactory.getLogger(RenameContainerCmdExec.class);

public RenameContainerCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) {
super(baseResource, dockerClientConfig);
}

@Override
protected Void execute(RenameContainerCmd command) {
WebTarget webResource = getBaseResource().path("/containers/{id}/rename")
.resolveTemplate("id", command.getContainerId())
.queryParam("name", command.getName());

LOG.trace("POST: {}", webResource);
webResource.request().accept(MediaType.APPLICATION_JSON).post(null);

return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
import com.github.dockerjava.api.command.UpdateContainerCmd;
import com.github.dockerjava.api.command.VersionCmd;
import com.github.dockerjava.api.command.WaitContainerCmd;
import com.github.dockerjava.api.command.RenameContainerCmd;
import com.github.dockerjava.core.DockerClientConfig;
import com.github.dockerjava.core.DockerClientImpl;
import com.github.dockerjava.core.LocalDirectorySSLConfig;
Expand Down Expand Up @@ -102,6 +103,7 @@
import com.github.dockerjava.netty.exec.UpdateContainerCmdExec;
import com.github.dockerjava.netty.exec.VersionCmdExec;
import com.github.dockerjava.netty.exec.WaitContainerCmdExec;
import com.github.dockerjava.netty.exec.RenameContainerCmdExec;

import io.netty.bootstrap.Bootstrap;
import io.netty.channel.ChannelInitializer;
Expand Down Expand Up @@ -465,6 +467,11 @@ public UpdateContainerCmd.Exec createUpdateContainerCmdExec() {
return new UpdateContainerCmdExec(getBaseResource(), getDockerClientConfig());
}

@Override
public RenameContainerCmd.Exec createRenameContainerCmdExec() {
return new RenameContainerCmdExec(getBaseResource(), getDockerClientConfig());
}

@Override
public RestartContainerCmd.Exec createRestartContainerCmdExec() {
return new RestartContainerCmdExec(getBaseResource(), getDockerClientConfig());
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.github.dockerjava.netty.exec;

import com.github.dockerjava.api.command.RenameContainerCmd;
import com.github.dockerjava.core.DockerClientConfig;
import com.github.dockerjava.netty.MediaType;
import com.github.dockerjava.netty.WebTarget;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class RenameContainerCmdExec extends AbstrSyncDockerCmdExec<RenameContainerCmd, Void>
implements RenameContainerCmd.Exec {
private static final Logger LOG = LoggerFactory.getLogger(RenameContainerCmdExec.class);

public RenameContainerCmdExec(WebTarget baseResource, DockerClientConfig dockerClientConfig) {
super(baseResource, dockerClientConfig);
}

@Override
protected Void execute(RenameContainerCmd command) {
WebTarget webResource = getBaseResource().path("/containers/{id}/rename")
.resolveTemplate("id", command.getContainerId())
.queryParam("name", command.getName());

LOG.trace("POST: {}", webResource);
webResource.request().accept(MediaType.APPLICATION_JSON).post(null);

return null;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -240,6 +240,11 @@ public UpdateContainerCmd.Exec createUpdateContainerCmdExec() {
return delegate.createUpdateContainerCmdExec();
}

@Override
public RenameContainerCmd.Exec createRenameContainerCmdExec(){
return delegate.createRenameContainerCmdExec();
}

@Override
public RestartContainerCmd.Exec createRestartContainerCmdExec() {
return delegate.createRestartContainerCmdExec();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
package com.github.dockerjava.core.command;

import com.github.dockerjava.api.command.CreateContainerResponse;
import com.github.dockerjava.api.command.InspectContainerResponse;
import com.github.dockerjava.api.exception.DockerException;
import com.github.dockerjava.api.exception.NotFoundException;
import com.github.dockerjava.client.AbstractDockerClientTest;
import org.testng.ITestResult;
import org.testng.annotations.*;

import java.lang.reflect.Method;

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;

@Test(groups = "integration")
public class RenameContainerCmdImplTest extends AbstractDockerClientTest {
@BeforeTest
public void beforeTest() throws Exception {
super.beforeTest();
}

@AfterTest
public void afterTest() {
super.afterTest();
}

@BeforeMethod
public void beforeMethod(Method method) {
super.beforeMethod(method);
}

@AfterMethod
public void afterMethod(ITestResult result) {
super.afterMethod(result);
}

@Test
public void renameContainer() throws DockerException {

CreateContainerResponse container = dockerClient.createContainerCmd("busybox").withCmd("sleep", "9999").exec();
LOG.info("Created container: {}", container.toString());
assertThat(container.getId(), not(isEmptyString()));
dockerClient.startContainerCmd(container.getId()).exec();

InspectContainerResponse inspectContainerResponse = dockerClient.inspectContainerCmd(container.getId()).exec();
LOG.info("Container Inspect: {}", inspectContainerResponse.toString());

String name1 = inspectContainerResponse.getName();

dockerClient.renameContainerCmd(container.getId())
.withName(getClass().getCanonicalName() + "renameContainer")
.exec();

InspectContainerResponse inspectContainerResponse2 = dockerClient.inspectContainerCmd(container.getId()).exec();
LOG.info("Container Inspect After Rename: {}", inspectContainerResponse2.toString());

String name2 = inspectContainerResponse2.getName();

assertNotEquals(name1, name2);

dockerClient.killContainerCmd(container.getId()).exec();
}

@Test(expectedExceptions = NotFoundException.class)
public void renameExistingContainer() throws DockerException, InterruptedException {
dockerClient.renameContainerCmd("non-existing")
.withName(getClass().getCanonicalName() + "renameExistingContainer")
.exec();
}
}
Loading