container stop, delete feature.

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/c46c9b5a
Tree: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/tree/c46c9b5a
Diff: 
http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/diff/c46c9b5a

Branch: refs/heads/docker
Commit: c46c9b5a1260a2a2af9f117ffb82729857b9c270
Parents: 7f1c728
Author: Nadeesh Dilanga <[email protected]>
Authored: Sun Jul 17 16:47:19 2016 -0400
Committer: Nadeesh Dilanga <[email protected]>
Committed: Sun Jul 17 16:47:19 2016 -0400

----------------------------------------------------------------------
 .../activities/docker/DockerActivity.java       | 61 +++++++++++++++++--
 .../docker/test/DockerActivityTest.java         | 63 ++++++++++++++++----
 2 files changed, 108 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/c46c9b5a/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 a80e02a..4ac2acf 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
@@ -57,12 +57,16 @@ public class DockerActivity extends 
AbstractAsynchronousActivity<JsonNode> {
 
     public static final String START_CONTAINER = "start-container";
 
+    public static final String DELETE_CONTAINER = "delete-container";
+
     public static final String STOP_CONTAINER = "stop-container";
 
     public static final String LIST_CONTAINERS = "list-containers";
 
     public static final String CONTAINER_ID = "container-id";
 
+    public static final String CONTAINER_NAME = "container-name";
+
     public static final String OUT_IMAGE_ID = "image-id";
 
     public static final String OUT_IMAGE_AUTHOR = "image-author";
@@ -134,14 +138,42 @@ public class DockerActivity extends 
AbstractAsynchronousActivity<JsonNode> {
 
                 } else if (START_CONTAINER.equalsIgnoreCase(action)) {
 
-                    String id = getRenderedParam(referenceService, context, 
map.get(CONTAINER_ID));
-                    remoteClient.startContainer(id);
-                    outJson = factory.objectNode();
-                    ((ObjectNode)outJson).put("started", id);
+                    String name = getRenderedParam(referenceService, context, 
map.get(CONTAINER_NAME));
+                    Container container = getContainerFromName(remoteClient, 
name);
+                    if(!isStarted(container)) {
+                        remoteClient.startContainer(container.getId());
+                        outJson = factory.objectNode();
+                        ((ObjectNode) outJson).put("started", 
container.getId());
+                    } else {
+                        outJson = factory.objectNode();
+                        ((ObjectNode) outJson).put("already-started", 
container.getId());
+                    }
 
                 } else if (STOP_CONTAINER.equalsIgnoreCase(action)) {
 
-                    // TODO
+                    String name = getRenderedParam(referenceService, context, 
map.get(CONTAINER_NAME));
+                    Container container = getContainerFromName(remoteClient, 
name);
+                    if(isStarted(container)) {
+                        remoteClient.stopContainer(container.getId());
+                        outJson = factory.objectNode();
+                        ((ObjectNode) outJson).put("stopped", 
container.getId());
+                    } else {
+                        outJson = factory.objectNode();
+                        ((ObjectNode) outJson).put("already-stopped", 
container.getId());
+                    }
+
+                } else if (DELETE_CONTAINER.equalsIgnoreCase(action)) {
+
+                    String name = getRenderedParam(referenceService, context, 
map.get(CONTAINER_NAME));
+                    Container container = getContainerFromName(remoteClient, 
name);
+                    if(container != null) {
+                        remoteClient.deleteContainer(container.getId());
+                        outJson = factory.objectNode();
+                        ((ObjectNode) outJson).put("deleted", 
container.getId());
+                    } else {
+                        outJson = factory.objectNode();
+                        ((ObjectNode) outJson).put("container-not-found", 
name);
+                    }
 
                 } else {
                     // Creates empty node
@@ -172,4 +204,23 @@ public class DockerActivity extends 
AbstractAsynchronousActivity<JsonNode> {
         out.put("network-mode",container.getHostConfig().getNetworkMode());
     return out;
     }
+
+    private boolean isStarted(Container container){
+        return  container.getStatus() != null
+                && container.getStatus().startsWith("Up");
+    }
+
+    private Container getContainerFromName(RemoteClient remoteClient, String 
containerName){
+        List<Container> containerList = remoteClient.listContainers();
+        for(Container container : containerList){
+            if(container.getNames().length > 0){
+                for(String name : container.getNames()){
+                    if(name.endsWith(containerName)){
+                        return container;
+                    }
+                }
+            }
+        }
+    return null;
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-taverna-common-activities/blob/c46c9b5a/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 79f5d48..751c247 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
@@ -51,7 +51,11 @@ public class DockerActivityTest {
 
     public static final String DOCKER_REGISTRY = 
"https://registry-1.docker.io/v2";;
 
-
+    public static void main(String[] args) throws Exception {
+    DockerActivityTest activityTest = new DockerActivityTest();
+        activityTest.setup();
+        activityTest.testAll();
+    }
 
     @Before
        public void setup() throws Exception {
@@ -75,12 +79,20 @@ public class DockerActivityTest {
 
     }
 
+    @Test
+    public void testAll() throws Exception {
+//        testCreateContainer();
+        testInspectImage();
+//        testListContainers();
+//        testStartContainer();
+//        testStopContainer();
+//        testDeleteContainer();
+    }
 
-       /**
-        * Tests a simple script (String output = input + "_returned") to 
ensure the script is invoked correctly.
-        * @throws Exception
-        */
-       @Test
+    /**
+     * Tests a simple script (String output = input + "_returned") to ensure 
the script is invoked correctly.
+     * @throws Exception
+     */
        public void testInspectImage() throws Exception {
         
containerConfiguration.getInternalPropertyMap().put(DockerContainerConfiguration.IMAGE,IMAGE_NAME);
         DockerActivity activity = new DockerActivity(containerConfiguration);
@@ -102,7 +114,6 @@ public class DockerActivityTest {
      * Creates container with a given container configuration
      * @throws Exception
      */
-    @Test
     public void testCreateContainer() throws Exception {
         RemoteClient remoteClient = new RemoteClient(containerConfiguration);
         Container container = 
getContainerFromName(remoteClient.listContainers(), CONTAINER_NAME);
@@ -133,7 +144,6 @@ public class DockerActivityTest {
 
     }
 
-    @Test
     public void testListContainers() throws Exception {
         DockerActivity activity = new DockerActivity(containerConfiguration);
         activity.configure(activityConfiguration);
@@ -149,14 +159,45 @@ 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.CONTAINER_NAME, CONTAINER_NAME);
+        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));
+    }
+
+    public void testStopContainer() throws Exception {
+        DockerActivity activity = new DockerActivity(containerConfiguration);
+        activity.configure(activityConfiguration);
+        Map<String,Object> inputs = new HashMap<String,Object>();
+        inputs.put(DockerActivity.ACTION, DockerActivity.STOP_CONTAINER);
+        inputs.put(DockerActivity.CONTAINER_NAME, CONTAINER_NAME);
+        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));
+    }
+
+
+    public void testDeleteContainer() throws Exception {
+        DockerActivity activity = new DockerActivity(containerConfiguration);
+        activity.configure(activityConfiguration);
+        Map<String,Object> inputs = new HashMap<String,Object>();
+        inputs.put(DockerActivity.ACTION, DockerActivity.DELETE_CONTAINER);
+        inputs.put(DockerActivity.CONTAINER_NAME, CONTAINER_NAME);
         inputs.put(DockerActivity.IN_CONTAINER_START_CMD, "python app.py");
 
         Map<String, Class<?>> expectedOutputs = new HashMap<String, 
Class<?>>();

Reply via email to