Repository: brooklyn-server Updated Branches: refs/heads/master 15447e113 -> 52852b696
Adds JcloudsLocationCustomizer hook to allow node / config configuration Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/4b29d032 Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/4b29d032 Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/4b29d032 Branch: refs/heads/master Commit: 4b29d0325a65eee23a30f3bd93aed6f3b6937da4 Parents: 15447e1 Author: Martin Harris <[email protected]> Authored: Mon May 15 10:34:32 2017 +0100 Committer: Martin Harris <[email protected]> Committed: Mon May 15 14:13:55 2017 +0100 ---------------------------------------------------------------------- .../util/core/internal/ssh/SshTool.java | 4 ++++ .../jclouds/BasicJcloudsLocationCustomizer.java | 6 ++++++ .../location/jclouds/JcloudsLocation.java | 4 ++++ .../jclouds/JcloudsLocationCustomizer.java | 9 +++++++++ .../JcloudsSshMachineLocationStubbedTest.java | 21 ++++++++++++++++++++ .../util/core/internal/winrm/WinRmTool.java | 4 ++++ 6 files changed, 48 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/4b29d032/core/src/main/java/org/apache/brooklyn/util/core/internal/ssh/SshTool.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/util/core/internal/ssh/SshTool.java b/core/src/main/java/org/apache/brooklyn/util/core/internal/ssh/SshTool.java index 8906f1b..94c8609 100644 --- a/core/src/main/java/org/apache/brooklyn/util/core/internal/ssh/SshTool.java +++ b/core/src/main/java/org/apache/brooklyn/util/core/internal/ssh/SshTool.java @@ -86,6 +86,10 @@ public interface SshTool extends ShellTool { public static final ConfigKey<Long> PROP_LAST_MODIFICATION_DATE = newConfigKey("lastModificationDate", "Last-modification-date to be set on files copied/created (should be UTC/1000, ie seconds since 1970; default 0 usually means current)", 0L); public static final ConfigKey<Long> PROP_LAST_ACCESS_DATE = newConfigKey("lastAccessDate", "Last-access-date to be set on files copied/created (should be UTC/1000, ie seconds since 1970; default 0 usually means lastModificationDate)", 0L); public static final ConfigKey<Integer> PROP_OWNER_UID = newConfigKey("ownerUid", "Default owner UID (not username) for files created on remote machine; default is unset", -1); + + ConfigKey<String> ADDITIONAL_CONNECTION_METADATA = newStringConfigKey("additional.connection.metadata", + "Can be used to pass additional custom data to the SshTool, which is especially useful " + + "if writing a bespoke tool implementation"); // TODO remove unnecessary "public static final" modifiers http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/4b29d032/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/BasicJcloudsLocationCustomizer.java ---------------------------------------------------------------------- diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/BasicJcloudsLocationCustomizer.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/BasicJcloudsLocationCustomizer.java index 93f53c0..c410e5c 100644 --- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/BasicJcloudsLocationCustomizer.java +++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/BasicJcloudsLocationCustomizer.java @@ -34,6 +34,7 @@ import org.apache.brooklyn.core.objs.BasicConfigurableObject; import org.apache.brooklyn.util.core.config.ConfigBag; import org.apache.brooklyn.util.core.task.Tasks; import org.jclouds.compute.ComputeService; +import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.Template; import org.jclouds.compute.domain.TemplateBuilder; import org.jclouds.compute.options.TemplateOptions; @@ -104,6 +105,11 @@ public class BasicJcloudsLocationCustomizer extends BasicConfigurableObject impl } @Override + public void customize(JcloudsLocation location, NodeMetadata node, ConfigBag setup) { + // no-op + } + + @Override public void customize(JcloudsLocation location, ComputeService computeService, JcloudsMachineLocation machine) { // no-op } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/4b29d032/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 6eb7719..de71585 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 @@ -756,6 +756,10 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im if (node == null) throw new IllegalStateException("No nodes returned by jclouds create-nodes in " + getCreationString(setup)); + for (JcloudsLocationCustomizer customizer : customizers) { + customizer.customize(this, node, setup); + } + boolean windows = isWindows(node, setup); if (windows) { http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/4b29d032/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocationCustomizer.java ---------------------------------------------------------------------- diff --git a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocationCustomizer.java b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocationCustomizer.java index 192077b..b61fce6 100644 --- a/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocationCustomizer.java +++ b/locations/jclouds/src/main/java/org/apache/brooklyn/location/jclouds/JcloudsLocationCustomizer.java @@ -18,7 +18,9 @@ */ package org.apache.brooklyn.location.jclouds; +import org.apache.brooklyn.util.core.config.ConfigBag; import org.jclouds.compute.ComputeService; +import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.Template; import org.jclouds.compute.domain.TemplateBuilder; import org.jclouds.compute.options.TemplateOptions; @@ -61,6 +63,13 @@ public interface JcloudsLocationCustomizer { */ void customize(JcloudsLocation location, ComputeService computeService, TemplateOptions templateOptions); + + /** + * Override to configure the {@link NodeMetadata}, and {@link ConfigBag} that will be used when + * connecting to the machine. + */ + void customize(JcloudsLocation location, NodeMetadata node, ConfigBag setup); + /** * Override to configure the given machine once it has been created and started by Jclouds. * <p> http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/4b29d032/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsSshMachineLocationStubbedTest.java ---------------------------------------------------------------------- diff --git a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsSshMachineLocationStubbedTest.java b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsSshMachineLocationStubbedTest.java index b61a53f..5c7647a 100644 --- a/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsSshMachineLocationStubbedTest.java +++ b/locations/jclouds/src/test/java/org/apache/brooklyn/location/jclouds/JcloudsSshMachineLocationStubbedTest.java @@ -18,14 +18,20 @@ */ package org.apache.brooklyn.location.jclouds; +import static org.apache.brooklyn.location.jclouds.JcloudsLocationConfig.JCLOUDS_LOCATION_CUSTOMIZERS; +import static org.apache.brooklyn.util.core.internal.ssh.SshTool.ADDITIONAL_CONNECTION_METADATA; import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertNotNull; import java.util.List; +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.config.ConfigBag; +import org.apache.brooklyn.util.core.internal.ssh.RecordingSshTool; import org.apache.brooklyn.util.core.internal.ssh.SshTool; import org.apache.brooklyn.util.core.internal.winrm.WinRmTool; import org.jclouds.compute.domain.NodeMetadata; @@ -118,4 +124,19 @@ public class JcloudsSshMachineLocationStubbedTest extends AbstractJcloudsStubbed assertEquals(machine.config().get(WinRmMachineLocation.COPY_FILE_CHUNK_SIZE_BYTES), Integer.valueOf(123)); assertEquals(machine.config().get(WinRmTool.PROP_EXEC_TRIES), Integer.valueOf(456)); } + + @Test + public void testNodeSetupCustomizer() throws Exception { + final String testMetadata = "test-metadata"; + obtainMachine(ImmutableMap.of(JCLOUDS_LOCATION_CUSTOMIZERS, ImmutableList.of(new BasicJcloudsLocationCustomizer(){ + @Override + public void customize(JcloudsLocation location, NodeMetadata node, ConfigBag setup) { + assertNotNull(node, "node"); + assertNotNull(location, "location"); + setup.configure(ADDITIONAL_CONNECTION_METADATA, testMetadata); + } + }))); + Map<?, ?> lastConstructorProps = RecordingSshTool.getLastConstructorProps(); + assertEquals(lastConstructorProps.get(ADDITIONAL_CONNECTION_METADATA.getName()), testMetadata); + } } http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/4b29d032/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 2cfb310..5706489 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 @@ -86,6 +86,10 @@ public interface WinRmTool { "Size of file chunks (in bytes) to be used when copying a file to the remote server", 1024); + ConfigKey<String> ADDITIONAL_CONNECTION_METADATA = newStringConfigKey("additional.connection.metadata", + "Can be used to pass additional custom data to the WinrmTool, which is especially useful " + + "if writing a bespoke tool implementation"); + /** * @deprecated since 0.9.0; use {@link #executeCommand(List)} to avoid ambiguity between native command and power shell. */
