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 2016/02/01 18:50:36 UTC
[20/50] [abbrv] brooklyn-server git commit: Add stdOut and stdErr to
WinRmDriver
Add stdOut and stdErr to WinRmDriver
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/93b56b75
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/93b56b75
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/93b56b75
Branch: refs/heads/0.8.0-incubating
Commit: 93b56b7591b1458dba9bd278b298315347b9de0e
Parents: 40281e0
Author: Valentin Aitken <va...@cloudsoftcorp.com>
Authored: Thu Aug 20 00:05:23 2015 +0300
Committer: Valentin Aitken <va...@cloudsoftcorp.com>
Committed: Fri Aug 28 10:52:39 2015 +0300
----------------------------------------------------------------------
.../AbstractSoftwareProcessWinRmDriver.java | 73 +++++++++++++++-----
1 file changed, 56 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/93b56b75/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessWinRmDriver.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessWinRmDriver.java b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessWinRmDriver.java
index 3965f4a..f5d441d 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessWinRmDriver.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessWinRmDriver.java
@@ -18,29 +18,35 @@
*/
package org.apache.brooklyn.entity.software.base;
-import java.io.File;
-import java.io.InputStream;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.Callable;
-import java.util.concurrent.TimeUnit;
-
+import com.google.common.collect.ImmutableList;
+import io.cloudsoft.winrm4j.winrm.WinRmToolResponse;
import org.apache.brooklyn.api.entity.EntityLocal;
+import org.apache.brooklyn.api.mgmt.Task;
import org.apache.brooklyn.api.sensor.AttributeSensor;
import org.apache.brooklyn.config.ConfigKey;
+import org.apache.brooklyn.core.mgmt.BrooklynTaskTags;
import org.apache.brooklyn.core.sensor.Sensors;
-import org.python.core.PyException;
import org.apache.brooklyn.location.winrm.WinRmMachineLocation;
+import org.apache.brooklyn.util.core.task.Tasks;
import org.apache.brooklyn.util.exceptions.ReferenceWithError;
import org.apache.brooklyn.util.repeat.Repeater;
+import org.apache.brooklyn.util.text.Strings;
import org.apache.brooklyn.util.time.Duration;
+import org.python.core.PyException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
-import io.cloudsoft.winrm4j.winrm.WinRmToolResponse;
-
-import com.google.api.client.util.Strings;
-import com.google.common.collect.ImmutableList;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.Callable;
+import java.util.concurrent.TimeUnit;
public abstract class AbstractSoftwareProcessWinRmDriver extends AbstractSoftwareProcessDriver {
+ private static final Logger LOG = LoggerFactory.getLogger(AbstractSoftwareProcessDriver.class);
AttributeSensor<String> WINDOWS_USERNAME = Sensors.newStringSensor("windows.username",
"Default Windows username to be used when connecting to the Entity's VM");
@@ -119,20 +125,53 @@ public abstract class AbstractSoftwareProcessWinRmDriver extends AbstractSoftwar
protected WinRmToolResponse executeCommand(ConfigKey<String> regularCommandKey, ConfigKey<String> powershellCommandKey, boolean allowNoOp) {
String regularCommand = getEntity().getConfig(regularCommandKey);
String powershellCommand = getEntity().getConfig(powershellCommandKey);
- if (Strings.isNullOrEmpty(regularCommand) && Strings.isNullOrEmpty(powershellCommand)) {
+ if (Strings.isBlank(regularCommand) && Strings.isBlank(powershellCommand)) {
if (allowNoOp) {
return new WinRmToolResponse("", "", 0);
} else {
throw new IllegalStateException(String.format("Exactly one of %s or %s must be set", regularCommandKey.getName(), powershellCommandKey.getName()));
}
- } else if (!Strings.isNullOrEmpty(regularCommand) && !Strings.isNullOrEmpty(powershellCommand)) {
+ } else if (!Strings.isBlank(regularCommand) && !Strings.isBlank(powershellCommand)) {
throw new IllegalStateException(String.format("%s and %s cannot both be set", regularCommandKey.getName(), powershellCommandKey.getName()));
}
- if (Strings.isNullOrEmpty(regularCommand)) {
- return getLocation().executePsScript(ImmutableList.of(powershellCommand));
+ ByteArrayOutputStream stdIn = new ByteArrayOutputStream();
+ ByteArrayOutputStream stdOut = new ByteArrayOutputStream();
+ ByteArrayOutputStream stdErr = new ByteArrayOutputStream();
+
+ Task<?> currentTask = Tasks.current();
+ if (currentTask != null) {
+ writeToStream(stdIn, Strings.isBlank(regularCommand) ? powershellCommand : regularCommand);
+ Tasks.addTagDynamically(BrooklynTaskTags.tagForStreamSoft(BrooklynTaskTags.STREAM_STDIN, stdIn));
+
+ if (BrooklynTaskTags.stream(currentTask, BrooklynTaskTags.STREAM_STDOUT)==null) {
+ Tasks.addTagDynamically(BrooklynTaskTags.tagForStreamSoft(BrooklynTaskTags.STREAM_STDOUT, stdOut));
+ Tasks.addTagDynamically(BrooklynTaskTags.tagForStreamSoft(BrooklynTaskTags.STREAM_STDERR, stdErr));
+ }
+ }
+
+ WinRmToolResponse response;
+ if (Strings.isBlank(regularCommand)) {
+ response = getLocation().executePsScript(ImmutableList.of(powershellCommand));
} else {
- return getLocation().executeScript(ImmutableList.of(regularCommand));
+ response = getLocation().executeScript(ImmutableList.of(regularCommand));
+ }
+
+ if (currentTask != null) {
+ if (BrooklynTaskTags.stream(currentTask, BrooklynTaskTags.STREAM_STDOUT)==null) {
+ writeToStream(stdOut, response.getStdOut());
+ writeToStream(stdErr, response.getStdErr());
+ }
+ }
+
+ return response;
+ }
+
+ private void writeToStream(ByteArrayOutputStream stream, String string) {
+ try {
+ stream.write(string.getBytes());
+ } catch (IOException e) {
+ LOG.warn("Problem populating one of the std streams for task of entity " + getEntity(), e);
}
}