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/09/26 16:37:21 UTC
[4/5] brooklyn-server git commit: JcloudsLocation: pass relevant
config to child machine loc
JcloudsLocation: pass relevant config to child machine loc
Previously it only passed a small selection of the config to the child
location. But if you passed additional ssh config values in the
`provisioning.properties` then they wouldn\u2019t get passed through.
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/aba3f098
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/aba3f098
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/aba3f098
Branch: refs/heads/master
Commit: aba3f0980d7adfa1d7e9bf601c2ecbf1329a5a9e
Parents: 9c9dd47
Author: Aled Sage <al...@gmail.com>
Authored: Fri Sep 23 21:40:06 2016 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Fri Sep 23 21:40:06 2016 +0100
----------------------------------------------------------------------
...bstractCloudMachineProvisioningLocation.java | 35 ++++++++++++----
.../location/jclouds/JcloudsLocation.java | 42 +++++++++++++++-----
...cloudsSshMachineLocationStubbedLiveTest.java | 27 +++++++++++++
3 files changed, 86 insertions(+), 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/aba3f098/core/src/main/java/org/apache/brooklyn/core/location/cloud/AbstractCloudMachineProvisioningLocation.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/location/cloud/AbstractCloudMachineProvisioningLocation.java b/core/src/main/java/org/apache/brooklyn/core/location/cloud/AbstractCloudMachineProvisioningLocation.java
index 90d9f8b..9998834 100644
--- a/core/src/main/java/org/apache/brooklyn/core/location/cloud/AbstractCloudMachineProvisioningLocation.java
+++ b/core/src/main/java/org/apache/brooklyn/core/location/cloud/AbstractCloudMachineProvisioningLocation.java
@@ -24,17 +24,26 @@ import java.util.Map;
import org.apache.brooklyn.api.location.LocationSpec;
import org.apache.brooklyn.api.location.MachineLocation;
import org.apache.brooklyn.api.location.MachineProvisioningLocation;
+import org.apache.brooklyn.config.ConfigKey.HasConfigKey;
import org.apache.brooklyn.core.location.AbstractLocation;
+import org.apache.brooklyn.location.ssh.SshMachineLocation;
import org.apache.brooklyn.util.collections.MutableMap;
import org.apache.brooklyn.util.core.config.ConfigBag;
import org.apache.brooklyn.util.core.internal.ssh.SshTool;
+import org.apache.brooklyn.util.text.StringPredicates;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.collect.Maps;
public abstract class AbstractCloudMachineProvisioningLocation extends AbstractLocation
-implements MachineProvisioningLocation<MachineLocation>, CloudLocationConfig
-{
- public AbstractCloudMachineProvisioningLocation() {
- super();
- }
+ implements MachineProvisioningLocation<MachineLocation>, CloudLocationConfig {
+
+ private static final Logger LOG = LoggerFactory.getLogger(AbstractCloudMachineProvisioningLocation.class);
+
+ public AbstractCloudMachineProvisioningLocation() {
+ super();
+ }
/** typically wants at least ACCESS_IDENTITY and ACCESS_CREDENTIAL */
public AbstractCloudMachineProvisioningLocation(Map<?,?> conf) {
@@ -70,6 +79,19 @@ implements MachineProvisioningLocation<MachineLocation>, CloudLocationConfig
protected ConfigBag extractSshConfig(ConfigBag setup, ConfigBag alt) {
ConfigBag sshConfig = new ConfigBag();
+ for (HasConfigKey<?> key : SshMachineLocation.ALL_SSH_CONFIG_KEYS) {
+ String keyName = key.getConfigKey().getName();
+ if (setup.containsKey(keyName)) {
+ sshConfig.putStringKey(keyName, setup.getStringKey(keyName));
+ } else if (alt.containsKey(keyName)) {
+ sshConfig.putStringKey(keyName, setup.getStringKey(keyName));
+ }
+ }
+
+ Map<String, Object> sshToolClassProperties = Maps.filterKeys(setup.getAllConfig(), StringPredicates.startsWith(SshMachineLocation.SSH_TOOL_CLASS_PROPERTIES_PREFIX));
+ sshConfig.putAll(sshToolClassProperties);
+
+ // Special cases (preserving old code!)
if (setup.containsKey(PASSWORD)) {
sshConfig.copyKeyAs(setup, PASSWORD, SshTool.PROP_PASSWORD);
} else if (alt.containsKey(PASSWORD)) {
@@ -89,9 +111,6 @@ implements MachineProvisioningLocation<MachineLocation>, CloudLocationConfig
sshConfig.copyKeyAs(setup, PRIVATE_KEY_PASSPHRASE, SshTool.PROP_PRIVATE_KEY_PASSPHRASE);
}
- // TODO extract other SshTool properties ?
-
return sshConfig;
}
-
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/aba3f098/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 bc57874..4681ba7 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
@@ -28,7 +28,6 @@ import static org.jclouds.util.Throwables2.getFirstThrowableOfType;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
-import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.security.KeyPair;
@@ -129,6 +128,7 @@ import org.apache.brooklyn.util.stream.Streams;
import org.apache.brooklyn.util.text.ByteSizeStrings;
import org.apache.brooklyn.util.text.Identifiers;
import org.apache.brooklyn.util.text.KeyValueParser;
+import org.apache.brooklyn.util.text.StringPredicates;
import org.apache.brooklyn.util.text.Strings;
import org.apache.brooklyn.util.time.Duration;
import org.apache.brooklyn.util.time.Time;
@@ -2481,13 +2481,10 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
if (isManaged()) {
return getManagementContext().getLocationManager().createLocation(LocationSpec.create(JcloudsSshMachineLocation.class)
+ .configure(sshConfig)
.configure("displayName", vmHostname)
.configure("address", address)
.configure(JcloudsSshMachineLocation.SSH_PORT, sshHostAndPort.isPresent() ? sshHostAndPort.get().getPort() : node.getLoginPort())
- // don't think "config" does anything
- .configure(sshConfig)
- // FIXME remove "config" -- inserted directly, above
- .configure("config", sshConfig)
.configure("user", userCredentials.getUser())
.configure(SshMachineLocation.PASSWORD.getName(), sshConfig.get(SshMachineLocation.PASSWORD.getName()) != null ?
sshConfig.get(SshMachineLocation.PASSWORD.getName()) :
@@ -2509,13 +2506,10 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
} else {
LOG.warn("Using deprecated JcloudsSshMachineLocation constructor because "+this+" is not managed");
return new JcloudsSshMachineLocation(MutableMap.builder()
+ .putAll(sshConfig)
.put("displayName", vmHostname)
.put("address", address)
.put("port", sshHostAndPort.isPresent() ? sshHostAndPort.get().getPort() : node.getLoginPort())
- // don't think "config" does anything
- .putAll(sshConfig)
- // FIXME remove "config" -- inserted directly, above
- .put("config", sshConfig)
.put("user", userCredentials.getUser())
.putIfNotNull(SshMachineLocation.PASSWORD.getName(), sshConfig.get(SshMachineLocation.PASSWORD.getName()) != null ?
SshMachineLocation.PASSWORD.getName() :
@@ -2547,6 +2541,7 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
}
protected JcloudsWinRmMachineLocation createWinRmMachineLocation(ComputeService computeService, NodeMetadata node, String vmHostname, Optional<HostAndPort> sshHostAndPort, ConfigBag setup) {
+ Map<?,?> winrmConfig = extractWinrmConfig(setup, node);
String nodeAvailabilityZone = extractAvailabilityZone(setup, node);
String nodeRegion = extractRegion(setup, node);
if (nodeRegion == null) {
@@ -2558,13 +2553,13 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
if (isManaged()) {
return getManagementContext().getLocationManager().createLocation(LocationSpec.create(JcloudsWinRmMachineLocation.class)
+ .configure(winrmConfig)
.configure("jcloudsParent", this)
.configure("displayName", vmHostname)
.configure("address", address)
.configure(WinRmMachineLocation.WINRM_CONFIG_PORT, sshHostAndPort.isPresent() ? sshHostAndPort.get().getPort() : node.getLoginPort())
.configure("user", getUser(setup))
.configure(WinRmMachineLocation.USER, setup.get(USER))
- .configure(ConfigBag.newInstance().copyKeyAs(setup, PASSWORD, WinRmMachineLocation.PASSWORD).getAllConfigRaw())
.configure("node", node)
.configureIfNotNull(CLOUD_AVAILABILITY_ZONE_ID, nodeAvailabilityZone)
.configureIfNotNull(CLOUD_REGION_ID, nodeRegion)
@@ -2590,6 +2585,33 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
return extractSshConfig(setup, nodeConfig).getAllConfig();
}
+ protected Map<String,Object> extractWinrmConfig(ConfigBag setup, NodeMetadata node) {
+ ConfigBag nodeConfig = new ConfigBag();
+ if (node!=null && node.getCredentials() != null) {
+ nodeConfig.putIfNotNull(PASSWORD, node.getCredentials().getOptionalPassword().orNull());
+ nodeConfig.putIfNotNull(PRIVATE_KEY_DATA, node.getCredentials().getOptionalPrivateKey().orNull());
+ }
+ return extractWinrmConfig(setup, nodeConfig).getAllConfig();
+ }
+
+ protected ConfigBag extractWinrmConfig(ConfigBag setup, ConfigBag alt) {
+ ConfigBag winrmConfig = new ConfigBag();
+
+ for (HasConfigKey<?> key : WinRmMachineLocation.ALL_WINRM_CONFIG_KEYS) {
+ String keyName = key.getConfigKey().getName();
+ if (setup.containsKey(keyName)) {
+ winrmConfig.putStringKey(keyName, setup.getStringKey(keyName));
+ } else if (alt.containsKey(keyName)) {
+ winrmConfig.putStringKey(keyName, setup.getStringKey(keyName));
+ }
+ }
+
+ Map<String, Object> winrmToolClassProperties = Maps.filterKeys(setup.getAllConfig(), StringPredicates.startsWith(WinRmMachineLocation.WINRM_TOOL_CLASS_PROPERTIES_PREFIX));
+ winrmConfig.putAll(winrmToolClassProperties);
+
+ return winrmConfig;
+ }
+
protected String extractAvailabilityZone(ConfigBag setup, NodeMetadata node) {
return extractNodeLocationId(setup, node, LocationScope.ZONE);
}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/aba3f098/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsSshMachineLocationStubbedLiveTest.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsSshMachineLocationStubbedLiveTest.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsSshMachineLocationStubbedLiveTest.java
index ca89d12..be29cdc 100644
--- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsSshMachineLocationStubbedLiveTest.java
+++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsSshMachineLocationStubbedLiveTest.java
@@ -25,9 +25,14 @@ import java.util.Map;
import org.apache.brooklyn.location.jclouds.StubbedComputeServiceRegistry.AbstractNodeCreator;
import org.apache.brooklyn.location.jclouds.StubbedComputeServiceRegistry.NodeCreator;
+import org.apache.brooklyn.location.ssh.SshMachineLocation;
+import org.apache.brooklyn.location.winrm.WinRmMachineLocation;
+import org.apache.brooklyn.util.core.internal.ssh.SshTool;
+import org.apache.brooklyn.util.core.internal.winrm.WinRmTool;
import org.jclouds.compute.domain.NodeMetadata;
import org.jclouds.compute.domain.NodeMetadata.Status;
import org.jclouds.compute.domain.NodeMetadataBuilder;
+import org.jclouds.compute.domain.OsFamily;
import org.jclouds.compute.domain.Template;
import org.jclouds.domain.LoginCredentials;
import org.slf4j.Logger;
@@ -97,4 +102,26 @@ public class JcloudsSshMachineLocationStubbedLiveTest extends AbstractJcloudsStu
assertEquals(machine.getSubnetIp(), privateAddresses.get(0));
assertEquals(machine.getSubnetHostname(), privateAddresses.get(0));
}
+
+ @Test(groups={"Live", "Live-sanity"})
+ public void testSshConfigPassedToMachine() throws Exception {
+ JcloudsSshMachineLocation machine = obtainMachine(ImmutableMap.of(
+ SshMachineLocation.LOCAL_TEMP_DIR.getName(), "/my/local/temp/dir",
+ SshMachineLocation.LOG_PREFIX.getName(), "myLogPrefix",
+ SshTool.PROP_SSH_TRIES, 123));
+ assertEquals(machine.config().get(SshMachineLocation.LOCAL_TEMP_DIR), "/my/local/temp/dir");
+ assertEquals(machine.config().get(SshMachineLocation.LOG_PREFIX), "myLogPrefix");
+ assertEquals(machine.config().get(SshTool.PROP_SSH_TRIES), Integer.valueOf(123));
+ }
+
+ @Test(groups={"Live", "Live-sanity"})
+ public void testWinrmConfigPassedToMachine() throws Exception {
+ JcloudsWinRmMachineLocation machine = obtainWinrmMachine(ImmutableMap.of(
+ JcloudsLocation.OS_FAMILY_OVERRIDE.getName(), OsFamily.WINDOWS,
+ JcloudsLocation.WAIT_FOR_WINRM_AVAILABLE.getName(), "false",
+ WinRmMachineLocation.COPY_FILE_CHUNK_SIZE_BYTES.getName(), 123,
+ WinRmTool.PROP_EXEC_TRIES.getName(), 456));
+ assertEquals(machine.config().get(WinRmMachineLocation.COPY_FILE_CHUNK_SIZE_BYTES), Integer.valueOf(123));
+ assertEquals(machine.config().get(WinRmTool.PROP_EXEC_TRIES), Integer.valueOf(456));
+ }
}