package org.jenkinsci.plugins.dockerbuildstep.cmd;
import hudson.Extension;
import hudson.model.AbstractBuild;
import java.util.List;
import org.jenkinsci.plugins.dockerbuildstep.log.ConsoleLogger;
import org.jenkinsci.plugins.dockerbuildstep.util.Resolver;
import org.kohsuke.stapler.DataBoundConstructor;
import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.exception.DockerException;
import com.github.dockerjava.api.model.Container;
/**
* This command stops all containers create from specified image ID.
*
* @author vjuranek
*
*/
public class StopByImageIdCommand extends DockerCommand {
private final String imageId;
@DataBoundConstructor
public StopByImageIdCommand(String imageId) {
this.imageId = imageId;
}
public String getImageId() {
return imageId;
}
@Override
public void execute(@SuppressWarnings("rawtypes") AbstractBuild build, ConsoleLogger console)
throws DockerException {
if (imageId == null || imageId.isEmpty()) {
throw new IllegalArgumentException("At least one parameter is required");
}
String imageIdRes = Resolver.buildVar(build, imageId);
DockerClient client = getClient(build, null);
List<Container> containers = client.listContainersCmd().exec();
for (Container c : containers) {
if (imageIdRes.equalsIgnoreCase(c.getImage())) {
client.stopContainerCmd(c.getId()).exec();
console.logInfo("stop container id " + c.getId());
}
}
}
@Extension
public static class StopByImageCommandDescriptor extends DockerCommandDescriptor {
@Override
public String getDisplayName() {
return "Stop container(s) by image ID";
}
}
}