You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by iu...@apache.org on 2022/07/04 08:30:57 UTC

[brooklyn-server] branch master updated: Renamed all classes and refereces from Docker to Container

This is an automated email from the ASF dual-hosted git repository.

iuliana pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git


The following commit(s) were added to refs/heads/master by this push:
     new 043134aae8 Renamed all classes and refereces from Docker to Container
     new eda99f4b25 Merge pull request #1330 from iuliana/feature/docker-container
043134aae8 is described below

commit 043134aae8e82a0c16cd1f3a80cddd1aa73c09ad
Author: iuliana <iu...@cloudsoft.io>
AuthorDate: Fri Jul 1 17:54:12 2022 +0100

    Renamed all classes and refereces from Docker to Container
---
 software/base/README.adoc                          |  2 +-
 ...{DockerEffector.java => ContainerEffector.java} | 16 +++----
 .../{DockerSensor.java => ContainerSensor.java}    | 14 +++---
 .../tasks/kubectl/ContainerTaskFactory.java        |  4 +-
 software/base/src/main/resources/catalog.bom       | 12 ++---
 ...ffectorTest.java => ContainerEffectorTest.java} | 18 ++++----
 ...kerSensorTest.java => ContainerSensorTest.java} | 32 +++++++-------
 ...{DockerTaskTest.java => ContainerTaskTest.java} | 51 ++++++++++++++++------
 .../org/apache/brooklyn/kubectl/sample-both.yaml   |  8 ++--
 .../brooklyn/kubectl/sample-effector-dev.yaml      |  6 +--
 .../apache/brooklyn/kubectl/sample-effector.yaml   |  6 +--
 .../org/apache/brooklyn/kubectl/sample-sensor.yaml |  2 +-
 12 files changed, 98 insertions(+), 73 deletions(-)

diff --git a/software/base/README.adoc b/software/base/README.adoc
index e4c7541c59..d55dee39bd 100644
--- a/software/base/README.adoc
+++ b/software/base/README.adoc
@@ -23,7 +23,7 @@ This project contains useful software types for building applications.
 
 == Kubectl components
 
-The `org.apache.brooklyn.tasks.kubectl` package contains types `DockerSensor` and `DockerEffector` that can be used to 
+The `org.apache.brooklyn.tasks.kubectl` package contains types `ContainerSensor` and `ContainerEffector` that can be used to
 declare simple actions to be executed on a container managed by a kubernetes cluster. To use them you have to make sure
 the location where the app was deployed has `kubectl` installed and configured to use local or remote Kubernetes cluster. 
 
diff --git a/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/DockerEffector.java b/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/ContainerEffector.java
similarity index 80%
rename from software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/DockerEffector.java
rename to software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/ContainerEffector.java
index 09fd759bad..5b34ae604e 100644
--- a/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/DockerEffector.java
+++ b/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/ContainerEffector.java
@@ -35,14 +35,14 @@ import java.util.concurrent.TimeUnit;
 import static com.google.common.base.Preconditions.checkNotNull;
 import static org.apache.brooklyn.core.mgmt.BrooklynTaskTags.EFFECTOR_TAG;
 
-public class DockerEffector extends AddEffectorInitializerAbstract implements  ContainerCommons {
+public class ContainerEffector extends AddEffectorInitializerAbstract implements  ContainerCommons {
 
-    private static final Logger LOG = LoggerFactory.getLogger(DockerEffector.class);
+    private static final Logger LOG = LoggerFactory.getLogger(ContainerEffector.class);
 
-    public DockerEffector() {
+    public ContainerEffector() {
     }
 
-    public DockerEffector(ConfigBag configBag) {
+    public ContainerEffector(ConfigBag configBag) {
         super(configBag);
     }
 
@@ -69,13 +69,13 @@ public class DockerEffector extends AddEffectorInitializerAbstract implements  C
         @Override
         public String call(ConfigBag parameters) {
             ConfigBag configBag = ConfigBag.newInstanceCopying(this.params).putAll(parameters);
-            Task<String> dockerTask = new ContainerTaskFactory.ConcreteContainerTaskFactory<String>()
-                    .summary("Executing Docker Image: " + EntityInitializers.resolve(configBag, CONTAINER_IMAGE))
+            Task<String> containerTask = new ContainerTaskFactory.ConcreteContainerTaskFactory<String>()
+                    .summary("Executing Container Image: " + EntityInitializers.resolve(configBag, CONTAINER_IMAGE))
                     .tag(entity().getId() + "-" + EFFECTOR_TAG)
                     .configure(configBag.getAllConfig())
                     .newTask();
-            DynamicTasks.queueIfPossible(dockerTask).orSubmitAsync(entity());
-            Object result = dockerTask.getUnchecked(Duration.of(5, TimeUnit.MINUTES));
+            DynamicTasks.queueIfPossible(containerTask).orSubmitAsync(entity());
+            Object result = containerTask.getUnchecked(Duration.of(5, TimeUnit.MINUTES));
             return result.toString();
         }
     }
diff --git a/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/DockerSensor.java b/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/ContainerSensor.java
similarity index 87%
rename from software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/DockerSensor.java
rename to software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/ContainerSensor.java
index 600958d7f0..0d54e40680 100644
--- a/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/DockerSensor.java
+++ b/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/ContainerSensor.java
@@ -42,17 +42,17 @@ import java.util.concurrent.TimeUnit;
 import static org.apache.brooklyn.core.mgmt.BrooklynTaskTags.SENSOR_TAG;
 
 @SuppressWarnings({"UnstableApiUsage", "deprecation", "unchecked"})
-public class DockerSensor<T> extends AbstractAddSensorFeed<T> implements ContainerCommons {
+public class ContainerSensor<T> extends AbstractAddSensorFeed<T> implements ContainerCommons {
 
     public static final ConfigKey<String> FORMAT = SshCommandSensor.FORMAT;
     public static final ConfigKey<Boolean> LAST_YAML_DOCUMENT = SshCommandSensor.LAST_YAML_DOCUMENT;
 
-    private static final Logger LOG = LoggerFactory.getLogger(DockerSensor.class);
+    private static final Logger LOG = LoggerFactory.getLogger(ContainerSensor.class);
 
-    public DockerSensor() {
+    public ContainerSensor() {
     }
 
-    public DockerSensor(final ConfigBag parameters) {
+    public ContainerSensor(final ConfigBag parameters) {
         super(parameters);
     }
 
@@ -77,13 +77,13 @@ public class DockerSensor<T> extends AbstractAddSensorFeed<T> implements Contain
                         .callable(new Callable<Object>() {
                             @Override
                             public Object call() throws Exception {
-                                Task<String> dockerTask = new ContainerTaskFactory.ConcreteContainerTaskFactory<String>()
+                                Task<String> containerTask = new ContainerTaskFactory.ConcreteContainerTaskFactory<String>()
                                         .summary("Running " + EntityInitializers.resolve(configBag, SENSOR_NAME))
                                         .tag(entity.getId() + "-" + SENSOR_TAG)
                                         .configure(configBag.getAllConfig())
                                         .newTask();
-                                DynamicTasks.queueIfPossible(dockerTask).orSubmitAsync(entity);
-                                Object result = dockerTask.getUnchecked(Duration.of(5, TimeUnit.MINUTES));
+                                DynamicTasks.queueIfPossible(containerTask).orSubmitAsync(entity);
+                                Object result = containerTask.getUnchecked(Duration.of(5, TimeUnit.MINUTES));
                                 List<String> res = (List<String>) result;
                                 while(!res.isEmpty() && Iterables.getLast(res).matches("namespace .* deleted\\s*")) res = res.subList(0, res.size()-1);
 
diff --git a/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/ContainerTaskFactory.java b/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/ContainerTaskFactory.java
index ff877993d8..9b175a1258 100644
--- a/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/ContainerTaskFactory.java
+++ b/software/base/src/main/java/org/apache/brooklyn/tasks/kubectl/ContainerTaskFactory.java
@@ -64,8 +64,10 @@ public class ContainerTaskFactory<T extends ContainerTaskFactory<T,RET>,RET>  im
             throw new IllegalStateException("You must specify containerImage when using " + this.getClass().getSimpleName());
         }
 
+        final String cleanImageName = containerImage.contains(":") ?  containerImage.substring(0, containerImage.indexOf(":")) : containerImage;
+
         final String containerName = (Strings.isBlank(containerNameFromCfg)
-                ? ( (Strings.isNonBlank(this.tag) ? this.tag + "-" : "").concat(containerImage).concat("-").concat(Strings.makeRandomId(10)))
+                ? ( (Strings.isNonBlank(this.tag) ? this.tag + "-" : "").concat(cleanImageName).concat("-").concat(Strings.makeRandomId(10)))
                 : containerNameFromCfg).replace(" ", "-")
                 .replace("/", "-")
                 .replace("_", "-")
diff --git a/software/base/src/main/resources/catalog.bom b/software/base/src/main/resources/catalog.bom
index 448b8908c2..98d004d49d 100644
--- a/software/base/src/main/resources/catalog.bom
+++ b/software/base/src/main/resources/catalog.bom
@@ -81,18 +81,18 @@ brooklyn.catalog:
         description: Creates a pre-allocated server pool, which other applications can deploy to
 
       #-----------------------------------------kubectl effector & sensor-------------------------------------------------------
-    - id: org.apache.brooklyn.tasks.kubectl.DockerSensor
+    - id: org.apache.brooklyn.tasks.kubectl.ContainerSensor
       format: java-type-name
       itemType: bean
       item:
-        type: org.apache.brooklyn.tasks.kubectl.DockerSensor
-        name: Docker Sensor
+        type: org.apache.brooklyn.tasks.kubectl.ContainerSensor
+        name: Container Sensor
         description: A sensor that exposes a value produced by a Kubectl Job
 
-    - id: org.apache.brooklyn.tasks.kubectl.DockerEffector
+    - id: org.apache.brooklyn.tasks.kubectl.ContainerEffector
       format: java-type-name
       itemType: bean
       item:
-        type: org.apache.brooklyn.tasks.kubectl.DockerEffector
-        name: Docker Effector
+        type: org.apache.brooklyn.tasks.kubectl.ContainerEffector
+        name: Container Effector
         description: An effector that runs a Kubectl Job
\ No newline at end of file
diff --git a/software/base/src/test/java/org/apache/brooklyn/tasks/kubectl/DockerEffectorTest.java b/software/base/src/test/java/org/apache/brooklyn/tasks/kubectl/ContainerEffectorTest.java
similarity index 88%
rename from software/base/src/test/java/org/apache/brooklyn/tasks/kubectl/DockerEffectorTest.java
rename to software/base/src/test/java/org/apache/brooklyn/tasks/kubectl/ContainerEffectorTest.java
index cfe6047e97..cee55084e3 100644
--- a/software/base/src/test/java/org/apache/brooklyn/tasks/kubectl/DockerEffectorTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/tasks/kubectl/ContainerEffectorTest.java
@@ -39,20 +39,20 @@ import static org.testng.Assert.assertTrue;
  */
 @SuppressWarnings( "UnstableApiUsage")
 @Test(groups = {"Live"})
-public class DockerEffectorTest extends BrooklynAppUnitTestSupport {
+public class ContainerEffectorTest extends BrooklynAppUnitTestSupport {
 
     @Test
     public void testEchoPerlCommand() {
         final String message = ("hello " + Strings.makeRandomId(10)).toLowerCase();
 
         ConfigBag parameters = ConfigBag.newInstance(ImmutableMap.of(
-                DockerEffector.EFFECTOR_NAME, "test-container-effector",
+                ContainerEffector.EFFECTOR_NAME, "test-container-effector",
                 ContainerCommons.CONTAINER_IMAGE, "perl",
                 ContainerCommons.CONTAINER_IMAGE_PULL_POLICY, PullPolicy.IF_NOT_PRESENT,
                 ContainerCommons.COMMANDS, ImmutableList.of("/bin/bash", "-c", "echo " + message),
                 BrooklynConfigKeys.SHELL_ENVIRONMENT, ImmutableMap.<String, Object>of("HELLO", "WORLD")));
 
-        DockerEffector initializer = new DockerEffector(parameters);
+        ContainerEffector initializer = new ContainerEffector(parameters);
         TestEntity parentEntity = app.createAndManageChild(EntitySpec.create(TestEntity.class).addInitializer(initializer));
         app.start(ImmutableList.of());
 
@@ -66,12 +66,12 @@ public class DockerEffectorTest extends BrooklynAppUnitTestSupport {
         final String message = ("hello " + Strings.makeRandomId(10)).toLowerCase();
 
         ConfigBag parameters = ConfigBag.newInstance(ImmutableMap.of(
-                DockerEffector.EFFECTOR_NAME, "test-container-effector",
+                ContainerEffector.EFFECTOR_NAME, "test-container-effector",
                 ContainerCommons.CONTAINER_IMAGE, "bash",
                 ContainerCommons.ARGUMENTS, ImmutableList.of( "-c", "echo " + message),
                 BrooklynConfigKeys.SHELL_ENVIRONMENT, ImmutableMap.<String, Object>of("HELLO", "WORLD")));
 
-        DockerEffector initializer = new DockerEffector(parameters);
+        ContainerEffector initializer = new ContainerEffector(parameters);
         TestEntity parentEntity = app.createAndManageChild(EntitySpec.create(TestEntity.class).addInitializer(initializer));
         app.start(ImmutableList.of());
 
@@ -83,12 +83,12 @@ public class DockerEffectorTest extends BrooklynAppUnitTestSupport {
     @Test
     public void testEchoVarBashCommand() {
         ConfigBag parameters = ConfigBag.newInstance(ImmutableMap.of(
-                DockerEffector.EFFECTOR_NAME, "test-container-effector",
+                ContainerEffector.EFFECTOR_NAME, "test-container-effector",
                 ContainerCommons.CONTAINER_IMAGE, "bash",
                 ContainerCommons.ARGUMENTS, ImmutableList.of( "-c", "echo $HELLO"),
                 BrooklynConfigKeys.SHELL_ENVIRONMENT, ImmutableMap.<String, Object>of("HELLO", "WORLD")));
 
-        DockerEffector initializer = new DockerEffector(parameters);
+        ContainerEffector initializer = new ContainerEffector(parameters);
         TestEntity parentEntity = app.createAndManageChild(EntitySpec.create(TestEntity.class).addInitializer(initializer));
         app.start(ImmutableList.of());
 
@@ -100,12 +100,12 @@ public class DockerEffectorTest extends BrooklynAppUnitTestSupport {
     @Test
     public void testEchoMultiBashCommand() {
         ConfigBag parameters = ConfigBag.newInstance(ImmutableMap.of(
-                DockerEffector.EFFECTOR_NAME, "test-container-effector",
+                ContainerEffector.EFFECTOR_NAME, "test-container-effector",
                 ContainerCommons.CONTAINER_IMAGE, "bash",
                 ContainerCommons.ARGUMENTS, ImmutableList.of( "-c", "date; echo $HELLO"),
                 BrooklynConfigKeys.SHELL_ENVIRONMENT, ImmutableMap.<String, Object>of("HELLO", "WORLD")));
 
-        DockerEffector initializer = new DockerEffector(parameters);
+        ContainerEffector initializer = new ContainerEffector(parameters);
         TestEntity parentEntity = app.createAndManageChild(EntitySpec.create(TestEntity.class).addInitializer(initializer));
         app.start(ImmutableList.of());
 
diff --git a/software/base/src/test/java/org/apache/brooklyn/tasks/kubectl/DockerSensorTest.java b/software/base/src/test/java/org/apache/brooklyn/tasks/kubectl/ContainerSensorTest.java
similarity index 83%
rename from software/base/src/test/java/org/apache/brooklyn/tasks/kubectl/DockerSensorTest.java
rename to software/base/src/test/java/org/apache/brooklyn/tasks/kubectl/ContainerSensorTest.java
index 00842fb5f0..638cb44a85 100644
--- a/software/base/src/test/java/org/apache/brooklyn/tasks/kubectl/DockerSensorTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/tasks/kubectl/ContainerSensorTest.java
@@ -32,7 +32,7 @@ import org.testng.annotations.Test;
 
 @SuppressWarnings( "UnstableApiUsage")
 @Test(groups = {"Live"})
-public class DockerSensorTest extends BrooklynAppUnitTestSupport {
+public class ContainerSensorTest extends BrooklynAppUnitTestSupport {
 
     @Test
     public void testEchoPerlCommand() {
@@ -42,10 +42,10 @@ public class DockerSensorTest extends BrooklynAppUnitTestSupport {
                 ContainerCommons.CONTAINER_IMAGE, "perl",
                 ContainerCommons.CONTAINER_IMAGE_PULL_POLICY, PullPolicy.IF_NOT_PRESENT,
                 ContainerCommons.COMMANDS, ImmutableList.of("/bin/bash", "-c","echo " + message) ,
-                DockerSensor.SENSOR_PERIOD, "1s",
-                DockerSensor.SENSOR_NAME, "test-echo-sensor"));
+                ContainerSensor.SENSOR_PERIOD, "1s",
+                ContainerSensor.SENSOR_NAME, "test-echo-sensor"));
 
-        DockerSensor<String> initializer = new DockerSensor<>(parameters);
+        ContainerSensor<String> initializer = new ContainerSensor<>(parameters);
         TestEntity parentEntity = app.createAndManageChild(EntitySpec.create(TestEntity.class).addInitializer(initializer));
         app.start(ImmutableList.of());
 
@@ -61,10 +61,10 @@ public class DockerSensorTest extends BrooklynAppUnitTestSupport {
                 ContainerCommons.CONTAINER_IMAGE, "perl",
                 ContainerCommons.COMMANDS, ImmutableList.of("/bin/bash") ,
                 ContainerCommons.ARGUMENTS, ImmutableList.of("-c", "echo " + message) ,
-                DockerSensor.SENSOR_PERIOD, "1s",
-                DockerSensor.SENSOR_NAME, "test-echo-sensor"));
+                ContainerSensor.SENSOR_PERIOD, "1s",
+                ContainerSensor.SENSOR_NAME, "test-echo-sensor"));
 
-        DockerSensor<String> initializer = new DockerSensor<>(parameters);
+        ContainerSensor<String> initializer = new ContainerSensor<>(parameters);
         TestEntity parentEntity = app.createAndManageChild(EntitySpec.create(TestEntity.class).addInitializer(initializer));
         app.start(ImmutableList.of());
 
@@ -79,10 +79,10 @@ public class DockerSensorTest extends BrooklynAppUnitTestSupport {
         ConfigBag parameters = ConfigBag.newInstance(ImmutableMap.of(
                 ContainerCommons.CONTAINER_IMAGE, "perl",
                 ContainerCommons.ARGUMENTS, ImmutableList.of("echo", message) ,
-                DockerSensor.SENSOR_PERIOD, "1s",
-                DockerSensor.SENSOR_NAME, "test-echo-sensor"));
+                ContainerSensor.SENSOR_PERIOD, "1s",
+                ContainerSensor.SENSOR_NAME, "test-echo-sensor"));
 
-        DockerSensor<String> initializer = new DockerSensor<>(parameters);
+        ContainerSensor<String> initializer = new ContainerSensor<>(parameters);
         TestEntity parentEntity = app.createAndManageChild(EntitySpec.create(TestEntity.class).addInitializer(initializer));
         app.start(ImmutableList.of());
 
@@ -97,10 +97,10 @@ public class DockerSensorTest extends BrooklynAppUnitTestSupport {
         ConfigBag parameters = ConfigBag.newInstance(ImmutableMap.of(
                 ContainerCommons.CONTAINER_IMAGE, "bash",
                 ContainerCommons.ARGUMENTS, ImmutableList.of("-c", "echo " + message) ,
-                DockerSensor.SENSOR_PERIOD, "1s",
-                DockerSensor.SENSOR_NAME, "test-echo-sensor"));
+                ContainerSensor.SENSOR_PERIOD, "1s",
+                ContainerSensor.SENSOR_NAME, "test-echo-sensor"));
 
-        DockerSensor<String> initializer = new DockerSensor<>(parameters);
+        ContainerSensor<String> initializer = new ContainerSensor<>(parameters);
         TestEntity parentEntity = app.createAndManageChild(EntitySpec.create(TestEntity.class).addInitializer(initializer));
         app.start(ImmutableList.of());
 
@@ -113,10 +113,10 @@ public class DockerSensorTest extends BrooklynAppUnitTestSupport {
         ConfigBag parameters = ConfigBag.newInstance(ImmutableMap.of(
                 ContainerCommons.CONTAINER_IMAGE, "hashicorp/terraform",
                 ContainerCommons.COMMANDS, ImmutableList.of("terraform", "version" ),
-                DockerSensor.SENSOR_PERIOD, "1s",
-                DockerSensor.SENSOR_NAME, "tf-version-sensor"));
+                ContainerSensor.SENSOR_PERIOD, "1s",
+                ContainerSensor.SENSOR_NAME, "tf-version-sensor"));
 
-        DockerSensor<String> initializer = new DockerSensor<>(parameters);
+        ContainerSensor<String> initializer = new ContainerSensor<>(parameters);
         TestEntity parentEntity = app.createAndManageChild(EntitySpec.create(TestEntity.class).addInitializer(initializer));
         app.start(ImmutableList.of());
 
diff --git a/software/base/src/test/java/org/apache/brooklyn/tasks/kubectl/DockerTaskTest.java b/software/base/src/test/java/org/apache/brooklyn/tasks/kubectl/ContainerTaskTest.java
similarity index 61%
rename from software/base/src/test/java/org/apache/brooklyn/tasks/kubectl/DockerTaskTest.java
rename to software/base/src/test/java/org/apache/brooklyn/tasks/kubectl/ContainerTaskTest.java
index e38520c76f..6786ca7043 100644
--- a/software/base/src/test/java/org/apache/brooklyn/tasks/kubectl/DockerTaskTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/tasks/kubectl/ContainerTaskTest.java
@@ -18,6 +18,7 @@
  */
 package org.apache.brooklyn.tasks.kubectl;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 import org.apache.brooklyn.api.entity.EntitySpec;
@@ -30,7 +31,6 @@ import org.apache.brooklyn.test.Asserts;
 import org.apache.brooklyn.util.collections.MutableList;
 import org.apache.brooklyn.util.core.task.DynamicTasks;
 import org.apache.brooklyn.util.time.Duration;
-import org.testng.annotations.Ignore;
 import org.testng.annotations.Test;
 
 import java.util.HashMap;
@@ -45,24 +45,24 @@ import static org.testng.AssertJUnit.assertTrue;
  * These tests require Minikube installed locally
  */
 @Test(groups = {"Live"})
-public class DockerTaskTest extends BrooklynAppUnitTestSupport {
+public class ContainerTaskTest extends BrooklynAppUnitTestSupport {
 
     @Test
-    public void testSuccessfulDockerTask() {
+    public void testSuccessfulContainerTask() {
         TestEntity entity = app.createAndManageChild(EntitySpec.create(TestEntity.class));
 
         Map<String,Object> configBag = new HashMap<>();
-        configBag.put("name", "test-docker-task");
+        configBag.put("name", "test-container-task");
         configBag.put("image", "perl");
         configBag.put("commands", Lists.newArrayList("/bin/bash", "-c","echo 'hello test'"));
         configBag.put("imagePullPolicy", PullPolicy.IF_NOT_PRESENT);
 
-        Task<String> dockerTask =  new ContainerTaskFactory.ConcreteContainerTaskFactory<String>()
-                .summary("Running docker task")
+        Task<String> containerTask =  new ContainerTaskFactory.ConcreteContainerTaskFactory<String>()
+                .summary("Running container task")
                 .configure(configBag)
                 .newTask();
-        DynamicTasks.queueIfPossible(dockerTask).orSubmitAsync(entity);
-        Object result = dockerTask.getUnchecked(Duration.of(5, TimeUnit.MINUTES));
+        DynamicTasks.queueIfPossible(containerTask).orSubmitAsync(entity);
+        Object result = containerTask.getUnchecked(Duration.of(5, TimeUnit.MINUTES));
         List<String> res = (List<String>) result;
         while(!res.isEmpty() && Iterables.getLast(res).matches("namespace .* deleted\\s*")) res = res.subList(0, res.size()-1);
 
@@ -70,25 +70,48 @@ public class DockerTaskTest extends BrooklynAppUnitTestSupport {
         assertTrue(res2.startsWith("hello test"));
     }
 
+    @Test
+    public void testSuccessfulContainerTerraformTask() {
+        TestEntity entity = app.createAndManageChild(EntitySpec.create(TestEntity.class));
+
+        Map<String,Object> configBag = new HashMap<>();
+        configBag.put("name", "test-container-task");
+        configBag.put("image", "hashicorp/terraform:latest");
+        configBag.put("commands",  ImmutableList.of("terraform", "version" ));
+        configBag.put("imagePullPolicy", PullPolicy.IF_NOT_PRESENT);
+
+        Task<String> containerTask =  new ContainerTaskFactory.ConcreteContainerTaskFactory<String>()
+                .summary("Running terraform-container task")
+                .configure(configBag)
+                .newTask();
+        DynamicTasks.queueIfPossible(containerTask).orSubmitAsync(entity);
+        Object result = containerTask.getUnchecked(Duration.of(5, TimeUnit.MINUTES));
+        List<String> res = (List<String>) result;
+        while(!res.isEmpty() && Iterables.getLast(res).matches("namespace .* deleted\\s*")) res = res.subList(0, res.size()-1);
+
+        String res2 = res.isEmpty() ? null : Iterables.getLast(res);
+        assertTrue(res2.startsWith("Terraform"));
+    }
+
     @Test// tries to execute local command, wants it to fail, but even so best as integration
-    public void testFailingDockerTask() {
+    public void testFailingContainerTask() {
         TestEntity entity = app.createAndManageChild(EntitySpec.create(TestEntity.class));
 
         List<String> commands = MutableList.of("/bin/bash", "-c","echo 'hello test' & exit 1");
 
         Map<String,Object> configBag = new HashMap<>();
-        configBag.put("name", "test-docker-task");
+        configBag.put("name", "test-container-task");
         configBag.put("image", "perl");
         configBag.put("commands", commands);
 
-        Task<String> dockerTask =  new ContainerTaskFactory.ConcreteContainerTaskFactory<String>()
+        Task<String> containerTask =  new ContainerTaskFactory.ConcreteContainerTaskFactory<String>()
                 .summary("Running docker task")
                 .configure(configBag)
                 .newTask();
         try {
-            DynamicTasks.queueIfPossible(dockerTask).orSubmitAsync(entity).getTask().get();
-            if (dockerTask instanceof HasTaskChildren) {
-                for (Task<?> child: ((HasTaskChildren)dockerTask).getChildren()) {
+            DynamicTasks.queueIfPossible(containerTask).orSubmitAsync(entity).getTask().get();
+            if (containerTask instanceof HasTaskChildren) {
+                for (Task<?> child: ((HasTaskChildren)containerTask).getChildren()) {
                     if(child.getTags().contains(BrooklynTaskTags.INESSENTIAL_TASK) && child.isError()) {
                        child.get();
                     }
diff --git a/software/base/src/test/resources/org/apache/brooklyn/kubectl/sample-both.yaml b/software/base/src/test/resources/org/apache/brooklyn/kubectl/sample-both.yaml
index bb6b803c38..2c0cadecb8 100644
--- a/software/base/src/test/resources/org/apache/brooklyn/kubectl/sample-both.yaml
+++ b/software/base/src/test/resources/org/apache/brooklyn/kubectl/sample-both.yaml
@@ -19,17 +19,17 @@ name: container-both
 services:
   - type: 'org.apache.brooklyn.entity.stock.BasicStartable:1.1.0-SNAPSHOT'
     brooklyn.initializers:
-      - type: org.apache.brooklyn.tasks.kubectl.DockerEffector
+      - type: org.apache.brooklyn.tasks.kubectl.ContainerEffector
         brooklyn.config:
           shell.env:
-            hello: hello-amp-docker-effector
+            hello: hello-amp-container-effector
           image: bash
           imagePullPolicy: NEVER
           args:
           - -c
           - HELLO=$(ls -la) ; sleep 5 ; echo $HELLO ; echo $hello
-          name: docker-effector
-      - type: org.apache.brooklyn.tasks.kubectl.DockerSensor
+          name: container-effector
+      - type: org.apache.brooklyn.tasks.kubectl.ContainerSensor
         brooklyn.config:
           image: perl
           imagePullPolicy: never
diff --git a/software/base/src/test/resources/org/apache/brooklyn/kubectl/sample-effector-dev.yaml b/software/base/src/test/resources/org/apache/brooklyn/kubectl/sample-effector-dev.yaml
index ab3c609894..af44ef4c56 100644
--- a/software/base/src/test/resources/org/apache/brooklyn/kubectl/sample-effector-dev.yaml
+++ b/software/base/src/test/resources/org/apache/brooklyn/kubectl/sample-effector-dev.yaml
@@ -19,10 +19,10 @@ name: container-effector-dev
 services:
   - type: 'org.apache.brooklyn.entity.stock.BasicStartable:1.1.0-SNAPSHOT'
     brooklyn.initializers:
-      - type: org.apache.brooklyn.tasks.kubectl.DockerEffector
+      - type: org.apache.brooklyn.tasks.kubectl.ContainerEffector
         brooklyn.config:
-          name: docker-effector
-          description: Very simple Docker effector
+          name: container-effector
+          description: Very simple container effector
           shell.env:
             hello: world-amp
             # hello: $brooklyn:external("hello", "hello")
diff --git a/software/base/src/test/resources/org/apache/brooklyn/kubectl/sample-effector.yaml b/software/base/src/test/resources/org/apache/brooklyn/kubectl/sample-effector.yaml
index ca9bede9a1..0722e71637 100644
--- a/software/base/src/test/resources/org/apache/brooklyn/kubectl/sample-effector.yaml
+++ b/software/base/src/test/resources/org/apache/brooklyn/kubectl/sample-effector.yaml
@@ -19,10 +19,10 @@ name: container-effector
 services:
   - type: 'org.apache.brooklyn.entity.stock.BasicStartable:1.1.0-SNAPSHOT'
     brooklyn.initializers:
-      - type: org.apache.brooklyn.tasks.kubectl.DockerEffector
+      - type: org.apache.brooklyn.tasks.kubectl.ContainerEffector
         brooklyn.config:
-          name: docker-effector
-          description: Very simple Docker effector
+          name: container-effector
+          description: Very simple container effector
           shell.env:
             hello: world-amp
           image: perl
diff --git a/software/base/src/test/resources/org/apache/brooklyn/kubectl/sample-sensor.yaml b/software/base/src/test/resources/org/apache/brooklyn/kubectl/sample-sensor.yaml
index cc02ecf047..eef1ebd01a 100644
--- a/software/base/src/test/resources/org/apache/brooklyn/kubectl/sample-sensor.yaml
+++ b/software/base/src/test/resources/org/apache/brooklyn/kubectl/sample-sensor.yaml
@@ -19,7 +19,7 @@ name: container-sensor
 services:
   - type: 'org.apache.brooklyn.entity.stock.BasicStartable:1.1.0-SNAPSHOT'
     brooklyn.initializers:
-      - type: org.apache.brooklyn.tasks.kubectl.DockerSensor
+      - type: org.apache.brooklyn.tasks.kubectl.ContainerSensor
         brooklyn.config:
           image: perl
           commands: