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); } }
