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

Reply via email to