mirror of https://github.com/apache/jclouds.git
Issue 1075:switch to use jetty for java install/web service tests
This commit is contained in:
parent
7f53d74250
commit
a70e3adb20
|
@ -23,6 +23,7 @@ import org.jclouds.javax.annotation.Nullable;
|
||||||
import org.jclouds.ovf.Envelope;
|
import org.jclouds.ovf.Envelope;
|
||||||
|
|
||||||
import com.google.common.annotations.Beta;
|
import com.google.common.annotations.Beta;
|
||||||
|
import com.google.common.base.Objects.ToStringHelper;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Operating system based on DMTF CIM model.
|
* Operating system based on DMTF CIM model.
|
||||||
|
@ -175,8 +176,7 @@ public class CIMOperatingSystem extends OperatingSystem {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
protected ToStringHelper string() {
|
||||||
return "[name=" + name + ", family=" + family + ", version=" + version + ", arch=" + arch + ", is64Bit="
|
return super.string().add("osType", osType);
|
||||||
+ is64Bit + ", description=" + description + ", osType=" + osType+ "]";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,74 @@
|
||||||
|
/**
|
||||||
|
* Licensed to jclouds, Inc. (jclouds) under one or more
|
||||||
|
* contributor license agreements. See the NOTICE file
|
||||||
|
* distributed with this work for additional information
|
||||||
|
* regarding copyright ownership. jclouds 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 org.jclouds.compute;
|
||||||
|
|
||||||
|
import static org.jclouds.scriptbuilder.domain.Statements.exec;
|
||||||
|
import static org.jclouds.scriptbuilder.domain.Statements.extractTargzAndFlattenIntoDirectory;
|
||||||
|
|
||||||
|
import java.net.URI;
|
||||||
|
|
||||||
|
import org.jclouds.scriptbuilder.domain.Statement;
|
||||||
|
import org.jclouds.scriptbuilder.domain.StatementList;
|
||||||
|
import org.jclouds.scriptbuilder.statements.java.InstallJDK;
|
||||||
|
import org.jclouds.scriptbuilder.statements.login.AdminAccess;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
public class JettyStatements {
|
||||||
|
|
||||||
|
public static final URI JETTY_URL = URI.create(System.getProperty("test.jetty-url",//
|
||||||
|
"http://download.eclipse.org/jetty/8.1.5.v20120716/dist/jetty-distribution-8.1.5.v20120716.tar.gz"));
|
||||||
|
|
||||||
|
public static final String JETTY_HOME = "/usr/local/jetty";
|
||||||
|
|
||||||
|
public static final int port = 8080;
|
||||||
|
|
||||||
|
public static Statement version() {
|
||||||
|
return exec(String.format("head -1 %s/VERSION.txt | cut -f1 -d ' '", JETTY_HOME));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Statement install() {
|
||||||
|
return new StatementList(
|
||||||
|
AdminAccess.builder().adminUsername("web").build(),
|
||||||
|
InstallJDK.fromOpenJDK(),
|
||||||
|
authorizePortInIpTables(),
|
||||||
|
extractTargzAndFlattenIntoDirectory(JETTY_URL, JETTY_HOME),
|
||||||
|
exec("chown -R web " + JETTY_HOME));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Statement authorizePortInIpTables() {
|
||||||
|
return new StatementList(
|
||||||
|
exec("iptables -I INPUT 1 -p tcp --dport " + port + " -j ACCEPT"),
|
||||||
|
exec("iptables-save"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Statement start() {
|
||||||
|
return new StatementList(
|
||||||
|
exec("cd " + JETTY_HOME),
|
||||||
|
exec("./bin/jetty.sh start"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Statement stop() {
|
||||||
|
return new StatementList(
|
||||||
|
exec("cd " + JETTY_HOME),
|
||||||
|
exec("./bin/jetty.sh stop"));
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,101 +0,0 @@
|
||||||
/**
|
|
||||||
* Licensed to jclouds, Inc. (jclouds) under one or more
|
|
||||||
* contributor license agreements. See the NOTICE file
|
|
||||||
* distributed with this work for additional information
|
|
||||||
* regarding copyright ownership. jclouds 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 org.jclouds.compute;
|
|
||||||
|
|
||||||
import static java.lang.String.format;
|
|
||||||
import static org.jclouds.compute.util.ComputeServiceUtils.extractTargzIntoDirectory;
|
|
||||||
import static org.jclouds.scriptbuilder.domain.Statements.appendFile;
|
|
||||||
import static org.jclouds.scriptbuilder.domain.Statements.exec;
|
|
||||||
import static org.jclouds.scriptbuilder.domain.Statements.interpret;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.net.URI;
|
|
||||||
|
|
||||||
import org.jclouds.compute.domain.OperatingSystem;
|
|
||||||
import org.jclouds.scriptbuilder.InitScript;
|
|
||||||
import org.jclouds.scriptbuilder.domain.Statement;
|
|
||||||
import org.jclouds.scriptbuilder.domain.StatementList;
|
|
||||||
import org.jclouds.scriptbuilder.statements.java.InstallJDK;
|
|
||||||
import org.jclouds.scriptbuilder.statements.login.AdminAccess;
|
|
||||||
|
|
||||||
import com.google.common.base.Splitter;
|
|
||||||
import com.google.common.collect.ImmutableList;
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
|
||||||
import com.google.common.collect.ImmutableList.Builder;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author Adrian Cole
|
|
||||||
*/
|
|
||||||
public class RunScriptData {
|
|
||||||
|
|
||||||
public static final URI JBOSS7_URL = URI.create(System.getProperty("test.jboss7-url",//
|
|
||||||
"http://download.jboss.org/jbossas/7.0/jboss-as-7.0.2.Final/jboss-as-web-7.0.2.Final.tar.gz"));
|
|
||||||
|
|
||||||
public static String JBOSS_HOME = "/usr/local/jboss";
|
|
||||||
|
|
||||||
public static Statement authorizePortsInIpTables(int... ports) {
|
|
||||||
Builder<Statement> builder = ImmutableList.builder();
|
|
||||||
for (int port : ports)
|
|
||||||
builder.add(exec("iptables -I INPUT 1 -p tcp --dport " + port + " -j ACCEPT"));
|
|
||||||
builder.add(exec("iptables-save"));
|
|
||||||
return new StatementList(builder.build());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static StatementList installAdminUserJBossAndOpenPorts(OperatingSystem os) throws IOException {
|
|
||||||
return new StatementList(//
|
|
||||||
AdminAccess.builder().adminUsername("web").build(),//
|
|
||||||
InstallJDK.fromOpenJDK(),//
|
|
||||||
authorizePortsInIpTables(22, 8080),//
|
|
||||||
extractTargzIntoDirectory(JBOSS7_URL, "/usr/local"),//
|
|
||||||
exec("{md} " + JBOSS_HOME), exec("mv /usr/local/jboss-*/* " + JBOSS_HOME),//
|
|
||||||
changeStandaloneConfigToListenOnAllIPAddresses(),
|
|
||||||
exec("chmod -R oug+r+w " + JBOSS_HOME),
|
|
||||||
exec("chown -R web " + JBOSS_HOME));
|
|
||||||
}
|
|
||||||
|
|
||||||
// NOTE do not name this the same as your login user, or the init process may kill you!
|
|
||||||
public static InitScript startJBoss(String configuration) {
|
|
||||||
return InitScript.builder()
|
|
||||||
.name("jboss")
|
|
||||||
.home(JBOSS_HOME)
|
|
||||||
.exportVariables(ImmutableMap.of("JBOSS_HOME", JBOSS_HOME))
|
|
||||||
.init(appendFile(JBOSS_HOME + "/standalone/configuration/standalone-custom.xml", Splitter.on('\n').split(configuration)))
|
|
||||||
.run(interpret(new StringBuilder().append("java ").append(' ')
|
|
||||||
.append("-server -Xms128m -Xmx128m -XX:MaxPermSize=128m -Djava.net.preferIPv4Stack=true -XX:+UseFastAccessorMethods -XX:+TieredCompilation -Xverify:none -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000").append(' ')
|
|
||||||
.append("-Djboss.modules.system.pkgs=org.jboss.byteman").append(' ')
|
|
||||||
.append("-Dorg.jboss.boot.log.file=$JBOSS_HOME/standalone/log/boot.log").append(' ')
|
|
||||||
.append("-Dlogging.configuration=file:$JBOSS_HOME/standalone/configuration/logging.properties").append(' ')
|
|
||||||
.append("-jar $JBOSS_HOME/jboss-modules.jar").append(' ')
|
|
||||||
.append("-mp $JBOSS_HOME/modules").append(' ')
|
|
||||||
.append("-logmodule org.jboss.logmanager").append(' ')
|
|
||||||
.append("-jaxpmodule javax.xml.jaxp-provider").append(' ')
|
|
||||||
.append("org.jboss.as.standalone").append(' ')
|
|
||||||
.append("-Djboss.home.dir=$JBOSS_HOME").append(' ')
|
|
||||||
.append("--server-config=standalone-custom.xml")
|
|
||||||
.toString())).build();
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO make this a cli option
|
|
||||||
private static Statement changeStandaloneConfigToListenOnAllIPAddresses() {
|
|
||||||
return exec(format(
|
|
||||||
"(cd %s/standalone/configuration && sed 's~inet-address value=.*/~any-address/~g' standalone.xml > standalone.xml.new && mv standalone.xml.new standalone.xml)",
|
|
||||||
JBOSS_HOME));
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -36,6 +36,7 @@ import org.easymock.IArgumentMatcher;
|
||||||
import org.jclouds.compute.domain.ExecResponse;
|
import org.jclouds.compute.domain.ExecResponse;
|
||||||
import org.jclouds.compute.domain.NodeMetadata;
|
import org.jclouds.compute.domain.NodeMetadata;
|
||||||
import org.jclouds.compute.internal.BaseComputeServiceLiveTest;
|
import org.jclouds.compute.internal.BaseComputeServiceLiveTest;
|
||||||
|
import org.jclouds.compute.util.OpenSocketFinder;
|
||||||
import org.jclouds.crypto.Pems;
|
import org.jclouds.crypto.Pems;
|
||||||
import org.jclouds.domain.LoginCredentials;
|
import org.jclouds.domain.LoginCredentials;
|
||||||
import org.jclouds.io.Payload;
|
import org.jclouds.io.Payload;
|
||||||
|
@ -81,12 +82,19 @@ public class StubComputeServiceIntegrationTest extends BaseComputeServiceLiveTes
|
||||||
SocketOpen socketOpen = createMock(SocketOpen.class);
|
SocketOpen socketOpen = createMock(SocketOpen.class);
|
||||||
|
|
||||||
expect(socketOpen.apply(HostAndPort.fromParts("144.175.1.1", 22))).andReturn(true).times(5);
|
expect(socketOpen.apply(HostAndPort.fromParts("144.175.1.1", 22))).andReturn(true).times(5);
|
||||||
// restart of jboss
|
|
||||||
expect(socketOpen.apply(HostAndPort.fromParts("144.175.1.1", 8080))).andReturn(true).times(2);
|
|
||||||
|
|
||||||
replay(socketOpen);
|
replay(socketOpen);
|
||||||
|
|
||||||
preciseSocketTester = socketTester = new RetryablePredicate<HostAndPort>(socketOpen, 1, 1, TimeUnit.MILLISECONDS);
|
socketTester = new RetryablePredicate<HostAndPort>(socketOpen, 1, 1, TimeUnit.MILLISECONDS);
|
||||||
|
|
||||||
|
openSocketFinder = new OpenSocketFinder(){
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HostAndPort findOpenSocketOnNode(NodeMetadata node, int port, long timeoutValue, TimeUnit timeUnits) {
|
||||||
|
return HostAndPort.fromParts("144.175.1.1", 8080);
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -283,9 +291,9 @@ public class StubComputeServiceIntegrationTest extends BaseComputeServiceLiveTes
|
||||||
client.connect();
|
client.connect();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
String scriptName = "configure-jboss";
|
String scriptName = "configure-jetty";
|
||||||
client.put("/tmp/init-" + scriptName, Strings2.toStringAndClose(StubComputeServiceIntegrationTest.class
|
client.put("/tmp/init-" + scriptName, Strings2.toStringAndClose(StubComputeServiceIntegrationTest.class
|
||||||
.getResourceAsStream("/initscript_with_jboss.sh")));
|
.getResourceAsStream("/initscript_with_jetty.sh")));
|
||||||
expect(client.exec("chmod 755 /tmp/init-" + scriptName)).andReturn(EXEC_GOOD);
|
expect(client.exec("chmod 755 /tmp/init-" + scriptName)).andReturn(EXEC_GOOD);
|
||||||
expect(client.exec("ln -fs /tmp/init-" + scriptName + " " + scriptName)).andReturn(EXEC_GOOD);
|
expect(client.exec("ln -fs /tmp/init-" + scriptName + " " + scriptName)).andReturn(EXEC_GOOD);
|
||||||
expect(client.getUsername()).andReturn("root").atLeastOnce();
|
expect(client.getUsername()).andReturn("root").atLeastOnce();
|
||||||
|
@ -303,52 +311,27 @@ public class StubComputeServiceIntegrationTest extends BaseComputeServiceLiveTes
|
||||||
client.disconnect();
|
client.disconnect();
|
||||||
|
|
||||||
clientNew.connect();
|
clientNew.connect();
|
||||||
expect(clientNew.exec("ls /usr/local/jboss/bundles/org/jboss/as/osgi/configadmin/main|sed -e 's/.*-//g' -e 's/.jar//g'\n")).andReturn(EXEC_GOOD);
|
expect(clientNew.getUsername()).andReturn("web").atLeastOnce();
|
||||||
|
expect(clientNew.getHostAddress()).andReturn("localhost").atLeastOnce();
|
||||||
|
expect(clientNew.exec("head -1 /usr/local/jetty/VERSION.txt | cut -f1 -d ' '\n")).andReturn(EXEC_GOOD);
|
||||||
clientNew.disconnect();
|
clientNew.disconnect();
|
||||||
|
|
||||||
clientNew.connect();
|
|
||||||
expect(clientNew.exec("nslookup -query=a -timeout=5 download.jboss.org|grep Address|tail -1|sed 's/.* //g'\n")).andReturn(EXEC_GOOD);
|
|
||||||
clientNew.disconnect();
|
|
||||||
|
|
||||||
clientNew.connect();
|
|
||||||
expect(clientNew.exec("nslookup -query=a -timeout=5 download.oracle.com|grep Address|tail -1|sed 's/.* //g'\n")).andReturn(EXEC_GOOD);
|
|
||||||
clientNew.disconnect();
|
|
||||||
|
|
||||||
clientNew.connect();
|
|
||||||
expect(clientNew.exec("curl -q -s -S -L --connect-timeout 10 --max-time 600 --retry 20 http://checkip.amazonaws.com/\n")).andReturn(EXEC_GOOD);
|
|
||||||
clientNew.disconnect();
|
|
||||||
|
|
||||||
clientNew.connect();
|
clientNew.connect();
|
||||||
expect(clientNew.exec("java -fullversion\n")).andReturn(EXEC_GOOD);
|
expect(clientNew.exec("java -fullversion\n")).andReturn(EXEC_GOOD);
|
||||||
clientNew.disconnect();
|
clientNew.disconnect();
|
||||||
|
|
||||||
clientNew.connect();
|
clientNew.connect();
|
||||||
scriptName = "jboss";
|
expect(clientNew.exec("cd /usr/local/jetty\n./bin/jetty.sh start\n")).andReturn(EXEC_GOOD);
|
||||||
clientNew.put("/tmp/init-" + scriptName, Strings2
|
|
||||||
.toStringAndClose(StubComputeServiceIntegrationTest.class
|
|
||||||
.getResourceAsStream("/runscript_jboss.sh")));
|
|
||||||
expect(clientNew.exec("chmod 755 /tmp/init-" + scriptName)).andReturn(EXEC_GOOD);
|
|
||||||
expect(clientNew.exec("ln -fs /tmp/init-" + scriptName + " " + scriptName)).andReturn(EXEC_GOOD);
|
|
||||||
expect(clientNew.getUsername()).andReturn("web").atLeastOnce();
|
|
||||||
expect(clientNew.getHostAddress()).andReturn("localhost").atLeastOnce();
|
|
||||||
expect(clientNew.exec("/tmp/init-" + scriptName + " init")).andReturn(EXEC_GOOD);
|
|
||||||
expect(clientNew.exec("/tmp/init-" + scriptName + " start")).andReturn(EXEC_GOOD);
|
|
||||||
clientNew.disconnect();
|
|
||||||
clientNew.connect();
|
|
||||||
expect(clientNew.exec("/tmp/init-" + scriptName + " stdout\n")).andReturn(EXEC_GOOD);
|
|
||||||
clientNew.disconnect();
|
clientNew.disconnect();
|
||||||
|
|
||||||
clientNew.connect();
|
clientNew.connect();
|
||||||
expect(clientNew.exec("/tmp/init-" + scriptName + " stop\n")).andReturn(EXEC_GOOD);
|
expect(clientNew.exec("cd /usr/local/jetty\n./bin/jetty.sh stop\n")).andReturn(EXEC_GOOD);
|
||||||
clientNew.disconnect();
|
clientNew.disconnect();
|
||||||
|
|
||||||
clientNew.connect();
|
clientNew.connect();
|
||||||
expect(clientNew.exec("/tmp/init-" + scriptName + " start\n")).andReturn(EXEC_GOOD);
|
expect(clientNew.exec("cd /usr/local/jetty\n./bin/jetty.sh start\n")).andReturn(EXEC_GOOD);
|
||||||
clientNew.disconnect();
|
clientNew.disconnect();
|
||||||
|
|
||||||
clientNew.connect();
|
|
||||||
expect(clientNew.exec("/tmp/init-" + scriptName + " stdout\n")).andReturn(EXEC_GOOD);
|
|
||||||
clientNew.disconnect();
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
Throwables.propagate(e);
|
Throwables.propagate(e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,9 +31,6 @@ import static com.google.common.collect.Sets.newTreeSet;
|
||||||
import static java.lang.String.format;
|
import static java.lang.String.format;
|
||||||
import static java.lang.System.currentTimeMillis;
|
import static java.lang.System.currentTimeMillis;
|
||||||
import static java.util.logging.Logger.getAnonymousLogger;
|
import static java.util.logging.Logger.getAnonymousLogger;
|
||||||
import static org.jclouds.compute.RunScriptData.JBOSS_HOME;
|
|
||||||
import static org.jclouds.compute.RunScriptData.installAdminUserJBossAndOpenPorts;
|
|
||||||
import static org.jclouds.compute.RunScriptData.startJBoss;
|
|
||||||
import static org.jclouds.compute.options.RunScriptOptions.Builder.nameTask;
|
import static org.jclouds.compute.options.RunScriptOptions.Builder.nameTask;
|
||||||
import static org.jclouds.compute.options.RunScriptOptions.Builder.wrapInInitScript;
|
import static org.jclouds.compute.options.RunScriptOptions.Builder.wrapInInitScript;
|
||||||
import static org.jclouds.compute.options.TemplateOptions.Builder.inboundPorts;
|
import static org.jclouds.compute.options.TemplateOptions.Builder.inboundPorts;
|
||||||
|
@ -60,17 +57,14 @@ import java.util.SortedSet;
|
||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
import java.util.concurrent.CancellationException;
|
import java.util.concurrent.CancellationException;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
import java.util.concurrent.Future;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.TimeoutException;
|
import java.util.concurrent.TimeoutException;
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
import org.jclouds.compute.ComputeService;
|
import org.jclouds.compute.ComputeService;
|
||||||
import org.jclouds.compute.ComputeServiceContext;
|
import org.jclouds.compute.ComputeServiceContext;
|
||||||
import org.jclouds.compute.ComputeTestUtils;
|
import org.jclouds.compute.ComputeTestUtils;
|
||||||
|
import org.jclouds.compute.JettyStatements;
|
||||||
import org.jclouds.compute.RunNodesException;
|
import org.jclouds.compute.RunNodesException;
|
||||||
import org.jclouds.compute.RunScriptData;
|
|
||||||
import org.jclouds.compute.RunScriptOnNodesException;
|
import org.jclouds.compute.RunScriptOnNodesException;
|
||||||
import org.jclouds.compute.domain.ComputeMetadata;
|
import org.jclouds.compute.domain.ComputeMetadata;
|
||||||
import org.jclouds.compute.domain.ComputeType;
|
import org.jclouds.compute.domain.ComputeType;
|
||||||
|
@ -83,6 +77,7 @@ import org.jclouds.compute.domain.OperatingSystem;
|
||||||
import org.jclouds.compute.domain.Template;
|
import org.jclouds.compute.domain.Template;
|
||||||
import org.jclouds.compute.domain.TemplateBuilder;
|
import org.jclouds.compute.domain.TemplateBuilder;
|
||||||
import org.jclouds.compute.options.TemplateOptions;
|
import org.jclouds.compute.options.TemplateOptions;
|
||||||
|
import org.jclouds.compute.util.OpenSocketFinder;
|
||||||
import org.jclouds.domain.Credentials;
|
import org.jclouds.domain.Credentials;
|
||||||
import org.jclouds.domain.Location;
|
import org.jclouds.domain.Location;
|
||||||
import org.jclouds.domain.LocationScope;
|
import org.jclouds.domain.LocationScope;
|
||||||
|
@ -90,12 +85,12 @@ import org.jclouds.domain.LoginCredentials;
|
||||||
import org.jclouds.predicates.RetryablePredicate;
|
import org.jclouds.predicates.RetryablePredicate;
|
||||||
import org.jclouds.predicates.SocketOpen;
|
import org.jclouds.predicates.SocketOpen;
|
||||||
import org.jclouds.rest.AuthorizationException;
|
import org.jclouds.rest.AuthorizationException;
|
||||||
|
import org.jclouds.scriptbuilder.domain.Statement;
|
||||||
import org.jclouds.scriptbuilder.domain.Statements;
|
import org.jclouds.scriptbuilder.domain.Statements;
|
||||||
import org.jclouds.scriptbuilder.statements.java.InstallJDK;
|
import org.jclouds.scriptbuilder.statements.java.InstallJDK;
|
||||||
import org.jclouds.scriptbuilder.statements.login.AdminAccess;
|
import org.jclouds.scriptbuilder.statements.login.AdminAccess;
|
||||||
import org.jclouds.ssh.SshClient;
|
import org.jclouds.ssh.SshClient;
|
||||||
import org.jclouds.ssh.SshException;
|
import org.jclouds.ssh.SshException;
|
||||||
import org.jclouds.util.Strings2;
|
|
||||||
import org.testng.annotations.AfterClass;
|
import org.testng.annotations.AfterClass;
|
||||||
import org.testng.annotations.BeforeGroups;
|
import org.testng.annotations.BeforeGroups;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
@ -124,7 +119,7 @@ public abstract class BaseComputeServiceLiveTest extends BaseComputeServiceConte
|
||||||
protected String group;
|
protected String group;
|
||||||
|
|
||||||
protected Predicate<HostAndPort> socketTester;
|
protected Predicate<HostAndPort> socketTester;
|
||||||
protected Predicate<HostAndPort> preciseSocketTester;
|
protected OpenSocketFinder openSocketFinder;
|
||||||
protected SortedSet<NodeMetadata> nodes;
|
protected SortedSet<NodeMetadata> nodes;
|
||||||
protected ComputeService client;
|
protected ComputeService client;
|
||||||
|
|
||||||
|
@ -159,12 +154,9 @@ public abstract class BaseComputeServiceLiveTest extends BaseComputeServiceConte
|
||||||
SocketOpen socketOpen = view.utils().injector().getInstance(SocketOpen.class);
|
SocketOpen socketOpen = view.utils().injector().getInstance(SocketOpen.class);
|
||||||
socketTester = new RetryablePredicate<HostAndPort>(socketOpen, 60, 1, TimeUnit.SECONDS);
|
socketTester = new RetryablePredicate<HostAndPort>(socketOpen, 60, 1, TimeUnit.SECONDS);
|
||||||
// wait a maximum of 60 seconds for port 8080 to open.
|
// wait a maximum of 60 seconds for port 8080 to open.
|
||||||
long maxWait = TimeUnit.SECONDS.toMillis(60);
|
openSocketFinder = context.utils().injector().getInstance(OpenSocketFinder.class);
|
||||||
long interval = 50;
|
|
||||||
// get more precise than default socket tester
|
|
||||||
preciseSocketTester = new RetryablePredicate<HostAndPort>(socketOpen, maxWait, interval, interval,
|
|
||||||
TimeUnit.MILLISECONDS);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void initializeContext() {
|
protected void initializeContext() {
|
||||||
super.initializeContext();
|
super.initializeContext();
|
||||||
|
@ -606,54 +598,38 @@ public abstract class BaseComputeServiceLiveTest extends BaseComputeServiceConte
|
||||||
static class ServiceStats {
|
static class ServiceStats {
|
||||||
long backgroundProcessMilliseconds;
|
long backgroundProcessMilliseconds;
|
||||||
long socketOpenMilliseconds;
|
long socketOpenMilliseconds;
|
||||||
long reportedStartupTimeMilliseconds;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return String.format(
|
return String.format("[backgroundProcessMilliseconds=%s, socketOpenMilliseconds=%s]",
|
||||||
"[backgroundProcessMilliseconds=%s, socketOpenMilliseconds=%s, reportedStartupTimeMilliseconds=%s]",
|
backgroundProcessMilliseconds, socketOpenMilliseconds);
|
||||||
backgroundProcessMilliseconds, socketOpenMilliseconds, reportedStartupTimeMilliseconds);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ServiceStats trackAvailabilityOfProcessOnNode(Future<ExecResponse> bgProcess, String processName,
|
protected ServiceStats trackAvailabilityOfProcessOnNode(Statement process, String processName, NodeMetadata node) {
|
||||||
NodeMetadata node, Pattern parseReported) throws InterruptedException, ExecutionException {
|
|
||||||
ServiceStats stats = new ServiceStats();
|
ServiceStats stats = new ServiceStats();
|
||||||
Stopwatch watch = new Stopwatch().start();
|
Stopwatch watch = new Stopwatch().start();
|
||||||
|
ExecResponse exec = client.runScriptOnNode(node.getId(), process, runAsRoot(false).wrapInInitScript(false));
|
||||||
ExecResponse exec = bgProcess.get();
|
|
||||||
stats.backgroundProcessMilliseconds = watch.elapsedTime(TimeUnit.MILLISECONDS);
|
stats.backgroundProcessMilliseconds = watch.elapsedTime(TimeUnit.MILLISECONDS);
|
||||||
watch.reset().start();
|
watch.reset().start();
|
||||||
|
|
||||||
|
HostAndPort socket = null;
|
||||||
|
try {
|
||||||
|
socket = openSocketFinder.findOpenSocketOnNode(node, 8080, 60, TimeUnit.SECONDS);
|
||||||
|
} catch (NoSuchElementException e) {
|
||||||
|
throw new NoSuchElementException(String.format("%s%n%s%s", e.getMessage(), exec.getOutput(), exec.getError()));
|
||||||
|
}
|
||||||
|
|
||||||
HostAndPort socket = HostAndPort.fromParts(Iterables.get(node.getPublicAddresses(), 0), 8080);
|
|
||||||
assert preciseSocketTester.apply(socket) : String.format("failed to open socket %s on node %s:%n%s%s", socket,
|
|
||||||
node, init(node, processName, "stdout"), init(node, processName, "stderr"));
|
|
||||||
stats.socketOpenMilliseconds = watch.elapsedTime(TimeUnit.MILLISECONDS);
|
stats.socketOpenMilliseconds = watch.elapsedTime(TimeUnit.MILLISECONDS);
|
||||||
|
|
||||||
exec = init(node, processName, "stdout");
|
getAnonymousLogger().info(format("<< %s on node(%s)[%s] %s", processName, node.getId(), socket, stats));
|
||||||
|
|
||||||
Matcher matcher = parseReported.matcher(exec.getOutput());
|
|
||||||
if (matcher.find())
|
|
||||||
stats.reportedStartupTimeMilliseconds = Long.valueOf(matcher.group(1));
|
|
||||||
|
|
||||||
getAnonymousLogger().info(format("<< %s on node(%s) %s", bgProcess, node.getId(), stats));
|
|
||||||
return stats;
|
return stats;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ExecResponse init(NodeMetadata node, String processName, String command) {
|
|
||||||
return client.runScriptOnNode(node.getId(), "/tmp/init-" + processName + " " + command, runAsRoot(false)
|
|
||||||
.wrapInInitScript(false));
|
|
||||||
}
|
|
||||||
|
|
||||||
// started in 6462ms -
|
|
||||||
public static final Pattern JBOSS_PATTERN = Pattern.compile("started in ([0-9]+)ms -");
|
|
||||||
|
|
||||||
@Test(enabled = true)
|
@Test(enabled = true)
|
||||||
public void testCreateAndRunAService() throws Exception {
|
public void testCreateAndRunAService() throws Exception {
|
||||||
|
|
||||||
String group = this.group + "s";
|
String group = this.group + "s";
|
||||||
final String configuration = Strings2.toStringAndClose(RunScriptData.class
|
|
||||||
.getResourceAsStream("/standalone-basic.xml"));
|
|
||||||
try {
|
try {
|
||||||
client.destroyNodesMatching(inGroup(group));
|
client.destroyNodesMatching(inGroup(group));
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
|
@ -661,80 +637,54 @@ public abstract class BaseComputeServiceLiveTest extends BaseComputeServiceConte
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ImmutableMap<String, String> userMetadata = ImmutableMap.<String, String> of("Name", group);
|
createAndRunAServiceInGroup(group);
|
||||||
ImmutableSet<String> tags = ImmutableSet. of(group);
|
|
||||||
Stopwatch watch = new Stopwatch().start();
|
|
||||||
NodeMetadata node = getOnlyElement(client.createNodesInGroup(group, 1,
|
|
||||||
inboundPorts(22, 8080).blockOnPort(22, 300).userMetadata(userMetadata).tags(tags)));
|
|
||||||
long createSeconds = watch.elapsedTime(TimeUnit.SECONDS);
|
|
||||||
|
|
||||||
final String nodeId = node.getId();
|
|
||||||
|
|
||||||
checkUserMetadataInNodeEquals(node, userMetadata);
|
|
||||||
checkTagsInNodeEquals(node, tags);
|
|
||||||
|
|
||||||
getAnonymousLogger().info(
|
|
||||||
format("<< available node(%s) os(%s) in %ss", node.getId(), node.getOperatingSystem(), createSeconds));
|
|
||||||
|
|
||||||
watch.reset().start();
|
|
||||||
|
|
||||||
// note this is a dependency on the template resolution so we have the
|
|
||||||
// right process per
|
|
||||||
// operating system. moreover, we wish this to run as root, so that it
|
|
||||||
// can change ip
|
|
||||||
// tables rules and setup our admin user
|
|
||||||
client.runScriptOnNode(nodeId, installAdminUserJBossAndOpenPorts(node.getOperatingSystem()),
|
|
||||||
nameTask("configure-jboss"));
|
|
||||||
|
|
||||||
long configureSeconds = watch.elapsedTime(TimeUnit.SECONDS);
|
|
||||||
|
|
||||||
getAnonymousLogger().info(
|
|
||||||
format(
|
|
||||||
"<< configured node(%s) with %s and JBoss %s in %ss",
|
|
||||||
nodeId,
|
|
||||||
exec(nodeId, "java -fullversion"),
|
|
||||||
// version of the jboss jar
|
|
||||||
exec(nodeId,
|
|
||||||
format("ls %s/bundles/org/jboss/as/osgi/configadmin/main|sed -e 's/.*-//g' -e 's/.jar//g'",
|
|
||||||
JBOSS_HOME)), configureSeconds));
|
|
||||||
|
|
||||||
trackAvailabilityOfProcessOnNode(view.utils().userExecutor().submit(new Callable<ExecResponse>() {
|
|
||||||
@Override
|
|
||||||
public ExecResponse call() {
|
|
||||||
return client.runScriptOnNode(nodeId, startJBoss(configuration), runAsRoot(false).blockOnComplete(false)
|
|
||||||
.nameTask("jboss"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "initial start of jboss";
|
|
||||||
}
|
|
||||||
|
|
||||||
}), "jboss", node, JBOSS_PATTERN);
|
|
||||||
|
|
||||||
client.runScriptOnNode(nodeId, "/tmp/init-jboss stop", runAsRoot(false).wrapInInitScript(false));
|
|
||||||
|
|
||||||
trackAvailabilityOfProcessOnNode(view.utils().userExecutor().submit(new Callable<ExecResponse>() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ExecResponse call() {
|
|
||||||
return client.runScriptOnNode(nodeId, "/tmp/init-jboss start", runAsRoot(false).wrapInInitScript(false));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "warm start of jboss";
|
|
||||||
}
|
|
||||||
|
|
||||||
}), "jboss", node, JBOSS_PATTERN);
|
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
client.destroyNodesMatching(inGroup(group));
|
client.destroyNodesMatching(inGroup(group));
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void createAndRunAServiceInGroup(String group) throws RunNodesException {
|
||||||
|
ImmutableMap<String, String> userMetadata = ImmutableMap.<String, String> of("Name", group);
|
||||||
|
ImmutableSet<String> tags = ImmutableSet. of(group);
|
||||||
|
Stopwatch watch = new Stopwatch().start();
|
||||||
|
NodeMetadata node = getOnlyElement(client.createNodesInGroup(group, 1,
|
||||||
|
inboundPorts(22, 8080).blockOnPort(22, 300).userMetadata(userMetadata).tags(tags)));
|
||||||
|
long createSeconds = watch.elapsedTime(TimeUnit.SECONDS);
|
||||||
|
|
||||||
|
final String nodeId = node.getId();
|
||||||
|
|
||||||
|
checkUserMetadataInNodeEquals(node, userMetadata);
|
||||||
|
checkTagsInNodeEquals(node, tags);
|
||||||
|
|
||||||
|
getAnonymousLogger().info(
|
||||||
|
format("<< available node(%s) os(%s) in %ss", node.getId(), node.getOperatingSystem(), createSeconds));
|
||||||
|
|
||||||
|
watch.reset().start();
|
||||||
|
|
||||||
|
client.runScriptOnNode(nodeId, JettyStatements.install(), nameTask("configure-jetty"));
|
||||||
|
|
||||||
|
long configureSeconds = watch.elapsedTime(TimeUnit.SECONDS);
|
||||||
|
|
||||||
|
getAnonymousLogger().info(
|
||||||
|
format(
|
||||||
|
"<< configured node(%s) with %s and jetty %s in %ss",
|
||||||
|
nodeId,
|
||||||
|
exec(nodeId, "java -fullversion"),
|
||||||
|
exec(nodeId, JettyStatements.version()), configureSeconds));
|
||||||
|
|
||||||
|
trackAvailabilityOfProcessOnNode(JettyStatements.start(), "start jetty", node);
|
||||||
|
|
||||||
|
client.runScriptOnNode(nodeId, JettyStatements.stop(), runAsRoot(false).wrapInInitScript(false));
|
||||||
|
|
||||||
|
trackAvailabilityOfProcessOnNode(JettyStatements.start(), "start jetty", node);
|
||||||
|
}
|
||||||
|
|
||||||
protected String exec(final String nodeId, String command) {
|
protected String exec(final String nodeId, String command) {
|
||||||
|
return exec(nodeId, Statements.exec(command));
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String exec(final String nodeId, Statement command) {
|
||||||
return client.runScriptOnNode(nodeId, command, runAsRoot(false).wrapInInitScript(false)).getOutput().trim();
|
return client.runScriptOnNode(nodeId, command, runAsRoot(false).wrapInInitScript(false)).getOutput().trim();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,12 +8,12 @@ function abort {
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
function default {
|
function default {
|
||||||
export INSTANCE_NAME="configure-jboss"
|
export INSTANCE_NAME="configure-jetty"
|
||||||
export INSTANCE_HOME="/tmp/configure-jboss"
|
export INSTANCE_HOME="/tmp/configure-jetty"
|
||||||
export LOG_DIR="$INSTANCE_HOME"
|
export LOG_DIR="$INSTANCE_HOME"
|
||||||
return $?
|
return $?
|
||||||
}
|
}
|
||||||
function configure-jboss {
|
function configure-jetty {
|
||||||
return $?
|
return $?
|
||||||
}
|
}
|
||||||
function findPid {
|
function findPid {
|
||||||
|
@ -58,27 +58,27 @@ export PATH=/usr/ucb/bin:/bin:/sbin:/usr/bin:/usr/sbin
|
||||||
case $1 in
|
case $1 in
|
||||||
init)
|
init)
|
||||||
default || exit 1
|
default || exit 1
|
||||||
configure-jboss || exit 1
|
configure-jetty || exit 1
|
||||||
mkdir -p $INSTANCE_HOME
|
mkdir -p $INSTANCE_HOME
|
||||||
|
|
||||||
# create runscript header
|
# create runscript header
|
||||||
cat > $INSTANCE_HOME/configure-jboss.sh <<-'END_OF_JCLOUDS_SCRIPT'
|
cat > $INSTANCE_HOME/configure-jetty.sh <<-'END_OF_JCLOUDS_SCRIPT'
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set +u
|
set +u
|
||||||
shopt -s xpg_echo
|
shopt -s xpg_echo
|
||||||
shopt -s expand_aliases
|
shopt -s expand_aliases
|
||||||
|
|
||||||
PROMPT_COMMAND='echo -ne \"\033]0;configure-jboss\007\"'
|
PROMPT_COMMAND='echo -ne \"\033]0;configure-jetty\007\"'
|
||||||
export PATH=/usr/ucb/bin:/bin:/sbin:/usr/bin:/usr/sbin
|
export PATH=/usr/ucb/bin:/bin:/sbin:/usr/bin:/usr/sbin
|
||||||
|
|
||||||
export INSTANCE_NAME='configure-jboss'
|
export INSTANCE_NAME='configure-jetty'
|
||||||
END_OF_JCLOUDS_SCRIPT
|
END_OF_JCLOUDS_SCRIPT
|
||||||
cat >> $INSTANCE_HOME/configure-jboss.sh <<-END_OF_JCLOUDS_SCRIPT
|
cat >> $INSTANCE_HOME/configure-jetty.sh <<-END_OF_JCLOUDS_SCRIPT
|
||||||
export INSTANCE_NAME='$INSTANCE_NAME'
|
export INSTANCE_NAME='$INSTANCE_NAME'
|
||||||
export INSTANCE_HOME='$INSTANCE_HOME'
|
export INSTANCE_HOME='$INSTANCE_HOME'
|
||||||
export LOG_DIR='$LOG_DIR'
|
export LOG_DIR='$LOG_DIR'
|
||||||
END_OF_JCLOUDS_SCRIPT
|
END_OF_JCLOUDS_SCRIPT
|
||||||
cat >> $INSTANCE_HOME/configure-jboss.sh <<-'END_OF_JCLOUDS_SCRIPT'
|
cat >> $INSTANCE_HOME/configure-jetty.sh <<-'END_OF_JCLOUDS_SCRIPT'
|
||||||
function abort {
|
function abort {
|
||||||
echo "aborting: $@" 1>&2
|
echo "aborting: $@" 1>&2
|
||||||
exit 1
|
exit 1
|
||||||
|
@ -191,7 +191,7 @@ function installOpenJDK() {
|
||||||
END_OF_JCLOUDS_SCRIPT
|
END_OF_JCLOUDS_SCRIPT
|
||||||
|
|
||||||
# add desired commands from the user
|
# add desired commands from the user
|
||||||
cat >> $INSTANCE_HOME/configure-jboss.sh <<-'END_OF_JCLOUDS_SCRIPT'
|
cat >> $INSTANCE_HOME/configure-jetty.sh <<-'END_OF_JCLOUDS_SCRIPT'
|
||||||
cd $INSTANCE_HOME
|
cd $INSTANCE_HOME
|
||||||
rm -f $INSTANCE_HOME/rc
|
rm -f $INSTANCE_HOME/rc
|
||||||
trap 'echo $?>$INSTANCE_HOME/rc' 0 1 2 3 15
|
trap 'echo $?>$INSTANCE_HOME/rc' 0 1 2 3 15
|
||||||
|
@ -217,25 +217,24 @@ END_OF_JCLOUDS_SCRIPT
|
||||||
test -f /etc/shadow.${SUDO_USER:=${USER}} && mv /etc/shadow.${SUDO_USER:=${USER}} /etc/shadow
|
test -f /etc/shadow.${SUDO_USER:=${USER}} && mv /etc/shadow.${SUDO_USER:=${USER}} /etc/shadow
|
||||||
setupPublicCurl || return 1
|
setupPublicCurl || return 1
|
||||||
installOpenJDK || return 1
|
installOpenJDK || return 1
|
||||||
iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
|
|
||||||
iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT
|
iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT
|
||||||
iptables-save
|
iptables-save
|
||||||
curl -q -s -S -L --connect-timeout 10 --max-time 600 --retry 20 -X GET http://download.jboss.org/jbossas/7.0/jboss-as-7.0.2.Final/jboss-as-web-7.0.2.Final.tar.gz |(mkdir -p /usr/local &&cd /usr/local &&tar -xpzf -)
|
mkdir /tmp/$$
|
||||||
mkdir -p /usr/local/jboss
|
curl -q -s -S -L --connect-timeout 10 --max-time 600 --retry 20 -X GET http://download.eclipse.org/jetty/8.1.5.v20120716/dist/jetty-distribution-8.1.5.v20120716.tar.gz |(mkdir -p /tmp/$$ &&cd /tmp/$$ &&tar -xpzf -)
|
||||||
mv /usr/local/jboss-*/* /usr/local/jboss
|
mkdir -p /usr/local/jetty
|
||||||
(cd /usr/local/jboss/standalone/configuration && sed 's~inet-address value=.*/~any-address/~g' standalone.xml > standalone.xml.new && mv standalone.xml.new standalone.xml)
|
mv /tmp/$$/*/* /usr/local/jetty
|
||||||
chmod -R oug+r+w /usr/local/jboss
|
rm -rf /tmp/$$
|
||||||
chown -R web /usr/local/jboss
|
chown -R web /usr/local/jetty
|
||||||
|
|
||||||
END_OF_JCLOUDS_SCRIPT
|
END_OF_JCLOUDS_SCRIPT
|
||||||
|
|
||||||
# add runscript footer
|
# add runscript footer
|
||||||
cat >> $INSTANCE_HOME/configure-jboss.sh <<-'END_OF_JCLOUDS_SCRIPT'
|
cat >> $INSTANCE_HOME/configure-jetty.sh <<-'END_OF_JCLOUDS_SCRIPT'
|
||||||
exit $?
|
exit $?
|
||||||
|
|
||||||
END_OF_JCLOUDS_SCRIPT
|
END_OF_JCLOUDS_SCRIPT
|
||||||
|
|
||||||
chmod u+x $INSTANCE_HOME/configure-jboss.sh
|
chmod u+x $INSTANCE_HOME/configure-jetty.sh
|
||||||
;;
|
;;
|
||||||
status)
|
status)
|
||||||
default || exit 1
|
default || exit 1
|
|
@ -1,247 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
set +u
|
|
||||||
shopt -s xpg_echo
|
|
||||||
shopt -s expand_aliases
|
|
||||||
unset PATH JAVA_HOME LD_LIBRARY_PATH
|
|
||||||
function abort {
|
|
||||||
echo "aborting: $@" 1>&2
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
function default {
|
|
||||||
export INSTANCE_NAME="jboss"
|
|
||||||
export INSTANCE_HOME="/usr/local/jboss"
|
|
||||||
export LOG_DIR="$INSTANCE_HOME"
|
|
||||||
return $?
|
|
||||||
}
|
|
||||||
function jboss {
|
|
||||||
export JBOSS_HOME="/usr/local/jboss"
|
|
||||||
return $?
|
|
||||||
}
|
|
||||||
function findPid {
|
|
||||||
unset FOUND_PID;
|
|
||||||
[ $# -eq 1 ] || {
|
|
||||||
abort "findPid requires a parameter of pattern to match"
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
local PATTERN="$1"; shift
|
|
||||||
local _FOUND=`ps auxwww|grep "$PATTERN"|grep -v " $0"|grep -v grep|grep -v $$|awk '{print $2}'`
|
|
||||||
[ -n "$_FOUND" ] && {
|
|
||||||
export FOUND_PID=$_FOUND
|
|
||||||
return 0
|
|
||||||
} || {
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
function forget {
|
|
||||||
unset FOUND_PID;
|
|
||||||
[ $# -eq 3 ] || {
|
|
||||||
abort "forget requires parameters INSTANCE_NAME SCRIPT LOG_DIR"
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
local INSTANCE_NAME="$1"; shift
|
|
||||||
local SCRIPT="$1"; shift
|
|
||||||
local LOG_DIR="$1"; shift
|
|
||||||
mkdir -p $LOG_DIR
|
|
||||||
findPid $INSTANCE_NAME
|
|
||||||
[ -n "$FOUND_PID" -a -f $LOG_DIR/stdout.log ] && {
|
|
||||||
echo $INSTANCE_NAME already running pid $FOUND_PID
|
|
||||||
return 1;
|
|
||||||
} || {
|
|
||||||
nohup $SCRIPT >$LOG_DIR/stdout.log 2>$LOG_DIR/stderr.log &
|
|
||||||
RETURN=$?
|
|
||||||
# this is generally followed by findPid, so we shouldn't exit
|
|
||||||
# immediately as the proc may not have registered in ps, yet
|
|
||||||
test $RETURN && sleep 1
|
|
||||||
return $RETURN;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
export PATH=/usr/ucb/bin:/bin:/sbin:/usr/bin:/usr/sbin
|
|
||||||
case $1 in
|
|
||||||
init)
|
|
||||||
default || exit 1
|
|
||||||
jboss || exit 1
|
|
||||||
cat >> /usr/local/jboss/standalone/configuration/standalone-custom.xml <<-'END_OF_JCLOUDS_FILE'
|
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
|
||||||
|
|
||||||
<server name="basic" xmlns="urn:jboss:domain:1.0">
|
|
||||||
<extensions>
|
|
||||||
<extension module="org.jboss.as.connector"/>
|
|
||||||
<extension module="org.jboss.as.deployment-scanner"/>
|
|
||||||
<extension module="org.jboss.as.ee"/>
|
|
||||||
<extension module="org.jboss.as.logging"/>
|
|
||||||
<extension module="org.jboss.as.naming"/>
|
|
||||||
<extension module="org.jboss.as.security"/>
|
|
||||||
<extension module="org.jboss.as.threads"/>
|
|
||||||
<extension module="org.jboss.as.transactions"/>
|
|
||||||
<extension module="org.jboss.as.web"/>
|
|
||||||
<!--
|
|
||||||
<extension module="org.jboss.as.weld"/>
|
|
||||||
-->
|
|
||||||
</extensions>
|
|
||||||
<profile>
|
|
||||||
<subsystem xmlns="urn:jboss:domain:logging:1.0">
|
|
||||||
<console-handler name="CONSOLE" autoflush="true">
|
|
||||||
<level name="INFO"/>
|
|
||||||
<formatter>
|
|
||||||
<pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
|
|
||||||
</formatter>
|
|
||||||
</console-handler>
|
|
||||||
<periodic-rotating-file-handler name="FILE" autoflush="true">
|
|
||||||
<level name="INFO"/>
|
|
||||||
<formatter>
|
|
||||||
<pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
|
|
||||||
</formatter>
|
|
||||||
<file relative-to="jboss.server.log.dir" path="server.log"/>
|
|
||||||
<suffix value=".yyyy-MM-dd"/>
|
|
||||||
</periodic-rotating-file-handler>
|
|
||||||
<logger category="com.arjuna">
|
|
||||||
<level name="WARN"/>
|
|
||||||
</logger>
|
|
||||||
<logger category="org.apache.tomcat.util.modeler">
|
|
||||||
<level name="WARN"/>
|
|
||||||
</logger>
|
|
||||||
<logger category="sun.rmi">
|
|
||||||
<level name="WARN"/>
|
|
||||||
</logger>
|
|
||||||
<root-logger>
|
|
||||||
<level name="INFO"/>
|
|
||||||
<handlers>
|
|
||||||
<handler name="CONSOLE"/>
|
|
||||||
<handler name="FILE"/>
|
|
||||||
</handlers>
|
|
||||||
</root-logger>
|
|
||||||
</subsystem>
|
|
||||||
<subsystem xmlns="urn:jboss:domain:deployment-scanner:1.0">
|
|
||||||
<deployment-scanner name="default" path="deployments" scan-enabled="true" scan-interval="5000" relative-to="jboss.server.base.dir" deployment-timeout="60"/>
|
|
||||||
</subsystem>
|
|
||||||
<subsystem xmlns="urn:jboss:domain:ee:1.0"/>
|
|
||||||
<subsystem xmlns="urn:jboss:domain:naming:1.0"/>
|
|
||||||
<subsystem xmlns="urn:jboss:domain:resource-adapters:1.0"/>
|
|
||||||
<subsystem xmlns="urn:jboss:domain:security:1.0">
|
|
||||||
<security-domains>
|
|
||||||
<security-domain name="other" cache-type="default">
|
|
||||||
<authentication>
|
|
||||||
<login-module code="UsersRoles" flag="required"/>
|
|
||||||
</authentication>
|
|
||||||
</security-domain>
|
|
||||||
</security-domains>
|
|
||||||
</subsystem>
|
|
||||||
<subsystem xmlns="urn:jboss:domain:threads:1.0"/>
|
|
||||||
<subsystem xmlns="urn:jboss:domain:transactions:1.0">
|
|
||||||
<core-environment>
|
|
||||||
<process-id>
|
|
||||||
<uuid/>
|
|
||||||
</process-id>
|
|
||||||
</core-environment>
|
|
||||||
<recovery-environment socket-binding="txn-recovery-environment" status-socket-binding="txn-status-manager"/>
|
|
||||||
<coordinator-environment default-timeout="300"/>
|
|
||||||
<object-store/>
|
|
||||||
</subsystem>
|
|
||||||
<subsystem xmlns="urn:jboss:domain:web:1.0">
|
|
||||||
<connector name="http" protocol="HTTP/1.1" socket-binding="http" scheme="http"/>
|
|
||||||
<virtual-server name="localhost" enable-welcome-root="true">
|
|
||||||
<alias name="example.com"/>
|
|
||||||
</virtual-server>
|
|
||||||
</subsystem>
|
|
||||||
<!--
|
|
||||||
<subsystem xmlns="urn:jboss:domain:weld:1.0"/>
|
|
||||||
-->
|
|
||||||
</profile>
|
|
||||||
<interfaces>
|
|
||||||
<interface name="public">
|
|
||||||
<any-address/>
|
|
||||||
</interface>
|
|
||||||
</interfaces>
|
|
||||||
<socket-binding-group name="standard-sockets" default-interface="public">
|
|
||||||
<socket-binding name="http" port="8080"/>
|
|
||||||
<socket-binding name="https" port="8443"/>
|
|
||||||
<socket-binding name="jmx-connector-registry" port="1090"/>
|
|
||||||
<socket-binding name="jmx-connector-server" port="1091"/>
|
|
||||||
<socket-binding name="jndi" port="1099"/>
|
|
||||||
<socket-binding name="osgi-http" port="8090"/>
|
|
||||||
<socket-binding name="remoting" port="4447"/>
|
|
||||||
<socket-binding name="txn-recovery-environment" port="4712"/>
|
|
||||||
<socket-binding name="txn-status-manager" port="4713"/>
|
|
||||||
</socket-binding-group>
|
|
||||||
</server>
|
|
||||||
|
|
||||||
END_OF_JCLOUDS_FILE
|
|
||||||
mkdir -p $INSTANCE_HOME
|
|
||||||
|
|
||||||
# create runscript header
|
|
||||||
cat > $INSTANCE_HOME/jboss.sh <<-'END_OF_JCLOUDS_SCRIPT'
|
|
||||||
#!/bin/bash
|
|
||||||
set +u
|
|
||||||
shopt -s xpg_echo
|
|
||||||
shopt -s expand_aliases
|
|
||||||
|
|
||||||
PROMPT_COMMAND='echo -ne \"\033]0;jboss\007\"'
|
|
||||||
export PATH=/usr/ucb/bin:/bin:/sbin:/usr/bin:/usr/sbin
|
|
||||||
|
|
||||||
export INSTANCE_NAME='jboss'
|
|
||||||
END_OF_JCLOUDS_SCRIPT
|
|
||||||
cat >> $INSTANCE_HOME/jboss.sh <<-END_OF_JCLOUDS_SCRIPT
|
|
||||||
export JBOSS_HOME='$JBOSS_HOME'
|
|
||||||
export INSTANCE_NAME='$INSTANCE_NAME'
|
|
||||||
export INSTANCE_HOME='$INSTANCE_HOME'
|
|
||||||
export LOG_DIR='$LOG_DIR'
|
|
||||||
END_OF_JCLOUDS_SCRIPT
|
|
||||||
|
|
||||||
# add desired commands from the user
|
|
||||||
cat >> $INSTANCE_HOME/jboss.sh <<-'END_OF_JCLOUDS_SCRIPT'
|
|
||||||
cd $INSTANCE_HOME
|
|
||||||
rm -f $INSTANCE_HOME/rc
|
|
||||||
trap 'echo $?>$INSTANCE_HOME/rc' 0 1 2 3 15
|
|
||||||
java -server -Xms128m -Xmx128m -XX:MaxPermSize=128m -Djava.net.preferIPv4Stack=true -XX:+UseFastAccessorMethods -XX:+TieredCompilation -Xverify:none -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000 -Djboss.modules.system.pkgs=org.jboss.byteman -Dorg.jboss.boot.log.file=$JBOSS_HOME/standalone/log/boot.log -Dlogging.configuration=file:$JBOSS_HOME/standalone/configuration/logging.properties -jar $JBOSS_HOME/jboss-modules.jar -mp $JBOSS_HOME/modules -logmodule org.jboss.logmanager -jaxpmodule javax.xml.jaxp-provider org.jboss.as.standalone -Djboss.home.dir=$JBOSS_HOME --server-config=standalone-custom.xml
|
|
||||||
END_OF_JCLOUDS_SCRIPT
|
|
||||||
|
|
||||||
# add runscript footer
|
|
||||||
cat >> $INSTANCE_HOME/jboss.sh <<-'END_OF_JCLOUDS_SCRIPT'
|
|
||||||
exit $?
|
|
||||||
|
|
||||||
END_OF_JCLOUDS_SCRIPT
|
|
||||||
|
|
||||||
chmod u+x $INSTANCE_HOME/jboss.sh
|
|
||||||
;;
|
|
||||||
status)
|
|
||||||
default || exit 1
|
|
||||||
findPid $INSTANCE_NAME || exit 1
|
|
||||||
echo $FOUND_PID
|
|
||||||
;;
|
|
||||||
stop)
|
|
||||||
default || exit 1
|
|
||||||
findPid $INSTANCE_NAME || exit 1
|
|
||||||
[ -n "$FOUND_PID" ] && {
|
|
||||||
echo stopping $FOUND_PID
|
|
||||||
kill -9 $FOUND_PID
|
|
||||||
}
|
|
||||||
;;
|
|
||||||
start)
|
|
||||||
default || exit 1
|
|
||||||
forget $INSTANCE_NAME $INSTANCE_HOME/$INSTANCE_NAME.sh $LOG_DIR || exit 1
|
|
||||||
;;
|
|
||||||
stdout)
|
|
||||||
default || exit 1
|
|
||||||
cat $LOG_DIR/stdout.log
|
|
||||||
;;
|
|
||||||
stderr)
|
|
||||||
default || exit 1
|
|
||||||
cat $LOG_DIR/stderr.log
|
|
||||||
;;
|
|
||||||
exitstatus)
|
|
||||||
default || exit 1
|
|
||||||
[ -f $LOG_DIR/rc ] && cat $LOG_DIR/rc;;
|
|
||||||
tail)
|
|
||||||
default || exit 1
|
|
||||||
tail $LOG_DIR/stdout.log
|
|
||||||
;;
|
|
||||||
tailerr)
|
|
||||||
default || exit 1
|
|
||||||
tail $LOG_DIR/stderr.log
|
|
||||||
;;
|
|
||||||
run)
|
|
||||||
default || exit 1
|
|
||||||
$INSTANCE_HOME/$INSTANCE_NAME.sh
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
exit $?
|
|
|
@ -1,103 +0,0 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
|
||||||
|
|
||||||
<server name="basic" xmlns="urn:jboss:domain:1.0">
|
|
||||||
<extensions>
|
|
||||||
<extension module="org.jboss.as.connector"/>
|
|
||||||
<extension module="org.jboss.as.deployment-scanner"/>
|
|
||||||
<extension module="org.jboss.as.ee"/>
|
|
||||||
<extension module="org.jboss.as.logging"/>
|
|
||||||
<extension module="org.jboss.as.naming"/>
|
|
||||||
<extension module="org.jboss.as.security"/>
|
|
||||||
<extension module="org.jboss.as.threads"/>
|
|
||||||
<extension module="org.jboss.as.transactions"/>
|
|
||||||
<extension module="org.jboss.as.web"/>
|
|
||||||
<!--
|
|
||||||
<extension module="org.jboss.as.weld"/>
|
|
||||||
-->
|
|
||||||
</extensions>
|
|
||||||
<profile>
|
|
||||||
<subsystem xmlns="urn:jboss:domain:logging:1.0">
|
|
||||||
<console-handler name="CONSOLE" autoflush="true">
|
|
||||||
<level name="INFO"/>
|
|
||||||
<formatter>
|
|
||||||
<pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
|
|
||||||
</formatter>
|
|
||||||
</console-handler>
|
|
||||||
<periodic-rotating-file-handler name="FILE" autoflush="true">
|
|
||||||
<level name="INFO"/>
|
|
||||||
<formatter>
|
|
||||||
<pattern-formatter pattern="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n"/>
|
|
||||||
</formatter>
|
|
||||||
<file relative-to="jboss.server.log.dir" path="server.log"/>
|
|
||||||
<suffix value=".yyyy-MM-dd"/>
|
|
||||||
</periodic-rotating-file-handler>
|
|
||||||
<logger category="com.arjuna">
|
|
||||||
<level name="WARN"/>
|
|
||||||
</logger>
|
|
||||||
<logger category="org.apache.tomcat.util.modeler">
|
|
||||||
<level name="WARN"/>
|
|
||||||
</logger>
|
|
||||||
<logger category="sun.rmi">
|
|
||||||
<level name="WARN"/>
|
|
||||||
</logger>
|
|
||||||
<root-logger>
|
|
||||||
<level name="INFO"/>
|
|
||||||
<handlers>
|
|
||||||
<handler name="CONSOLE"/>
|
|
||||||
<handler name="FILE"/>
|
|
||||||
</handlers>
|
|
||||||
</root-logger>
|
|
||||||
</subsystem>
|
|
||||||
<subsystem xmlns="urn:jboss:domain:deployment-scanner:1.0">
|
|
||||||
<deployment-scanner name="default" path="deployments" scan-enabled="true" scan-interval="5000" relative-to="jboss.server.base.dir" deployment-timeout="60"/>
|
|
||||||
</subsystem>
|
|
||||||
<subsystem xmlns="urn:jboss:domain:ee:1.0"/>
|
|
||||||
<subsystem xmlns="urn:jboss:domain:naming:1.0"/>
|
|
||||||
<subsystem xmlns="urn:jboss:domain:resource-adapters:1.0"/>
|
|
||||||
<subsystem xmlns="urn:jboss:domain:security:1.0">
|
|
||||||
<security-domains>
|
|
||||||
<security-domain name="other" cache-type="default">
|
|
||||||
<authentication>
|
|
||||||
<login-module code="UsersRoles" flag="required"/>
|
|
||||||
</authentication>
|
|
||||||
</security-domain>
|
|
||||||
</security-domains>
|
|
||||||
</subsystem>
|
|
||||||
<subsystem xmlns="urn:jboss:domain:threads:1.0"/>
|
|
||||||
<subsystem xmlns="urn:jboss:domain:transactions:1.0">
|
|
||||||
<core-environment>
|
|
||||||
<process-id>
|
|
||||||
<uuid/>
|
|
||||||
</process-id>
|
|
||||||
</core-environment>
|
|
||||||
<recovery-environment socket-binding="txn-recovery-environment" status-socket-binding="txn-status-manager"/>
|
|
||||||
<coordinator-environment default-timeout="300"/>
|
|
||||||
<object-store/>
|
|
||||||
</subsystem>
|
|
||||||
<subsystem xmlns="urn:jboss:domain:web:1.0">
|
|
||||||
<connector name="http" protocol="HTTP/1.1" socket-binding="http" scheme="http"/>
|
|
||||||
<virtual-server name="localhost" enable-welcome-root="true">
|
|
||||||
<alias name="example.com"/>
|
|
||||||
</virtual-server>
|
|
||||||
</subsystem>
|
|
||||||
<!--
|
|
||||||
<subsystem xmlns="urn:jboss:domain:weld:1.0"/>
|
|
||||||
-->
|
|
||||||
</profile>
|
|
||||||
<interfaces>
|
|
||||||
<interface name="public">
|
|
||||||
<any-address/>
|
|
||||||
</interface>
|
|
||||||
</interfaces>
|
|
||||||
<socket-binding-group name="standard-sockets" default-interface="public">
|
|
||||||
<socket-binding name="http" port="8080"/>
|
|
||||||
<socket-binding name="https" port="8443"/>
|
|
||||||
<socket-binding name="jmx-connector-registry" port="1090"/>
|
|
||||||
<socket-binding name="jmx-connector-server" port="1091"/>
|
|
||||||
<socket-binding name="jndi" port="1099"/>
|
|
||||||
<socket-binding name="osgi-http" port="8090"/>
|
|
||||||
<socket-binding name="remoting" port="4447"/>
|
|
||||||
<socket-binding name="txn-recovery-environment" port="4712"/>
|
|
||||||
<socket-binding name="txn-status-manager" port="4713"/>
|
|
||||||
</socket-binding-group>
|
|
||||||
</server>
|
|
|
@ -19,17 +19,8 @@
|
||||||
|
|
||||||
package org.jclouds.nodepool;
|
package org.jclouds.nodepool;
|
||||||
|
|
||||||
import static com.google.common.collect.Iterables.getOnlyElement;
|
|
||||||
import static java.lang.String.format;
|
|
||||||
import static java.util.logging.Logger.getAnonymousLogger;
|
|
||||||
import static org.jclouds.compute.RunScriptData.JBOSS_HOME;
|
|
||||||
import static org.jclouds.compute.RunScriptData.installAdminUserJBossAndOpenPorts;
|
|
||||||
import static org.jclouds.compute.RunScriptData.startJBoss;
|
|
||||||
import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_PORT_OPEN;
|
import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_PORT_OPEN;
|
||||||
import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_SCRIPT_COMPLETE;
|
import static org.jclouds.compute.config.ComputeServiceProperties.TIMEOUT_SCRIPT_COMPLETE;
|
||||||
import static org.jclouds.compute.options.RunScriptOptions.Builder.nameTask;
|
|
||||||
import static org.jclouds.compute.options.TemplateOptions.Builder.inboundPorts;
|
|
||||||
import static org.jclouds.compute.options.TemplateOptions.Builder.runAsRoot;
|
|
||||||
import static org.jclouds.nodepool.config.NodePoolProperties.BASEDIR;
|
import static org.jclouds.nodepool.config.NodePoolProperties.BASEDIR;
|
||||||
import static org.jclouds.nodepool.config.NodePoolProperties.MAX_SIZE;
|
import static org.jclouds.nodepool.config.NodePoolProperties.MAX_SIZE;
|
||||||
import static org.jclouds.nodepool.config.NodePoolProperties.MIN_SIZE;
|
import static org.jclouds.nodepool.config.NodePoolProperties.MIN_SIZE;
|
||||||
|
@ -41,12 +32,8 @@ import static org.testng.Assert.assertTrue;
|
||||||
|
|
||||||
import java.util.NoSuchElementException;
|
import java.util.NoSuchElementException;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.concurrent.Callable;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
import org.jclouds.compute.RunNodesException;
|
import org.jclouds.compute.RunNodesException;
|
||||||
import org.jclouds.compute.RunScriptData;
|
|
||||||
import org.jclouds.compute.domain.ExecResponse;
|
|
||||||
import org.jclouds.compute.domain.NodeMetadata;
|
import org.jclouds.compute.domain.NodeMetadata;
|
||||||
import org.jclouds.compute.internal.BaseComputeServiceLiveTest;
|
import org.jclouds.compute.internal.BaseComputeServiceLiveTest;
|
||||||
import org.jclouds.compute.predicates.NodePredicates;
|
import org.jclouds.compute.predicates.NodePredicates;
|
||||||
|
@ -54,13 +41,9 @@ import org.jclouds.logging.config.LoggingModule;
|
||||||
import org.jclouds.logging.slf4j.config.SLF4JLoggingModule;
|
import org.jclouds.logging.slf4j.config.SLF4JLoggingModule;
|
||||||
import org.jclouds.rest.AuthorizationException;
|
import org.jclouds.rest.AuthorizationException;
|
||||||
import org.jclouds.sshj.config.SshjSshClientModule;
|
import org.jclouds.sshj.config.SshjSshClientModule;
|
||||||
import org.jclouds.util.Strings2;
|
|
||||||
import org.testng.annotations.AfterClass;
|
import org.testng.annotations.AfterClass;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
import com.google.common.base.Stopwatch;
|
|
||||||
import com.google.common.collect.ImmutableMap;
|
|
||||||
import com.google.common.collect.ImmutableSet;
|
|
||||||
import com.google.common.collect.Iterables;
|
import com.google.common.collect.Iterables;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import com.google.common.io.Closeables;
|
import com.google.common.io.Closeables;
|
||||||
|
@ -108,74 +91,7 @@ public class NodePoolComputeServiceLiveTest extends BaseComputeServiceLiveTest {
|
||||||
@Override
|
@Override
|
||||||
@Test(enabled = true, groups = "live")
|
@Test(enabled = true, groups = "live")
|
||||||
public void testCreateAndRunAService() throws Exception {
|
public void testCreateAndRunAService() throws Exception {
|
||||||
final String configuration = Strings2.toStringAndClose(RunScriptData.class
|
createAndRunAServiceInGroup(group);
|
||||||
.getResourceAsStream("/standalone-basic.xml"));
|
|
||||||
|
|
||||||
ImmutableMap<String, String> userMetadata = ImmutableMap.<String, String> of("Name", group);
|
|
||||||
ImmutableSet<String> tags = ImmutableSet.of(group);
|
|
||||||
Stopwatch watch = new Stopwatch().start();
|
|
||||||
NodeMetadata node = getOnlyElement(client.createNodesInGroup(group, 1, inboundPorts(22, 8080)
|
|
||||||
.blockOnPort(22, 300).userMetadata(userMetadata).tags(tags)));
|
|
||||||
long createSeconds = watch.elapsedTime(TimeUnit.SECONDS);
|
|
||||||
|
|
||||||
final String nodeId = node.getId();
|
|
||||||
|
|
||||||
checkUserMetadataInNodeEquals(node, userMetadata);
|
|
||||||
checkTagsInNodeEquals(node, tags);
|
|
||||||
|
|
||||||
getAnonymousLogger().info(
|
|
||||||
format("<< available node(%s) os(%s) in %ss", node.getId(), node.getOperatingSystem(), createSeconds));
|
|
||||||
|
|
||||||
watch.reset().start();
|
|
||||||
|
|
||||||
// note this is a dependency on the template resolution so we have the
|
|
||||||
// right process per
|
|
||||||
// operating system. moreover, we wish this to run as root, so that it
|
|
||||||
// can change ip
|
|
||||||
// tables rules and setup our admin user
|
|
||||||
client.runScriptOnNode(nodeId, installAdminUserJBossAndOpenPorts(node.getOperatingSystem()),
|
|
||||||
nameTask("configure-jboss"));
|
|
||||||
|
|
||||||
long configureSeconds = watch.elapsedTime(TimeUnit.SECONDS);
|
|
||||||
|
|
||||||
getAnonymousLogger()
|
|
||||||
.info(format("<< configured node(%s) with %s and JBoss %s in %ss",
|
|
||||||
nodeId,
|
|
||||||
exec(nodeId, "java -fullversion"),
|
|
||||||
// version of the jboss jar
|
|
||||||
exec(nodeId,
|
|
||||||
format("ls %s/bundles/org/jboss/as/osgi/configadmin/main|sed -e 's/.*-//g' -e 's/.jar//g'",
|
|
||||||
JBOSS_HOME)), configureSeconds));
|
|
||||||
|
|
||||||
trackAvailabilityOfProcessOnNode(view.utils().userExecutor().submit(new Callable<ExecResponse>() {
|
|
||||||
@Override
|
|
||||||
public ExecResponse call() {
|
|
||||||
return client.runScriptOnNode(nodeId, startJBoss(configuration), runAsRoot(false).blockOnComplete(false)
|
|
||||||
.nameTask("jboss"));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "initial start of jboss";
|
|
||||||
}
|
|
||||||
|
|
||||||
}), "jboss", node, JBOSS_PATTERN);
|
|
||||||
|
|
||||||
client.runScriptOnNode(nodeId, "/tmp/init-jboss stop", runAsRoot(false).wrapInInitScript(false));
|
|
||||||
|
|
||||||
trackAvailabilityOfProcessOnNode(view.utils().userExecutor().submit(new Callable<ExecResponse>() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ExecResponse call() {
|
|
||||||
return client.runScriptOnNode(nodeId, "/tmp/init-jboss start", runAsRoot(false).wrapInInitScript(false));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString() {
|
|
||||||
return "warm start of jboss";
|
|
||||||
}
|
|
||||||
|
|
||||||
}), "jboss", node, JBOSS_PATTERN);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(enabled = true, groups = "live", dependsOnMethods = "testCreateAndRunAService")
|
@Test(enabled = true, groups = "live", dependsOnMethods = "testCreateAndRunAService")
|
||||||
|
|
Loading…
Reference in New Issue