You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by sj...@apache.org on 2015/11/18 19:30:53 UTC

[1/2] incubator-brooklyn git commit: Config supplied to SshTool’s constructor

Repository: incubator-brooklyn
Updated Branches:
  refs/heads/master 3e40b2bfd -> f271d5ccf


Config supplied to SshTool’s constructor


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/63afa0fa
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/63afa0fa
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/63afa0fa

Branch: refs/heads/master
Commit: 63afa0fabc11653863e51106a014603513527fdc
Parents: 443ed5e
Author: Aled Sage <al...@gmail.com>
Authored: Wed Nov 11 16:41:40 2015 +0000
Committer: Aled Sage <al...@gmail.com>
Committed: Thu Nov 12 14:38:20 2015 +0000

----------------------------------------------------------------------
 .../location/ssh/SshMachineLocation.java        | 41 ++++++++++++++---
 .../ssh/SshMachineLocationSshToolTest.java      | 47 +++++++++++++++++---
 .../location/ssh/SshMachineLocationTest.java    |  4 +-
 .../core/internal/ssh/RecordingSshTool.java     |  7 +++
 .../brooklyn/entity/java/JavaOptsTest.java      |  4 +-
 .../entity/software/base/EntitySshToolTest.java |  8 +++-
 6 files changed, 92 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/63afa0fa/core/src/main/java/org/apache/brooklyn/location/ssh/SshMachineLocation.java
----------------------------------------------------------------------
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 7daa523..b71e47d 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
@@ -18,8 +18,6 @@
  */
 package org.apache.brooklyn.location.ssh;
 
-import static org.apache.brooklyn.core.config.ConfigKeys.newConfigKeyWithPrefix;
-import static org.apache.brooklyn.core.config.ConfigKeys.newStringConfigKey;
 import static org.apache.brooklyn.util.groovy.GroovyJavaMethods.truth;
 
 import java.io.Closeable;
@@ -148,6 +146,25 @@ public class SshMachineLocation extends AbstractLocation implements MachineLocat
             BrooklynConfigKeys.BROOKLYN_SSH_CONFIG_KEY_PREFIX,
             Preconditions.checkNotNull(BrooklynConfigKeys.SSH_TOOL_CLASS, "static final initializer classload ordering problem"));
 
+    /** 
+     * Prefix for config key:values to be passed to the ssh tool on construction. For example, 
+     * one could define the location below. When executing ssh commands, it would instantiate
+     * an instance of {@code com.acme.brooklyn.MyCustomSshTool}, calling its constructor with a
+     * {@code Map<String, Object>} that contained the configuration. In this case, the map would
+     * include: {@code address=1.2.3.4}; {@code user=myname}; and {@code myparam=myvalue}.
+     * 
+     * <pre>
+     * {@code
+     * brooklyn.location.named.myLocation = byon:(hosts=1.2.3.4,user=myname)
+     * brooklyn.location.named.myLocation.sshToolClass = com.acme.brooklyn.MyCustomSshTool
+     * brooklyn.location.named.myLocation.sshToolClass.myparam = myvalue
+     * }
+     * }
+     * </pre>
+     * <p>
+     */
+    public static final String SSH_TOOL_CLASS_PROPERTIES_PREFIX = SSH_TOOL_CLASS.getName()+".";
+
     public static final ConfigKey<Duration> SSH_CACHE_EXPIRY_DURATION = ConfigKeys.newConfigKey(Duration.class,
             "sshCacheExpiryDuration", "Expiry time for unused cached ssh connections", Duration.FIVE_MINUTES);
 
@@ -580,10 +597,19 @@ public class SshMachineLocation extends AbstractLocation implements MachineLocat
                 .configure(SshTool.PROP_HOST, address.getHostName());
 
             for (Map.Entry<String,Object> entry: config().getBag().getAllConfig().entrySet()) {
+                boolean include = false;
                 String key = entry.getKey();
                 if (key.startsWith(SshTool.BROOKLYN_CONFIG_KEY_PREFIX)) {
                     key = Strings.removeFromStart(key, SshTool.BROOKLYN_CONFIG_KEY_PREFIX);
-                } else if (ALL_SSH_CONFIG_KEY_NAMES.contains(entry.getKey())) {
+                    include = true;
+                }
+                
+                if (key.startsWith(SSH_TOOL_CLASS_PROPERTIES_PREFIX)) {
+                    key = Strings.removeFromStart(key, SSH_TOOL_CLASS_PROPERTIES_PREFIX);
+                    include = true;
+                }
+                
+                if (ALL_SSH_CONFIG_KEY_NAMES.contains(entry.getKey())) {
                     // key should be included, and does not need to be changed
 
                     // TODO make this config-setting mechanism more universal
@@ -591,11 +617,12 @@ public class SshMachineLocation extends AbstractLocation implements MachineLocat
                     // thinking either we know about the tool here,
                     // or we don't allow unadorned keys to be set
                     // (require use of BROOKLYN_CONFIG_KEY_PREFIX)
-                } else {
-                    // this key is not applicable here; ignore it
-                    continue;
+                    include = true;
+                }
+                
+                if (include) {
+                    args.putStringKey(key, entry.getValue());
                 }
-                args.putStringKey(key, entry.getValue());
             }
 
             // Explicit props trump all.

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/63afa0fa/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationSshToolTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationSshToolTest.java b/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationSshToolTest.java
index daa9233..cec7ab0 100644
--- a/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationSshToolTest.java
+++ b/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationSshToolTest.java
@@ -18,9 +18,13 @@
  */
 package org.apache.brooklyn.location.ssh;
 
+import static org.testng.Assert.assertEquals;
 import static org.testng.Assert.assertTrue;
 
+import java.util.Map;
+
 import org.apache.brooklyn.api.location.LocationSpec;
+import org.apache.brooklyn.api.location.MachineProvisioningLocation;
 import org.apache.brooklyn.core.test.BrooklynAppUnitTestSupport;
 import org.apache.brooklyn.util.core.internal.ssh.RecordingSshTool;
 import org.apache.brooklyn.util.core.internal.ssh.RecordingSshTool.ExecCmd;
@@ -30,9 +34,12 @@ import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.Iterables;
 
 /**
- * Test that the right SshTool is picked up, based on the {@link SshMachineLocation}'s configuration.
+ * Test that the right SshTool is picked up (and configured), based on the 
+ * {@link SshMachineLocation}'s configuration.
  */
 public class SshMachineLocationSshToolTest extends BrooklynAppUnitTestSupport {
 
@@ -41,18 +48,18 @@ public class SshMachineLocationSshToolTest extends BrooklynAppUnitTestSupport {
     // configuration options. If you *just* instantiate the location directly, then it doesn't get the
     // mgmt.config options.
     //
-    // See EntitySshToolTest for an equivalent that configures the SshTool on the management context
-    // and on the entity.
+    // See EntitySshToolTest in software-base for an equivalent that configures the SshTool on the 
+    // management context and on the entity.
     
     @BeforeMethod(alwaysRun=true)
     public void setUp() throws Exception {
         super.setUp();
-        RecordingSshTool.execScriptCmds.clear();
+        RecordingSshTool.clear();
     }
 
     @AfterMethod(alwaysRun=true)
     public void tearDown() throws Exception {
-        RecordingSshTool.execScriptCmds.clear();
+        RecordingSshTool.clear();
         super.tearDown();
     }
 
@@ -82,7 +89,35 @@ public class SshMachineLocationSshToolTest extends BrooklynAppUnitTestSupport {
                 .configure(SshTool.PROP_TOOL_CLASS.getName(), "class.does.not.exist"));
         runCustomSshToolClass(machine);
     }
-    
+
+    @Test
+    @SuppressWarnings("unchecked")
+    public void testCustomSshToolDefinedOnNamedLocation() throws Exception {
+        mgmt.getBrooklynProperties().putAll(ImmutableMap.of(
+                "brooklyn.location.named.localhostWithCustomTool", "localhost",
+                "brooklyn.location.named.localhostWithCustomTool."+SshMachineLocation.SSH_TOOL_CLASS.getName(), RecordingSshTool.class.getName()));
+        MachineProvisioningLocation<SshMachineLocation> loc = (MachineProvisioningLocation<SshMachineLocation>) mgmt.getLocationRegistry().resolve("localhostWithCustomTool");
+        SshMachineLocation machine = loc.obtain(ImmutableMap.of());
+        runCustomSshToolClass(machine);
+    }
+
+    @Test
+    @SuppressWarnings("unchecked")
+    public void testCustomSshToolWithCustomConfigDefinedOnNamedLocation() throws Exception {
+        mgmt.getBrooklynProperties().putAll(ImmutableMap.of(
+                "brooklyn.location.named.localhostWithCustomTool", "byon:(hosts=127.0.0.1, user=myname)",
+                "brooklyn.location.named.localhostWithCustomTool."+SshMachineLocation.SSH_TOOL_CLASS.getName(), RecordingSshTool.class.getName(),
+                "brooklyn.location.named.localhostWithCustomTool."+SshMachineLocation.SSH_TOOL_CLASS.getName()+".myparam", "myvalue"));
+        MachineProvisioningLocation<SshMachineLocation> loc = (MachineProvisioningLocation<SshMachineLocation>) mgmt.getLocationRegistry().resolve("localhostWithCustomTool");
+        SshMachineLocation machine = loc.obtain(ImmutableMap.of());
+        runCustomSshToolClass(machine);
+        
+        Map<?, ?> props = Iterables.getLast(RecordingSshTool.constructorProps);
+        assertEquals(props.get("myparam"), "myvalue", "props="+props);
+        assertEquals(props.get("host"), "127.0.0.1", "props="+props);
+        assertEquals(props.get("user"), "myname", "props="+props);
+    }
+
     protected void runCustomSshToolClass(SshMachineLocation host2) throws Exception {
         host2.execCommands("mySummary", ImmutableList.of("myCommand"));
         

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/63afa0fa/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationTest.java b/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationTest.java
index e7f7c57..c9d8ef7 100644
--- a/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationTest.java
+++ b/core/src/test/java/org/apache/brooklyn/location/ssh/SshMachineLocationTest.java
@@ -91,7 +91,7 @@ public class SshMachineLocationTest extends BrooklynAppUnitTestSupport {
         super.setUp();
         host = mgmt.getLocationManager().createLocation(LocationSpec.create(SshMachineLocation.class)
                 .configure("address", Networking.getLocalHost()));
-        RecordingSshTool.execScriptCmds.clear();
+        RecordingSshTool.clear();
     }
 
     @AfterMethod(alwaysRun=true)
@@ -99,7 +99,7 @@ public class SshMachineLocationTest extends BrooklynAppUnitTestSupport {
         try {
             if (host != null) Streams.closeQuietly(host);
         } finally {
-            RecordingSshTool.execScriptCmds.clear();
+            RecordingSshTool.clear();
             super.tearDown();
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/63afa0fa/core/src/test/java/org/apache/brooklyn/util/core/internal/ssh/RecordingSshTool.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/util/core/internal/ssh/RecordingSshTool.java b/core/src/test/java/org/apache/brooklyn/util/core/internal/ssh/RecordingSshTool.java
index c1e8006..b31299d 100644
--- a/core/src/test/java/org/apache/brooklyn/util/core/internal/ssh/RecordingSshTool.java
+++ b/core/src/test/java/org/apache/brooklyn/util/core/internal/ssh/RecordingSshTool.java
@@ -51,10 +51,17 @@ public class RecordingSshTool implements SshTool {
     }
     
     public static List<ExecCmd> execScriptCmds = Lists.newCopyOnWriteArrayList();
+    public static List<Map<?,?>> constructorProps = Lists.newCopyOnWriteArrayList();
     
     private boolean connected;
     
+    public static void clear() {
+        execScriptCmds.clear();
+        constructorProps.clear();
+    }
+    
     public RecordingSshTool(Map<?,?> props) {
+        constructorProps.add(props);
     }
     @Override public void connect() {
         connected = true;

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/63afa0fa/software/base/src/test/java/org/apache/brooklyn/entity/java/JavaOptsTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/java/JavaOptsTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/java/JavaOptsTest.java
index 2928f2c..15243c5 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/java/JavaOptsTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/java/JavaOptsTest.java
@@ -64,7 +64,7 @@ public class JavaOptsTest extends BrooklynAppUnitTestSupport {
     @BeforeMethod(alwaysRun=true)
     @Override
     public void setUp() throws Exception {
-        RecordingSshTool.execScriptCmds.clear();
+        RecordingSshTool.clear();
         super.setUp();
         loc = mgmt.getLocationManager().createLocation(LocationSpec.create(SshMachineLocation.class)
                 .configure("address", "localhost")
@@ -75,7 +75,7 @@ public class JavaOptsTest extends BrooklynAppUnitTestSupport {
     @Override
     public void tearDown() throws Exception {
         super.tearDown();
-        RecordingSshTool.execScriptCmds.clear();
+        RecordingSshTool.clear();
     }
     
     @Test

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/63afa0fa/software/base/src/test/java/org/apache/brooklyn/entity/software/base/EntitySshToolTest.java
----------------------------------------------------------------------
diff --git a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/EntitySshToolTest.java b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/EntitySshToolTest.java
index 12464ef..ecb9be9 100644
--- a/software/base/src/test/java/org/apache/brooklyn/entity/software/base/EntitySshToolTest.java
+++ b/software/base/src/test/java/org/apache/brooklyn/entity/software/base/EntitySshToolTest.java
@@ -26,6 +26,7 @@ import org.apache.brooklyn.core.entity.BrooklynConfigKeys;
 import org.apache.brooklyn.core.test.BrooklynAppUnitTestSupport;
 import org.apache.brooklyn.entity.machine.MachineEntity;
 import org.apache.brooklyn.location.ssh.SshMachineLocation;
+import org.apache.brooklyn.location.ssh.SshMachineLocationSshToolTest;
 import org.apache.brooklyn.util.core.internal.ssh.RecordingSshTool;
 import org.apache.brooklyn.util.core.internal.ssh.RecordingSshTool.ExecCmd;
 import org.testng.annotations.AfterMethod;
@@ -36,6 +37,9 @@ import com.google.common.collect.ImmutableList;
 
 /**
  * Test that the right SshTool is picked up, based on the entity's configuration.
+ * See {@link SshMachineLocationSshToolTest} for more tests. These ones are just
+ * for those involving the entity (and the config on the top-level brooklyn properties,
+ * as we need a {@link MachineEntity} to do that.
  */
 public class EntitySshToolTest extends BrooklynAppUnitTestSupport {
 
@@ -44,7 +48,7 @@ public class EntitySshToolTest extends BrooklynAppUnitTestSupport {
     @BeforeMethod(alwaysRun=true)
     public void setUp() throws Exception {
         super.setUp();
-        RecordingSshTool.execScriptCmds.clear();
+        RecordingSshTool.clear();
         
         machine = mgmt.getLocationManager().createLocation(LocationSpec.create(SshMachineLocation.class)
                 .configure("address", "localhost"));
@@ -52,7 +56,7 @@ public class EntitySshToolTest extends BrooklynAppUnitTestSupport {
 
     @AfterMethod(alwaysRun=true)
     public void tearDown() throws Exception {
-        RecordingSshTool.execScriptCmds.clear();
+        RecordingSshTool.clear();
         super.tearDown();
     }
 


[2/2] incubator-brooklyn git commit: This closes #1022

Posted by sj...@apache.org.
This closes #1022

Config supplied to SshTool's constructor


Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/f271d5cc
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/f271d5cc
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/f271d5cc

Branch: refs/heads/master
Commit: f271d5ccf73876ab0323c5c038dab79f1899565a
Parents: 3e40b2b 63afa0f
Author: Sam Corbett <sa...@cloudsoftcorp.com>
Authored: Wed Nov 18 18:28:50 2015 +0000
Committer: Sam Corbett <sa...@cloudsoftcorp.com>
Committed: Wed Nov 18 18:28:50 2015 +0000

----------------------------------------------------------------------
 .../location/ssh/SshMachineLocation.java        | 41 ++++++++++++++---
 .../ssh/SshMachineLocationSshToolTest.java      | 47 +++++++++++++++++---
 .../location/ssh/SshMachineLocationTest.java    |  4 +-
 .../core/internal/ssh/RecordingSshTool.java     |  7 +++
 .../brooklyn/entity/java/JavaOptsTest.java      |  4 +-
 .../entity/software/base/EntitySshToolTest.java |  8 +++-
 6 files changed, 92 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f271d5cc/core/src/main/java/org/apache/brooklyn/location/ssh/SshMachineLocation.java
----------------------------------------------------------------------