You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by sv...@apache.org on 2016/02/11 16:05:41 UTC
[1/2] brooklyn-server git commit: Upgrade winrm4j to version 0.3.1
Repository: brooklyn-server
Updated Branches:
refs/heads/master f9a59e5d4 -> 5b01f8fb2
Upgrade winrm4j to version 0.3.1
- added config key for use Https or not
- added config key for using NTLM
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/8b9f3ac2
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/8b9f3ac2
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/8b9f3ac2
Branch: refs/heads/master
Commit: 8b9f3ac25551d2ec0a85bcb7211e57e543b6ec58
Parents: f9a59e5
Author: Valentin Aitken <bo...@gmail.com>
Authored: Tue Feb 2 00:24:52 2016 +0200
Committer: Valentin Aitken <bo...@gmail.com>
Committed: Thu Feb 11 16:47:12 2016 +0200
----------------------------------------------------------------------
.../camp/brooklyn/ByonLocationsYamlTest.java | 2 +-
.../location/jclouds/JcloudsLocation.java | 11 +--
.../jclouds/JcloudsWinRmMachineLocation.java | 5 --
.../brooklyn/logback-logger-excludes.xml | 2 +
pom.xml | 2 +-
.../software/base/EmptyWindowsProcess.java | 2 +-
.../base/EmptyWindowsProcessWinRmDriver.java | 3 +-
.../software/base/VanillaWindowsProcess.java | 6 +-
.../base/VanillaWindowsProcessImpl.java | 9 ++-
.../base/VanillaWindowsProcessWinRmDriver.java | 3 +-
.../location/WinRmMachineLocationLiveTest.java | 2 +-
.../winrm/AdvertiseWinrmLoginPolicy.java | 3 +-
.../location/winrm/WinRmMachineLocation.java | 74 ++++++++++++++++----
.../util/core/internal/winrm/WinRmTool.java | 13 +++-
.../internal/winrm/winrm4j/Winrm4jTool.java | 19 ++++-
15 files changed, 121 insertions(+), 35 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8b9f3ac2/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ByonLocationsYamlTest.java
----------------------------------------------------------------------
diff --git a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ByonLocationsYamlTest.java b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ByonLocationsYamlTest.java
index ff89c25..31faa35 100644
--- a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ByonLocationsYamlTest.java
+++ b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/ByonLocationsYamlTest.java
@@ -266,7 +266,7 @@ public class ByonLocationsYamlTest extends AbstractYamlTest {
private void assertMachine(WinRmMachineLocation machine, UserAndHostAndPort conn, Map<String, ?> config) {
assertEquals(machine.getAddress().getHostAddress(), conn.getHostAndPort().getHostText());
- assertEquals(machine.getConfig(WinRmMachineLocation.WINRM_PORT), (Integer) conn.getHostAndPort().getPort());
+ assertEquals(machine.getPort(), conn.getHostAndPort().getPort());
assertEquals(machine.getUser(), conn.getUser());
for (Map.Entry<String, ?> entry : config.entrySet()) {
Object actualVal = machine.getConfig(ConfigKeys.newConfigKey(Object.class, entry.getKey()));
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8b9f3ac2/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
index 05972a2..23b3d8c 100644
--- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
+++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocation.java
@@ -731,7 +731,7 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
boolean windows = isWindows(node, setup);
if (windows) {
- int newLoginPort = node.getLoginPort() == 22 ? 5985 : node.getLoginPort();
+ int newLoginPort = node.getLoginPort() == 22 ? (getConfig(WinRmMachineLocation.USE_HTTPS_WINRM) ? 5986 : 5985) : node.getLoginPort();
String newLoginUser = "root".equals(node.getCredentials().getUser()) ? "Administrator" : node.getCredentials().getUser();
LOG.debug("jclouds created Windows VM {}; transforming connection details: loginPort from {} to {}; loginUser from {} to {}",
new Object[] {node, node.getLoginPort(), newLoginPort, node.getCredentials().getUser(), newLoginUser});
@@ -1535,7 +1535,7 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
boolean windows = isWindows(template, config);
if (windows) {
if (!(config.containsKey(JcloudsLocationConfig.USER_METADATA_STRING) || config.containsKey(JcloudsLocationConfig.USER_METADATA_MAP))) {
- config.put(JcloudsLocationConfig.USER_METADATA_STRING, WinRmMachineLocation.getDefaultUserMetadataString());
+ config.put(JcloudsLocationConfig.USER_METADATA_STRING, WinRmMachineLocation.getDefaultUserMetadataString(config()));
}
}
@@ -2297,7 +2297,7 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
.configure("jcloudsParent", this)
.configure("displayName", vmHostname)
.configure("address", address)
- .configure(WinRmMachineLocation.WINRM_PORT, sshHostAndPort.isPresent() ? sshHostAndPort.get().getPort() : node.getLoginPort())
+ .configure(WinRmMachineLocation.WINRM_CONFIG_PORT, sshHostAndPort.isPresent() ? sshHostAndPort.get().getPort() : node.getLoginPort())
.configure("user", getUser(setup))
.configure(WinRmMachineLocation.USER, setup.get(USER))
.configure(WinRmMachineLocation.PASSWORD, setup.get(PASSWORD))
@@ -2476,7 +2476,7 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
hostAndPortOverride = ((SshMachineLocation)machine).getSshHostAndPort();
} else if (machine instanceof WinRmMachineLocation) {
String host = ((WinRmMachineLocation)machine).getAddress().getHostAddress();
- int port = ((WinRmMachineLocation)machine).config().get(WinRmMachineLocation.WINRM_PORT);
+ int port = ((WinRmMachineLocation)machine).getPort();
hostAndPortOverride = HostAndPort.fromParts(host, port);
} else {
LOG.warn("Unexpected machine {} of type {}; expected SSH or WinRM", machine, (machine != null ? machine.getClass() : null));
@@ -2644,7 +2644,8 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
String user = (users.size() == 1) ? Iterables.getOnlyElement(users) : "{" + Joiner.on(",").join(users) + "}";
String vmIp = hostAndPortOverride.isPresent() ? hostAndPortOverride.get().getHostText() : getFirstReachableAddress(node, setup);
if (vmIp==null) LOG.warn("Unable to extract IP for "+node+" ("+setup.getDescription()+"): subsequent connection attempt will likely fail");
- int vmPort = hostAndPortOverride.isPresent() ? hostAndPortOverride.get().getPortOrDefault(5985) : 5985;
+ int defaultWinRmPort = getConfig(WinRmMachineLocation.USE_HTTPS_WINRM) ? 5986 : 5985;
+ int vmPort = hostAndPortOverride.isPresent() ? hostAndPortOverride.get().getPortOrDefault(defaultWinRmPort) : defaultWinRmPort;
String connectionDetails = user + "@" + vmIp + ":" + vmPort;
final HostAndPort hostAndPort = hostAndPortOverride.isPresent() ? hostAndPortOverride.get() : HostAndPort.fromParts(vmIp, vmPort);
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8b9f3ac2/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsWinRmMachineLocation.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsWinRmMachineLocation.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsWinRmMachineLocation.java
index b58e783..7a2fe3d 100644
--- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsWinRmMachineLocation.java
+++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsWinRmMachineLocation.java
@@ -162,11 +162,6 @@ public class JcloudsWinRmMachineLocation extends WinRmMachineLocation implements
}
@Override
- public int getPort() {
- return getConfig(WINRM_PORT);
- }
-
- @Override
public JcloudsLocation getParent() {
return jcloudsParent;
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8b9f3ac2/logging/logback-includes/src/main/resources/brooklyn/logback-logger-excludes.xml
----------------------------------------------------------------------
diff --git a/logging/logback-includes/src/main/resources/brooklyn/logback-logger-excludes.xml b/logging/logback-includes/src/main/resources/brooklyn/logback-logger-excludes.xml
index 9f8738b..93e6138 100644
--- a/logging/logback-includes/src/main/resources/brooklyn/logback-logger-excludes.xml
+++ b/logging/logback-includes/src/main/resources/brooklyn/logback-logger-excludes.xml
@@ -61,4 +61,6 @@
<appender-ref ref="FILE" />
</logger>
+ <logger name="org.apache.cxf" level="WARN"/>
+ <logger name="io.cloudsoft.winrm4j.winrm.WinRmTool" level="WARN"/>
</included>
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8b9f3ac2/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 5078260..c1e2003 100644
--- a/pom.xml
+++ b/pom.xml
@@ -147,7 +147,7 @@
<jsr311-api.version>1.1.1</jsr311-api.version>
<maxmind.version>0.8.1</maxmind.version>
<jna.version>4.0.0</jna.version>
- <winrm4j.version>0.2.0</winrm4j.version>
+ <winrm4j.version>0.3.1</winrm4j.version>
<!-- Transitive dependencies, declared explicitly to avoid version mismatch -->
<clojure.version>1.4.0</clojure.version>
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8b9f3ac2/software/base/src/main/java/org/apache/brooklyn/entity/software/base/EmptyWindowsProcess.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/EmptyWindowsProcess.java b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/EmptyWindowsProcess.java
index 770ba0d..b0b1efc 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/EmptyWindowsProcess.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/EmptyWindowsProcess.java
@@ -32,7 +32,7 @@ public interface EmptyWindowsProcess extends SoftwareProcess {
// 3389 is RDP; 5985 is WinRM (3389 isn't used by Brooklyn, but useful for the end-user subsequently)
ConfigKey<Collection<Integer>> REQUIRED_OPEN_LOGIN_PORTS = ConfigKeys.newConfigKeyWithDefault(
SoftwareProcess.REQUIRED_OPEN_LOGIN_PORTS,
- ImmutableSet.of(5985, 3389));
+ ImmutableSet.of(5986, 5985, 3389));
ConfigKey<Boolean> USE_WINRM_MONITORING = ConfigKeys.newConfigKey("winrmMonitoring.enabled", "WinRM monitoring enabled", Boolean.TRUE);
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8b9f3ac2/software/base/src/main/java/org/apache/brooklyn/entity/software/base/EmptyWindowsProcessWinRmDriver.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/EmptyWindowsProcessWinRmDriver.java b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/EmptyWindowsProcessWinRmDriver.java
index 4a9a054..98d40d87 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/EmptyWindowsProcessWinRmDriver.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/EmptyWindowsProcessWinRmDriver.java
@@ -23,6 +23,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
import org.apache.brooklyn.core.entity.Attributes;
import org.apache.brooklyn.location.winrm.WinRmMachineLocation;
+import org.apache.brooklyn.util.core.internal.winrm.WinRmTool;
import org.apache.brooklyn.util.net.UserAndHostAndPort;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -40,7 +41,7 @@ public class EmptyWindowsProcessWinRmDriver extends AbstractSoftwareProcessWinRm
@Override
public void start() {
WinRmMachineLocation machine = (WinRmMachineLocation) location;
- UserAndHostAndPort winrmAddress = UserAndHostAndPort.fromParts(machine.getUser(), machine.getAddress().getHostName(), machine.config().get(WinRmMachineLocation.WINRM_PORT));
+ UserAndHostAndPort winrmAddress = UserAndHostAndPort.fromParts(machine.getUser(), machine.getAddress().getHostName(), entity.getConfig(WinRmTool.PROP_PORT));
getEntity().sensors().set(Attributes.WINRM_ADDRESS, winrmAddress);
super.start();
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8b9f3ac2/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcess.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcess.java b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcess.java
index b08e990..eb64063 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcess.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcess.java
@@ -26,7 +26,9 @@ import org.apache.brooklyn.api.entity.ImplementedBy;
import org.apache.brooklyn.api.sensor.AttributeSensor;
import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.core.config.ConfigKeys;
+import org.apache.brooklyn.core.sensor.AttributeSensorAndConfigKey;
import org.apache.brooklyn.core.sensor.Sensors;
+import org.apache.brooklyn.util.core.internal.winrm.WinRmTool;
import org.apache.brooklyn.util.time.Duration;
import com.google.common.collect.ImmutableSet;
@@ -37,7 +39,7 @@ public interface VanillaWindowsProcess extends AbstractVanillaProcess {
// 3389 is RDP; 5985 is WinRM (3389 isn't used by Brooklyn, but useful for the end-user subsequently)
ConfigKey<Collection<Integer>> REQUIRED_OPEN_LOGIN_PORTS = ConfigKeys.newConfigKeyWithDefault(
SoftwareProcess.REQUIRED_OPEN_LOGIN_PORTS,
- ImmutableSet.of(5985, 3389));
+ ImmutableSet.of(5986, 5985, 3389));
@CatalogConfig(label = "Install PowerShell command", priority=5.5)
ConfigKey<String> INSTALL_POWERSHELL_COMMAND = ConfigKeys.newStringConfigKey("install.powershell.command",
@@ -103,5 +105,5 @@ public interface VanillaWindowsProcess extends AbstractVanillaProcess {
"duration to wait whilst waiting for a machine to finish rebooting, and thus to become available again", Duration.minutes(30));
AttributeSensor<Integer> RDP_PORT = Sensors.newIntegerSensor("rdpPort");
- AttributeSensor<Integer> WINRM_PORT = Sensors.newIntegerSensor("winrmPort");
+ AttributeSensor<Integer> WINRM_PORT = Sensors.newIntegerSensor(WinRmTool.PROP_PORT.getName());
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8b9f3ac2/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcessImpl.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcessImpl.java b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcessImpl.java
index fec3100..b6a7d0e 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcessImpl.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcessImpl.java
@@ -19,6 +19,10 @@
package org.apache.brooklyn.entity.software.base;
+import com.google.common.collect.Iterables;
+import org.apache.brooklyn.api.location.Location;
+import org.apache.brooklyn.location.winrm.WinRmMachineLocation;
+
public class VanillaWindowsProcessImpl extends SoftwareProcessImpl implements VanillaWindowsProcess {
@Override
public Class getDriverInterface() {
@@ -29,7 +33,10 @@ public class VanillaWindowsProcessImpl extends SoftwareProcessImpl implements Va
protected void preStart() {
super.preStart();
sensors().set(RDP_PORT, 3389);
- sensors().set(WINRM_PORT, 5985);
+ WinRmMachineLocation loc = Iterables.getFirst(Iterables.filter(getLocations(), WinRmMachineLocation.class), null);
+ if (loc != null) {
+ sensors().set(WINRM_PORT, loc.getPort());
+ }
}
@Override
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8b9f3ac2/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcessWinRmDriver.java
----------------------------------------------------------------------
diff --git a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcessWinRmDriver.java b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcessWinRmDriver.java
index 67c57f8..027c0c8 100644
--- a/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcessWinRmDriver.java
+++ b/software/base/src/main/java/org/apache/brooklyn/entity/software/base/VanillaWindowsProcessWinRmDriver.java
@@ -21,6 +21,7 @@ package org.apache.brooklyn.entity.software.base;
import org.apache.brooklyn.api.entity.EntityLocal;
import org.apache.brooklyn.core.entity.Attributes;
import org.apache.brooklyn.location.winrm.WinRmMachineLocation;
+import org.apache.brooklyn.util.core.internal.winrm.WinRmTool;
import org.apache.brooklyn.util.net.UserAndHostAndPort;
import org.apache.brooklyn.util.text.Strings;
import org.slf4j.Logger;
@@ -36,7 +37,7 @@ public class VanillaWindowsProcessWinRmDriver extends AbstractSoftwareProcessWin
@Override
public void start() {
WinRmMachineLocation machine = (WinRmMachineLocation) location;
- UserAndHostAndPort winrmAddress = UserAndHostAndPort.fromParts(machine.getUser(), machine.getAddress().getHostName(), machine.config().get(WinRmMachineLocation.WINRM_PORT));
+ UserAndHostAndPort winrmAddress = UserAndHostAndPort.fromParts(machine.getUser(), machine.getAddress().getHostName(), entity.getAttribute(VanillaWindowsProcess.WINRM_PORT));
getEntity().sensors().set(Attributes.WINRM_ADDRESS, winrmAddress);
super.start();
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8b9f3ac2/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/location/WinRmMachineLocationLiveTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/location/WinRmMachineLocationLiveTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/location/WinRmMachineLocationLiveTest.java
index 2e34ef7..bf22419 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/location/WinRmMachineLocationLiveTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/test/location/WinRmMachineLocationLiveTest.java
@@ -100,7 +100,7 @@ public class WinRmMachineLocationLiveTest {
loc = newLoc(mgmt);
machine = loc.obtain(ImmutableMap.of());
- LOG.info("PROVISIONED: "+machine.getAddress()+":"+machine.config().get(WinRmMachineLocation.WINRM_PORT)
+ LOG.info("PROVISIONED: "+machine.getAddress()+":"+machine.getPort()
+", "+machine.getUser()+":"+machine.config().get(WinRmMachineLocation.PASSWORD));
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8b9f3ac2/software/winrm/src/main/java/org/apache/brooklyn/location/winrm/AdvertiseWinrmLoginPolicy.java
----------------------------------------------------------------------
diff --git a/software/winrm/src/main/java/org/apache/brooklyn/location/winrm/AdvertiseWinrmLoginPolicy.java b/software/winrm/src/main/java/org/apache/brooklyn/location/winrm/AdvertiseWinrmLoginPolicy.java
index 5d3a0c8..6ea9763 100644
--- a/software/winrm/src/main/java/org/apache/brooklyn/location/winrm/AdvertiseWinrmLoginPolicy.java
+++ b/software/winrm/src/main/java/org/apache/brooklyn/location/winrm/AdvertiseWinrmLoginPolicy.java
@@ -27,6 +27,7 @@ import org.apache.brooklyn.api.sensor.SensorEventListener;
import org.apache.brooklyn.core.entity.AbstractEntity;
import org.apache.brooklyn.core.policy.AbstractPolicy;
import org.apache.brooklyn.core.sensor.Sensors;
+import org.apache.brooklyn.util.core.internal.winrm.WinRmTool;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -68,7 +69,7 @@ public class AdvertiseWinrmLoginPolicy extends AbstractPolicy implements SensorE
protected void advertiseUserAsync(final Entity entity, final WinRmMachineLocation machine) {
String user = machine.getUser();
String hostname = machine.getHostname();
- int port = machine.config().get(WinRmMachineLocation.WINRM_PORT);
+ int port = machine.getPort();
String password = machine.config().get(WinRmMachineLocation.PASSWORD);
String creds = user + " : " + password + " @ " +hostname + ":" + port;
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8b9f3ac2/software/winrm/src/main/java/org/apache/brooklyn/location/winrm/WinRmMachineLocation.java
----------------------------------------------------------------------
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 d04c366..fefc1ba 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
@@ -29,6 +29,7 @@ import java.util.Set;
import javax.annotation.Nullable;
+import com.google.common.annotations.Beta;
import org.apache.brooklyn.api.location.MachineDetails;
import org.apache.brooklyn.api.location.MachineLocation;
import org.apache.brooklyn.api.location.OsDetails;
@@ -46,6 +47,7 @@ import org.apache.brooklyn.util.core.internal.winrm.WinRmTool;
import org.apache.brooklyn.util.core.internal.winrm.WinRmToolResponse;
import org.apache.brooklyn.util.core.internal.winrm.winrm4j.Winrm4jTool;
import org.apache.brooklyn.util.exceptions.Exceptions;
+import org.apache.brooklyn.util.guava.Maybe;
import org.apache.brooklyn.util.stream.Streams;
import org.apache.brooklyn.util.text.Strings;
import org.apache.commons.codec.binary.Base64;
@@ -63,6 +65,8 @@ import com.google.common.collect.Iterables;
import com.google.common.net.HostAndPort;
import com.google.common.reflect.TypeToken;
+import static org.apache.brooklyn.core.config.ConfigKeys.newConfigKeyWithPrefix;
+
public class WinRmMachineLocation extends AbstractLocation implements MachineLocation {
private static final Logger LOG = LoggerFactory.getLogger(WinRmMachineLocation.class);
@@ -72,8 +76,19 @@ public class WinRmMachineLocation extends AbstractLocation implements MachineLoc
"address",
"Address of the remote machine");
- public static final ConfigKey<Integer> WINRM_PORT = WinRmTool.PROP_PORT;
-
+ public static final ConfigKey<Integer> WINRM_CONFIG_PORT = newConfigKeyWithPrefix(BrooklynConfigKeys.BROOKLYN_WINRM_CONFIG_KEY_PREFIX, WinRmTool.PROP_PORT);
+ public static final ConfigKey<Boolean> USE_HTTPS_WINRM = WinRmTool.USE_HTTPS_WINRM;
+
+
+ /**
+ * Flag which tells winrm whether to use Basic Authentication
+ * or Negotiate plus NTLM.
+ * winrm.useNtlm parameter could be a subject to change.
+ * TODO Winrm supports several authentication mechanisms so it would be better to replace it with a prioritised list of authentication mechanisms to try.
+ */
+ @Beta
+ public static final ConfigKey<Boolean> USE_NTLM = WinRmTool.USE_NTLM;
+
// TODO merge with {link SshTool#PROP_USER} and {@link SshMachineLocation#user}?
public static final ConfigKey<String> USER = WinRmTool.PROP_USER;
@@ -197,7 +212,21 @@ public class WinRmMachineLocation extends AbstractLocation implements MachineLoc
@Nullable
protected String getHostAndPort() {
String host = getHostname();
- return (host == null) ? null : host + ":" + config().get(WINRM_PORT);
+ return (host == null) ? null : host + ":" + getDefaultPort();
+ }
+
+ public int getPort() {
+ Maybe<Object> raw = config().getRaw(WinRmTool.PROP_PORT);
+ if (raw.orNull() == null && config().getRaw(WINRM_CONFIG_PORT).orNull() != null) {
+ return config().get(WINRM_CONFIG_PORT);
+ } else {
+ Integer result = config().get(WinRmTool.PROP_PORT);
+ return (result != null) ? result : getDefaultPort();
+ }
+ }
+
+ private int getDefaultPort() {
+ return getConfig(USE_HTTPS_WINRM) ? 5986 : 5985;
}
@Override
@@ -309,6 +338,9 @@ public class WinRmMachineLocation extends AbstractLocation implements MachineLoc
args.putAll(props);
args.configure(SshTool.PROP_HOST, getAddress().getHostAddress());
+ args.configure(WinRmTool.USE_NTLM, getConfig(WinRmMachineLocation.USE_NTLM));
+ args.configure(WinRmTool.USE_HTTPS_WINRM, getConfig(WinRmMachineLocation.USE_HTTPS_WINRM));
+ args.configure(WinRmTool.PROP_PORT, getPort());
if (LOG.isTraceEnabled()) LOG.trace("creating WinRM session for "+Sanitizer.sanitize(args));
@@ -349,7 +381,7 @@ public class WinRmMachineLocation extends AbstractLocation implements MachineLoc
return response.getStatusCode();
}
- public static String getDefaultUserMetadataString() {
+ public static String getDefaultUserMetadataString(ConfigurationSupportInternal config) {
// Using an encoded command obviates the need to escape
String unencodePowershell = Joiner.on("\r\n").join(ImmutableList.of(
// Allow TS connections
@@ -388,20 +420,38 @@ public class WinRmMachineLocation extends AbstractLocation implements MachineLoc
"}"
));
+ // FIXME USE_HTTPS_WINRM
+ // Missing generate certificate step.
+ // https://support.microsoft.com/en-us/kb/2019527
+ //
+ // One possible approach is to generate a certificate and append it to this command.
+ // http://stackoverflow.com/questions/1615871/creating-an-x509-certificate-in-java-without-bouncycastle
+ //
+ // @neykov:
+ // The certificate is best generated on the machine, without leaving it ever (for self-signed case). On the other hand it's not possible to get the public part at this step.
+ // I see this setup step dissappearing longer term (or keeping it minimalistic).
+ // Instead do something like the jclouds init sequence where it connects with whatever is provided by the cloud, then configuring it to our liking.
+ boolean useSecureWinrm = config.getBag().get(USE_HTTPS_WINRM);
+
+ boolean basicAuth = !config.getBag().get(USE_NTLM), allowUnencrypted = !useSecureWinrm;
+ int port = useSecureWinrm ? 5986 : 5985;
+
String encoded = new String(Base64.encodeBase64(unencodePowershell.getBytes(Charsets.UTF_16LE)));
- return "winrm quickconfig -q & " +
- "winrm set winrm/config/service/auth @{Basic=\"true\"} & " +
- "winrm set winrm/config/service/auth @{CredSSP=\"true\"} & " +
- "winrm set winrm/config/client/auth @{CredSSP=\"true\"} & " +
- "winrm set winrm/config/client @{AllowUnencrypted=\"true\"} & " +
- "winrm set winrm/config/service @{AllowUnencrypted=\"true\"} & " +
+ return String.format("winrm quickconfig -q & " +
+ "winrm set winrm/config/service/auth @{Basic=\"%1$s\"} & " +
+ "winrm set winrm/config/service @{AllowUnencrypted=\"%2$s\"} & " +
"winrm set winrm/config/winrs @{MaxConcurrentUsers=\"100\"} & " +
"winrm set winrm/config/winrs @{MaxMemoryPerShellMB=\"0\"} & " +
"winrm set winrm/config/winrs @{MaxProcessesPerShell=\"0\"} & " +
"winrm set winrm/config/winrs @{MaxShellsPerUser=\"0\"} & " +
"netsh advfirewall firewall add rule name=RDP dir=in protocol=tcp localport=3389 action=allow profile=any & " +
- "netsh advfirewall firewall add rule name=WinRM dir=in protocol=tcp localport=5985 action=allow profile=any & " +
- "powershell -EncodedCommand " + encoded;
+ "netsh advfirewall firewall add rule name=WinRM dir=in protocol=tcp localport=%3$d action=allow profile=any & " +
+ "powershell -EncodedCommand ",
+ basicAuth,
+ allowUnencrypted,
+ port
+ )
+ + encoded;
/* TODO: Find out why scripts with new line characters aren't working on AWS. The following appears as if it *should*
work but doesn't - the script simply isn't run. By connecting to the machine via RDP, you can get the script
from 'http://169.254.169.254/latest/user-data', and running it at the command prompt works, but for some
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8b9f3ac2/software/winrm/src/main/java/org/apache/brooklyn/util/core/internal/winrm/WinRmTool.java
----------------------------------------------------------------------
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 5515ec5..c93e2ca 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
@@ -28,6 +28,7 @@ import java.util.List;
import org.apache.brooklyn.config.ConfigKey;
import org.apache.brooklyn.core.config.ConfigKeys;
import org.apache.brooklyn.core.entity.BrooklynConfigKeys;
+import org.apache.brooklyn.core.sensor.AttributeSensorAndConfigKey;
import org.apache.brooklyn.util.time.Duration;
import com.google.common.annotations.Beta;
@@ -43,7 +44,17 @@ public interface WinRmTool {
"static final initializer classload ordering problem");
ConfigKey<String> PROP_HOST = newStringConfigKey("host", "Host to connect to (required)", null);
- ConfigKey<Integer> PROP_PORT = newIntegerConfigKey("port", "WinRM port to use when connecting to the remote machine", 5985);
+ ConfigKey<Integer> PROP_PORT = ConfigKeys.newIntegerConfigKey("port", "WinRM port to use when connecting to the remote machine");
+ ConfigKey<Boolean> USE_HTTPS_WINRM = ConfigKeys.newBooleanConfigKey("winrm.useHttps", "The parameter configures tells the machine sensors whether the winrm port is over https. If the parameter is true then 5986 will be used as a winrm port.", false);
+
+ /**
+ * Flag which tells winrm whether to use Basic Authentication
+ * or Negotiate plus NTLM.
+ * winrm.useNtlm parameter could be a subject to change.
+ * TODO Winrm supports several authentication mechanisms so it would be better to replace it with a prioritised list of authentication mechanisms to try.
+ */
+ @Beta
+ ConfigKey<Boolean> USE_NTLM = ConfigKeys.newBooleanConfigKey("winrm.useNtlm", "The parameter configures tells the machine sensors whether the winrm port is over https. If the parameter is true then 5986 will be used as a winrm port.", true);
ConfigKey<String> PROP_USER = newStringConfigKey("user", "User to connect as", null);
ConfigKey<String> PROP_PASSWORD = newStringConfigKey("password", "Password to use to connect", null);
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/8b9f3ac2/software/winrm/src/main/java/org/apache/brooklyn/util/core/internal/winrm/winrm4j/Winrm4jTool.java
----------------------------------------------------------------------
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 e023cfb..2de8c39 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
@@ -35,6 +35,7 @@ import org.apache.brooklyn.util.exceptions.Exceptions;
import org.apache.brooklyn.util.time.Duration;
import org.apache.brooklyn.util.time.Time;
import org.apache.commons.codec.binary.Base64;
+import org.apache.http.client.config.AuthSchemes;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -67,6 +68,8 @@ public class Winrm4jTool implements org.apache.brooklyn.util.core.internal.winrm
private final int execTries;
private final Duration execRetryDelay;
private final boolean logCredentials;
+ private final Boolean useSecureWinrm;
+ private final String authenticationScheme;
public Winrm4jTool(Map<String,?> config) {
this(ConfigBag.newInstance(config));
@@ -75,7 +78,9 @@ public class Winrm4jTool implements org.apache.brooklyn.util.core.internal.winrm
public Winrm4jTool(ConfigBag config) {
this.bag = checkNotNull(config, "config bag");
host = getRequiredConfig(config, PROP_HOST);
- port = getRequiredConfig(config, PROP_PORT);
+ port = config.get(PROP_PORT);
+ useSecureWinrm = config.get(USE_HTTPS_WINRM);
+ authenticationScheme = config.get(USE_NTLM) ? AuthSchemes.NTLM : null;
user = getRequiredConfig(config, PROP_USER);
password = getRequiredConfig(config, PROP_PASSWORD);
execTries = getRequiredConfig(config, PROP_EXEC_TRIES);
@@ -184,7 +189,17 @@ public class Winrm4jTool implements org.apache.brooklyn.util.core.internal.winrm
}
private io.cloudsoft.winrm4j.winrm.WinRmTool connect() {
- return io.cloudsoft.winrm4j.winrm.WinRmTool.connect(host+":"+port, user, password);
+ WinRmTool.Builder builder = WinRmTool.Builder.builder(host, user, password);
+ builder.setAuthenticationScheme(authenticationScheme);
+ builder.useHttps(useSecureWinrm);
+ builder.port(port);
+
+ // FIXME USE_HTTPS_WINRM shouldn't disable certificates checks
+ // However to do that Winrm4JTool should also support whitelisting certificates.
+ if (useSecureWinrm) {
+ builder.disableCertificateChecks(true);
+ }
+ return builder.build();
}
private <T> T getRequiredConfig(ConfigBag bag, ConfigKey<T> key) {
[2/2] brooklyn-server git commit: Closes #1
Posted by sv...@apache.org.
Closes #1
Upgrade winrm4j to version 0.3.1
- added config key for use Https or not
- added config key for using NTLM
- refactor WINRM_PORT usage
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/5b01f8fb
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/5b01f8fb
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/5b01f8fb
Branch: refs/heads/master
Commit: 5b01f8fb2d3aa1d999cd5065994de0737b128876
Parents: f9a59e5 8b9f3ac
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Thu Feb 11 17:04:22 2016 +0200
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Thu Feb 11 17:04:22 2016 +0200
----------------------------------------------------------------------
.../camp/brooklyn/ByonLocationsYamlTest.java | 2 +-
.../location/jclouds/JcloudsLocation.java | 11 +--
.../jclouds/JcloudsWinRmMachineLocation.java | 5 --
.../brooklyn/logback-logger-excludes.xml | 2 +
pom.xml | 2 +-
.../software/base/EmptyWindowsProcess.java | 2 +-
.../base/EmptyWindowsProcessWinRmDriver.java | 3 +-
.../software/base/VanillaWindowsProcess.java | 6 +-
.../base/VanillaWindowsProcessImpl.java | 9 ++-
.../base/VanillaWindowsProcessWinRmDriver.java | 3 +-
.../location/WinRmMachineLocationLiveTest.java | 2 +-
.../winrm/AdvertiseWinrmLoginPolicy.java | 3 +-
.../location/winrm/WinRmMachineLocation.java | 74 ++++++++++++++++----
.../util/core/internal/winrm/WinRmTool.java | 13 +++-
.../internal/winrm/winrm4j/Winrm4jTool.java | 19 ++++-
15 files changed, 121 insertions(+), 35 deletions(-)
----------------------------------------------------------------------