You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2014/12/15 17:57:28 UTC
[1/9] incubator-brooklyn git commit: fix the rat
Repository: incubator-brooklyn
Updated Branches:
refs/heads/master dd716b374 -> b3cea88cf
fix the rat
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/0b40243c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/0b40243c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/0b40243c
Branch: refs/heads/master
Commit: 0b40243ce02bde25f965f5d31cb90c92b3038b1a
Parents: 92ebdbf
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Fri Dec 12 10:51:26 2014 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri Dec 12 13:54:55 2014 +0000
----------------------------------------------------------------------
.../brooklyn/entity/proxy/ProxySslConfigTest.java | 18 ++++++++++++++++++
usage/launcher/src/test/resources/nginx.yaml | 18 ++++++++++++++++++
2 files changed, 36 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0b40243c/software/webapp/src/test/java/brooklyn/entity/proxy/ProxySslConfigTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/ProxySslConfigTest.java b/software/webapp/src/test/java/brooklyn/entity/proxy/ProxySslConfigTest.java
index 77ea8a5..c4721ce 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/ProxySslConfigTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/ProxySslConfigTest.java
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
package brooklyn.entity.proxy;
import org.testng.Assert;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/0b40243c/usage/launcher/src/test/resources/nginx.yaml
----------------------------------------------------------------------
diff --git a/usage/launcher/src/test/resources/nginx.yaml b/usage/launcher/src/test/resources/nginx.yaml
index 47a846e..984c41a 100644
--- a/usage/launcher/src/test/resources/nginx.yaml
+++ b/usage/launcher/src/test/resources/nginx.yaml
@@ -1,3 +1,21 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
name: Sample Nginx on SSL
location: localhost
services:
[8/9] incubator-brooklyn git commit: BROOKLYN-95 - make nginx
re-configurable, to switch to ssl while live
Posted by he...@apache.org.
BROOKLYN-95 - make nginx re-configurable, to switch to ssl while live
a bit sloppy, running connectSensors multiple times, but it works.
better would be a restart which does install again, or to facilitate starting at the same VM.
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/a952d6b7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/a952d6b7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/a952d6b7
Branch: refs/heads/master
Commit: a952d6b7258b0d695ba7a8a591d6caf6e1faaebf
Parents: 25dccf0
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Tue Dec 2 16:28:15 2014 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri Dec 12 13:54:55 2014 +0000
----------------------------------------------------------------------
.../brooklyn/entity/basic/EntityPredicates.java | 2 +-
.../event/feed/AttributePollHandler.java | 12 +++-
.../main/java/brooklyn/event/feed/Poller.java | 2 -
.../java/brooklyn/event/feed/http/HttpFeed.java | 2 +-
.../event/feed/http/HttpPollConfig.java | 15 +----
.../main/java/brooklyn/util/http/HttpTool.java | 17 ++++++
.../entity/proxy/AbstractController.java | 2 +-
.../entity/proxy/AbstractControllerImpl.java | 21 ++++---
.../brooklyn/entity/proxy/LoadBalancer.java | 9 ++-
.../entity/proxy/nginx/NginxController.java | 5 ++
.../entity/proxy/nginx/NginxControllerImpl.java | 41 +++++++++++--
.../entity/proxy/nginx/NginxSshDriver.java | 29 +++++++---
.../brooklyn/entity/proxy/nginx/UrlMapping.java | 1 -
.../nginx/NginxHttpsSslIntegrationTest.java | 60 ++++++++++++++++++--
.../qa/load/SimulatedNginxControllerImpl.java | 5 +-
.../java/brooklyn/rest/api/EntityConfigApi.java | 3 +-
.../main/java/brooklyn/rest/api/SensorApi.java | 3 +-
.../rest/resources/EntityConfigResource.java | 8 +--
.../brooklyn/rest/resources/SensorResource.java | 8 +--
19 files changed, 183 insertions(+), 62 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a952d6b7/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 12b656d..5906d78 100644
--- a/core/src/main/java/brooklyn/entity/basic/EntityPredicates.java
+++ b/core/src/main/java/brooklyn/entity/basic/EntityPredicates.java
@@ -318,7 +318,7 @@ public class EntityPredicates {
}
@Override
public boolean apply(@Nullable Entity input) {
- return (input != null) && group.hasMember(input);
+ return (group != null) && (input != null) && group.hasMember(input);
}
@Override
public String toString() {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a952d6b7/core/src/main/java/brooklyn/event/feed/AttributePollHandler.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/event/feed/AttributePollHandler.java b/core/src/main/java/brooklyn/event/feed/AttributePollHandler.java
index 19538b3..2029237 100644
--- a/core/src/main/java/brooklyn/event/feed/AttributePollHandler.java
+++ b/core/src/main/java/brooklyn/event/feed/AttributePollHandler.java
@@ -23,9 +23,12 @@ import static com.google.common.base.Preconditions.checkNotNull;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import brooklyn.entity.basic.Attributes;
import brooklyn.entity.basic.Entities;
import brooklyn.entity.basic.EntityInternal;
import brooklyn.entity.basic.EntityLocal;
+import brooklyn.entity.basic.Lifecycle;
+import brooklyn.entity.basic.Lifecycle.Transition;
import brooklyn.event.AttributeSensor;
import brooklyn.util.flags.TypeCoercions;
import brooklyn.util.task.Tasks;
@@ -157,7 +160,7 @@ public class AttributePollHandler<V> implements PollHandler<V> {
// get a non-volatile value
Long currentProblemStartTimeCache = currentProblemStartTime;
long expiryTime =
- lastSuccessTime!=null ? lastSuccessTime+logWarningGraceTime.toMilliseconds() :
+ (lastSuccessTime!=null && !isTransitioningOrStopped()) ? lastSuccessTime+logWarningGraceTime.toMilliseconds() :
currentProblemStartTimeCache!=null ? currentProblemStartTimeCache+logWarningGraceTimeOnStartup.toMilliseconds() :
nowTime+logWarningGraceTimeOnStartup.toMilliseconds();
if (!lastWasProblem) {
@@ -194,6 +197,13 @@ public class AttributePollHandler<V> implements PollHandler<V> {
}
}
+ protected boolean isTransitioningOrStopped() {
+ if (entity==null) return false;
+ Transition expected = entity.getAttribute(Attributes.SERVICE_STATE_EXPECTED);
+ if (expected==null) return false;
+ return (expected.getState()==Lifecycle.STARTING || expected.getState()==Lifecycle.STOPPING || expected.getState()==Lifecycle.STOPPED);
+ }
+
@SuppressWarnings("unchecked")
protected void setSensor(Object v) {
if (Entities.isNoLongerManaged(entity)) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a952d6b7/core/src/main/java/brooklyn/event/feed/Poller.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/event/feed/Poller.java b/core/src/main/java/brooklyn/event/feed/Poller.java
index 6fa9147..1bb87c9 100644
--- a/core/src/main/java/brooklyn/event/feed/Poller.java
+++ b/core/src/main/java/brooklyn/event/feed/Poller.java
@@ -79,8 +79,6 @@ public class Poller<V> {
handler.onFailure(val);
}
} catch (Exception e) {
- // 2013-12-21 AH adding add'l logging because seeing strange scheduled task abortion from here
- // even though all paths should be catching it
if (loggedPreviousException) {
if (log.isTraceEnabled()) log.trace("PollJob for {}, repeated consecutive failures, handling {} using {}", new Object[] {job, e, handler});
} else {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a952d6b7/core/src/main/java/brooklyn/event/feed/http/HttpFeed.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/event/feed/http/HttpFeed.java b/core/src/main/java/brooklyn/event/feed/http/HttpFeed.java
index 255443a..ab9dcd1 100644
--- a/core/src/main/java/brooklyn/event/feed/http/HttpFeed.java
+++ b/core/src/main/java/brooklyn/event/feed/http/HttpFeed.java
@@ -298,7 +298,7 @@ public class HttpFeed extends AbstractFeed {
URI uri = config.buildUri(builder.baseUri, baseUriVars);
baseUriProvider = Suppliers.ofInstance(uri);
} else if (!builder.baseUriVars.isEmpty()) {
- throw new IllegalStateException("Not permitted to supply URI vars when using a URI provider");
+ throw new IllegalStateException("Not permitted to supply URI vars when using a URI provider; pass the vars to the provider instead");
}
checkNotNull(baseUriProvider);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a952d6b7/core/src/main/java/brooklyn/event/feed/http/HttpPollConfig.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/event/feed/http/HttpPollConfig.java b/core/src/main/java/brooklyn/event/feed/http/HttpPollConfig.java
index 979e629..3476373 100644
--- a/core/src/main/java/brooklyn/event/feed/http/HttpPollConfig.java
+++ b/core/src/main/java/brooklyn/event/feed/http/HttpPollConfig.java
@@ -27,15 +27,12 @@ import brooklyn.event.AttributeSensor;
import brooklyn.event.feed.PollConfig;
import brooklyn.util.collections.MutableList;
import brooklyn.util.collections.MutableMap;
+import brooklyn.util.http.HttpTool;
import brooklyn.util.http.HttpToolResponse;
-import brooklyn.util.net.URLParamEncoder;
import brooklyn.util.time.Duration;
-import com.google.common.base.Function;
-import com.google.common.base.Joiner;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Iterables;
public class HttpPollConfig<T> extends PollConfig<HttpToolResponse, T, HttpPollConfig<T>> {
@@ -130,15 +127,7 @@ public class HttpPollConfig<T> extends PollConfig<HttpToolResponse, T, HttpPollC
Map<String,String> allvars = concat(baseUriVars, vars);
if (allvars != null && allvars.size() > 0) {
- Iterable<String> args = Iterables.transform(allvars.entrySet(),
- new Function<Map.Entry<String,String>,String>() {
- @Override public String apply(Map.Entry<String,String> entry) {
- String k = entry.getKey();
- String v = entry.getValue();
- return URLParamEncoder.encode(k) + (v != null ? "=" + URLParamEncoder.encode(v) : "");
- }
- });
- uri += "?" + Joiner.on("&").join(args);
+ uri += "?" + HttpTool.encodeUrlParams(allvars);
}
return URI.create(uri);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a952d6b7/core/src/main/java/brooklyn/util/http/HttpTool.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/util/http/HttpTool.java b/core/src/main/java/brooklyn/util/http/HttpTool.java
index a81b928..b57c157 100644
--- a/core/src/main/java/brooklyn/util/http/HttpTool.java
+++ b/core/src/main/java/brooklyn/util/http/HttpTool.java
@@ -66,9 +66,14 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import brooklyn.util.exceptions.Exceptions;
+import brooklyn.util.net.URLParamEncoder;
+import brooklyn.util.text.Strings;
import brooklyn.util.time.Duration;
+import com.google.common.base.Function;
+import com.google.common.base.Joiner;
import com.google.common.base.Optional;
+import com.google.common.collect.Iterables;
import com.google.common.collect.Multimap;
public class HttpTool {
@@ -362,4 +367,16 @@ public class HttpTool {
return "Basic "+Base64.encodeBase64String( (credentials.getUserName()+":"+credentials.getPassword()).getBytes() );
}
+ public static String encodeUrlParams(Map<?,?> data) {
+ if (data==null) return "";
+ Iterable<String> args = Iterables.transform(data.entrySet(),
+ new Function<Map.Entry<?,?>,String>() {
+ @Override public String apply(Map.Entry<?,?> entry) {
+ Object k = entry.getKey();
+ Object v = entry.getValue();
+ return URLParamEncoder.encode(Strings.toString(k)) + (v != null ? "=" + URLParamEncoder.encode(Strings.toString(v)) : "");
+ }
+ });
+ return Joiner.on("&").join(args);
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a952d6b7/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
index fd00924..e2ba3a1 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractController.java
@@ -41,7 +41,7 @@ public interface AbstractController extends SoftwareProcess, LoadBalancer {
@SetFromFlag("ssl")
ConfigKey<ProxySslConfig> SSL_CONFIG = ConfigKeys.newConfigKey(ProxySslConfig.class,
- "proxy.ssl.config", "configuration (e.g. certificates) for SSL; will use SSL if set, not use SSL if not set");
+ "proxy.ssl.config", "Configuration (e.g. certificates) for SSL; causes server to run with HTTPS instead of HTTP");
@SetFromFlag("serviceUpUrlPath")
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a952d6b7/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractControllerImpl.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractControllerImpl.java b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractControllerImpl.java
index bf960f9..c7f518e 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractControllerImpl.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/AbstractControllerImpl.java
@@ -112,7 +112,7 @@ public abstract class AbstractControllerImpl extends SoftwareProcessImpl impleme
return; // no-op
}
if (serverPoolMemberTrackerPolicy != null) {
- LOG.warn("Call to addServerPoolMemberTrackingPolicy when serverPoolMemberTrackingPolicy already exists, in {}", this);
+ LOG.debug("Call to addServerPoolMemberTrackingPolicy when serverPoolMemberTrackingPolicy already exists, removing and re-adding, in {}", this);
removeServerPoolMemberTrackingPolicy();
}
for (Policy p: getPolicies()) {
@@ -187,6 +187,7 @@ public abstract class AbstractControllerImpl extends SoftwareProcessImpl impleme
}
}
+ @SuppressWarnings("deprecation")
@Override
public void onManagementNoLongerMaster() {
super.onManagementNoLongerMaster(); // TODO remove when deprecated method in parent removed
@@ -226,7 +227,10 @@ public abstract class AbstractControllerImpl extends SoftwareProcessImpl impleme
@Override
public Integer getPort() {
- return getAttribute(PROXY_HTTP_PORT);
+ if (isSsl())
+ return getAttribute(PROXY_HTTPS_PORT);
+ else
+ return getAttribute(PROXY_HTTP_PORT);
}
/** primary URL this controller serves, if one can / has been inferred */
@@ -254,7 +258,7 @@ public abstract class AbstractControllerImpl extends SoftwareProcessImpl impleme
public abstract void reload();
protected String inferProtocol() {
- return getConfig(SSL_CONFIG)!=null ? "https" : "http";
+ return isSsl() ? "https" : "http";
}
/** returns URL, if it can be inferred; null otherwise */
@@ -285,13 +289,17 @@ public abstract class AbstractControllerImpl extends SoftwareProcessImpl impleme
protected Collection<Integer> getRequiredOpenPorts() {
Collection<Integer> result = super.getRequiredOpenPorts();
if (groovyTruth(getAttribute(PROXY_HTTP_PORT))) result.add(getAttribute(PROXY_HTTP_PORT));
+ if (groovyTruth(getAttribute(PROXY_HTTPS_PORT))) result.add(getAttribute(PROXY_HTTPS_PORT));
return result;
}
@Override
protected void preStart() {
super.preStart();
-
+ computePortsAndUrls();
+ }
+
+ protected void computePortsAndUrls() {
AttributeSensor<String> hostAndPortSensor = getConfig(HOST_AND_PORT_SENSOR);
Maybe<Object> hostnameSensor = getConfigRaw(HOSTNAME_SENSOR, true);
Maybe<Object> portSensor = getConfigRaw(PORT_NUMBER_SENSOR, true);
@@ -312,11 +320,6 @@ public abstract class AbstractControllerImpl extends SoftwareProcessImpl impleme
@Override
protected void connectSensors() {
super.connectSensors();
- if (getUrl()==null) {
- setAttribute(MAIN_URI, URI.create(inferUrl()));
- setAttribute(ROOT_URL, inferUrl());
- }
-
// TODO when rebind policies, and rebind calls connectSensors, then this will cause problems.
// Also relying on addServerPoolMemberTrackingPolicy to set the serverPoolAddresses and serverPoolTargets.
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a952d6b7/software/webapp/src/main/java/brooklyn/entity/proxy/LoadBalancer.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/LoadBalancer.java b/software/webapp/src/main/java/brooklyn/entity/proxy/LoadBalancer.java
index 0502c3f..32e2fc9 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/LoadBalancer.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/LoadBalancer.java
@@ -84,8 +84,13 @@ public interface LoadBalancer extends Entity, Startable {
@SetFromFlag("port")
/** port where this controller should live */
public static final PortAttributeSensorAndConfigKey PROXY_HTTP_PORT = new PortAttributeSensorAndConfigKey(
- "proxy.http.port", "Main HTTP port where this proxy listens", ImmutableList.of(8000, "8001+"));
-
+ "proxy.http.port", "Main port where this proxy listens if using HTTP", ImmutableList.of(8000, "8001+"));
+
+ @SetFromFlag("httpsPort")
+ /** port where this controller should live */
+ public static final PortAttributeSensorAndConfigKey PROXY_HTTPS_PORT = new PortAttributeSensorAndConfigKey(
+ "proxy.https.port", "Main port where this proxy listens if using HTTPS", ImmutableList.of(8443, "8443+"));
+
@SetFromFlag("protocol")
public static final BasicAttributeSensorAndConfigKey<String> PROTOCOL = new BasicAttributeSensorAndConfigKey<String>(
String.class, "proxy.protocol", "Main URL protocol this proxy answers (typically http or https)", null);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a952d6b7/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.java b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.java
index 88d1bb9..21b3c89 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.java
@@ -134,4 +134,9 @@ public interface NginxController extends AbstractController, HasShortName {
public static final AttributeSensor<Boolean> NGINX_URL_ANSWERS_NICELY = Sensors.newBooleanSensor( "nginx.url.answers.nicely");
public static final AttributeSensor<String> PID_FILE = Sensors.newStringSensor( "nginx.pid.file", "PID file");
+
+ public interface NginxControllerInternal {
+ public void doExtraConfigurationDuringStart();
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a952d6b7/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxControllerImpl.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxControllerImpl.java b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxControllerImpl.java
index 74727fb..ef5e99a 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxControllerImpl.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxControllerImpl.java
@@ -18,9 +18,11 @@
*/
package brooklyn.entity.proxy.nginx;
+import java.net.URI;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import org.slf4j.Logger;
@@ -36,21 +38,25 @@ import brooklyn.entity.basic.ServiceStateLogic.ServiceNotUpLogic;
import brooklyn.entity.group.AbstractMembershipTrackingPolicy;
import brooklyn.entity.proxy.AbstractControllerImpl;
import brooklyn.entity.proxy.ProxySslConfig;
+import brooklyn.entity.proxy.nginx.NginxController.NginxControllerInternal;
import brooklyn.event.SensorEvent;
import brooklyn.event.SensorEventListener;
import brooklyn.event.feed.ConfigToAttributes;
import brooklyn.event.feed.http.HttpFeed;
import brooklyn.event.feed.http.HttpPollConfig;
+import brooklyn.management.SubscriptionHandle;
import brooklyn.policy.PolicySpec;
import brooklyn.util.ResourceUtils;
import brooklyn.util.file.ArchiveUtils;
import brooklyn.util.guava.Functionals;
+import brooklyn.util.http.HttpTool;
import brooklyn.util.http.HttpToolResponse;
import brooklyn.util.stream.Streams;
import brooklyn.util.text.Strings;
import com.google.common.base.Function;
import com.google.common.base.Predicates;
+import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
import com.google.common.collect.Sets;
@@ -58,13 +64,14 @@ import com.google.common.collect.Sets;
/**
* Implementation of the {@link NginxController} entity.
*/
-public class NginxControllerImpl extends AbstractControllerImpl implements NginxController {
+public class NginxControllerImpl extends AbstractControllerImpl implements NginxController, NginxControllerInternal {
private static final Logger LOG = LoggerFactory.getLogger(NginxControllerImpl.class);
private volatile HttpFeed httpFeed;
private final Set<String> installedKeysCache = Sets.newLinkedHashSet();
protected UrlMappingsMemberTrackerPolicy urlMappingsMemberTrackerPolicy;
+ protected SubscriptionHandle targetAddressesHandler;
@Override
public void reload() {
@@ -82,19 +89,31 @@ public class NginxControllerImpl extends AbstractControllerImpl implements Nginx
return getConfig(STICKY);
}
+ private class UrlInferencer implements Supplier<URI> {
+ private Map<String, String> parameters;
+ private UrlInferencer(Map<String,String> parameters) {
+ this.parameters = parameters;
+ }
+ @Override public URI get() {
+ String baseUrl = inferUrl(true);
+ if (parameters==null || parameters.isEmpty())
+ return URI.create(baseUrl);
+ return URI.create(baseUrl+"?"+HttpTool.encodeUrlParams(parameters));
+ }
+ }
+
@Override
public void connectSensors() {
super.connectSensors();
ConfigToAttributes.apply(this);
- String accessibleRootUrl = inferUrl(true);
// "up" is defined as returning a valid HTTP response from nginx (including a 404 etc)
httpFeed = HttpFeed.builder()
+ .uniqueTag("nginx-poll")
.entity(this)
.period(getConfig(HTTP_POLL_PERIOD))
- .baseUri(accessibleRootUrl)
- .baseUriVars(ImmutableMap.of("include-runtime", "true"))
+ .baseUri(new UrlInferencer(ImmutableMap.of("include-runtime", "true")))
.poll(new HttpPollConfig<Boolean>(NGINX_URL_ANSWERS_NICELY)
// Any response from Nginx is good.
.checkSuccess(Predicates.alwaysTrue())
@@ -115,6 +134,7 @@ public class NginxControllerImpl extends AbstractControllerImpl implements Nginx
ServiceNotUpLogic.updateNotUpIndicator(this, NGINX_URL_ANSWERS_NICELY, "No response from nginx yet");
}
addEnricher(Enrichers.builder().updatingMap(Attributes.SERVICE_NOT_UP_INDICATORS)
+ .uniqueTag("not-up-unless-url-answers")
.from(NGINX_URL_ANSWERS_NICELY)
.computing(Functionals.ifNotEquals(true).value("URL where nginx listens is not answering correctly (with expected header)") )
.build());
@@ -122,9 +142,9 @@ public class NginxControllerImpl extends AbstractControllerImpl implements Nginx
// Can guarantee that parent/managementContext has been set
Group urlMappings = getConfig(URL_MAPPINGS);
- if (urlMappings != null) {
+ if (urlMappings!=null && urlMappingsMemberTrackerPolicy==null) {
// Listen to the targets of each url-mapping changing
- subscribeToMembers(urlMappings, UrlMapping.TARGET_ADDRESSES, new SensorEventListener<Collection<String>>() {
+ targetAddressesHandler = subscribeToMembers(urlMappings, UrlMapping.TARGET_ADDRESSES, new SensorEventListener<Collection<String>>() {
@Override public void onEvent(SensorEvent<Collection<String>> event) {
updateNeeded();
}
@@ -139,6 +159,12 @@ public class NginxControllerImpl extends AbstractControllerImpl implements Nginx
protected void removeUrlMappingsMemberTrackerPolicy() {
if (urlMappingsMemberTrackerPolicy != null) {
removePolicy(urlMappingsMemberTrackerPolicy);
+ urlMappingsMemberTrackerPolicy = null;
+ }
+ Group urlMappings = getConfig(URL_MAPPINGS);
+ if (urlMappings!=null && targetAddressesHandler!=null) {
+ unsubscribe(urlMappings, targetAddressesHandler);
+ targetAddressesHandler = null;
}
}
@@ -181,7 +207,10 @@ public class NginxControllerImpl extends AbstractControllerImpl implements Nginx
}
public void doExtraConfigurationDuringStart() {
+ computePortsAndUrls();
reconfigureService();
+ // reconnect sensors if ports have changed
+ connectSensors();
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a952d6b7/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java
index 91c69e5..1c73374 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java
@@ -33,6 +33,7 @@ import brooklyn.entity.basic.EntityInternal;
import brooklyn.entity.basic.Lifecycle;
import brooklyn.entity.basic.lifecycle.ScriptHelper;
import brooklyn.entity.drivers.downloads.DownloadResolver;
+import brooklyn.entity.proxy.AbstractController;
import brooklyn.location.OsDetails;
import brooklyn.location.basic.SshMachineLocation;
import brooklyn.management.ManagementContext;
@@ -99,10 +100,15 @@ public class NginxSshDriver extends AbstractSoftwareProcessSshDriver implements
return format("%s/%s", getRunDir(), NGINX_PID_FILE);
}
+ @Deprecated /** @deprecated since 0.7.0 use #getPort */
public Integer getHttpPort() {
return getEntity().getPort();
}
+ public Integer getPort() {
+ return getEntity().getPort();
+ }
+
@Override
public void rebind() {
customizationCompleted = true;
@@ -111,7 +117,13 @@ public class NginxSshDriver extends AbstractSoftwareProcessSshDriver implements
@Override
public void postLaunch() {
entity.setAttribute(NginxController.PID_FILE, getRunDir() + "/" + AbstractSoftwareProcessSshDriver.PID_FILENAME);
- entity.setAttribute(Attributes.HTTP_PORT, getHttpPort());
+ if (((AbstractController)entity).isSsl()) {
+ entity.setAttribute(Attributes.HTTPS_PORT, getPort());
+ ((EntityInternal)entity).removeAttribute(Attributes.HTTP_PORT);
+ } else {
+ entity.setAttribute(Attributes.HTTP_PORT, getPort());
+ ((EntityInternal)entity).removeAttribute(Attributes.HTTPS_PORT);
+ }
super.postLaunch();
}
@@ -288,7 +300,6 @@ public class NginxSshDriver extends AbstractSoftwareProcessSshDriver implements
}
customizationCompleted = true;
- getEntity().doExtraConfigurationDuringStart();
}
@Override
@@ -301,7 +312,9 @@ public class NginxSshDriver extends AbstractSoftwareProcessSshDriver implements
// TODO if can't be root, and ports > 1024 are in the allowed port range,
// prefer that; could do this on SshMachineLocation which implements PortSupplier,
// invoked from PortAttrSensorAndConfigKey, which is invoked from MachineLifecycleTasks.preStartCustom
- Networking.checkPortsValid(MutableMap.of("httpPort", getHttpPort()));
+ Networking.checkPortsValid(MutableMap.of("port", getPort()));
+
+ getEntity().doExtraConfigurationDuringStart();
// We wait for evidence of running because, using
// brooklyn.ssh.config.tool.class=brooklyn.util.internal.ssh.cli.SshCliTool,
@@ -311,7 +324,7 @@ public class NginxSshDriver extends AbstractSoftwareProcessSshDriver implements
.body.append(
format("cd %s", getRunDir()),
BashCommands.requireExecutable("./sbin/nginx"),
- sudoBashCIfPrivilegedPort(getHttpPort(), format(
+ sudoBashCIfPrivilegedPort(getPort(), format(
"nohup ./sbin/nginx -p %s/ -c conf/server.conf > %s 2>&1 &", getRunDir(), getLogFileLocation())),
format("for i in {1..10}\n" +
"do\n" +
@@ -345,7 +358,7 @@ public class NginxSshDriver extends AbstractSoftwareProcessSshDriver implements
format("cd %s", getRunDir()),
format("export PID=`cat %s`", getPidFile()),
"test -n \"$PID\" || exit 0",
- sudoIfPrivilegedPort(getHttpPort(), "kill $PID"))
+ sudoIfPrivilegedPort(getPort(), "kill $PID"))
.execute();
}
@@ -386,8 +399,8 @@ public class NginxSshDriver extends AbstractSoftwareProcessSshDriver implements
// calling waitForEntityStart()), we can guarantee that the start-thread's call to update will happen after
// this call to reload. So we this can be a no-op, and just rely on that subsequent call to update.
- if (!isRunning()) {
- Lifecycle lifecycle = entity.getAttribute(NginxController.SERVICE_STATE_ACTUAL);
+ Lifecycle lifecycle = entity.getAttribute(NginxController.SERVICE_STATE_ACTUAL);
+ if (lifecycle==Lifecycle.STOPPING || lifecycle==Lifecycle.STOPPED || !isRunning()) {
log.debug("Ignoring reload of nginx "+entity+", because service is not running (state "+lifecycle+")");
return;
}
@@ -412,7 +425,7 @@ public class NginxSshDriver extends AbstractSoftwareProcessSshDriver implements
.body.append(
format("cd %s", getRunDir()),
format("export PID=`cat %s`", getPidFile()),
- sudoIfPrivilegedPort(getHttpPort(), "kill -HUP $PID"))
+ sudoIfPrivilegedPort(getPort(), "kill -HUP $PID"))
.execute();
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a952d6b7/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/UrlMapping.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/UrlMapping.java b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/UrlMapping.java
index 7cd7d87..d8a0377 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/UrlMapping.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/UrlMapping.java
@@ -29,7 +29,6 @@ import brooklyn.entity.basic.MethodEffector;
import brooklyn.entity.proxy.AbstractController;
import brooklyn.entity.proxy.ProxySslConfig;
import brooklyn.entity.proxying.ImplementedBy;
-import brooklyn.entity.webapp.WebAppService;
import brooklyn.event.AttributeSensor;
import brooklyn.event.basic.Sensors;
import brooklyn.util.flags.SetFromFlag;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a952d6b7/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.java b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.java
index 8ba88b7..a8004d7 100644
--- a/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.java
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/nginx/NginxHttpsSslIntegrationTest.java
@@ -32,24 +32,31 @@ import org.testng.annotations.Test;
import brooklyn.entity.BrooklynAppLiveTestSupport;
import brooklyn.entity.Entity;
+import brooklyn.entity.basic.EntityInternal;
import brooklyn.entity.basic.SoftwareProcess;
import brooklyn.entity.group.DynamicCluster;
+import brooklyn.entity.proxy.LoadBalancer;
import brooklyn.entity.proxy.ProxySslConfig;
import brooklyn.entity.proxying.EntitySpec;
import brooklyn.entity.webapp.JavaWebAppService;
import brooklyn.entity.webapp.WebAppService;
import brooklyn.entity.webapp.jboss.JBoss7Server;
+import brooklyn.event.basic.PortAttributeSensorAndConfigKey;
import brooklyn.location.Location;
+import brooklyn.location.basic.PortRanges;
import brooklyn.test.Asserts;
import brooklyn.test.HttpTestUtils;
+import brooklyn.util.exceptions.Exceptions;
+import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Iterables;
/**
* Test the operation of the {@link NginxController} class.
*/
public class NginxHttpsSslIntegrationTest extends BrooklynAppLiveTestSupport {
- @SuppressWarnings("unused")
+
private static final Logger log = LoggerFactory.getLogger(NginxHttpsSslIntegrationTest.class);
private NginxController nginx;
@@ -65,6 +72,13 @@ public class NginxHttpsSslIntegrationTest extends BrooklynAppLiveTestSupport {
super.setUp();
localLoc = mgmt.getLocationRegistry().resolve("localhost");
}
+
+ private static void urlContainsPort(NginxController nginx, PortAttributeSensorAndConfigKey sensor, String portRange) {
+ Integer port = nginx.getAttribute(sensor);
+ Assert.assertTrue(Iterables.contains(PortRanges.fromString(portRange), port), "Port "+port+" not in range "+portRange);
+ String url = Preconditions.checkNotNull(nginx.getAttribute(LoadBalancer.MAIN_URI), "main uri").toString();
+ Assert.assertTrue(url.contains(":"+port), "URL does not contain expected port; port "+port+", url "+url);
+ }
public String getTestWar() {
TestResourceUnavailableException.throwIfResourceUnavailable(getClass(), "/hello-world.war");
@@ -90,12 +104,15 @@ public class NginxHttpsSslIntegrationTest extends BrooklynAppLiveTestSupport {
.configure("sticky", false)
.configure("serverPool", cluster)
.configure("domain", "localhost")
- .configure("port", "8443+")
+ .configure("httpsPort", "8453+")
.configure("ssl", ssl));
app.start(ImmutableList.of(localLoc));
+ urlContainsPort(nginx, LoadBalancer.PROXY_HTTPS_PORT, "8453+");
+
final String url = nginx.getAttribute(WebAppService.ROOT_URL);
+ log.info("URL for nginx is "+url);
if (!url.startsWith("https://")) Assert.fail("URL should be https: "+url);
Asserts.succeedsEventually(new Runnable() {
@@ -128,8 +145,8 @@ public class NginxHttpsSslIntegrationTest extends BrooklynAppLiveTestSupport {
}
private String getFile(String file) {
- return new File(getClass().getResource("/" + file).getFile()).getAbsolutePath();
- }
+ return new File(getClass().getResource("/" + file).getFile()).getAbsolutePath();
+ }
@Test(groups = "Integration")
public void testStartsWithGlobalSsl_withPreinstalledCertificateAndKey() {
@@ -183,4 +200,39 @@ public class NginxHttpsSslIntegrationTest extends BrooklynAppLiveTestSupport {
assertFalse(member.getAttribute(SoftwareProcess.SERVICE_UP));
}
}
+
+ @Test(groups = "Integration")
+ public void testStartsNonSslThenBecomesSsl() {
+ cluster = app.createAndManageChild(EntitySpec.create(DynamicCluster.class)
+ .configure(DynamicCluster.MEMBER_SPEC, EntitySpec.create(JBoss7Server.class))
+ .configure("initialSize", 1)
+ .configure(JavaWebAppService.ROOT_WAR, getTestWar()));
+
+ nginx = app.createAndManageChild(EntitySpec.create(NginxController.class)
+ .configure("serverPool", cluster)
+ .configure("domain", "localhost"));
+
+ app.start(ImmutableList.of(localLoc));
+
+ urlContainsPort(nginx, LoadBalancer.PROXY_HTTP_PORT, "8000-8100");
+
+ ProxySslConfig ssl = ProxySslConfig.builder()
+ .certificateDestination(getFile("ssl/certs/localhost/server.crt"))
+ .keyDestination(getFile("ssl/certs/localhost/server.key"))
+ .build();
+ ((EntityInternal)nginx).setConfig(LoadBalancer.PROXY_HTTPS_PORT, PortRanges.fromString("8443+"));
+ ((EntityInternal)nginx).setConfig(NginxController.SSL_CONFIG, ssl);
+
+ try {
+ log.info("restarting nginx as ssl");
+ nginx.restart();
+ urlContainsPort(nginx, LoadBalancer.PROXY_HTTPS_PORT, "8443-8543");
+
+ app.stop();
+
+ } catch (Exception e) {
+ throw Exceptions.propagate(e);
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a952d6b7/usage/qa/src/main/java/brooklyn/qa/load/SimulatedNginxControllerImpl.java
----------------------------------------------------------------------
diff --git a/usage/qa/src/main/java/brooklyn/qa/load/SimulatedNginxControllerImpl.java b/usage/qa/src/main/java/brooklyn/qa/load/SimulatedNginxControllerImpl.java
index 1fc6488..e5c40c2 100644
--- a/usage/qa/src/main/java/brooklyn/qa/load/SimulatedNginxControllerImpl.java
+++ b/usage/qa/src/main/java/brooklyn/qa/load/SimulatedNginxControllerImpl.java
@@ -99,7 +99,6 @@ public class SimulatedNginxControllerImpl extends NginxControllerImpl {
.period(getConfig(HTTP_POLL_PERIOD))
.poll(new FunctionPollConfig<Boolean,Boolean>(SERVICE_UP)
.callable(new Callable<Boolean>() {
- private int counter = 0;
public Boolean call() {
return true;
}}))
@@ -158,7 +157,7 @@ public class SimulatedNginxControllerImpl extends NginxControllerImpl {
return;
}
- Networking.checkPortsValid(MutableMap.of("httpPort", getHttpPort()));
+ Networking.checkPortsValid(MutableMap.of("httpPort", getPort()));
if (entity.getConfig(SKIP_SSH_ON_START)) {
// minimal ssh, so that isRunning will subsequently work
@@ -172,7 +171,7 @@ public class SimulatedNginxControllerImpl extends NginxControllerImpl {
.body.append(
format("cd %s", getRunDir()),
"echo skipping exec of requireExecutable ./sbin/nginx",
- sudoBashCIfPrivilegedPort(getHttpPort(), format(
+ sudoBashCIfPrivilegedPort(getPort(), format(
"echo skipping exec of nohup ./sbin/nginx -p %s/ -c conf/server.conf > %s 2>&1 &", getRunDir(), getLogFileLocation())),
format("nohup sleep 100000 > %s 2>&1 < /dev/null &", getLogFileLocation()),
format("echo $! > "+getPidFile()),
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a952d6b7/usage/rest-api/src/main/java/brooklyn/rest/api/EntityConfigApi.java
----------------------------------------------------------------------
diff --git a/usage/rest-api/src/main/java/brooklyn/rest/api/EntityConfigApi.java b/usage/rest-api/src/main/java/brooklyn/rest/api/EntityConfigApi.java
index 7c576bf..75f39b3 100644
--- a/usage/rest-api/src/main/java/brooklyn/rest/api/EntityConfigApi.java
+++ b/usage/rest-api/src/main/java/brooklyn/rest/api/EntityConfigApi.java
@@ -108,6 +108,7 @@ public interface EntityConfigApi {
@ApiErrors(value = {
@ApiError(code = 404, reason = "Could not find application or entity")
})
+ @SuppressWarnings("rawtypes")
public void setFromMap(
@ApiParam(value = "Application ID or name", required = true)
@PathParam("application") final String application,
@@ -116,7 +117,7 @@ public interface EntityConfigApi {
@ApiParam(value = "Apply the config to all pre-existing descendants", required = false)
@QueryParam("recurse") @DefaultValue("false") final Boolean recurse,
@ApiParam(value = "Map of config key names to values", required = true)
- Map<?,?> newValues
+ Map newValues
) ;
@POST
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a952d6b7/usage/rest-api/src/main/java/brooklyn/rest/api/SensorApi.java
----------------------------------------------------------------------
diff --git a/usage/rest-api/src/main/java/brooklyn/rest/api/SensorApi.java b/usage/rest-api/src/main/java/brooklyn/rest/api/SensorApi.java
index 982aa52..9f05f52 100644
--- a/usage/rest-api/src/main/java/brooklyn/rest/api/SensorApi.java
+++ b/usage/rest-api/src/main/java/brooklyn/rest/api/SensorApi.java
@@ -113,13 +113,14 @@ public interface SensorApi {
@ApiErrors(value = {
@ApiError(code = 404, reason = "Could not find application or entity")
})
+ @SuppressWarnings("rawtypes")
public void setFromMap(
@ApiParam(value = "Application ID or name", required = true)
@PathParam("application") final String application,
@ApiParam(value = "Entity ID or name", required = true)
@PathParam("entity") final String entityToken,
@ApiParam(value = "Map of sensor names to values", required = true)
- Map<?,?> newValues
+ Map newValues
) ;
@POST
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a952d6b7/usage/rest-server/src/main/java/brooklyn/rest/resources/EntityConfigResource.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/brooklyn/rest/resources/EntityConfigResource.java b/usage/rest-server/src/main/java/brooklyn/rest/resources/EntityConfigResource.java
index 66c1ef7..efcd248 100644
--- a/usage/rest-server/src/main/java/brooklyn/rest/resources/EntityConfigResource.java
+++ b/usage/rest-server/src/main/java/brooklyn/rest/resources/EntityConfigResource.java
@@ -110,7 +110,7 @@ public class EntityConfigResource extends AbstractBrooklynRestResource implement
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
- public void setFromMap(String application, String entityToken, Boolean recurse, Map<?, ?> newValues) {
+ public void setFromMap(String application, String entityToken, Boolean recurse, Map newValues) {
final EntityLocal entity = brooklyn().getEntity(application, entityToken);
if (!Entitlements.isEntitled(mgmt().getEntitlementManager(), Entitlements.MODIFY_ENTITY, entity)) {
throw WebResourceUtils.unauthorized("User '%s' is not authorized to modify entity '%s'",
@@ -119,9 +119,9 @@ public class EntityConfigResource extends AbstractBrooklynRestResource implement
if (LOG.isDebugEnabled())
LOG.debug("REST user "+Entitlements.getEntitlementContext()+" setting configs "+newValues);
- for (Map.Entry<?,?> entry: newValues.entrySet()) {
- String configName = Strings.toString(entry.getKey());
- Object newValue = entry.getValue();
+ for (Object entry: newValues.entrySet()) {
+ String configName = Strings.toString(((Map.Entry)entry).getKey());
+ Object newValue = ((Map.Entry)entry).getValue();
ConfigKey ck = findConfig(entity, configName);
((EntityInternal) entity).setConfig(ck, TypeCoercions.coerce(newValue, ck.getTypeToken()));
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/a952d6b7/usage/rest-server/src/main/java/brooklyn/rest/resources/SensorResource.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/brooklyn/rest/resources/SensorResource.java b/usage/rest-server/src/main/java/brooklyn/rest/resources/SensorResource.java
index 987a995..8c6f3f3 100644
--- a/usage/rest-server/src/main/java/brooklyn/rest/resources/SensorResource.java
+++ b/usage/rest-server/src/main/java/brooklyn/rest/resources/SensorResource.java
@@ -107,7 +107,7 @@ public class SensorResource extends AbstractBrooklynRestResource implements Sens
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
- public void setFromMap(String application, String entityToken, Map<?, ?> newValues) {
+ public void setFromMap(String application, String entityToken, Map newValues) {
final EntityLocal entity = brooklyn().getEntity(application, entityToken);
if (!Entitlements.isEntitled(mgmt().getEntitlementManager(), Entitlements.MODIFY_ENTITY, entity)) {
throw WebResourceUtils.unauthorized("User '%s' is not authorized to modify entity '%s'",
@@ -116,9 +116,9 @@ public class SensorResource extends AbstractBrooklynRestResource implements Sens
if (log.isDebugEnabled())
log.debug("REST user "+Entitlements.getEntitlementContext()+" setting sensors "+newValues);
- for (Map.Entry<?,?> entry: newValues.entrySet()) {
- String sensorName = Strings.toString(entry.getKey());
- Object newValue = entry.getValue();
+ for (Object entry: newValues.entrySet()) {
+ String sensorName = Strings.toString(((Map.Entry)entry).getKey());
+ Object newValue = ((Map.Entry)entry).getValue();
AttributeSensor sensor = findSensor(entity, sensorName);
entity.setAttribute(sensor, newValue);
[7/9] incubator-brooklyn git commit: support ProxySslConfig being set
from map, so we can configure nginx via yaml
Posted by he...@apache.org.
support ProxySslConfig being set from map, so we can configure nginx via yaml
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/ccb9a1b1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/ccb9a1b1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/ccb9a1b1
Branch: refs/heads/master
Commit: ccb9a1b1947725cb9f0e35409990a3a9f14b4673
Parents: ff7126a
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Thu Nov 27 11:43:21 2014 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri Dec 12 13:54:55 2014 +0000
----------------------------------------------------------------------
.../brooklyn/entity/proxy/ProxySslConfig.java | 28 ++++++++++---
.../entity/proxy/ProxySslConfigTest.java | 42 ++++++++++++++++++++
2 files changed, 64 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ccb9a1b1/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.java b/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.java
index 219bf27..0a61021 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/ProxySslConfig.java
@@ -19,6 +19,13 @@
package brooklyn.entity.proxy;
import java.io.Serializable;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import brooklyn.util.flags.FlagUtils;
+import brooklyn.util.flags.SetFromFlag;
import com.google.common.base.Objects;
@@ -26,17 +33,19 @@ public class ProxySslConfig implements Serializable {
private static final long serialVersionUID = -2692754611458939617L;
+ private static final Logger log = LoggerFactory.getLogger(ProxySslConfig.class);
+
public static Builder builder() {
return new Builder();
}
public static class Builder {
- protected String certificateSourceUrl;
- protected String keySourceUrl;
- protected String certificateDestination;
- protected String keyDestination;
- protected boolean targetIsSsl = false;
- protected boolean reuseSessions = false;
+ @SetFromFlag protected String certificateSourceUrl;
+ @SetFromFlag protected String keySourceUrl;
+ @SetFromFlag protected String certificateDestination;
+ @SetFromFlag protected String keyDestination;
+ @SetFromFlag protected boolean targetIsSsl = false;
+ @SetFromFlag protected boolean reuseSessions = false;
public Builder certificateSourceUrl(String val) {
certificateSourceUrl = val; return this;
@@ -61,6 +70,13 @@ public class ProxySslConfig implements Serializable {
return result;
}
}
+
+ public static ProxySslConfig fromMap(Map<?,?> map) {
+ Builder b = new Builder();
+ Map<?, ?> unused = FlagUtils.setFieldsFromFlags(map, b);
+ if (!unused.isEmpty()) log.warn("Unused flags when populating "+b+" (ignoring): "+unused);
+ return b.build();
+ }
private String certificateSourceUrl;
private String keySourceUrl;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ccb9a1b1/software/webapp/src/test/java/brooklyn/entity/proxy/ProxySslConfigTest.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/test/java/brooklyn/entity/proxy/ProxySslConfigTest.java b/software/webapp/src/test/java/brooklyn/entity/proxy/ProxySslConfigTest.java
new file mode 100644
index 0000000..77ea8a5
--- /dev/null
+++ b/software/webapp/src/test/java/brooklyn/entity/proxy/ProxySslConfigTest.java
@@ -0,0 +1,42 @@
+package brooklyn.entity.proxy;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+import brooklyn.util.collections.MutableMap;
+import brooklyn.util.flags.TypeCoercions;
+
+@Test
+public class ProxySslConfigTest {
+
+ @Test
+ public void testFromMap() {
+ ProxySslConfig config = TypeCoercions.coerce(MutableMap.of(
+ "certificateSourceUrl", "file://tmp/cert.txt",
+ "keySourceUrl", "file://tmp/key.txt",
+ "keyDestination", "dest.txt",
+ "targetIsSsl", true,
+ "reuseSessions", true),
+ ProxySslConfig.class);
+ Assert.assertEquals(config.getCertificateSourceUrl(), "file://tmp/cert.txt");
+ Assert.assertEquals(config.getKeySourceUrl(), "file://tmp/key.txt");
+ Assert.assertEquals(config.getKeyDestination(), "dest.txt");
+ Assert.assertEquals(config.getTargetIsSsl(), true);
+ Assert.assertEquals(config.getReuseSessions(), true);
+ }
+
+ @Test
+ public void testFromMapWithNullsAndDefaults() {
+ ProxySslConfig config = TypeCoercions.coerce(MutableMap.of(
+ "certificateSourceUrl", "file://tmp/cert.txt",
+ "keySourceUrl", null,
+ "targetIsSsl", "false"),
+ ProxySslConfig.class);
+ Assert.assertEquals(config.getCertificateSourceUrl(), "file://tmp/cert.txt");
+ Assert.assertEquals(config.getKeySourceUrl(), null);
+ Assert.assertEquals(config.getKeyDestination(), null);
+ Assert.assertEquals(config.getTargetIsSsl(), false);
+ Assert.assertEquals(config.getReuseSessions(), false);
+ }
+
+}
[5/9] incubator-brooklyn git commit: REST API support for setting
multiple sensors or config with a map
Posted by he...@apache.org.
REST API support for setting multiple sensors or config with a map
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/25dccf0f
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/25dccf0f
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/25dccf0f
Branch: refs/heads/master
Commit: 25dccf0fed5186bd78b3090282a9e897dd7715a5
Parents: 7c0e0bd
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Fri Nov 28 09:21:17 2014 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri Dec 12 13:54:55 2014 +0000
----------------------------------------------------------------------
.../java/brooklyn/rest/api/EntityConfigApi.java | 18 +++-
.../main/java/brooklyn/rest/api/SensorApi.java | 14 +++
.../rest/resources/EntityConfigResource.java | 27 +++++-
.../brooklyn/rest/resources/SensorResource.java | 21 +++++
.../resources/EntityConfigResourceTest.java | 93 ++++++++++++++++----
.../rest/resources/SensorResourceTest.java | 16 ++++
6 files changed, 169 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/25dccf0f/usage/rest-api/src/main/java/brooklyn/rest/api/EntityConfigApi.java
----------------------------------------------------------------------
diff --git a/usage/rest-api/src/main/java/brooklyn/rest/api/EntityConfigApi.java b/usage/rest-api/src/main/java/brooklyn/rest/api/EntityConfigApi.java
index 76dd25d..7c576bf 100644
--- a/usage/rest-api/src/main/java/brooklyn/rest/api/EntityConfigApi.java
+++ b/usage/rest-api/src/main/java/brooklyn/rest/api/EntityConfigApi.java
@@ -104,6 +104,22 @@ public interface EntityConfigApi {
);
@POST
+ @ApiOperation(value = "Manually set multiple config values")
+ @ApiErrors(value = {
+ @ApiError(code = 404, reason = "Could not find application or entity")
+ })
+ public void setFromMap(
+ @ApiParam(value = "Application ID or name", required = true)
+ @PathParam("application") final String application,
+ @ApiParam(value = "Entity ID or name", required = true)
+ @PathParam("entity") final String entityToken,
+ @ApiParam(value = "Apply the config to all pre-existing descendants", required = false)
+ @QueryParam("recurse") @DefaultValue("false") final Boolean recurse,
+ @ApiParam(value = "Map of config key names to values", required = true)
+ Map<?,?> newValues
+ ) ;
+
+ @POST
@Path("/{config}")
@ApiOperation(value = "Manually set a config value")
@ApiErrors(value = {
@@ -117,7 +133,7 @@ public interface EntityConfigApi {
@ApiParam(value = "Config key name", required = true)
@PathParam("config") String configName,
@ApiParam(value = "Apply the config to all pre-existing descendants", required = false)
- @QueryParam("raw") @DefaultValue("false") final Boolean recurse,
+ @QueryParam("recurse") @DefaultValue("false") final Boolean recurse,
@ApiParam(value = "Value to set")
Object newValue
) ;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/25dccf0f/usage/rest-api/src/main/java/brooklyn/rest/api/SensorApi.java
----------------------------------------------------------------------
diff --git a/usage/rest-api/src/main/java/brooklyn/rest/api/SensorApi.java b/usage/rest-api/src/main/java/brooklyn/rest/api/SensorApi.java
index 349da5a..982aa52 100644
--- a/usage/rest-api/src/main/java/brooklyn/rest/api/SensorApi.java
+++ b/usage/rest-api/src/main/java/brooklyn/rest/api/SensorApi.java
@@ -109,6 +109,20 @@ public interface SensorApi {
) ;
@POST
+ @ApiOperation(value = "Manually set multiple sensor values")
+ @ApiErrors(value = {
+ @ApiError(code = 404, reason = "Could not find application or entity")
+ })
+ public void setFromMap(
+ @ApiParam(value = "Application ID or name", required = true)
+ @PathParam("application") final String application,
+ @ApiParam(value = "Entity ID or name", required = true)
+ @PathParam("entity") final String entityToken,
+ @ApiParam(value = "Map of sensor names to values", required = true)
+ Map<?,?> newValues
+ ) ;
+
+ @POST
@Path("/{sensor}")
@ApiOperation(value = "Manually set a sensor value")
@ApiErrors(value = {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/25dccf0f/usage/rest-server/src/main/java/brooklyn/rest/resources/EntityConfigResource.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/brooklyn/rest/resources/EntityConfigResource.java b/usage/rest-server/src/main/java/brooklyn/rest/resources/EntityConfigResource.java
index e5e2aac..66c1ef7 100644
--- a/usage/rest-server/src/main/java/brooklyn/rest/resources/EntityConfigResource.java
+++ b/usage/rest-server/src/main/java/brooklyn/rest/resources/EntityConfigResource.java
@@ -89,7 +89,7 @@ public class EntityConfigResource extends AbstractBrooklynRestResource implement
@Override
public String getPlain(String application, String entityToken, String configKeyName, Boolean raw) {
- return Strings.toString(get(true, application, entityToken, configKeyName, raw));
+ return Strings.toString(get(false, application, entityToken, configKeyName, raw));
}
public Object get(boolean preferJson, String application, String entityToken, String configKeyName, Boolean raw) {
@@ -110,6 +110,31 @@ public class EntityConfigResource extends AbstractBrooklynRestResource implement
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
+ public void setFromMap(String application, String entityToken, Boolean recurse, Map<?, ?> newValues) {
+ final EntityLocal entity = brooklyn().getEntity(application, entityToken);
+ if (!Entitlements.isEntitled(mgmt().getEntitlementManager(), Entitlements.MODIFY_ENTITY, entity)) {
+ throw WebResourceUtils.unauthorized("User '%s' is not authorized to modify entity '%s'",
+ Entitlements.getEntitlementContext().user(), entity);
+ }
+
+ if (LOG.isDebugEnabled())
+ LOG.debug("REST user "+Entitlements.getEntitlementContext()+" setting configs "+newValues);
+ for (Map.Entry<?,?> entry: newValues.entrySet()) {
+ String configName = Strings.toString(entry.getKey());
+ Object newValue = entry.getValue();
+
+ ConfigKey ck = findConfig(entity, configName);
+ ((EntityInternal) entity).setConfig(ck, TypeCoercions.coerce(newValue, ck.getTypeToken()));
+ if (Boolean.TRUE.equals(recurse)) {
+ for (Entity e2: Entities.descendants(entity, Predicates.alwaysTrue(), false)) {
+ ((EntityInternal) e2).setConfig(ck, newValue);
+ }
+ }
+ }
+ }
+
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ @Override
public void set(String application, String entityToken, String configName, Boolean recurse, Object newValue) {
final EntityLocal entity = brooklyn().getEntity(application, entityToken);
if (!Entitlements.isEntitled(mgmt().getEntitlementManager(), Entitlements.MODIFY_ENTITY, entity)) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/25dccf0f/usage/rest-server/src/main/java/brooklyn/rest/resources/SensorResource.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/main/java/brooklyn/rest/resources/SensorResource.java b/usage/rest-server/src/main/java/brooklyn/rest/resources/SensorResource.java
index fedd60d..987a995 100644
--- a/usage/rest-server/src/main/java/brooklyn/rest/resources/SensorResource.java
+++ b/usage/rest-server/src/main/java/brooklyn/rest/resources/SensorResource.java
@@ -38,6 +38,7 @@ import brooklyn.rest.api.SensorApi;
import brooklyn.rest.domain.SensorSummary;
import brooklyn.rest.transform.SensorTransformer;
import brooklyn.rest.util.WebResourceUtils;
+import brooklyn.util.text.Strings;
import com.google.common.base.Function;
import com.google.common.collect.Lists;
@@ -103,7 +104,27 @@ public class SensorResource extends AbstractBrooklynRestResource implements Sens
if (s instanceof AttributeSensor) return (AttributeSensor<?>) s;
return new BasicAttributeSensor<Object>(Object.class, name);
}
+
+ @SuppressWarnings({ "rawtypes", "unchecked" })
+ @Override
+ public void setFromMap(String application, String entityToken, Map<?, ?> newValues) {
+ final EntityLocal entity = brooklyn().getEntity(application, entityToken);
+ if (!Entitlements.isEntitled(mgmt().getEntitlementManager(), Entitlements.MODIFY_ENTITY, entity)) {
+ throw WebResourceUtils.unauthorized("User '%s' is not authorized to modify entity '%s'",
+ Entitlements.getEntitlementContext().user(), entity);
+ }
+ if (log.isDebugEnabled())
+ log.debug("REST user "+Entitlements.getEntitlementContext()+" setting sensors "+newValues);
+ for (Map.Entry<?,?> entry: newValues.entrySet()) {
+ String sensorName = Strings.toString(entry.getKey());
+ Object newValue = entry.getValue();
+
+ AttributeSensor sensor = findSensor(entity, sensorName);
+ entity.setAttribute(sensor, newValue);
+ }
+ }
+
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public void set(String application, String entityToken, String sensorName, Object newValue) {
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/25dccf0f/usage/rest-server/src/test/java/brooklyn/rest/resources/EntityConfigResourceTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/resources/EntityConfigResourceTest.java b/usage/rest-server/src/test/java/brooklyn/rest/resources/EntityConfigResourceTest.java
index 1f18f60..af8ca5d 100644
--- a/usage/rest-server/src/test/java/brooklyn/rest/resources/EntityConfigResourceTest.java
+++ b/usage/rest-server/src/test/java/brooklyn/rest/resources/EntityConfigResourceTest.java
@@ -18,11 +18,33 @@
*/
package brooklyn.rest.resources;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
+
+import java.net.URI;
+import java.util.List;
+import java.util.Map;
+
+import javax.annotation.Nullable;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import brooklyn.entity.basic.EntityInternal;
+import brooklyn.entity.basic.EntityPredicates;
import brooklyn.rest.domain.ApplicationSpec;
import brooklyn.rest.domain.EntityConfigSummary;
import brooklyn.rest.domain.EntitySpec;
import brooklyn.rest.testing.BrooklynRestResourceTest;
import brooklyn.rest.testing.mocks.RestMockSimpleEntity;
+import brooklyn.util.collections.MutableMap;
+
import com.google.common.base.Optional;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableMap;
@@ -30,26 +52,13 @@ import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.GenericType;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.testng.annotations.BeforeClass;
-import org.testng.annotations.Test;
-
-import javax.annotation.Nullable;
-import java.net.URI;
-import java.util.List;
-import java.util.Map;
-
-import static org.testng.Assert.assertEquals;
-import static org.testng.Assert.assertFalse;
-import static org.testng.Assert.assertNull;
-import static org.testng.Assert.assertTrue;
@Test(singleThreaded = true)
public class EntityConfigResourceTest extends BrooklynRestResourceTest {
private final static Logger log = LoggerFactory.getLogger(EntityConfigResourceTest.class);
- private URI application;
+ private URI applicationUri;
+ private EntityInternal entity;
@BeforeClass(alwaysRun = true)
@Override
@@ -65,9 +74,11 @@ public class EntityConfigResourceTest extends BrooklynRestResourceTest {
ClientResponse response = clientDeploy(simpleSpec);
int status = response.getStatus();
assertTrue(status >= 200 && status <= 299, "expected HTTP Response of 2xx but got " + status);
- application = response.getLocation();
+ applicationUri = response.getLocation();
log.debug("Built app: application");
- waitForApplicationToBeRunning(application);
+ waitForApplicationToBeRunning(applicationUri);
+
+ entity = (EntityInternal) Iterables.find(getManagementContext().getEntityManager().getEntities(), EntityPredicates.displayNameEqualTo("simple-ent"));
}
@Test
@@ -106,11 +117,57 @@ public class EntityConfigResourceTest extends BrooklynRestResourceTest {
}
@Test
- public void testGet() throws Exception {
+ public void testGetJson() throws Exception {
String configValue = client().resource(
URI.create("/v1/applications/simple-app/entities/simple-ent/config/install.version"))
+ .accept(MediaType.APPLICATION_JSON_TYPE)
.get(String.class);
assertEquals(configValue, "\"1.0.0\"");
}
+ @Test
+ public void testGetPlain() throws Exception {
+ String configValue = client().resource(
+ URI.create("/v1/applications/simple-app/entities/simple-ent/config/install.version"))
+ .accept(MediaType.TEXT_PLAIN_TYPE)
+ .get(String.class);
+ assertEquals(configValue, "1.0.0");
+ }
+
+ @Test
+ public void testSet() throws Exception {
+ try {
+ String uri = "/v1/applications/simple-app/entities/simple-ent/config/"+
+ RestMockSimpleEntity.SAMPLE_CONFIG.getName();
+ ClientResponse response = client().resource(uri)
+ .type(MediaType.APPLICATION_JSON_TYPE)
+ .post(ClientResponse.class, "\"hello world\"");
+ assertEquals(response.getStatus(), Response.Status.NO_CONTENT.getStatusCode());
+
+ assertEquals(entity.getConfig(RestMockSimpleEntity.SAMPLE_CONFIG), "hello world");
+
+ String value = client().resource(uri).accept(MediaType.APPLICATION_JSON_TYPE).get(String.class);
+ assertEquals(value, "\"hello world\"");
+
+ } finally { entity.setConfig(RestMockSimpleEntity.SAMPLE_CONFIG, RestMockSimpleEntity.SAMPLE_CONFIG.getDefaultValue()); }
+ }
+
+ @Test
+ public void testSetFromMap() throws Exception {
+ try {
+ String uri = "/v1/applications/simple-app/entities/simple-ent/config";
+ ClientResponse response = client().resource(uri)
+ .type(MediaType.APPLICATION_JSON_TYPE)
+ .post(ClientResponse.class, MutableMap.of(
+ RestMockSimpleEntity.SAMPLE_CONFIG.getName(), "hello world"));
+ assertEquals(response.getStatus(), Response.Status.NO_CONTENT.getStatusCode());
+
+ assertEquals(entity.getConfig(RestMockSimpleEntity.SAMPLE_CONFIG), "hello world");
+
+ String value = client().resource(uri+"/"+RestMockSimpleEntity.SAMPLE_CONFIG.getName()).accept(MediaType.APPLICATION_JSON_TYPE).get(String.class);
+ assertEquals(value, "\"hello world\"");
+
+ } finally { entity.setConfig(RestMockSimpleEntity.SAMPLE_CONFIG, RestMockSimpleEntity.SAMPLE_CONFIG.getDefaultValue()); }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/25dccf0f/usage/rest-server/src/test/java/brooklyn/rest/resources/SensorResourceTest.java
----------------------------------------------------------------------
diff --git a/usage/rest-server/src/test/java/brooklyn/rest/resources/SensorResourceTest.java b/usage/rest-server/src/test/java/brooklyn/rest/resources/SensorResourceTest.java
index bb80035..6d074c0 100644
--- a/usage/rest-server/src/test/java/brooklyn/rest/resources/SensorResourceTest.java
+++ b/usage/rest-server/src/test/java/brooklyn/rest/resources/SensorResourceTest.java
@@ -41,6 +41,7 @@ import brooklyn.rest.domain.EntitySpec;
import brooklyn.rest.testing.BrooklynRestResourceTest;
import brooklyn.rest.testing.mocks.RestMockSimpleEntity;
import brooklyn.test.HttpTestUtils;
+import brooklyn.util.collections.MutableMap;
import brooklyn.util.stream.Streams;
import brooklyn.util.text.StringFunctions;
@@ -233,12 +234,27 @@ public class SensorResourceTest extends BrooklynRestResourceTest {
.post(ClientResponse.class, 67890);
assertEquals(response.getStatus(), Response.Status.NO_CONTENT.getStatusCode());
+ assertEquals(entity.getAttribute(SENSOR), (Integer)67890);
+
String value = client().resource(SENSORS_ENDPOINT + "/" + SENSOR_NAME).accept(MediaType.TEXT_PLAIN_TYPE).get(String.class);
assertEquals(value, "67890 frogs");
} finally { addAmphibianSensor(entity); }
}
+ @Test
+ public void testSetFromMap() throws Exception {
+ try {
+ ClientResponse response = client().resource(SENSORS_ENDPOINT)
+ .type(MediaType.APPLICATION_JSON_TYPE)
+ .post(ClientResponse.class, MutableMap.of(SENSOR_NAME, 67890));
+ assertEquals(response.getStatus(), Response.Status.NO_CONTENT.getStatusCode());
+
+ assertEquals(entity.getAttribute(SENSOR), (Integer)67890);
+
+ } finally { addAmphibianSensor(entity); }
+ }
+
/** Check we can delete a value */
@Test
public void testDelete() throws Exception {
[3/9] incubator-brooklyn git commit: fix typos and warnings
Posted by he...@apache.org.
fix typos and warnings
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/7c0e0bda
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/7c0e0bda
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/7c0e0bda
Branch: refs/heads/master
Commit: 7c0e0bda5734d17b71e7eb35c1ffd0a13e0a9630
Parents: ccb9a1b
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Thu Nov 27 11:43:59 2014 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri Dec 12 13:54:55 2014 +0000
----------------------------------------------------------------------
core/src/main/java/brooklyn/util/flags/FlagUtils.java | 7 +++----
.../main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java | 2 +-
.../java/io/brooklyn/camp/brooklyn/BrooklynCampPlatform.java | 1 +
.../brooklyn/spi/lookup/AbstractTemplateBrooklynLookup.java | 1 -
.../java/io/brooklyn/camp/brooklyn/MapReferenceYamlTest.java | 6 ++----
.../test/java/io/brooklyn/camp/brooklyn/ObjectsYamlTest.java | 6 +-----
6 files changed, 8 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7c0e0bda/core/src/main/java/brooklyn/util/flags/FlagUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/util/flags/FlagUtils.java b/core/src/main/java/brooklyn/util/flags/FlagUtils.java
index 7cd52d1..5a3ba2b 100644
--- a/core/src/main/java/brooklyn/util/flags/FlagUtils.java
+++ b/core/src/main/java/brooklyn/util/flags/FlagUtils.java
@@ -44,7 +44,6 @@ import brooklyn.util.GroovyJavaMethods;
import brooklyn.util.config.ConfigBag;
import brooklyn.util.exceptions.Exceptions;
import brooklyn.util.guava.Maybe;
-import brooklyn.util.text.Strings;
import com.google.common.base.Objects;
import com.google.common.base.Predicate;
@@ -68,7 +67,7 @@ public class FlagUtils {
return setFieldsFromFlagsInternal(o, Arrays.asList(o.getClass().getFields()), flags, null, true);
}
- /** see {@link #setFieldsFromFlags(Object o, ConfigBag)} */
+ /** see {@link #setFieldsFromFlags(Object, ConfigBag)} */
public static Map<?, ?> setFieldsFromFlags(Map<?, ?> flags, Object o) {
return setFieldsFromFlagsInternal(o, getAllFields(o.getClass()), flags, null, true);
}
@@ -83,12 +82,12 @@ public class FlagUtils {
setFieldsFromFlagsInternal(o, getAllFields(o.getClass()), configBag.getAllConfig(), configBag, true);
}
- /** as {@link #setFieldsFromFlags(Object o, ConfigBag)} */
+ /** as {@link #setFieldsFromFlags(Object, ConfigBag)}, but allowing control over whether default values should be set */
public static void setFieldsFromFlags(Object o, ConfigBag configBag, boolean setDefaultVals) {
setFieldsFromFlagsInternal(o, getAllFields(o.getClass()), configBag.getAllConfig(), configBag, setDefaultVals);
}
- /** as {@link #setFieldsFromFlags(Object o, ConfigBag)}, but specifying a subset of flags to use */
+ /** as {@link #setFieldsFromFlags(Object, ConfigBag)}, but specifying a subset of flags to use */
public static void setFieldsFromFlagsWithBag(Object o, Map<?,?> flags, ConfigBag configBag, boolean setDefaultVals) {
setFieldsFromFlagsInternal(o, getAllFields(o.getClass()), flags, configBag, setDefaultVals);
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7c0e0bda/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java
index dabdae2..91c69e5 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxSshDriver.java
@@ -405,7 +405,7 @@ public class NginxSshDriver extends AbstractSoftwareProcessSshDriver implements
// sudoIfPrivilegedPort(getHttpPort(), format("./sbin/nginx -p %s/ -c conf/server.conf -s reload", getRunDir()))
//
// Note that if conf file is invalid, you'll get no stdout/stderr from `kill` but you
- // do from using `nginx ... -s reload` so that can be handly when manually debugging.
+ // do from using `nginx ... -s reload` so that can be handy when manually debugging.
log.debug("reloading nginx by simularing restart (kill -HUP) - {}", entity);
newScript(RESTARTING)
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7c0e0bda/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/BrooklynCampPlatform.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/BrooklynCampPlatform.java b/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/BrooklynCampPlatform.java
index f3fad01..db4ce37 100644
--- a/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/BrooklynCampPlatform.java
+++ b/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/BrooklynCampPlatform.java
@@ -46,6 +46,7 @@ public class BrooklynCampPlatform extends AggregatingCampPlatform implements Has
addInterpreters();
managementContext.addPropertiesReloadListener(new PropertiesReloadListener() {
+ private static final long serialVersionUID = -3739276553334749184L;
@Override public void reloaded() {
setConfigKeyAtManagmentContext();
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7c0e0bda/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/lookup/AbstractTemplateBrooklynLookup.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/lookup/AbstractTemplateBrooklynLookup.java b/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/lookup/AbstractTemplateBrooklynLookup.java
index 54a3214..135fbe3 100644
--- a/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/lookup/AbstractTemplateBrooklynLookup.java
+++ b/usage/camp/src/main/java/io/brooklyn/camp/brooklyn/spi/lookup/AbstractTemplateBrooklynLookup.java
@@ -25,7 +25,6 @@ import io.brooklyn.camp.spi.collection.ResolvableLink;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import brooklyn.catalog.BrooklynCatalog;
import brooklyn.catalog.CatalogItem;
import brooklyn.catalog.internal.CatalogUtils;
import brooklyn.entity.Entity;
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7c0e0bda/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/MapReferenceYamlTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/MapReferenceYamlTest.java b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/MapReferenceYamlTest.java
index 72ca01e..0a02838 100644
--- a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/MapReferenceYamlTest.java
+++ b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/MapReferenceYamlTest.java
@@ -62,7 +62,6 @@ public class MapReferenceYamlTest extends AbstractYamlTest {
setupAndCheckTestEntityInBasicYamlWith();
}
- @SuppressWarnings("unchecked")
@Test
public void testBrooklynConfigWithMapFunction() throws Exception {
final Entity testEntity = setupAndCheckTestEntityInBasicYamlWith(
@@ -75,7 +74,7 @@ public class MapReferenceYamlTest extends AbstractYamlTest {
" one: $brooklyn:entity(\"one\")",
" two: $brooklyn:entity(\"two\")");
- Map<?,?> testMap = (Map) Entities.submit(testEntity, Tasks.builder().body(new Callable<Object>() {
+ Map<?,?> testMap = (Map<?,?>) Entities.submit(testEntity, Tasks.builder().body(new Callable<Object>() {
@Override
public Object call() throws Exception {
return testEntity.getConfig(TestEntity.CONF_MAP_THING_OBJECT);
@@ -93,7 +92,6 @@ public class MapReferenceYamlTest extends AbstractYamlTest {
Assert.assertTrue(two instanceof BasicEntity, "Should have found a BasicEntity: " + two);
}
- @SuppressWarnings("unchecked")
@Test
public void testBrooklynConfigWithPlainMapFunction() throws Exception {
final Entity testEntity = setupAndCheckTestEntityInBasicYamlWith(
@@ -106,7 +104,7 @@ public class MapReferenceYamlTest extends AbstractYamlTest {
" one: $brooklyn:entity(\"one\")",
" two: $brooklyn:entity(\"two\")");
- Map<?,?> testMap = (Map) Entities.submit(testEntity, Tasks.builder().body(new Callable<Object>() {
+ Map<?,?> testMap = (Map<?,?>) Entities.submit(testEntity, Tasks.builder().body(new Callable<Object>() {
@Override
public Object call() throws Exception {
return testEntity.getConfig(TestEntity.CONF_MAP_PLAIN);
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/7c0e0bda/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/ObjectsYamlTest.java
----------------------------------------------------------------------
diff --git a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/ObjectsYamlTest.java b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/ObjectsYamlTest.java
index 0551c93..21eb7a6 100644
--- a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/ObjectsYamlTest.java
+++ b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/ObjectsYamlTest.java
@@ -126,7 +126,6 @@ public class ObjectsYamlTest extends AbstractYamlTest {
setupAndCheckTestEntityInBasicYamlWith();
}
- @SuppressWarnings("unchecked")
@Test
public void testBrooklynObject() throws Exception {
Entity testEntity = setupAndCheckTestEntityInBasicYamlWith(
@@ -152,7 +151,6 @@ public class ObjectsYamlTest extends AbstractYamlTest {
Assert.assertTrue(testObjectObject instanceof ProxySslConfig, "Expected a ProxySslConfig: "+testObjectObject);
}
- @SuppressWarnings("unchecked")
@Test
public void testBrooklynConfigurableObject() throws Exception {
Entity testEntity = setupAndCheckTestEntityInBasicYamlWith(
@@ -183,7 +181,6 @@ public class ObjectsYamlTest extends AbstractYamlTest {
Assert.assertTrue(configKeys.contains(ConfigurableObject.OBJECT.getName()), "Expected OBJECT key: "+configKeys);
}
- @SuppressWarnings("unchecked")
@Test
public void testBrooklynObjectPrefix() throws Exception {
Entity testEntity = setupAndCheckTestEntityInBasicYamlWith(
@@ -196,7 +193,7 @@ public class ObjectsYamlTest extends AbstractYamlTest {
" - $brooklyn:object:",
" type: brooklyn.entity.proxy.ProxySslConfig");
- List testList = testEntity.getConfig(TestEntity.CONF_LIST_PLAIN);
+ List<?> testList = testEntity.getConfig(TestEntity.CONF_LIST_PLAIN);
Assert.assertEquals(testList.size(), 3);
for (Object entry : testList) {
@@ -204,7 +201,6 @@ public class ObjectsYamlTest extends AbstractYamlTest {
}
}
- @SuppressWarnings("unchecked")
@Test
public void testBrooklynObjectWithFunction() throws Exception {
Entity testEntity = setupAndCheckTestEntityInBasicYamlWith(
[4/9] incubator-brooklyn git commit: when doing Entity.addChild,
create a copy of the spec and set the parent *there* if needed,
so that config is inherited even when running `AbstractEntity.init()`
Posted by he...@apache.org.
when doing Entity.addChild, create a copy of the spec and set the parent *there* if needed, so that config is inherited even when running `AbstractEntity.init()`
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/ff7126af
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/ff7126af
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/ff7126af
Branch: refs/heads/master
Commit: ff7126af967f50f87810da7980b7e3159f7b9c54
Parents: 67d05d6
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Tue Nov 25 08:50:17 2014 +0100
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri Dec 12 13:54:55 2014 +0000
----------------------------------------------------------------------
core/src/main/java/brooklyn/entity/basic/AbstractEntity.java | 5 ++++-
.../java/brooklyn/entity/proxying/InternalEntityFactory.java | 7 -------
2 files changed, 4 insertions(+), 8 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ff7126af/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java b/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
index 6a64cb0..ae0179f 100644
--- a/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
+++ b/core/src/main/java/brooklyn/entity/basic/AbstractEntity.java
@@ -622,7 +622,10 @@ public abstract class AbstractEntity extends AbstractBrooklynObject implements E
*/
@Override
public <T extends Entity> T addChild(EntitySpec<T> spec) {
- if (spec.getParent() != null && !this.equals(spec.getParent())) {
+ if (spec.getParent()==null) {
+ spec = EntitySpec.create(spec).parent(this);
+ }
+ if (!this.equals(spec.getParent())) {
throw new IllegalArgumentException("Attempt to create child of "+this+" with entity spec "+spec+
" failed because spec has different parent: "+spec.getParent());
}
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/ff7126af/core/src/main/java/brooklyn/entity/proxying/InternalEntityFactory.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/entity/proxying/InternalEntityFactory.java b/core/src/main/java/brooklyn/entity/proxying/InternalEntityFactory.java
index 50e15e6..40885b4 100644
--- a/core/src/main/java/brooklyn/entity/proxying/InternalEntityFactory.java
+++ b/core/src/main/java/brooklyn/entity/proxying/InternalEntityFactory.java
@@ -295,13 +295,6 @@ public class InternalEntityFactory extends InternalFactory {
((AbstractEntity)entity).addLocations(spec.getLocations());
- /* 31 Mar 2014, moved initialization (below) into this task: primarily for consistency and traceability on failure.
- * TBC whether this is good/bad/indifferent. My (Alex) opinion is that whether it is done in a subtask
- * should be the same as whether enricher/policy/etc (below) is done subtasks, which is was added recently
- * in 249c96fbb18bd9d763029475e0a3dc251c01b287. @nakomis can you give exact reason code below is needed in a task
- * commit message said was to do with wiring up yaml sensors and policies -- which makes sense but specifics would be handy!
- * and would let me know if there is any reason to do / not_do the initializer code below also here!
- */
for (EntityInitializer initializer: spec.getInitializers()) {
initializer.apply((EntityInternal)entity);
}
[9/9] incubator-brooklyn git commit: This closes #373
Posted by he...@apache.org.
This closes #373
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/b3cea88c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/b3cea88c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/b3cea88c
Branch: refs/heads/master
Commit: b3cea88cf693c6ed77afd82050e9ae3cf9ec588c
Parents: dd716b3 0b40243
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Mon Dec 15 16:57:13 2014 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Mon Dec 15 16:57:13 2014 +0000
----------------------------------------------------------------------
.../brooklyn/entity/proxying/EntitySpec.java | 4 +-
.../brooklyn/entity/basic/AbstractEntity.java | 5 +-
.../brooklyn/entity/basic/EntityPredicates.java | 2 +-
.../entity/proxying/InternalEntityFactory.java | 7 --
.../event/feed/AttributePollHandler.java | 12 ++-
.../main/java/brooklyn/event/feed/Poller.java | 2 -
.../java/brooklyn/event/feed/http/HttpFeed.java | 2 +-
.../event/feed/http/HttpPollConfig.java | 15 +---
.../java/brooklyn/util/flags/FlagUtils.java | 7 +-
.../main/java/brooklyn/util/http/HttpTool.java | 17 ++++
.../entity/proxy/AbstractController.java | 2 +-
.../entity/proxy/AbstractControllerImpl.java | 21 +++--
.../brooklyn/entity/proxy/LoadBalancer.java | 9 +-
.../brooklyn/entity/proxy/ProxySslConfig.java | 28 ++++--
.../entity/proxy/nginx/NginxController.java | 5 ++
.../entity/proxy/nginx/NginxControllerImpl.java | 45 ++++++++--
.../entity/proxy/nginx/NginxSshDriver.java | 31 +++++--
.../brooklyn/entity/proxy/nginx/UrlMapping.java | 1 -
.../entity/proxy/ProxySslConfigTest.java | 60 +++++++++++++
.../nginx/NginxHttpsSslIntegrationTest.java | 60 ++++++++++++-
.../camp/brooklyn/BrooklynCampPlatform.java | 1 +
.../lookup/AbstractTemplateBrooklynLookup.java | 1 -
.../camp/brooklyn/MapReferenceYamlTest.java | 6 +-
.../brooklyn/camp/brooklyn/ObjectsYamlTest.java | 6 +-
usage/launcher/src/test/resources/nginx.yaml | 27 ++++++
usage/launcher/src/test/resources/web.yaml | 2 +-
.../qa/load/SimulatedNginxControllerImpl.java | 5 +-
.../java/brooklyn/rest/api/EntityConfigApi.java | 19 +++-
.../main/java/brooklyn/rest/api/SensorApi.java | 15 ++++
.../rest/resources/EntityConfigResource.java | 27 +++++-
.../brooklyn/rest/resources/SensorResource.java | 21 +++++
.../resources/EntityConfigResourceTest.java | 93 ++++++++++++++++----
.../rest/resources/SensorResourceTest.java | 16 ++++
33 files changed, 469 insertions(+), 105 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b3cea88c/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxController.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b3cea88c/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxControllerImpl.java
----------------------------------------------------------------------
[2/9] incubator-brooklyn git commit: ensure fields are copied when
cloning a spec
Posted by he...@apache.org.
ensure fields are copied when cloning a spec
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/92ebdbfc
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/92ebdbfc
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/92ebdbfc
Branch: refs/heads/master
Commit: 92ebdbfc1083f7eae9ec88a8fc5d66f59b6db413
Parents: f287705
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Mon Dec 8 11:11:29 2014 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri Dec 12 13:54:55 2014 +0000
----------------------------------------------------------------------
api/src/main/java/brooklyn/entity/proxying/EntitySpec.java | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/92ebdbfc/api/src/main/java/brooklyn/entity/proxying/EntitySpec.java
----------------------------------------------------------------------
diff --git a/api/src/main/java/brooklyn/entity/proxying/EntitySpec.java b/api/src/main/java/brooklyn/entity/proxying/EntitySpec.java
index 1b22387..6fa8e73 100644
--- a/api/src/main/java/brooklyn/entity/proxying/EntitySpec.java
+++ b/api/src/main/java/brooklyn/entity/proxying/EntitySpec.java
@@ -118,7 +118,9 @@ public class EntitySpec<T extends Entity> extends AbstractBrooklynObjectSpec<T,E
.addInitializers(spec.getInitializers())
.children(spec.getChildren())
.members(spec.getMembers())
- .groups(spec.getGroups());
+ .groups(spec.getGroups())
+ .catalogItemId(spec.getCatalogItemId())
+ .locations(spec.getLocations());
if (spec.getParent() != null) result.parent(spec.getParent());
if (spec.getImplementation() != null) result.impl(spec.getImplementation());
[6/9] incubator-brooklyn git commit: add nginx yaml sample,
and prevent multiple feeds getting added
Posted by he...@apache.org.
add nginx yaml sample, and prevent multiple feeds getting added
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/f287705d
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/f287705d
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/f287705d
Branch: refs/heads/master
Commit: f287705d5e075e9021414d08ce577ccaea157c2d
Parents: a952d6b
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Mon Dec 8 10:32:04 2014 +0000
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Fri Dec 12 13:54:55 2014 +0000
----------------------------------------------------------------------
.../brooklyn/entity/proxy/nginx/NginxControllerImpl.java | 4 ++--
usage/launcher/src/test/resources/nginx.yaml | 9 +++++++++
usage/launcher/src/test/resources/web.yaml | 2 +-
3 files changed, 12 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f287705d/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxControllerImpl.java
----------------------------------------------------------------------
diff --git a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxControllerImpl.java b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxControllerImpl.java
index ef5e99a..3c77fb7 100644
--- a/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxControllerImpl.java
+++ b/software/webapp/src/main/java/brooklyn/entity/proxy/nginx/NginxControllerImpl.java
@@ -109,7 +109,7 @@ public class NginxControllerImpl extends AbstractControllerImpl implements Nginx
ConfigToAttributes.apply(this);
// "up" is defined as returning a valid HTTP response from nginx (including a 404 etc)
- httpFeed = HttpFeed.builder()
+ httpFeed = addFeed(HttpFeed.builder()
.uniqueTag("nginx-poll")
.entity(this)
.period(getConfig(HTTP_POLL_PERIOD))
@@ -126,7 +126,7 @@ public class NginxControllerImpl extends AbstractControllerImpl implements Nginx
return actual != null && actual.size() == 1;
}})
.setOnException(false))
- .build();
+ .build());
if (!Lifecycle.RUNNING.equals(getAttribute(SERVICE_STATE_ACTUAL))) {
// TODO when updating the map, if it would change from empty to empty on a successful run
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f287705d/usage/launcher/src/test/resources/nginx.yaml
----------------------------------------------------------------------
diff --git a/usage/launcher/src/test/resources/nginx.yaml b/usage/launcher/src/test/resources/nginx.yaml
new file mode 100644
index 0000000..47a846e
--- /dev/null
+++ b/usage/launcher/src/test/resources/nginx.yaml
@@ -0,0 +1,9 @@
+name: Sample Nginx on SSL
+location: localhost
+services:
+- type: brooklyn.entity.proxy.nginx.NginxController
+ ssl:
+ certificateDestination: /tmp/server.crt
+ keyDestination: /tmp/server.key
+ httpsPort: 8443+
+# normally also specify a group, pointing at a web app; or use controlled dynamic web app cluster
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/f287705d/usage/launcher/src/test/resources/web.yaml
----------------------------------------------------------------------
diff --git a/usage/launcher/src/test/resources/web.yaml b/usage/launcher/src/test/resources/web.yaml
index ccebc15..00edf4e 100644
--- a/usage/launcher/src/test/resources/web.yaml
+++ b/usage/launcher/src/test/resources/web.yaml
@@ -16,7 +16,7 @@
# specific language governing permissions and limitations
# under the License.
#
-name: Storm Sample App
+name: Sample Web App
services:
- serviceType: brooklyn.entity.webapp.ControlledDynamicWebAppCluster
name: Analytics Web App