package com.sequenceiq.cloudbreak.orchestrator.swarm.containers;
import static com.sequenceiq.cloudbreak.orchestrator.container.DockerContainer.MUNCHAUSEN;
import static com.sequenceiq.cloudbreak.orchestrator.swarm.DockerClientUtil.createContainer;
import static com.sequenceiq.cloudbreak.orchestrator.swarm.DockerClientUtil.startContainer;
import java.util.Arrays;
import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.model.Bind;
import com.sequenceiq.cloudbreak.orchestrator.OrchestratorBootstrap;
import com.sequenceiq.cloudbreak.orchestrator.swarm.builder.BindsBuilder;
public class MunchausenBootstrap implements OrchestratorBootstrap {
private static final Logger LOGGER = LoggerFactory.getLogger(MunchausenBootstrap.class);
private final DockerClient docker;
private final String[] cmd;
private final String containerName;
public MunchausenBootstrap(DockerClient docker, String containerName, String[] cmd) {
this.docker = docker;
this.cmd = cmd;
this.containerName = containerName;
}
@Override
public Boolean call() throws Exception {
Bind[] binds = new BindsBuilder()
.addDockerSocket().build();
String name = MUNCHAUSEN.getName() + new Date().getTime();
createContainer(docker, docker.createContainerCmd(containerName)
.withName(name)
.withPrivileged(true)
.withBinds(binds)
.withCmd(cmd), name);
startContainer(docker, name);
LOGGER.info("Munchausen bootstrap container started.");
return true;
}
@Override
public String toString() {
final StringBuilder sb = new StringBuilder("MunchausenBootstrap{");
sb.append("docker=").append(docker);
sb.append(", cmd=").append(Arrays.toString(cmd));
sb.append(", containerName='").append(containerName).append('\'');
sb.append('}');
return sb.toString();
}
}