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. */
