You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@taverna.apache.org by al...@apache.org on 2016/07/29 12:55:58 UTC
[06/10] incubator-taverna-common-activities git commit: Start
container support.
Start container support.
Project: http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/commit/d89c61b3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/tree/d89c61b3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/diff/d89c61b3
Branch: refs/heads/docker
Commit: d89c61b3b3b81d07336c888bb60b9873b450b411
Parents: f8dc664
Author: Nadeesh Dilanga <na...@gmail.com>
Authored: Mon Jul 11 00:53:41 2016 -0400
Committer: Nadeesh Dilanga <na...@gmail.com>
Committed: Mon Jul 11 00:53:41 2016 -0400
----------------------------------------------------------------------
.../activities/docker/DockerActivity.java | 15 ++++++---
.../docker/DockerContainerConfiguration.java | 11 ++++--
.../DockerContainerConfigurationImpl.java | 35 ++++++++++++++------
.../taverna/activities/docker/RemoteClient.java | 19 ++++++++---
.../docker/test/DockerActivityTest.java | 30 ++++++++++++-----
5 files changed, 80 insertions(+), 30 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/d89c61b3/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/DockerActivity.java
----------------------------------------------------------------------
diff --git a/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/DockerActivity.java b/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/DockerActivity.java
index 1a42ac0..a80e02a 100644
--- a/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/DockerActivity.java
+++ b/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/DockerActivity.java
@@ -61,9 +61,9 @@ public class DockerActivity extends AbstractAsynchronousActivity<JsonNode> {
public static final String LIST_CONTAINERS = "list-containers";
- public static final String OUT_CONTAINER_ID = "container-id";
+ public static final String CONTAINER_ID = "container-id";
- public static final String OUT_IMAGE_ID = "container-id";
+ public static final String OUT_IMAGE_ID = "image-id";
public static final String OUT_IMAGE_AUTHOR = "image-author";
@@ -71,6 +71,8 @@ public class DockerActivity extends AbstractAsynchronousActivity<JsonNode> {
public static final String IN_IMAGE_NAME = "image-name";
+ public static final String IN_CONTAINER_START_CMD = "cnt-start-cmd";
+
public static final String RESPONSE_BODY_KEY = "response_body";
private static Logger LOG = Logger.getLogger(DockerActivity.class);
@@ -111,7 +113,7 @@ public class DockerActivity extends AbstractAsynchronousActivity<JsonNode> {
outJson = factory.objectNode();
CreateContainerResponse response = remoteClient.createContainer();
- ((ObjectNode)outJson).put(OUT_CONTAINER_ID, response.getId());
+ ((ObjectNode)outJson).put(CONTAINER_ID, response.getId());
} else if (INSPECT.equalsIgnoreCase(action)) {
@@ -131,7 +133,12 @@ public class DockerActivity extends AbstractAsynchronousActivity<JsonNode> {
}
} else if (START_CONTAINER.equalsIgnoreCase(action)) {
- //TODO
+
+ String id = getRenderedParam(referenceService, context, map.get(CONTAINER_ID));
+ remoteClient.startContainer(id);
+ outJson = factory.objectNode();
+ ((ObjectNode)outJson).put("started", id);
+
} else if (STOP_CONTAINER.equalsIgnoreCase(action)) {
// TODO
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/d89c61b3/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/DockerContainerConfiguration.java
----------------------------------------------------------------------
diff --git a/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/DockerContainerConfiguration.java b/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/DockerContainerConfiguration.java
index 77e5204..9ec6186 100644
--- a/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/DockerContainerConfiguration.java
+++ b/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/DockerContainerConfiguration.java
@@ -18,16 +18,23 @@
*/
package org.apache.taverna.activities.docker;
+import com.github.dockerjava.api.model.ExposedPort;
+import com.github.dockerjava.api.model.Ports;
+
public interface DockerContainerConfiguration {
public String getName();
public String getImage();
- public String getCmd();
+ public String[] getCmd();
public DockerRemoteConfig getDockerRemoteConfig();
- //TODO add all remaining getters
+ public ExposedPort[] getExposedPorts();
+
+ public Ports.Binding[] getBindings();
+
+ //TODO add all remaining getters
}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/d89c61b3/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/DockerContainerConfigurationImpl.java
----------------------------------------------------------------------
diff --git a/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/DockerContainerConfigurationImpl.java b/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/DockerContainerConfigurationImpl.java
index dc335ff..5a2fe52 100644
--- a/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/DockerContainerConfigurationImpl.java
+++ b/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/DockerContainerConfigurationImpl.java
@@ -27,12 +27,9 @@ import org.apache.taverna.configuration.Configurable;
import org.apache.taverna.configuration.ConfigurationManager;
import java.io.IOException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
-public class DockerContainerConfigurationImpl extends AbstractConfigurable implements DockerContainerConfiguration{
+public class DockerContainerConfigurationImpl extends AbstractConfigurable implements DockerContainerConfiguration{
/**
* String Values
@@ -84,6 +81,8 @@ public class DockerContainerConfigurationImpl extends AbstractConfigurable impl
public static final String CMD = "cmd";
+ public static final String CMD_DELIMITER = ",";
+
public static final String ENTRY_POINT = "entrypoint";
/**
@@ -217,8 +216,8 @@ public class DockerContainerConfigurationImpl extends AbstractConfigurable impl
return ENV;
}
- public String getCmd() {
- return this.getInternalPropertyMap().get(CMD);
+ public String[] getCmd() {
+ return this.getInternalPropertyMap().get(CMD).split(CMD_DELIMITER);
}
public String getEntryPoint() {
@@ -229,16 +228,30 @@ public class DockerContainerConfigurationImpl extends AbstractConfigurable impl
return VOLUMES;
}
- public String getBindings() {
- return BINDINGS;
+ public Ports.Binding[] getBindings() {
+ String bindingsStr = this.getInternalPropertyMap().get(BINDINGS);
+ List<Ports.Binding> bindingList = new ArrayList<Ports.Binding>();
+ if(bindingsStr != null) {
+ for(String bind : bindingsStr.split(",")){
+ bindingList.add(Ports.Binding.bindPort(Integer.valueOf(bind)));
+ }
+ }
+ return bindingList.toArray(new Ports.Binding[0]);
}
public String getAliases() {
return ALIASES;
}
- public String getExposedPorts() {
- return EXPOSED_PORTS;
+ public ExposedPort[] getExposedPorts() {
+ String exposedPortStr = this.getInternalPropertyMap().get(EXPOSED_PORTS);
+ List<ExposedPort> exposedPortList = new ArrayList<ExposedPort>();
+ if(exposedPortStr != null){
+ for(String portStr: exposedPortStr.split(",")){
+ exposedPortList.add(ExposedPort.tcp(Integer.valueOf(portStr)));
+ }
+ }
+ return exposedPortList.toArray(new ExposedPort[0]);
}
public String getLabels() {
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/d89c61b3/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/RemoteClient.java
----------------------------------------------------------------------
diff --git a/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/RemoteClient.java b/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/RemoteClient.java
index 2f1d4c3..aeabc58 100644
--- a/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/RemoteClient.java
+++ b/taverna-docker-activity/src/main/java/org/apache/taverna/activities/docker/RemoteClient.java
@@ -23,9 +23,7 @@ import com.github.dockerjava.api.DockerClient;
import com.github.dockerjava.api.command.CreateContainerCmd;
import com.github.dockerjava.api.command.CreateContainerResponse;
import com.github.dockerjava.api.command.InspectImageResponse;
-import com.github.dockerjava.api.model.Container;
-import com.github.dockerjava.api.model.Info;
-import com.github.dockerjava.api.model.SearchItem;
+import com.github.dockerjava.api.model.*;
import com.github.dockerjava.core.DockerClientBuilder;
import com.github.dockerjava.core.DockerClientConfig;
import org.apache.log4j.Logger;
@@ -102,8 +100,8 @@ public class RemoteClient {
/**
* @param containerId To be start
*/
- public void startContainer(String containerId){
- dockerClient.startContainerCmd(containerId).exec();
+ public Void startContainer( String containerId){
+ return dockerClient.startContainerCmd(containerId).exec();
}
/**
@@ -121,10 +119,21 @@ public class RemoteClient {
return dockerClient.searchImagesCmd(term).exec();
}
+
+ public void deleteContainer(String id){
+ dockerClient.removeContainerCmd(id).exec();
+ }
+
private CreateContainerCmd buildCreateContainerCmd(){
CreateContainerCmd createCmd = dockerClient.createContainerCmd(containerConfig.getImage());
createCmd.withCmd(containerConfig.getCmd());
createCmd.withName(containerConfig.getName());
+ Ports portBindings = new Ports();
+ for(int i=0; i< containerConfig.getBindings().length; i++){
+ portBindings.bind(containerConfig.getExposedPorts()[i], containerConfig.getBindings()[i]);
+ }
+ createCmd.withExposedPorts(containerConfig.getExposedPorts());
+ createCmd.withPortBindings(portBindings);
return createCmd;
}
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/d89c61b3/taverna-docker-activity/src/test/java/org/apache/taverna/activities/docker/test/DockerActivityTest.java
----------------------------------------------------------------------
diff --git a/taverna-docker-activity/src/test/java/org/apache/taverna/activities/docker/test/DockerActivityTest.java b/taverna-docker-activity/src/test/java/org/apache/taverna/activities/docker/test/DockerActivityTest.java
index 657576a..89af8bd 100755
--- a/taverna-docker-activity/src/test/java/org/apache/taverna/activities/docker/test/DockerActivityTest.java
+++ b/taverna-docker-activity/src/test/java/org/apache/taverna/activities/docker/test/DockerActivityTest.java
@@ -47,20 +47,16 @@ public class DockerActivityTest {
private ObjectNode activityConfiguration;
private DockerContainerConfigurationImpl containerConfiguration;
-
-
- public static void main(String[] args) throws Exception {
- DockerActivityTest test = new DockerActivityTest();
- test.setup();
- test.testListContainers();
- }
+
@Before
public void setup() throws Exception {
activityConfiguration = JsonNodeFactory.instance.objectNode();
containerConfiguration = new DockerContainerConfigurationImpl(new TestConfigurationManager());
- containerConfiguration.getInternalPropertyMap().put(DockerContainerConfigurationImpl.CMD,"env");
+ containerConfiguration.getInternalPropertyMap().put(DockerContainerConfigurationImpl.CMD,"python,app.py");
+ containerConfiguration.getInternalPropertyMap().put(DockerContainerConfigurationImpl.EXPOSED_PORTS, "5000");
+ containerConfiguration.getInternalPropertyMap().put(DockerContainerConfigurationImpl.BINDINGS, "32772");
DockerRemoteConfig remoteConfig = new DockerRemoteConfig();
remoteConfig.setDockerHost("tcp://192.168.99.100:2376");
@@ -146,6 +142,24 @@ public class DockerActivityTest {
Assert.assertNotNull(outputs.get(DockerActivity.RESPONSE_BODY_KEY));
}
+ @Test
+ public void testStartContainer() throws Exception {
+ String id = "9e7a5252c1a948149c4e0ca6b4ef7945c9ef11b27cfa251b37abc7d43391680d";
+ DockerActivity activity = new DockerActivity(containerConfiguration);
+ activity.configure(activityConfiguration);
+ Map<String,Object> inputs = new HashMap<String,Object>();
+ inputs.put(DockerActivity.ACTION, DockerActivity.START_CONTAINER);
+ inputs.put(DockerActivity.CONTAINER_ID, id);
+ inputs.put(DockerActivity.IN_CONTAINER_START_CMD, "python app.py");
+
+ Map<String, Class<?>> expectedOutputs = new HashMap<String, Class<?>>();
+ expectedOutputs.put(DockerActivity.RESPONSE_BODY_KEY, String.class);
+
+ Map<String,Object> outputs = ActivityInvoker.invokeAsyncActivity(activity, inputs, expectedOutputs);
+ System.out.println(outputs.get(DockerActivity.RESPONSE_BODY_KEY));
+ Assert.assertNotNull(outputs.get(DockerActivity.RESPONSE_BODY_KEY));
+ }
+
private Container getContainerFromName(List<Container> list, String name){
for(Container container:list){
if(container.getNames()[0].endsWith(name)){