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/05/05 14:13:14 UTC

[1/5] incubator-brooklyn git commit: Support URLs in brooklyn.webconsole.security.keystore.url property

Repository: incubator-brooklyn
Updated Branches:
  refs/heads/master 78776caca -> d0cbcf36c


Support URLs in brooklyn.webconsole.security.keystore.url property

Even though the property is named url it supported local files only.


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

Branch: refs/heads/master
Commit: c2724cefb043706bc27d5a29fa7ef7fc0480ecae
Parents: d8a9a6f
Author: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Authored: Mon May 4 18:31:37 2015 +0300
Committer: Svetoslav Neykov <sv...@cloudsoftcorp.com>
Committed: Mon May 4 18:31:37 2015 +0300

----------------------------------------------------------------------
 .../brooklyn/launcher/BrooklynWebServer.java    | 26 +++++++++++++++++++-
 .../launcher/BrooklynWebServerTest.java         | 15 ++++++++---
 2 files changed, 37 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c2724cef/usage/launcher/src/main/java/brooklyn/launcher/BrooklynWebServer.java
----------------------------------------------------------------------
diff --git a/usage/launcher/src/main/java/brooklyn/launcher/BrooklynWebServer.java b/usage/launcher/src/main/java/brooklyn/launcher/BrooklynWebServer.java
index eaa1209..8112b13 100644
--- a/usage/launcher/src/main/java/brooklyn/launcher/BrooklynWebServer.java
+++ b/usage/launcher/src/main/java/brooklyn/launcher/BrooklynWebServer.java
@@ -19,6 +19,7 @@
 package brooklyn.launcher;
 
 import java.io.File;
+import java.io.InputStream;
 import java.net.InetAddress;
 import java.net.URI;
 import java.security.KeyPair;
@@ -75,9 +76,11 @@ import brooklyn.util.exceptions.Exceptions;
 import brooklyn.util.flags.FlagUtils;
 import brooklyn.util.flags.SetFromFlag;
 import brooklyn.util.flags.TypeCoercions;
+import brooklyn.util.io.FileUtil;
 import brooklyn.util.javalang.Threads;
 import brooklyn.util.logging.LoggingSetup;
 import brooklyn.util.os.Os;
+import brooklyn.util.stream.Streams;
 import brooklyn.util.text.Identifiers;
 import brooklyn.util.text.Strings;
 import brooklyn.util.web.ContextHandlerCollectionHotSwappable;
@@ -441,7 +444,7 @@ public class BrooklynWebServer {
         if (keystoreCertAlias==null) keystoreCertAlias = managementContext.getConfig().getConfig(BrooklynWebConfig.KEYSTORE_CERTIFICATE_ALIAS);
         
         if (keystoreUrl!=null) {
-            sslContextFactory.setKeyStorePath(ResourceUtils.create(this).checkUrlExists(keystoreUrl, BrooklynWebConfig.KEYSTORE_URL.getName()));
+            sslContextFactory.setKeyStorePath(getLocalKeyStorePath(keystoreUrl));
             if (Strings.isEmpty(keystorePassword))
                 throw new IllegalArgumentException("Keystore password is required and non-empty if keystore is specified.");
             sslContextFactory.setKeyStorePassword(keystorePassword);
@@ -478,6 +481,27 @@ public class BrooklynWebServer {
         return sslContextFactory;
     }
 
+    private String getLocalKeyStorePath(String keystoreUrl) {
+        ResourceUtils res = ResourceUtils.create(this);
+        res.checkUrlExists(keystoreUrl, BrooklynWebConfig.KEYSTORE_URL.getName());
+        if (new File(keystoreUrl).exists()) {
+            return keystoreUrl;
+        } else {
+            InputStream keystoreStream;
+            try {
+                keystoreStream = res.getResourceFromUrl(keystoreUrl);
+            } catch (Exception e) {
+                Exceptions.propagateIfFatal(e);
+                throw new IllegalArgumentException("Unable to access URL: "+keystoreUrl, e);
+            }
+            File tmp = Os.newTempFile("brooklyn-keystore", "ks");
+            tmp.deleteOnExit();
+            FileUtil.copyTo(keystoreStream, tmp);
+            Streams.closeQuietly(keystoreStream);
+            return tmp.getAbsolutePath();
+        }
+    }
+
     private String newTimestampedDirName(String prefix, int randomSuffixLength) {
         return prefix + "-" + new SimpleDateFormat("yyyyMMdd-HHmmss").format(new Date()) + "-" + Identifiers.makeRandomId(randomSuffixLength);
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c2724cef/usage/launcher/src/test/java/brooklyn/launcher/BrooklynWebServerTest.java
----------------------------------------------------------------------
diff --git a/usage/launcher/src/test/java/brooklyn/launcher/BrooklynWebServerTest.java b/usage/launcher/src/test/java/brooklyn/launcher/BrooklynWebServerTest.java
index d40d1a4..3b7e8f6 100644
--- a/usage/launcher/src/test/java/brooklyn/launcher/BrooklynWebServerTest.java
+++ b/usage/launcher/src/test/java/brooklyn/launcher/BrooklynWebServerTest.java
@@ -34,6 +34,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
+import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
 import brooklyn.config.BrooklynProperties;
@@ -89,11 +90,19 @@ public class BrooklynWebServerTest {
         }
     }
 
-    @Test
-    public void verifyHttps() throws Exception {
+    @DataProvider(name="keystorePaths")
+    public Object[][] getKeystorePaths() {
+        return new Object[][] {
+                {getFile("server.ks")},
+                {new File(getFile("server.ks")).toURI().toString()},
+                {"classpath://server.ks"}};
+    }
+    
+    @Test(dataProvider="keystorePaths")
+    public void verifyHttps(String keystoreUrl) throws Exception {
         Map<String,?> flags = ImmutableMap.<String,Object>builder()
                 .put("httpsEnabled", true)
-                .put("keystoreUrl", getFile("server.ks"))
+                .put("keystoreUrl", keystoreUrl)
                 .put("keystorePassword", "password")
                 .build();
         webServer = new BrooklynWebServer(flags, newManagementContext(brooklynProperties));


[2/5] incubator-brooklyn git commit: Adds EntityPredicates.hasInterfaceMatching

Posted by sj...@apache.org.
Adds EntityPredicates.hasInterfaceMatching


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

Branch: refs/heads/master
Commit: 7b57f99bbb04c7d66bafc251e49b8952350cd59a
Parents: 78776ca
Author: Sam Corbett <sa...@cloudsoftcorp.com>
Authored: Tue Apr 28 19:35:36 2015 +0100
Committer: Sam Corbett <sa...@cloudsoftcorp.com>
Committed: Tue May 5 12:14:56 2015 +0100

----------------------------------------------------------------------
 .../brooklyn/entity/basic/EntityPredicates.java | 35 ++++++++++++++++++--
 .../entity/basic/EntityPredicatesTest.java      | 11 ++++++
 2 files changed, 44 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7b57f99b/core/src/main/java/brooklyn/entity/basic/EntityPredicates.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/EntityPredicates.java b/core/src/main/java/brooklyn/entity/basic/EntityPredicates.java
index 5906d78..96ecb7a 100644
--- a/core/src/main/java/brooklyn/entity/basic/EntityPredicates.java
+++ b/core/src/main/java/brooklyn/entity/basic/EntityPredicates.java
@@ -19,6 +19,7 @@
 package brooklyn.entity.basic;
 
 import java.util.Collection;
+import java.util.regex.Pattern;
 
 import javax.annotation.Nullable;
 
@@ -30,6 +31,7 @@ import brooklyn.event.AttributeSensor;
 import brooklyn.location.Location;
 import brooklyn.util.collections.CollectionFunctionals;
 import brooklyn.util.guava.SerializablePredicate;
+import brooklyn.util.javalang.Reflections;
 import brooklyn.util.text.StringPredicates;
 
 import com.google.common.base.Objects;
@@ -271,9 +273,38 @@ public class EntityPredicates {
     // ---------------------------
 
     /**
+     * @param typeRegex a regular expression
+     * @return true if any of the interfaces implemented by the entity (including those derived) match typeRegex.
+     */
+    public static Predicate<Entity> hasInterfaceMatching(String typeRegex) {
+        return new ImplementsInterface(typeRegex);
+    }
+
+    protected static class ImplementsInterface implements SerializablePredicate<Entity> {
+        protected final Pattern pattern;
+
+        public ImplementsInterface(String typeRegex) {
+            this.pattern = Pattern.compile(typeRegex);
+        }
+
+        @Override
+        public boolean apply(@Nullable Entity input) {
+            if (input == null) return false;
+            for (Class<?> cls : Reflections.getAllInterfaces(input.getClass())) {
+                if (pattern.matcher(cls.getName()).matches()) {
+                    return true;
+                }
+            }
+            return false;
+        }
+    }
+
+    // ---------------------------
+
+    /**
      * Returns a predicate that determines if a given entity is a direct child of this {@code parent}.
      */
-    public static <T> Predicate<Entity> isChildOf(final Entity parent) {
+    public static Predicate<Entity> isChildOf(final Entity parent) {
         return new IsChildOf(parent);
     }
 
@@ -307,7 +338,7 @@ public class EntityPredicates {
 
     // ---------------------------
     
-    public static <T> Predicate<Entity> isMemberOf(final Group group) {
+    public static Predicate<Entity> isMemberOf(final Group group) {
         return new IsMemberOf(group);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7b57f99b/core/src/test/java/brooklyn/entity/basic/EntityPredicatesTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/basic/EntityPredicatesTest.java b/core/src/test/java/brooklyn/entity/basic/EntityPredicatesTest.java
index 9394b85..bfa6933 100644
--- a/core/src/test/java/brooklyn/entity/basic/EntityPredicatesTest.java
+++ b/core/src/test/java/brooklyn/entity/basic/EntityPredicatesTest.java
@@ -26,6 +26,7 @@ import org.testng.annotations.Test;
 
 import brooklyn.entity.BrooklynAppUnitTestSupport;
 import brooklyn.entity.proxying.EntitySpec;
+import brooklyn.entity.trait.Changeable;
 import brooklyn.location.Location;
 import brooklyn.test.entity.TestEntity;
 import brooklyn.util.text.StringPredicates;
@@ -113,4 +114,14 @@ public class EntityPredicatesTest extends BrooklynAppUnitTestSupport {
         assertTrue(EntityPredicates.locationsIncludes(loc).apply(entity));
         assertFalse(EntityPredicates.locationsIncludes(loc).apply(app));
     }
+
+    @Test
+    public void testHasInterfaceMatching() throws Exception {
+        assertTrue(EntityPredicates.hasInterfaceMatching(".*").apply(entity));
+        assertTrue(EntityPredicates.hasInterfaceMatching(".*TestEntity").apply(entity));
+        assertFalse(EntityPredicates.hasInterfaceMatching(".*TestEntity").apply(group));
+        assertTrue(EntityPredicates.hasInterfaceMatching(Changeable.class.getName()).apply(group));
+        assertTrue(EntityPredicates.hasInterfaceMatching(".*C.*able").apply(group));
+    }
+
 }


[3/5] incubator-brooklyn git commit: Rest ApplicationApi can filter applications by interface type

Posted by sj...@apache.org.
Rest ApplicationApi can filter applications by interface type


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

Branch: refs/heads/master
Commit: a5debedc395dca1aad887b55d446f069137ec535
Parents: 7b57f99
Author: Sam Corbett <sa...@cloudsoftcorp.com>
Authored: Tue Apr 28 20:14:02 2015 +0100
Committer: Sam Corbett <sa...@cloudsoftcorp.com>
Committed: Tue May 5 12:14:59 2015 +0100

----------------------------------------------------------------------
 .../src/main/java/brooklyn/rest/api/ApplicationApi.java |  6 ++++++
 .../brooklyn/rest/resources/ApplicationResource.java    | 12 ++++++++++++
 2 files changed, 18 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a5debedc/usage/rest-api/src/main/java/brooklyn/rest/api/ApplicationApi.java
----------------------------------------------------------------------
diff --git a/usage/rest-api/src/main/java/brooklyn/rest/api/ApplicationApi.java b/usage/rest-api/src/main/java/brooklyn/rest/api/ApplicationApi.java
index 9292197..865024a 100644
--- a/usage/rest-api/src/main/java/brooklyn/rest/api/ApplicationApi.java
+++ b/usage/rest-api/src/main/java/brooklyn/rest/api/ApplicationApi.java
@@ -76,6 +76,12 @@ public interface ApplicationApi {
             value = "Fetch list of applications, as ApplicationSummary objects",
             responseClass = "brooklyn.rest.domain.ApplicationSummary"
     )
+    public List<ApplicationSummary> list(
+            @ApiParam(value = "Regular expression to filter by", required = false)
+            @DefaultValue(".*")
+            @QueryParam("typeRegex") String typeRegex);
+
+    /** As {@link #list(String)}, filtering for <code>.*</code>. */
     public List<ApplicationSummary> list();
 
     @GET

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a5debedc/usage/rest-server/src/main/java/brooklyn/rest/resources/ApplicationResource.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/brooklyn/rest/resources/ApplicationResource.java b/usage/rest-server/src/main/java/brooklyn/rest/resources/ApplicationResource.java
index fbee750..27a93a9 100644
--- a/usage/rest-server/src/main/java/brooklyn/rest/resources/ApplicationResource.java
+++ b/usage/rest-server/src/main/java/brooklyn/rest/resources/ApplicationResource.java
@@ -22,6 +22,9 @@ import static com.google.common.base.Preconditions.checkNotNull;
 import static javax.ws.rs.core.Response.created;
 import static javax.ws.rs.core.Response.status;
 import static javax.ws.rs.core.Response.Status.ACCEPTED;
+
+import brooklyn.entity.basic.EntityPredicates;
+import brooklyn.util.text.Strings;
 import io.brooklyn.camp.spi.AssemblyTemplate;
 
 import java.io.StringReader;
@@ -216,9 +219,18 @@ public class ApplicationResource extends AbstractBrooklynRestResource implements
 
     @Override
     public List<ApplicationSummary> list() {
+        return list(".*");
+    }
+
+    @Override
+    public List<ApplicationSummary> list(String typeRegex) {
+        if (Strings.isBlank(typeRegex)) {
+            typeRegex = ".*";
+        }
         return FluentIterable
                 .from(mgmt().getApplications())
                 .filter(EntitlementPredicates.isEntitled(mgmt().getEntitlementManager(), Entitlements.SEE_ENTITY))
+                .filter(EntityPredicates.hasInterfaceMatching(typeRegex))
                 .transform(ApplicationTransformer.FROM_APPLICATION)
                 .toList();
     }


[4/5] incubator-brooklyn git commit: This closes #625

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


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

Branch: refs/heads/master
Commit: 91e6ab1b54fabd62e283095c9db498664dbbae17
Parents: 78776ca c2724ce
Author: Sam Corbett <sa...@cloudsoftcorp.com>
Authored: Tue May 5 12:45:49 2015 +0100
Committer: Sam Corbett <sa...@cloudsoftcorp.com>
Committed: Tue May 5 12:45:49 2015 +0100

----------------------------------------------------------------------
 .../brooklyn/launcher/BrooklynWebServer.java    | 26 +++++++++++++++++++-
 .../launcher/BrooklynWebServerTest.java         | 15 ++++++++---
 2 files changed, 37 insertions(+), 4 deletions(-)
----------------------------------------------------------------------



[5/5] incubator-brooklyn git commit: This closes #616

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


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

Branch: refs/heads/master
Commit: d0cbcf36cf701d9162be74a144cf1bd26741637e
Parents: 91e6ab1 a5debed
Author: Sam Corbett <sa...@cloudsoftcorp.com>
Authored: Tue May 5 12:46:30 2015 +0100
Committer: Sam Corbett <sa...@cloudsoftcorp.com>
Committed: Tue May 5 12:46:30 2015 +0100

----------------------------------------------------------------------
 .../brooklyn/entity/basic/EntityPredicates.java | 35 ++++++++++++++++++--
 .../entity/basic/EntityPredicatesTest.java      | 11 ++++++
 .../java/brooklyn/rest/api/ApplicationApi.java  |  6 ++++
 .../rest/resources/ApplicationResource.java     | 12 +++++++
 4 files changed, 62 insertions(+), 2 deletions(-)
----------------------------------------------------------------------