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 <[email protected]>
Authored: Thu May 21 16:16:16 2015 +0100
Committer: Andrew Kennedy <[email protected]>
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);
         }
     }

Reply via email to