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

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

commit 0964eeea1ec303dddfa970747cac258e843470e0
Author: Martin Harris <[email protected]>
AuthorDate: Mon Aug 26 16:38:41 2019 +0100

    First draft supporting shell.env for WinRm
---
 .../entity/software/base/AbstractSoftwareProcessDriver.java   | 11 +++++++++++
 .../software/base/AbstractSoftwareProcessSshDriver.java       | 10 ----------
 .../software/base/AbstractSoftwareProcessWinRmDriver.java     | 10 ++++++++++
 .../entity/software/base/lifecycle/WinRmExecuteHelper.java    |  6 ++++++
 .../apache/brooklyn/util/core/internal/winrm/WinRmTool.java   |  4 ++++
 5 files changed, 31 insertions(+), 10 deletions(-)

diff --git 
a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessDriver.java
 
b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessDriver.java
index b582776..b7748df 100644
--- 
a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessDriver.java
+++ 
b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessDriver.java
@@ -51,6 +51,7 @@ import 
org.apache.brooklyn.entity.software.base.lifecycle.MachineLifecycleEffect
 import 
org.apache.brooklyn.entity.software.base.lifecycle.MachineLifecycleEffectorTasks.CloseableLatch;
 import org.apache.brooklyn.util.collections.MutableMap;
 import org.apache.brooklyn.util.core.ResourceUtils;
+import org.apache.brooklyn.util.core.json.ShellEnvironmentSerializer;
 import org.apache.brooklyn.util.core.task.DynamicTasks;
 import org.apache.brooklyn.util.core.task.Tasks;
 import org.apache.brooklyn.util.core.text.TemplateProcessor;
@@ -666,6 +667,16 @@ public abstract class AbstractSoftwareProcessDriver 
implements SoftwareProcessDr
         return getEntity().config().get(SoftwareProcess.SUGGESTED_VERSION);
     }
 
+    /**
+     * The environment variables to be set when executing the commands (for 
install, run, check running, etc).
+     * @see SoftwareProcess#SHELL_ENVIRONMENT
+     */
+    public Map<String, String> getShellEnvironment() {
+        Map<String, Object> env = 
entity.getConfig(SoftwareProcess.SHELL_ENVIRONMENT);
+        ShellEnvironmentSerializer envSerializer = new 
ShellEnvironmentSerializer(((EntityInternal)entity).getManagementContext());
+        return envSerializer.serialize(env);
+    }
+
     public abstract String getRunDir();
     public abstract String getInstallDir();
 }
diff --git 
a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessSshDriver.java
 
b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessSshDriver.java
index a6b0def..d1118ad 100644
--- 
a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessSshDriver.java
+++ 
b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/AbstractSoftwareProcessSshDriver.java
@@ -379,16 +379,6 @@ public abstract class AbstractSoftwareProcessSshDriver 
extends AbstractSoftwareP
     }
 
     /**
-     * The environment variables to be set when executing the commands (for 
install, run, check running, etc).
-     * @see SoftwareProcess#SHELL_ENVIRONMENT
-     */
-    public Map<String, String> getShellEnvironment() {
-        Map<String, Object> env = 
entity.getConfig(SoftwareProcess.SHELL_ENVIRONMENT);
-        ShellEnvironmentSerializer envSerializer = new 
ShellEnvironmentSerializer(((EntityInternal)entity).getManagementContext());
-        return envSerializer.serialize(env);
-    }
-
-    /**
      * @param sshFlags Extra flags to be used when making an SSH connection to 
the entity's machine.
      *                 If the map contains the key {@link 
#IGNORE_ENTITY_SSH_FLAGS} then only the
      *                 given flags are used. Otherwise, the given flags are 
combined with (and take
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 b7d23ea..e125918 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
@@ -29,8 +29,10 @@ import java.util.Map;
 import java.util.concurrent.Callable;
 import java.util.concurrent.TimeUnit;
 
+import javax.annotation.Nullable;
 import javax.xml.ws.WebServiceException;
 
+import com.google.common.base.Function;
 import org.apache.brooklyn.api.entity.EntityLocal;
 import org.apache.brooklyn.api.mgmt.Task;
 import org.apache.brooklyn.api.sensor.AttributeSensor;
@@ -83,10 +85,18 @@ public abstract class AbstractSoftwareProcessWinRmDriver 
extends AbstractSoftwar
     }
 
     protected WinRmExecuteHelper newScript(String command, String psCommand, 
String phase, String ntDomain) {
+        Map<String, String> environment = 
(Map)getEntity().getConfig(WinRmTool.SHELL_ENVIRONMENT);
+    
+        if (environment == null) {
+            // Important only to call getShellEnvironment() if env was not 
supplied; otherwise it
+            // could cause us to resolve config (e.g. block for 
attributeWhenReady) too early.
+            environment = getShellEnvironment();
+        }
         return newScript(phase)
                 .setNtDomain(ntDomain)
                 .setCommand(command)
                 .setPsCommand(psCommand)
+                .setEnv(environment)
                 .failOnNonZeroResultCode()
                 .gatherOutput();
     }
diff --git 
a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/WinRmExecuteHelper.java
 
b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/WinRmExecuteHelper.java
index 5fe5824..ecfa3bd 100644
--- 
a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/WinRmExecuteHelper.java
+++ 
b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/lifecycle/WinRmExecuteHelper.java
@@ -59,6 +59,7 @@ public class WinRmExecuteHelper {
     private String domain;
     private String command;
     private String psCommand;
+    private Map<String, String> env;
 
     @SuppressWarnings("rawtypes")
     protected final Map flags = new LinkedHashMap();
@@ -97,6 +98,11 @@ public class WinRmExecuteHelper {
         return this;
     }
 
+    public WinRmExecuteHelper setEnv(Map<String, String> env) {
+        this.env = env;
+        return this;
+    }
+
     /**
      * indicates that the script should acquire the given mutexId on the given 
mutexSupport
      * and maintain it for the duration of script execution;
diff --git 
a/software/winrm/src/main/java/org/apache/brooklyn/util/core/internal/winrm/WinRmTool.java
 
b/software/winrm/src/main/java/org/apache/brooklyn/util/core/internal/winrm/WinRmTool.java
index 5706489..dff6e07 100644
--- 
a/software/winrm/src/main/java/org/apache/brooklyn/util/core/internal/winrm/WinRmTool.java
+++ 
b/software/winrm/src/main/java/org/apache/brooklyn/util/core/internal/winrm/WinRmTool.java
@@ -30,6 +30,7 @@ import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.config.ConfigKeys;
 import org.apache.brooklyn.core.config.MapConfigKey;
 import org.apache.brooklyn.core.entity.BrooklynConfigKeys;
+import org.apache.brooklyn.util.core.flags.SetFromFlag;
 import org.apache.brooklyn.util.time.Duration;
 
 import com.google.common.annotations.Beta;
@@ -90,6 +91,9 @@ public interface WinRmTool {
             "Can be used to pass additional custom data to the WinrmTool, 
which is especially useful " +
                     "if writing a bespoke tool implementation");
 
+    @SetFromFlag("env")
+    MapConfigKey<Object> SHELL_ENVIRONMENT = 
BrooklynConfigKeys.SHELL_ENVIRONMENT;
+
     /**
      * @deprecated since 0.9.0; use {@link #executeCommand(List)} to avoid 
ambiguity between native command and power shell.
      */

Reply via email to