You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2015/05/22 11:39:21 UTC

[01/11] incubator-brooklyn git commit: Riak update packagecloud url

Repository: incubator-brooklyn
Updated Branches:
  refs/heads/master 321d88790 -> 4d673a824


Riak update packagecloud url


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/555de5d1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/555de5d1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/555de5d1

Branch: refs/heads/master
Commit: 555de5d12fa7b8a41904f5274af1638a83de23ff
Parents: 8eb8231
Author: Valentin Aitken <va...@cloudsoftcorp.com>
Authored: Tue May 5 04:48:53 2015 +0300
Committer: Valentin Aitken <va...@cloudsoftcorp.com>
Committed: Tue May 12 00:15:19 2015 +0300

----------------------------------------------------------------------
 .../main/java/brooklyn/entity/nosql/riak/RiakNodeSshDriver.java  | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/555de5d1/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNodeSshDriver.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNodeSshDriver.java b/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNodeSshDriver.java
index 5bd7867..9ed5ef1 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNodeSshDriver.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNodeSshDriver.java
@@ -198,14 +198,14 @@ public class RiakNodeSshDriver extends AbstractSoftwareProcessSshDriver implemen
 
     private ImmutableList<String> installDebianBased() {
         return ImmutableList.<String>builder()
-                .add("curl https://packagecloud.io/install/repositories/basho/riak/script.deb | " + BashCommands.sudo("bash"))
+                .add("curl https://packagecloud.io/install/repositories/basho/riak/script.deb.sh | " + BashCommands.sudo("bash"))
                 .add(BashCommands.sudo("apt-get install --assume-yes riak=" + getEntity().getFullVersion() + "-1"))
                 .build();
     }
 
     private ImmutableList<String> installRpmBased() {
         return ImmutableList.<String>builder()
-                .add("curl https://packagecloud.io/install/repositories/basho/riak/script.rpm | " + BashCommands.sudo("bash"))
+                .add("curl https://packagecloud.io/install/repositories/basho/riak/script.rpm.sh | " + BashCommands.sudo("bash"))
                 .add(BashCommands.sudo("yum install -y riak-" + getEntity().getFullVersion() + "*"))
                 .build();
     }


[04/11] incubator-brooklyn git commit: chef delete uses `-y`, and ensure validity of node name

Posted by he...@apache.org.
chef delete uses `-y`, and ensure validity of node name


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/a49162f5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/a49162f5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/a49162f5

Branch: refs/heads/master
Commit: a49162f5bbb7a57d7b8185ecbdb2ca5e0fc16a61
Parents: 7ab18f6
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Mon May 18 11:36:08 2015 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Mon May 18 11:36:42 2015 +0100

----------------------------------------------------------------------
 .../java/brooklyn/entity/chef/ChefLifecycleEffectorTasks.java  | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a49162f5/software/base/src/main/java/brooklyn/entity/chef/ChefLifecycleEffectorTasks.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/brooklyn/entity/chef/ChefLifecycleEffectorTasks.java b/software/base/src/main/java/brooklyn/entity/chef/ChefLifecycleEffectorTasks.java
index e82aaec..46b8894 100644
--- a/software/base/src/main/java/brooklyn/entity/chef/ChefLifecycleEffectorTasks.java
+++ b/software/base/src/main/java/brooklyn/entity/chef/ChefLifecycleEffectorTasks.java
@@ -101,7 +101,7 @@ public class ChefLifecycleEffectorTasks extends MachineLifecycleEffectorTasks im
         // in addition to supporting hard-coded node names (which is all we support so far).
         
         String nodeName = entity().getConfig(ChefConfig.CHEF_NODE_NAME);
-        if (Strings.isNonBlank(nodeName)) return nodeName;
+        if (Strings.isNonBlank(nodeName)) return Strings.makeValidFilename(nodeName);
         // node name is taken from ID of this entity, if not specified
         return entity().getId();
     }
@@ -306,8 +306,8 @@ public class ChefLifecycleEffectorTasks extends MachineLifecycleEffectorTasks im
                 // (ie allow us to actually decommission the machine)
                 TaskTags.markInessential(
                 new KnifeTaskFactory<String>("delete node and client registration at chef server")
-                    .add("knife node delete "+getNodeName())
-                    .add("knife client delete "+getNodeName())
+                    .add("knife node delete "+getNodeName()+" -y")
+                    .add("knife client delete "+getNodeName()+" -y")
                     .requiringZeroAndReturningStdout()
                     .newTask() ));
         }


[07/11] incubator-brooklyn git commit: Fix MachineEntity exec effector to return stdout

Posted by he...@apache.org.
Fix MachineEntity exec effector to return stdout


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/d3fb57e4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/d3fb57e4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/d3fb57e4

Branch: refs/heads/master
Commit: d3fb57e410a3ac87926d48dae48fed5be9c4cae0
Parents: 776ad43
Author: Andrew Kennedy <gr...@apache.org>
Authored: Thu May 21 16:16:16 2015 +0100
Committer: Andrew Kennedy <gr...@apache.org>
Committed: Thu May 21 16:22:32 2015 +0100

----------------------------------------------------------------------
 .../entity/machine/MachineEntityImpl.java       | 23 ++++++++++----------
 1 file changed, 12 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/d3fb57e4/software/base/src/main/java/brooklyn/entity/machine/MachineEntityImpl.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/brooklyn/entity/machine/MachineEntityImpl.java b/software/base/src/main/java/brooklyn/entity/machine/MachineEntityImpl.java
index 67f66d3..a0f45a9 100644
--- a/software/base/src/main/java/brooklyn/entity/machine/MachineEntityImpl.java
+++ b/software/base/src/main/java/brooklyn/entity/machine/MachineEntityImpl.java
@@ -35,6 +35,7 @@ import brooklyn.location.basic.Machines;
 import brooklyn.location.basic.SshMachineLocation;
 import brooklyn.util.exceptions.Exceptions;
 import brooklyn.util.task.DynamicTasks;
+import brooklyn.util.task.system.ProcessTaskStub.ScriptReturnType;
 import brooklyn.util.task.system.ProcessTaskWrapper;
 import brooklyn.util.text.Strings;
 import brooklyn.util.time.Duration;
@@ -157,25 +158,25 @@ public class MachineEntityImpl extends EmptySoftwareProcessImpl implements Machi
 
     @Override
     public String execCommandTimeout(String command, Duration timeout) {
+        ProcessTaskWrapper<String> task = SshEffectorTasks.ssh(command)
+                .environmentVariables(((AbstractSoftwareProcessSshDriver) getDriver()).getShellEnvironment())
+                .requiringZeroAndReturningStdout()
+                .machine(getMachine())
+                .summary(command)
+                .newTask();
+
         try {
-            ProcessTaskWrapper<Integer> task = SshEffectorTasks.ssh(command)
-                    .environmentVariables(((AbstractSoftwareProcessSshDriver) getDriver()).getShellEnvironment())
-                    .machine(getMachine())
-                    .summary(command)
-                    .newTask();
-            Integer result = DynamicTasks.queueIfPossible(task)
+            String result = DynamicTasks.queueIfPossible(task)
                     .executionContext(this)
                     .orSubmitAsync()
                     .asTask()
                     .get(timeout);
-            if (result != 0) {
-                LOG.warn("Command failed: {}", task.getStderr());
-                throw new IllegalStateException("Command failed, return code " + result);
-            }
-            return task.getStdout();
+            return result;
         } catch (TimeoutException te) {
             throw new IllegalStateException("Timed out running command: " + command);
         } catch (Exception e) {
+            Integer exitCode = task.getExitCode();
+            LOG.warn("Command failed, return code {}: {}", exitCode == null ? -1 : exitCode, task.getStderr());
             throw Exceptions.propagate(e);
         }
     }


[05/11] incubator-brooklyn git commit: Mirror summary for BrooklynEntityMirror

Posted by he...@apache.org.
Mirror summary for BrooklynEntityMirror

Also extract the catalogItemId in a separate attribute for easier access.


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/644d6cd0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/644d6cd0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/644d6cd0

Branch: refs/heads/master
Commit: 644d6cd0244d02c5d8ee6ae7c5cc53398067ead7
Parents: d0cbcf3
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Tue May 12 16:03:51 2015 +0300
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Tue May 19 23:22:59 2015 +0300

----------------------------------------------------------------------
 .../entity/brooklynnode/BrooklynEntityMirror.java |  7 +++++++
 .../brooklynnode/BrooklynEntityMirrorImpl.java    | 18 ++++++++++++++----
 .../BrooklynEntityMirrorIntegrationTest.java      |  8 ++++++++
 3 files changed, 29 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/644d6cd0/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynEntityMirror.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynEntityMirror.java b/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynEntityMirror.java
index 6cd8709..b19c9dc 100644
--- a/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynEntityMirror.java
+++ b/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynEntityMirror.java
@@ -18,6 +18,8 @@
  */
 package brooklyn.entity.brooklynnode;
 
+import java.util.Map;
+
 import brooklyn.catalog.Catalog;
 import brooklyn.config.ConfigKey;
 import brooklyn.entity.Entity;
@@ -54,6 +56,11 @@ public interface BrooklynEntityMirror extends Entity {
         "Frequency to poll for client sensors", Duration.FIVE_SECONDS);
     
     public static final AttributeSensor<String> MIRROR_STATUS = Sensors.newStringSensor("brooklyn.mirror.monitoring_status");
+    @SuppressWarnings("rawtypes")
+    public static final AttributeSensor<Map> MIRROR_SUMMARY = Sensors.newSensor(Map.class, "brooklyn.mirror.summary",
+        "The json map returned by the entity rest endpoint (ie the EntitySummary model)");
+    public static final AttributeSensor<String> MIRROR_CATALOG_ITEM_ID = Sensors.newStringSensor("brooklyn.mirror.catalog_item_id",
+        "The catalog item id of the mirrored entity in the remote brooklyn");
     
     public EntityHttpClient http();
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/644d6cd0/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynEntityMirrorImpl.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynEntityMirrorImpl.java b/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynEntityMirrorImpl.java
index 80b19f5..48ed3a8 100644
--- a/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynEntityMirrorImpl.java
+++ b/software/base/src/main/java/brooklyn/entity/brooklynnode/BrooklynEntityMirrorImpl.java
@@ -51,6 +51,16 @@ import com.google.common.net.MediaType;
 import com.google.gson.Gson;
 
 public class BrooklynEntityMirrorImpl extends AbstractEntity implements BrooklynEntityMirror {
+    @SuppressWarnings("rawtypes")
+    private class MirrorSummary implements Function<HttpToolResponse, Map> {
+        @Override
+        public Map apply(HttpToolResponse input) {
+            Map<?, ?> entitySummary = new Gson().fromJson(input.getContentAsString(), Map.class);
+            String catalogItemId = (String)entitySummary.get("catalogItemId");
+            setAttribute(MIRROR_CATALOG_ITEM_ID, catalogItemId);
+            return entitySummary;
+        }
+    }
 
     private HttpFeed mirror;
     
@@ -108,14 +118,13 @@ public class BrooklynEntityMirrorImpl extends AbstractEntity implements Brooklyn
             }
         };
 
-        String sensorsUri = Urls.mergePaths(mirroredEntityUrl, "sensors/current-state");
-
         final BrooklynEntityMirrorImpl self = this;
         mirror = HttpFeed.builder().entity(this)
-            .baseUri(sensorsUri)
+            .baseUri(mirroredEntityUrl)
             .credentialsIfNotNull(getConfig(BrooklynNode.MANAGEMENT_USER), getConfig(BrooklynNode.MANAGEMENT_PASSWORD))
             .period(getConfig(POLL_PERIOD))
             .poll(HttpPollConfig.forMultiple()
+                .suburl("/sensors/current-state")
                 .onSuccess(mirrorSensors)
                 .onFailureOrException(new Function<Object, Void>() {
                     @Override
@@ -130,7 +139,8 @@ public class BrooklynEntityMirrorImpl extends AbstractEntity implements Brooklyn
                         }
                         return null;
                     }
-                })).build();
+                }))
+            .poll(HttpPollConfig.forSensor(MIRROR_SUMMARY).onSuccess(new MirrorSummary())).build();
 
         populateEffectors();
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/644d6cd0/usage/launcher/src/test/java/brooklyn/entity/brooklynnode/BrooklynEntityMirrorIntegrationTest.java
----------------------------------------------------------------------
diff --git a/usage/launcher/src/test/java/brooklyn/entity/brooklynnode/BrooklynEntityMirrorIntegrationTest.java b/usage/launcher/src/test/java/brooklyn/entity/brooklynnode/BrooklynEntityMirrorIntegrationTest.java
index 4ec0ddb..bb50f5a 100644
--- a/usage/launcher/src/test/java/brooklyn/entity/brooklynnode/BrooklynEntityMirrorIntegrationTest.java
+++ b/usage/launcher/src/test/java/brooklyn/entity/brooklynnode/BrooklynEntityMirrorIntegrationTest.java
@@ -19,6 +19,7 @@
 package brooklyn.entity.brooklynnode;
 
 import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -104,7 +105,10 @@ public class BrooklynEntityMirrorIntegrationTest {
     public void testServiceMirroring() throws Exception {
         setUpServer();
         
+        String catalogItemId = "test-catalog-item:1.0";
+        String catalogItemIdGA = "test-catalog-item:1.0-GA";
         serverApp.setAttribute(TestApplication.MY_ATTRIBUTE, "austria");
+        serverApp.setCatalogItemId(catalogItemId);
 
         String serviceId = serverApp.getId();
         Entity mirror = localApp.addChild(EntitySpec.create(BrooklynEntityMirror.class)
@@ -115,10 +119,14 @@ public class BrooklynEntityMirrorIntegrationTest {
         );
 
         EntityTestUtils.assertAttributeEqualsEventually(mirror, TestApplication.MY_ATTRIBUTE, "austria");
+        EntityTestUtils.assertAttributeEqualsEventually(mirror, BrooklynEntityMirror.MIRROR_CATALOG_ITEM_ID, catalogItemId);
+        assertTrue(mirror.getAttribute(BrooklynEntityMirror.MIRROR_SUMMARY) != null, "entity summary is null");
         log.info("Sensors mirrored are: "+((EntityInternal)mirror).getAllAttributes());
         
         serverApp.setAttribute(TestApplication.MY_ATTRIBUTE, "bermuda");
+        serverApp.setCatalogItemId(catalogItemIdGA);
         EntityTestUtils.assertAttributeEqualsEventually(mirror, TestApplication.MY_ATTRIBUTE, "bermuda");
+        EntityTestUtils.assertAttributeEqualsEventually(mirror, BrooklynEntityMirror.MIRROR_CATALOG_ITEM_ID, catalogItemIdGA);
 
         serverApp.stop();
         assertUnmanagedEventually(mirror);


[11/11] incubator-brooklyn git commit: This closes #626

Posted by he...@apache.org.
This closes #626


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/4d673a82
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/4d673a82
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/4d673a82

Branch: refs/heads/master
Commit: 4d673a8249624cb9fe894f5eecc79da2d1f8efb9
Parents: e197f11 555de5d
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Fri May 22 10:39:07 2015 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri May 22 10:39:07 2015 +0100

----------------------------------------------------------------------
 .../nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNode.java | 2 +-
 .../main/java/brooklyn/entity/nosql/riak/RiakNodeSshDriver.java  | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)
----------------------------------------------------------------------



[08/11] incubator-brooklyn git commit: This closes #652

Posted by he...@apache.org.
This closes #652


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/52115a16
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/52115a16
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/52115a16

Branch: refs/heads/master
Commit: 52115a16538e270a890dd23e8ad47e4638834767
Parents: 321d887 d3fb57e
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Fri May 22 10:06:30 2015 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri May 22 10:06:30 2015 +0100

----------------------------------------------------------------------
 .../entity/machine/MachineEntityImpl.java       | 23 ++++++++++----------
 1 file changed, 12 insertions(+), 11 deletions(-)
----------------------------------------------------------------------



[03/11] incubator-brooklyn git commit: do the node and client deletion as part of stopping a chef node

Posted by he...@apache.org.
do the node and client deletion as part of stopping a chef node


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/7ab18f67
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/7ab18f67
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/7ab18f67

Branch: refs/heads/master
Commit: 7ab18f6758b28adb46cd51ba593d80c455715443
Parents: d78c172
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Thu May 14 12:40:01 2015 -0700
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Thu May 14 12:44:57 2015 -0700

----------------------------------------------------------------------
 .../java/brooklyn/entity/chef/ChefConfig.java   |  5 +++
 .../entity/chef/ChefLifecycleEffectorTasks.java | 33 +++++++++++++++++++-
 .../software/MachineLifecycleEffectorTasks.java | 23 +++++++-------
 3 files changed, 48 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7ab18f67/software/base/src/main/java/brooklyn/entity/chef/ChefConfig.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/brooklyn/entity/chef/ChefConfig.java b/software/base/src/main/java/brooklyn/entity/chef/ChefConfig.java
index 4d01b2c..769d8d0 100644
--- a/software/base/src/main/java/brooklyn/entity/chef/ChefConfig.java
+++ b/software/base/src/main/java/brooklyn/entity/chef/ChefConfig.java
@@ -79,6 +79,11 @@ public interface ChefConfig {
     public static final ConfigKey<String> KNIFE_CONFIG_FILE = ConfigKeys.newStringConfigKey("brooklyn.chef.knife.configFile",
             "Knife config file (typically knife.rb) to use, including full path; defaults to knife default/global config");
 
+    @SetFromFlag("chef_node_name")
+    public static final ConfigKey<String> CHEF_NODE_NAME = ConfigKeys.newStringConfigKey("brooklyn.chef.node.nodeName",
+        "Node name to register with the chef server for this entity, if using Chef server and a specific node name is desired; "
+        + "if supplied ,this must be unique across the nodes Chef Server manages; if not supplied, one will be created if needed");
+
     // for providing some simple (ssh-based) lifecycle operations and checks
     @SetFromFlag("pid_file")
     public static final ConfigKey<String> PID_FILE = ConfigKeys.newStringConfigKey("brooklyn.chef.lifecycle.pidFile",

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7ab18f67/software/base/src/main/java/brooklyn/entity/chef/ChefLifecycleEffectorTasks.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/brooklyn/entity/chef/ChefLifecycleEffectorTasks.java b/software/base/src/main/java/brooklyn/entity/chef/ChefLifecycleEffectorTasks.java
index 8f7ee31..e82aaec 100644
--- a/software/base/src/main/java/brooklyn/entity/chef/ChefLifecycleEffectorTasks.java
+++ b/software/base/src/main/java/brooklyn/entity/chef/ChefLifecycleEffectorTasks.java
@@ -40,6 +40,7 @@ import brooklyn.util.exceptions.Exceptions;
 import brooklyn.util.net.Urls;
 import brooklyn.util.ssh.BashCommands;
 import brooklyn.util.task.DynamicTasks;
+import brooklyn.util.task.TaskTags;
 import brooklyn.util.task.Tasks;
 import brooklyn.util.task.system.ProcessTaskWrapper;
 import brooklyn.util.text.Strings;
@@ -93,6 +94,18 @@ public class ChefLifecycleEffectorTasks extends MachineLifecycleEffectorTasks im
         return _serviceName = entity().getConfig(ChefConfig.SERVICE_NAME);
     }
 
+    protected String getNodeName() {
+        // (node name is needed so we can node delete it)
+        
+        // TODO would be better if CHEF_NODE_NAME were a freemarker template, could access entity.id, or hostname, etc,
+        // in addition to supporting hard-coded node names (which is all we support so far).
+        
+        String nodeName = entity().getConfig(ChefConfig.CHEF_NODE_NAME);
+        if (Strings.isNonBlank(nodeName)) return nodeName;
+        // node name is taken from ID of this entity, if not specified
+        return entity().getId();
+    }
+
     public String getWindowsServiceName() {
         if (_windowsServiceName!=null) return _windowsServiceName;
         return _windowsServiceName = entity().getConfig(ChefConfig.WINDOWS_SERVICE_NAME);
@@ -217,6 +230,7 @@ public class ChefLifecycleEffectorTasks extends MachineLifecycleEffectorTasks im
 
         DynamicTasks.queue(
                 ChefServerTasks.knifeConvergeTask()
+                    .knifeNodeName(getNodeName())
                     .knifeRunList(Strings.join(runList, ","))
                     .knifeAddAttributes((Map<? extends Object, ? extends Object>)(Map) attrs.root().get())
                     .knifeRunTwice(entity().getConfig(CHEF_RUN_CONVERGE_TWICE)) );
@@ -279,11 +293,28 @@ public class ChefLifecycleEffectorTasks extends MachineLifecycleEffectorTasks im
         result |= tryStopWindowsService();
         result |= tryStopPid();
         if (!result) {
-            throw new IllegalStateException("The process for "+entity()+" appears could not be stopped (no impl!)");
+            throw new IllegalStateException("The process for "+entity()+" could not be stopped (no impl!)");
         }
         return "stopped";
     }
     
+    @Override
+    protected StopMachineDetails<Integer> stopAnyProvisionedMachines() {
+        if (detectChefMode(entity())==ChefModes.KNIFE) {
+            DynamicTasks.queue(
+                // if this task fails show it as failed but don't block subsequent routines
+                // (ie allow us to actually decommission the machine)
+                TaskTags.markInessential(
+                new KnifeTaskFactory<String>("delete node and client registration at chef server")
+                    .add("knife node delete "+getNodeName())
+                    .add("knife client delete "+getNodeName())
+                    .requiringZeroAndReturningStdout()
+                    .newTask() ));
+        }
+
+        return super.stopAnyProvisionedMachines();
+    }
+    
     protected boolean tryStopService() {
         if (getServiceName()==null) return false;
         int result = DynamicTasks.queue(SshEffectorTasks.ssh("/etc/init.d/"+getServiceName()+" stop").runAsRoot()).get();

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7ab18f67/software/base/src/main/java/brooklyn/entity/software/MachineLifecycleEffectorTasks.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/brooklyn/entity/software/MachineLifecycleEffectorTasks.java b/software/base/src/main/java/brooklyn/entity/software/MachineLifecycleEffectorTasks.java
index 4fd6b09..6ccfc38 100644
--- a/software/base/src/main/java/brooklyn/entity/software/MachineLifecycleEffectorTasks.java
+++ b/software/base/src/main/java/brooklyn/entity/software/MachineLifecycleEffectorTasks.java
@@ -42,6 +42,7 @@ import brooklyn.entity.basic.EffectorStartableImpl.StartParameters;
 import brooklyn.entity.basic.Entities;
 import brooklyn.entity.basic.EntityInternal;
 import brooklyn.entity.basic.Lifecycle;
+import brooklyn.entity.basic.Sanitizer;
 import brooklyn.entity.basic.ServiceStateLogic;
 import brooklyn.entity.basic.SoftwareProcess;
 import brooklyn.entity.basic.SoftwareProcess.RestartSoftwareParameters;
@@ -292,7 +293,7 @@ public abstract class MachineLifecycleEffectorTasks {
                         if (log.isDebugEnabled())
                             log.debug("While starting {}, obtained new location instance {}", entity(),
                                     (machine instanceof SshMachineLocation ?
-                                            machine+", details "+((SshMachineLocation)machine).getUser()+":"+Entities.sanitize(((SshMachineLocation)machine).config().getLocalBag())
+                                            machine+", details "+((SshMachineLocation)machine).getUser()+":"+Sanitizer.sanitize(((SshMachineLocation)machine).config().getLocalBag())
                                             : machine));
                         return machine;
                     }
@@ -664,6 +665,7 @@ public abstract class MachineLifecycleEffectorTasks {
                 stopMode == StopMode.IF_NOT_STOPPED && !isStopped;
     }
 
+    @SuppressWarnings("deprecation")
     private static void checkCompatibleMachineModes(Boolean isStopMachine, boolean hasStopMachineMode, StopMode stopMachineMode) {
         if (hasStopMachineMode &&
                 (isStopMachine && stopMachineMode != StopMode.IF_NOT_STOPPED ||
@@ -714,6 +716,13 @@ public abstract class MachineLifecycleEffectorTasks {
     }
 
     /**
+     * Return string message of result.
+     * <p>
+     * Can run synchronously or not, caller will submit/queue as needed, and will block on any submitted tasks.
+     */
+    protected abstract String stopProcessesAtMachine();
+
+    /**
      * Stop the {@link MachineLocation} the entity is provisioned at.
      * <p>
      * Can run synchronously or not, caller will submit/queue as needed, and will block on any submitted tasks.
@@ -722,9 +731,6 @@ public abstract class MachineLifecycleEffectorTasks {
         @SuppressWarnings("unchecked")
         MachineProvisioningLocation<MachineLocation> provisioner = entity().getAttribute(SoftwareProcess.PROVISIONING_LOCATION);
 
-        // NB: previously has logic about "removeFirstMachine" but elsewhere had assumptions that there was only one,
-        // so i think that was an aborted bit of work (which has been removed here). Alex, Aug 2013
-
         if (Iterables.isEmpty(entity().getLocations())) {
             log.debug("No machine decommissioning necessary for "+entity()+" - no locations");
             return new StopMachineDetails<Integer>("No machine decommissioning necessary - no locations", 0);
@@ -741,7 +747,7 @@ public abstract class MachineLifecycleEffectorTasks {
             log.debug("No decommissioning necessary for "+entity()+" - not a machine location ("+machine+")");
             return new StopMachineDetails<Integer>("No machine decommissioning necessary - not a machine ("+machine+")", 0);
         }
-
+        
         try {
             entity().removeLocations(ImmutableList.of(machine));
             entity().setAttribute(Attributes.HOSTNAME, null);
@@ -755,11 +761,4 @@ public abstract class MachineLifecycleEffectorTasks {
         return new StopMachineDetails<Integer>("Decommissioned "+machine, 1);
     }
 
-    /**
-     * Return string message of result.
-     * <p>
-     * Can run synchronously or not, caller will submit/queue as needed, and will block on any submitted tasks.
-     */
-    protected abstract String stopProcessesAtMachine();
-
 }


[02/11] incubator-brooklyn git commit: Fix the latest Riak version

Posted by he...@apache.org.
Fix the latest Riak version

Basho pulled out 2.1.0


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/8eb8231b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/8eb8231b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/8eb8231b

Branch: refs/heads/master
Commit: 8eb8231bb384e7b8f506618536bc7f02f4591f62
Parents: 125f01e
Author: Valentin Aitken <va...@cloudsoftcorp.com>
Authored: Tue May 5 04:30:56 2015 +0300
Committer: Valentin Aitken <va...@cloudsoftcorp.com>
Committed: Tue May 12 00:15:19 2015 +0300

----------------------------------------------------------------------
 .../nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNode.java   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8eb8231b/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNode.java
----------------------------------------------------------------------
diff --git a/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNode.java b/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNode.java
index 0312890..23f86a9 100644
--- a/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNode.java
+++ b/software/nosql/src/main/java/brooklyn/entity/nosql/riak/RiakNode.java
@@ -46,7 +46,7 @@ public interface RiakNode extends SoftwareProcess {
 
     @SetFromFlag("version")
     ConfigKey<String> SUGGESTED_VERSION = ConfigKeys.newConfigKeyWithDefault(SoftwareProcess.SUGGESTED_VERSION,
-            "Version to install (Default 2.1.0)", "2.1.0");
+            "Version to install (Default 2.0.5)", "2.0.5");
 
     @SetFromFlag("optimizeNetworking")
     ConfigKey<Boolean> OPTIMIZE_HOST_NETWORKING  = ConfigKeys.newBooleanConfigKey("riak.networking.optimize", "Optimize host networking when running in a VM", Boolean.TRUE);


[10/11] incubator-brooklyn git commit: This closes #638

Posted by he...@apache.org.
This closes #638


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/e197f114
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/e197f114
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/e197f114

Branch: refs/heads/master
Commit: e197f114c4192ba7d9791d419591907f4d03d8d6
Parents: 1a4cb43 644d6cd
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Fri May 22 10:38:46 2015 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri May 22 10:38:46 2015 +0100

----------------------------------------------------------------------
 .../entity/brooklynnode/BrooklynEntityMirror.java |  7 +++++++
 .../brooklynnode/BrooklynEntityMirrorImpl.java    | 18 ++++++++++++++----
 .../BrooklynEntityMirrorIntegrationTest.java      |  8 ++++++++
 3 files changed, 29 insertions(+), 4 deletions(-)
----------------------------------------------------------------------



[06/11] incubator-brooklyn git commit: chef specify `--no-host-key-verify` on knife bootstrap

Posted by he...@apache.org.
chef specify `--no-host-key-verify` on knife bootstrap

so that if same ip is recycled knife doesn't fail


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/60f319b5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/60f319b5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/60f319b5

Branch: refs/heads/master
Commit: 60f319b54b7bf16a45867fa1fd4d1a8b875f22cd
Parents: a49162f
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Wed May 20 16:57:35 2015 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Thu May 21 08:56:10 2015 +0100

----------------------------------------------------------------------
 .../main/java/brooklyn/entity/chef/ChefLifecycleEffectorTasks.java | 1 +
 .../main/java/brooklyn/entity/chef/KnifeConvergeTaskFactory.java   | 2 ++
 2 files changed, 3 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/60f319b5/software/base/src/main/java/brooklyn/entity/chef/ChefLifecycleEffectorTasks.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/brooklyn/entity/chef/ChefLifecycleEffectorTasks.java b/software/base/src/main/java/brooklyn/entity/chef/ChefLifecycleEffectorTasks.java
index 46b8894..ed6722b 100644
--- a/software/base/src/main/java/brooklyn/entity/chef/ChefLifecycleEffectorTasks.java
+++ b/software/base/src/main/java/brooklyn/entity/chef/ChefLifecycleEffectorTasks.java
@@ -304,6 +304,7 @@ public class ChefLifecycleEffectorTasks extends MachineLifecycleEffectorTasks im
             DynamicTasks.queue(
                 // if this task fails show it as failed but don't block subsequent routines
                 // (ie allow us to actually decommission the machine)
+                // TODO args could be a List<String> config key ?
                 TaskTags.markInessential(
                 new KnifeTaskFactory<String>("delete node and client registration at chef server")
                     .add("knife node delete "+getNodeName()+" -y")

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/60f319b5/software/base/src/main/java/brooklyn/entity/chef/KnifeConvergeTaskFactory.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/brooklyn/entity/chef/KnifeConvergeTaskFactory.java b/software/base/src/main/java/brooklyn/entity/chef/KnifeConvergeTaskFactory.java
index fe05798..ba974ad 100644
--- a/software/base/src/main/java/brooklyn/entity/chef/KnifeConvergeTaskFactory.java
+++ b/software/base/src/main/java/brooklyn/entity/chef/KnifeConvergeTaskFactory.java
@@ -92,6 +92,8 @@ public class KnifeConvergeTaskFactory<RET> extends KnifeTaskFactory<RET> {
         if (keyfile!=null) result.add("-i "+keyfile.getPath());
         else result.add("-P "+checkNotNull(machine.findPassword(), "No password or private key data for "+machine));
         
+        result.add("--no-host-key-verify");
+        
         if (sudo != Boolean.FALSE) result.add("--sudo");
 
         if (!Strings.isNullOrEmpty(nodeName)) {


[09/11] incubator-brooklyn git commit: This closes #647

Posted by he...@apache.org.
This closes #647


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/1a4cb43d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/1a4cb43d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/1a4cb43d

Branch: refs/heads/master
Commit: 1a4cb43df0f85bd3d577c488f890fcfcac9224a0
Parents: 52115a1 60f319b
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Fri May 22 10:07:03 2015 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri May 22 10:07:03 2015 +0100

----------------------------------------------------------------------
 .../java/brooklyn/entity/chef/ChefConfig.java   |  5 +++
 .../entity/chef/ChefLifecycleEffectorTasks.java | 34 +++++++++++++++++++-
 .../entity/chef/KnifeConvergeTaskFactory.java   |  2 ++
 .../software/MachineLifecycleEffectorTasks.java | 23 +++++++------
 4 files changed, 51 insertions(+), 13 deletions(-)
----------------------------------------------------------------------