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/10/12 06:47:23 UTC

[2/3] brooklyn-server git commit: Adds OnPublicNetworkEnricher.addressSensor config

Adds OnPublicNetworkEnricher.addressSensor config

If set, it will advertise the public address based on the IP/hostname
advertised in this sensor, rather than using he PortForwardManager.

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

Branch: refs/heads/master
Commit: 2a4e6eac6a330f4b7d16f2fb5b1653c519298b47
Parents: ebbd377
Author: Aled Sage <al...@gmail.com>
Authored: Tue Oct 11 22:57:57 2016 +0100
Committer: Aled Sage <al...@gmail.com>
Committed: Tue Oct 11 22:57:57 2016 +0100

----------------------------------------------------------------------
 .../core/network/OnPublicNetworkEnricher.java   | 23 +++++++++-
 .../network/OnPublicNetworkEnricherTest.java    | 45 ++++++++++++++++++++
 2 files changed, 66 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/2a4e6eac/core/src/main/java/org/apache/brooklyn/core/network/OnPublicNetworkEnricher.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/core/network/OnPublicNetworkEnricher.java b/core/src/main/java/org/apache/brooklyn/core/network/OnPublicNetworkEnricher.java
index d37aa6d..878c1d5 100644
--- a/core/src/main/java/org/apache/brooklyn/core/network/OnPublicNetworkEnricher.java
+++ b/core/src/main/java/org/apache/brooklyn/core/network/OnPublicNetworkEnricher.java
@@ -21,11 +21,13 @@ package org.apache.brooklyn.core.network;
 import org.apache.brooklyn.api.entity.Entity;
 import org.apache.brooklyn.api.entity.EntityLocal;
 import org.apache.brooklyn.api.location.MachineLocation;
+import org.apache.brooklyn.api.sensor.AttributeSensor;
 import org.apache.brooklyn.config.ConfigKey;
 import org.apache.brooklyn.core.config.ConfigKeys;
 import org.apache.brooklyn.core.location.access.PortForwardManager;
 import org.apache.brooklyn.core.location.access.PortForwardManagerLocationResolver;
 import org.apache.brooklyn.util.guava.Maybe;
+import org.apache.brooklyn.util.text.Strings;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -34,6 +36,7 @@ import com.google.common.base.Function;
 import com.google.common.base.Optional;
 import com.google.common.base.Predicates;
 import com.google.common.net.HostAndPort;
+import com.google.common.reflect.TypeToken;
 
 /**
  * Can be added to an entity so that it advertises its mapped ports (according to the port-mappings
@@ -90,6 +93,12 @@ public class OnPublicNetworkEnricher extends AbstractOnNetworkEnricher {
             "portForwardManager",
             "The PortForwardManager storing the port-mappings; if null, the global instance will be used");
     
+    @SuppressWarnings("serial")
+    public static final ConfigKey<AttributeSensor<String>> ADDRESS_SENSOR = ConfigKeys.newConfigKey(
+            new TypeToken<AttributeSensor<String>>() {}, 
+            "addressSensor",
+            "The sensor to use to retrieve the entity's public address; if null (default), then use the PortForwardManager instead");
+    
     protected PortForwardManager.AssociationListener pfmListener;
     
     @Override
@@ -137,8 +146,18 @@ public class OnPublicNetworkEnricher extends AbstractOnNetworkEnricher {
 
     @Override
     protected Optional<HostAndPort> getMappedEndpoint(Entity source, MachineLocation machine, int port) {
-        HostAndPort publicTarget = getPortForwardManager().lookup(machine, port);
-        return Optional.fromNullable(publicTarget);
+        AttributeSensor<String> sensor = config().get(ADDRESS_SENSOR);
+        if (sensor == null) {
+            HostAndPort publicTarget = getPortForwardManager().lookup(machine, port);
+            return Optional.fromNullable(publicTarget);
+        } else {
+            String address = source.sensors().get(sensor);
+            if (Strings.isNonBlank(address)) {
+                return Optional.of(HostAndPort.fromParts(address, port));
+            } else {
+                return Optional.absent();
+            }
+        }
     }
     
     protected PortForwardManager getPortForwardManager() {

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/2a4e6eac/core/src/test/java/org/apache/brooklyn/core/network/OnPublicNetworkEnricherTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/network/OnPublicNetworkEnricherTest.java b/core/src/test/java/org/apache/brooklyn/core/network/OnPublicNetworkEnricherTest.java
index f1c001b..3d5d3e0 100644
--- a/core/src/test/java/org/apache/brooklyn/core/network/OnPublicNetworkEnricherTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/network/OnPublicNetworkEnricherTest.java
@@ -303,6 +303,51 @@ public class OnPublicNetworkEnricherTest extends BrooklynAppUnitTestSupport {
     }
 
     @Test
+    public <T> void testTransformsToAddressInSensor() throws Exception {
+        AttributeSensor<String> stringUri = Sensors.newStringSensor("string.uri");
+
+        entity.sensors().set(Attributes.ADDRESS, "1.1.1.1");
+        entity.sensors().set(stringUri, "http://127.0.0.1:1234/my/path");
+        entity.addLocations(ImmutableList.of(machine));
+
+        entity.enrichers().add(EnricherSpec.create(OnPublicNetworkEnricher.class)
+                .configure(OnPublicNetworkEnricher.ADDRESS_SENSOR, Attributes.ADDRESS));
+
+        assertAttributeEqualsEventually("string.uri.mapped.public", "http://1.1.1.1:1234/my/path");
+    }
+
+    @Test
+    public <T> void testTransformsToAddressInSensorIsNoopIfSensorNull() throws Exception {
+        AttributeSensor<String> stringUri = Sensors.newStringSensor("string.uri");
+
+        entity.sensors().set(Attributes.ADDRESS, null);
+        entity.sensors().set(stringUri, "http://127.0.0.1:1234/my/path");
+        entity.addLocations(ImmutableList.of(machine));
+
+        entity.enrichers().add(EnricherSpec.create(OnPublicNetworkEnricher.class)
+                .configure(OnPublicNetworkEnricher.ADDRESS_SENSOR, Attributes.ADDRESS));
+
+        assertAttributeEqualsContinually("string.uri.mapped.public", null, Duration.millis(250));
+    }
+
+    @Test(groups="Broken")
+    public <T> void testTransformsToAddressInSensorWithDefaultPorts() throws Exception {
+        AttributeSensor<String> stringUriWithHttpNoPort = Sensors.newStringSensor("string.uriWithHttpNoPort");
+        AttributeSensor<String> stringUriWithHttpsNoPort = Sensors.newStringSensor("string.uriWithHttpsNoPort");
+
+        entity.sensors().set(Attributes.ADDRESS, "1.1.1.1");
+        entity.sensors().set(stringUriWithHttpNoPort, "http://127.0.0.1/my/path");
+        entity.sensors().set(stringUriWithHttpsNoPort, "https://127.0.0.1/my/path");
+        entity.addLocations(ImmutableList.of(machine));
+        
+        entity.enrichers().add(EnricherSpec.create(OnPublicNetworkEnricher.class)
+                .configure(OnPublicNetworkEnricher.ADDRESS_SENSOR, Attributes.ADDRESS));
+
+        assertAttributeEqualsEventually("string.uriWithHttpNoPort.mapped.public", "http://1.1.1.1/my/path");
+        assertAttributeEqualsEventually("string.uriWithHttspNoPort.mapped.public", "https://1.1.1.1/my/path");
+    }
+    
+    @Test
     public <T> void testDoesNotDoRegexMatchingWhenSensorsSpecified() throws Exception {
         AttributeSensor<String> sensor = Sensors.newStringSensor("mysensor");
         AttributeSensor<Integer> intPort = Sensors.newIntegerSensor("int.port");