This is an automated email from the ASF dual-hosted git repository. duncangrant pushed a commit to branch winrmtaskfactory in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git
commit f0586759c5099d93f07611319d71c26fe71ea190 Author: Duncan Grant <duncan.gr...@cloudsoft.io> AuthorDate: Tue Nov 10 08:19:49 2020 +0000 installTo for winrm supports urls --- .../brooklyn/api/location/MachineLocation.java | 12 ------ .../brooklyn/location/ssh/SshMachineLocation.java | 6 --- .../brooklyn/core/location/SimulatedLocation.java | 30 --------------- .../location/winrm/WinRmMachineLocation.java | 42 +++----------------- .../core/internal/winrm/winrm4j/Winrm4jTool.java | 45 +++++++++------------- 5 files changed, 24 insertions(+), 111 deletions(-) diff --git a/api/src/main/java/org/apache/brooklyn/api/location/MachineLocation.java b/api/src/main/java/org/apache/brooklyn/api/location/MachineLocation.java index 508c5d4..d207886 100644 --- a/api/src/main/java/org/apache/brooklyn/api/location/MachineLocation.java +++ b/api/src/main/java/org/apache/brooklyn/api/location/MachineLocation.java @@ -48,19 +48,7 @@ public interface MachineLocation extends AddressableLocation, HasNetworkAddresse String getUser(); - int execCommands(String summaryForLogging, List<String> commands); - - int execCommands(Map<String, ?> props, String summaryForLogging, List<String> commands); - - int execCommands(String summaryForLogging, List<String> commands, Map<String, ?> env); - int execCommands(Map<String, ?> props, String summaryForLogging, List<String> commands, Map<String, ?> env); - int execScript(String summaryForLogging, List<String> commands); - - int execScript(Map<String, ?> props, String summaryForLogging, List<String> commands); - - int execScript(String summaryForLogging, List<String> commands, Map<String, ?> env); - int execScript(Map<String, ?> props, String summaryForLogging, List<String> commands, Map<String, ?> env); } diff --git a/core/src/main/java/org/apache/brooklyn/location/ssh/SshMachineLocation.java b/core/src/main/java/org/apache/brooklyn/location/ssh/SshMachineLocation.java index 14df87d..d5ed481 100644 --- a/core/src/main/java/org/apache/brooklyn/location/ssh/SshMachineLocation.java +++ b/core/src/main/java/org/apache/brooklyn/location/ssh/SshMachineLocation.java @@ -699,15 +699,12 @@ public class SshMachineLocation extends AbstractMachineLocation implements Machi * and/or {@code commandPrepend} and {@code commandAppend} similar to * (currently supported in SshjTool) {@code separator}.) */ - @Override public int execCommands(String summaryForLogging, List<String> commands) { return execCommands(MutableMap.<String,Object>of(), summaryForLogging, commands, MutableMap.<String,Object>of()); } - @Override public int execCommands(Map<String, ?> props, String summaryForLogging, List<String> commands) { return execCommands(props, summaryForLogging, commands, MutableMap.<String,Object>of()); } - @Override public int execCommands(String summaryForLogging, List<String> commands, Map<String, ?> env) { return execCommands(MutableMap.<String,Object>of(), summaryForLogging, commands, env); } @@ -723,15 +720,12 @@ public class SshMachineLocation extends AbstractMachineLocation implements Machi * flags 'noStdoutLogging' and 'noStderrLogging' are set. To set a logging prefix, use * the flag 'logPrefix'. */ - @Override public int execScript(String summaryForLogging, List<String> commands) { return execScript(MutableMap.<String,Object>of(), summaryForLogging, commands, MutableMap.<String,Object>of()); } - @Override public int execScript(Map<String,?> props, String summaryForLogging, List<String> commands) { return execScript(props, summaryForLogging, commands, MutableMap.<String,Object>of()); } - @Override public int execScript(String summaryForLogging, List<String> commands, Map<String,?> env) { return execScript(MutableMap.<String,Object>of(), summaryForLogging, commands, env); } diff --git a/core/src/test/java/org/apache/brooklyn/core/location/SimulatedLocation.java b/core/src/test/java/org/apache/brooklyn/core/location/SimulatedLocation.java index 41be3f5..83faa97 100644 --- a/core/src/test/java/org/apache/brooklyn/core/location/SimulatedLocation.java +++ b/core/src/test/java/org/apache/brooklyn/core/location/SimulatedLocation.java @@ -170,41 +170,11 @@ public class SimulatedLocation extends AbstractLocation implements MachineProvis } @Override - public int execCommands(String summaryForLogging, List<String> commands) { - return 0; - } - - @Override - public int execCommands(Map<String, ?> props, String summaryForLogging, List<String> commands) { - return 0; - } - - @Override - public int execCommands(String summaryForLogging, List<String> commands, Map<String, ?> env) { - return 0; - } - - @Override public int execCommands(Map<String, ?> props, String summaryForLogging, List<String> commands, Map<String, ?> env) { return 0; } @Override - public int execScript(String summaryForLogging, List<String> commands) { - return 0; - } - - @Override - public int execScript(Map<String, ?> props, String summaryForLogging, List<String> commands) { - return 0; - } - - @Override - public int execScript(String summaryForLogging, List<String> commands, Map<String, ?> env) { - return 0; - } - - @Override public int execScript(Map<String, ?> props, String summaryForLogging, List<String> commands, Map<String, ?> env) { return 0; } diff --git a/software/winrm/src/main/java/org/apache/brooklyn/location/winrm/WinRmMachineLocation.java b/software/winrm/src/main/java/org/apache/brooklyn/location/winrm/WinRmMachineLocation.java index 1198697..37898f3 100644 --- a/software/winrm/src/main/java/org/apache/brooklyn/location/winrm/WinRmMachineLocation.java +++ b/software/winrm/src/main/java/org/apache/brooklyn/location/winrm/WinRmMachineLocation.java @@ -205,42 +205,12 @@ public class WinRmMachineLocation extends AbstractMachineLocation implements Mac } @Override - public int execCommands(String summaryForLogging, List<String> commands) { - return executeCommand(commands).getStatusCode(); - } - - @Override - public int execCommands(Map<String, ?> props, String summaryForLogging, List<String> commands) { - return executeCommand(props, commands).getStatusCode(); - } - - @Override - public int execCommands(String summaryForLogging, List<String> commands, Map<String, ?> env) { - return executeCommand(ImmutableMap.of(Winrm4jTool.ENVIRONMENT, env),commands).getStatusCode(); - } - - @Override public int execCommands(Map<String, ?> props, String summaryForLogging, List<String> commands, Map<String, ?> env) { ImmutableMap<Object, Object> properties = ImmutableMap.builder().putAll(props).put(Winrm4jTool.ENVIRONMENT, env).build(); return executeCommand(properties, commands).getStatusCode(); } @Override - public int execScript(String summaryForLogging, List<String> commands) { - return executePsScript(commands).getStatusCode(); - } - - @Override - public int execScript(Map<String, ?> props, String summaryForLogging, List<String> commands) { - return executePsScript(props, commands).getStatusCode(); - } - - @Override - public int execScript(String summaryForLogging, List<String> commands, Map<String, ?> env) { - return executePsScript(ImmutableMap.of(Winrm4jTool.ENVIRONMENT,env), commands).getStatusCode(); - } - - @Override public int execScript(Map<String, ?> props, String summaryForLogging, List<String> commands, Map<String, ?> env) { ImmutableMap<Object, Object> properties = ImmutableMap.builder().putAll(props).put(Winrm4jTool.ENVIRONMENT, env).build(); return executePsScript(properties, commands).getStatusCode(); @@ -556,12 +526,12 @@ public class WinRmMachineLocation extends AbstractMachineLocation implements Mac sgsO.setLogPrefix("[curl @ "+getAddress()+":stdout] ").start(); sgsE.setLogPrefix("[curl @ "+getAddress()+":stderr] ").start(); Map<String, ?> winrmProps = MutableMap.<String, Object>builder().putAll(props).put("out", outO).put("err", outE).build(); -// int result = execScript(winrmProps,"",ImmutableList.of( -// "$WebClient = New-Object System.Net.WebClient", -// "$WebClient.DownloadFile(" + url + "," + destPath + ")" -// )); - - int result = 1; + ImmutableList<String> commands = ImmutableList.of( + "echo $WebClient = New-Object System.Net.WebClient > C:\\temp.ps1", + "echo $WebClient.DownloadFile(" + url + "," + destPath + ") >> C:\\temp.ps1", + "powershell -c c:\\temp.ps1" + ); + int result = execCommands(winrmProps,"", commands, ImmutableMap.of()); if (result != 0) { LOG.debug("installing {} to {} on {}, curl failed, attempting local fetch and copy", new Object[] { url, destPath, this }); diff --git a/software/winrm/src/main/java/org/apache/brooklyn/util/core/internal/winrm/winrm4j/Winrm4jTool.java b/software/winrm/src/main/java/org/apache/brooklyn/util/core/internal/winrm/winrm4j/Winrm4jTool.java index 784e7d1..4295168 100644 --- a/software/winrm/src/main/java/org/apache/brooklyn/util/core/internal/winrm/winrm4j/Winrm4jTool.java +++ b/software/winrm/src/main/java/org/apache/brooklyn/util/core/internal/winrm/winrm4j/Winrm4jTool.java @@ -115,19 +115,12 @@ public class Winrm4jTool implements org.apache.brooklyn.util.core.internal.winrm @Override public org.apache.brooklyn.util.core.internal.winrm.WinRmToolResponse executeCommand(final List<String> commands) { - return exec(new Function<io.cloudsoft.winrm4j.winrm.WinRmTool, io.cloudsoft.winrm4j.winrm.WinRmToolResponse>() { - @Override public WinRmToolResponse apply(io.cloudsoft.winrm4j.winrm.WinRmTool tool) { - OutputStream outputStream = bag.get(ShellTool.PROP_OUT_STREAM); - OutputStream errorStream = bag.get(ShellTool.PROP_ERR_STREAM); - try(Writer out = outputStream != null ? new OutputStreamWriter(outputStream): new StringWriter(); - Writer err = errorStream != null ? new OutputStreamWriter(errorStream): new StringWriter()) { - return tool.executeCommand(commands, out, err); - } catch (IOException e) { - // TODO Duncan - e.printStackTrace(); - return null; - } - } + return exec(tool -> { + OutputStream outputStream = bag.get(ShellTool.PROP_OUT_STREAM); + OutputStream errorStream = bag.get(ShellTool.PROP_ERR_STREAM); + Writer out = outputStream != null ? new OutputStreamWriter(outputStream): new StringWriter(); + Writer err = errorStream != null ? new OutputStreamWriter(errorStream): new StringWriter(); + return tool.executeCommand(commands, out, err); }); } @@ -136,17 +129,15 @@ public class Winrm4jTool implements org.apache.brooklyn.util.core.internal.winrm public org.apache.brooklyn.util.core.internal.winrm.WinRmToolResponse executeScript(final List<String> commands) { return executeCommand(commands); } - + @Override public org.apache.brooklyn.util.core.internal.winrm.WinRmToolResponse executePs(final List<String> commands) { - return exec(new Function<io.cloudsoft.winrm4j.winrm.WinRmTool, io.cloudsoft.winrm4j.winrm.WinRmToolResponse>() { - @Override public WinRmToolResponse apply(io.cloudsoft.winrm4j.winrm.WinRmTool tool) { - OutputStream outputStream = bag.get(ShellTool.PROP_OUT_STREAM); - OutputStream errorStream = bag.get(ShellTool.PROP_ERR_STREAM); - Writer out = outputStream != null ? new OutputStreamWriter(outputStream): new StringWriter(); - Writer err = errorStream != null ? new OutputStreamWriter(errorStream): new StringWriter(); - return tool.executePs(commands, out, err); - } + return exec(tool -> { + OutputStream outputStream = bag.get(ShellTool.PROP_OUT_STREAM); + OutputStream errorStream = bag.get(ShellTool.PROP_ERR_STREAM); + Writer out = outputStream != null ? new OutputStreamWriter(outputStream): new StringWriter(); + Writer err = errorStream != null ? new OutputStreamWriter(errorStream): new StringWriter(); + return tool.executePs(commands, out, err); }); } @@ -161,9 +152,9 @@ public class Winrm4jTool implements org.apache.brooklyn.util.core.internal.winrm int i=0; while ((bytesRead = source.read(inputData)) > 0) { i++; - + LOG.debug("Copying chunk "+i+" to "+destination+" on "+host); - + byte[] chunk; if (bytesRead == chunkSize) { chunk = inputData; @@ -176,7 +167,7 @@ public class Winrm4jTool implements org.apache.brooklyn.util.core.internal.winrm expectedFileSize += bytesRead; } LOG.debug("Finished copying to "+destination+" on "+host); - + return new org.apache.brooklyn.util.core.internal.winrm.WinRmToolResponse("", "", 0); } catch (java.io.IOException e) { throw propagate(e, "Failed copying to server at "+destination); @@ -186,7 +177,7 @@ public class Winrm4jTool implements org.apache.brooklyn.util.core.internal.winrm private org.apache.brooklyn.util.core.internal.winrm.WinRmToolResponse exec(Function<io.cloudsoft.winrm4j.winrm.WinRmTool, io.cloudsoft.winrm4j.winrm.WinRmToolResponse> task) { Collection<Throwable> exceptions = Lists.newArrayList(); Stopwatch totalStopwatch = Stopwatch.createStarted(); - + for (int i = 0; i < execTries; i++) { Stopwatch stopwatch = Stopwatch.createStarted(); Duration connectTimestamp = null; @@ -212,7 +203,7 @@ public class Winrm4jTool implements org.apache.brooklyn.util.core.internal.winrm String timeMsg = "total time "+Duration.of(totalStopwatch).toStringRounded() + ", this attempt failed after "+Duration.of(failTimestamp).toStringRounded() + (connectTimestamp != null ? ", connected in "+Duration.of(connectTimestamp).toStringRounded() : ""); - + if ((i + 1) == execTries) { LOG.info("Propagating exception - WinRM failed on "+user+"@"+host+":"+port+" " + (logCredentials ? "password=" + password : "")