JBoss7: support disabling direct connection - Important if instance is locked down such that only ssh access to the VM is available.
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/b1a57d13 Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/b1a57d13 Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/b1a57d13 Branch: refs/heads/master Commit: b1a57d13792ce3f068aba3c98e91363cab1da167 Parents: b70a556 Author: Aled Sage <[email protected]> Authored: Wed Nov 18 15:36:45 2015 +0000 Committer: Aled Sage <[email protected]> Committed: Tue Nov 24 13:53:45 2015 +0000 ---------------------------------------------------------------------- .../entity/webapp/jboss/JBoss7Server.java | 5 +- .../entity/webapp/jboss/JBoss7ServerImpl.java | 121 ++++++++++--------- .../jboss/JBoss7ServerAwsEc2LiveTest.java | 31 ++++- 3 files changed, 101 insertions(+), 56 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b1a57d13/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7Server.java ---------------------------------------------------------------------- diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7Server.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7Server.java index 0ba1b38..4fa1656 100644 --- a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7Server.java +++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7Server.java @@ -25,9 +25,9 @@ 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.sensor.BasicAttributeSensorAndConfigKey; +import org.apache.brooklyn.core.sensor.BasicAttributeSensorAndConfigKey.StringAttributeSensorAndConfigKey; import org.apache.brooklyn.core.sensor.PortAttributeSensorAndConfigKey; import org.apache.brooklyn.core.sensor.Sensors; -import org.apache.brooklyn.core.sensor.BasicAttributeSensorAndConfigKey.StringAttributeSensorAndConfigKey; import org.apache.brooklyn.entity.software.base.SoftwareProcess; import org.apache.brooklyn.entity.webapp.JavaWebAppSoftwareProcess; import org.apache.brooklyn.util.core.ResourcePredicates; @@ -94,6 +94,9 @@ public interface JBoss7Server extends JavaWebAppSoftwareProcess, HasShortName { ConfigKey<String> MANAGEMENT_PASSWORD = ConfigKeys.newStringConfigKey("webapp.jboss.managementPassword", "Password for MANAGEMENT_USER."); + @SetFromFlag("useHttpMonitoring") + ConfigKey<Boolean> USE_HTTP_MONITORING = ConfigKeys.newConfigKey("httpMonitoring.enabled", "HTTP(S) monitoring enabled", Boolean.TRUE); + AttributeSensor<String> MANAGEMENT_URL = Sensors.newStringSensor("webapp.jboss.managementUrl", "URL where management endpoint is available"); http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b1a57d13/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerImpl.java ---------------------------------------------------------------------- diff --git a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerImpl.java b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerImpl.java index 4ebd545..e2411a7 100644 --- a/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerImpl.java +++ b/software/webapp/src/main/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerImpl.java @@ -29,9 +29,9 @@ import org.apache.brooklyn.entity.webapp.JavaWebAppSoftwareProcessImpl; import org.apache.brooklyn.feed.http.HttpFeed; import org.apache.brooklyn.feed.http.HttpPollConfig; import org.apache.brooklyn.feed.http.HttpValueFunctions; +import org.apache.brooklyn.util.guava.Functionals; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.apache.brooklyn.util.guava.Functionals; import com.google.common.base.Functions; import com.google.common.collect.ImmutableMap; @@ -79,63 +79,72 @@ public class JBoss7ServerImpl extends JavaWebAppSoftwareProcessImpl implements J String managementUri = String.format("http://%s:%s/management/subsystem/web/connector/http/read-resource", hp.getHostText(), hp.getPort()); sensors().set(MANAGEMENT_URL, managementUri); - log.debug("JBoss sensors for "+this+" reading from "+managementUri); - Map<String, String> includeRuntimeUriVars = ImmutableMap.of("include-runtime","true"); - boolean retrieveUsageMetrics = getConfig(RETRIEVE_USAGE_METRICS); - - httpFeed = HttpFeed.builder() - .entity(this) - .period(200) - .baseUri(managementUri) - .credentials(getConfig(MANAGEMENT_USER), getConfig(MANAGEMENT_PASSWORD)) - .poll(new HttpPollConfig<Integer>(MANAGEMENT_STATUS) - .onSuccess(HttpValueFunctions.responseCode()) - .suppressDuplicates(true)) - .poll(new HttpPollConfig<Boolean>(MANAGEMENT_URL_UP) - .onSuccess(HttpValueFunctions.responseCodeEquals(200)) - .onFailureOrException(Functions.constant(false)) - .suppressDuplicates(true)) - .poll(new HttpPollConfig<Integer>(REQUEST_COUNT) - .vars(includeRuntimeUriVars) - .onSuccess(HttpValueFunctions.jsonContents("requestCount", Integer.class)) - .enabled(retrieveUsageMetrics)) - .poll(new HttpPollConfig<Integer>(ERROR_COUNT) - .vars(includeRuntimeUriVars) - .onSuccess(HttpValueFunctions.jsonContents("errorCount", Integer.class)) - .enabled(retrieveUsageMetrics)) - .poll(new HttpPollConfig<Integer>(TOTAL_PROCESSING_TIME) - .vars(includeRuntimeUriVars) - .onSuccess(HttpValueFunctions.jsonContents("processingTime", Integer.class)) - .enabled(retrieveUsageMetrics)) - .poll(new HttpPollConfig<Integer>(MAX_PROCESSING_TIME) - .vars(includeRuntimeUriVars) - .onSuccess(HttpValueFunctions.jsonContents("maxTime", Integer.class)) - .enabled(retrieveUsageMetrics)) - .poll(new HttpPollConfig<Long>(BYTES_RECEIVED) - .vars(includeRuntimeUriVars) - // jboss seems to report 0 even if it has received lots of requests; dunno why. - .onSuccess(HttpValueFunctions.jsonContents("bytesReceived", Long.class)) - .enabled(retrieveUsageMetrics)) - .poll(new HttpPollConfig<Long>(BYTES_SENT) - .vars(includeRuntimeUriVars) - .onSuccess(HttpValueFunctions.jsonContents("bytesSent", Long.class)) - .enabled(retrieveUsageMetrics)) - .build(); + + if (isHttpMonitoringEnabled()) { + log.debug("JBoss sensors for "+this+" reading from "+managementUri); + Map<String, String> includeRuntimeUriVars = ImmutableMap.of("include-runtime","true"); + boolean retrieveUsageMetrics = getConfig(RETRIEVE_USAGE_METRICS); + + httpFeed = HttpFeed.builder() + .entity(this) + .period(200) + .baseUri(managementUri) + .credentials(getConfig(MANAGEMENT_USER), getConfig(MANAGEMENT_PASSWORD)) + .poll(new HttpPollConfig<Integer>(MANAGEMENT_STATUS) + .onSuccess(HttpValueFunctions.responseCode()) + .suppressDuplicates(true)) + .poll(new HttpPollConfig<Boolean>(MANAGEMENT_URL_UP) + .onSuccess(HttpValueFunctions.responseCodeEquals(200)) + .onFailureOrException(Functions.constant(false)) + .suppressDuplicates(true)) + .poll(new HttpPollConfig<Integer>(REQUEST_COUNT) + .vars(includeRuntimeUriVars) + .onSuccess(HttpValueFunctions.jsonContents("requestCount", Integer.class)) + .enabled(retrieveUsageMetrics)) + .poll(new HttpPollConfig<Integer>(ERROR_COUNT) + .vars(includeRuntimeUriVars) + .onSuccess(HttpValueFunctions.jsonContents("errorCount", Integer.class)) + .enabled(retrieveUsageMetrics)) + .poll(new HttpPollConfig<Integer>(TOTAL_PROCESSING_TIME) + .vars(includeRuntimeUriVars) + .onSuccess(HttpValueFunctions.jsonContents("processingTime", Integer.class)) + .enabled(retrieveUsageMetrics)) + .poll(new HttpPollConfig<Integer>(MAX_PROCESSING_TIME) + .vars(includeRuntimeUriVars) + .onSuccess(HttpValueFunctions.jsonContents("maxTime", Integer.class)) + .enabled(retrieveUsageMetrics)) + .poll(new HttpPollConfig<Long>(BYTES_RECEIVED) + .vars(includeRuntimeUriVars) + // jboss seems to report 0 even if it has received lots of requests; dunno why. + .onSuccess(HttpValueFunctions.jsonContents("bytesReceived", Long.class)) + .enabled(retrieveUsageMetrics)) + .poll(new HttpPollConfig<Long>(BYTES_SENT) + .vars(includeRuntimeUriVars) + .onSuccess(HttpValueFunctions.jsonContents("bytesSent", Long.class)) + .enabled(retrieveUsageMetrics)) + .build(); + + enrichers().add(Enrichers.builder().updatingMap(Attributes.SERVICE_NOT_UP_INDICATORS) + .from(MANAGEMENT_URL_UP) + .computing(Functionals.ifNotEquals(true).value("Management URL not reachable") ) + .build()); + } - connectServiceUp(); + connectServiceUpIsRunning(); } - protected void connectServiceUp() { - connectServiceUpIsRunning(); - - enrichers().add(Enrichers.builder().updatingMap(Attributes.SERVICE_NOT_UP_INDICATORS) - .from(MANAGEMENT_URL_UP) - .computing(Functionals.ifNotEquals(true).value("Management URL not reachable") ) - .build()); + /** + * @deprecated since 0.9.0; now a no-op; marked final to force anyone sub-classing + overriding it to update their code. + */ + @Deprecated + protected final void connectServiceUp() { } - protected void disconnectServiceUp() { - disconnectServiceUpIsRunning(); + /** + * @deprecated since 0.9.0; now a no-op; marked final to force anyone sub-classing + overriding it to update their code. + */ + @Deprecated + protected final void disconnectServiceUp() { } @Override @@ -143,7 +152,11 @@ public class JBoss7ServerImpl extends JavaWebAppSoftwareProcessImpl implements J super.disconnectSensors(); if (httpFeed != null) httpFeed.stop(); - disconnectServiceUp(); + disconnectServiceUpIsRunning(); + } + + protected boolean isHttpMonitoringEnabled() { + return Boolean.TRUE.equals(getConfig(USE_HTTP_MONITORING)); } public int getManagementHttpsPort() { http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/b1a57d13/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerAwsEc2LiveTest.java ---------------------------------------------------------------------- diff --git a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerAwsEc2LiveTest.java b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerAwsEc2LiveTest.java index 9f7b4e7..6a1cc4d 100644 --- a/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerAwsEc2LiveTest.java +++ b/software/webapp/src/test/java/org/apache/brooklyn/entity/webapp/jboss/JBoss7ServerAwsEc2LiveTest.java @@ -18,11 +18,14 @@ */ package org.apache.brooklyn.entity.webapp.jboss; -import static com.google.common.base.Preconditions.checkNotNull; import static org.testng.Assert.assertNotNull; import org.apache.brooklyn.api.entity.EntitySpec; import org.apache.brooklyn.api.location.Location; +import org.apache.brooklyn.core.entity.Attributes; +import org.apache.brooklyn.core.entity.EntityAsserts; +import org.apache.brooklyn.core.entity.lifecycle.Lifecycle; +import org.apache.brooklyn.core.location.cloud.CloudLocationConfig; import org.apache.brooklyn.entity.AbstractEc2LiveTest; import org.apache.brooklyn.test.Asserts; import org.apache.brooklyn.test.HttpTestUtils; @@ -30,6 +33,7 @@ import org.apache.brooklyn.test.support.TestResourceUnavailableException; import org.testng.annotations.Test; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; /** * A simple test of installing+running on AWS-EC2, using various OS distros and versions. @@ -70,6 +74,31 @@ public class JBoss7ServerAwsEc2LiveTest extends AbstractEc2LiveTest { super.test_CentOS_6_3(); } + @Test(groups = {"Live"}) + public void testWithOnlyPort22() throws Exception { + // CentOS-6.3-x86_64-GA-EBS-02-85586466-5b6c-4495-b580-14f72b4bcf51-ami-bb9af1d2.1 + jcloudsLocation = mgmt.getLocationRegistry().resolve(LOCATION_SPEC, ImmutableMap.of( + "tags", ImmutableList.of(getClass().getName()), + "imageId", "us-east-1/ami-a96b01c0", + "hardwareId", SMALL_HARDWARE_ID)); + + JBoss7Server server = app.createAndManageChild(EntitySpec.create(JBoss7Server.class) + .configure(JBoss7Server.PROVISIONING_PROPERTIES.subKey(CloudLocationConfig.INBOUND_PORTS.getName()), ImmutableList.of(22)) + .configure(JBoss7Server.USE_HTTP_MONITORING, false) + .configure(JBoss7Server.OPEN_IPTABLES, true) + .configure("war", getTestWar())); + + app.start(ImmutableList.of(jcloudsLocation)); + + EntityAsserts.assertAttributeEqualsEventually(server, Attributes.SERVICE_UP, true); + EntityAsserts.assertAttributeEqualsEventually(server, Attributes.SERVICE_STATE_ACTUAL, Lifecycle.RUNNING); + + String url = server.getAttribute(JBoss7Server.ROOT_URL); + assertNotNull(url); + + assertViaSshLocalUrlListeningEventually(server, url); + } + @Test(enabled=false) public void testDummy() {} // Convince testng IDE integration that this really does have test methods }
