From e520e309181ae427e1c99307b82d72ad0b9ba7b4 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Thu, 2 Sep 2010 20:08:45 +0000 Subject: [PATCH 001/216] Preparing for release X.Y.Z git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@992098 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 5adda2e0..95c953a8 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,6 @@ Apache Whirr Change Log -Trunk (unreleased changes) +Release 0.1.0 - 2010-09-02 INCOMPATIBLE CHANGES From 944859f6a3aa7aca0583eac3184f246d35777be5 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Thu, 2 Sep 2010 20:28:36 +0000 Subject: [PATCH 002/216] Prepare for 0.2.0 development. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@992105 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 ++ build-tools/pom.xml | 4 ++-- cli/pom.xml | 4 ++-- core/pom.xml | 4 ++-- pom.xml | 6 +++--- services/cassandra/pom.xml | 4 ++-- services/hadoop/pom.xml | 4 ++-- services/zookeeper/pom.xml | 4 ++-- 8 files changed, 17 insertions(+), 15 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 95c953a8..bc55cf95 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,7 @@ Apache Whirr Change Log +Trunk (unreleased changes) + Release 0.1.0 - 2010-09-02 INCOMPATIBLE CHANGES diff --git a/build-tools/pom.xml b/build-tools/pom.xml index ff8892b6..15c5dfe9 100644 --- a/build-tools/pom.xml +++ b/build-tools/pom.xml @@ -20,12 +20,12 @@ org.apache.whirr whirr - 0.1.0-incubating-SNAPSHOT + 0.2.0-incubating-SNAPSHOT ../pom.xml org.apache.whirr whirr-build-tools jar - 0.1.0-incubating-SNAPSHOT + 0.2.0-incubating-SNAPSHOT Apache Whirr Build Tools diff --git a/cli/pom.xml b/cli/pom.xml index cfdec9f9..c174bdec 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -20,13 +20,13 @@ org.apache.whirr whirr - 0.1.0-incubating-SNAPSHOT + 0.2.0-incubating-SNAPSHOT ../pom.xml org.apache.whirr whirr-cli jar - 0.1.0-incubating-SNAPSHOT + 0.2.0-incubating-SNAPSHOT Apache Whirr CLI diff --git a/core/pom.xml b/core/pom.xml index 17031679..c1a98eb7 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -20,13 +20,13 @@ org.apache.whirr whirr - 0.1.0-incubating-SNAPSHOT + 0.2.0-incubating-SNAPSHOT ../pom.xml org.apache.whirr whirr-core jar - 0.1.0-incubating-SNAPSHOT + 0.2.0-incubating-SNAPSHOT Apache Whirr Core diff --git a/pom.xml b/pom.xml index 226ca2cf..48016dc8 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ 4.0.0 org.apache.whirr whirr - 0.1.0-incubating-SNAPSHOT + 0.2.0-incubating-SNAPSHOT pom @@ -146,7 +146,7 @@ org.apache.whirr whirr-build-tools - 0.1.0-incubating-SNAPSHOT + 0.2.0-incubating-SNAPSHOT @@ -575,4 +575,4 @@ - \ No newline at end of file + diff --git a/services/cassandra/pom.xml b/services/cassandra/pom.xml index d1b4d4aa..290d2411 100644 --- a/services/cassandra/pom.xml +++ b/services/cassandra/pom.xml @@ -20,13 +20,13 @@ org.apache.whirr whirr - 0.1.0-incubating-SNAPSHOT + 0.2.0-incubating-SNAPSHOT ../pom.xml org.apache.whirr whirr-cassandra jar - 0.1.0-incubating-SNAPSHOT + 0.2.0-incubating-SNAPSHOT Apache Whirr Cassandra diff --git a/services/hadoop/pom.xml b/services/hadoop/pom.xml index d7618687..d8d9f605 100644 --- a/services/hadoop/pom.xml +++ b/services/hadoop/pom.xml @@ -20,13 +20,13 @@ org.apache.whirr whirr - 0.1.0-incubating-SNAPSHOT + 0.2.0-incubating-SNAPSHOT ../pom.xml org.apache.whirr whirr-hadoop jar - 0.1.0-incubating-SNAPSHOT + 0.2.0-incubating-SNAPSHOT Apache Whirr Hadoop diff --git a/services/zookeeper/pom.xml b/services/zookeeper/pom.xml index 1377e2b2..df025287 100644 --- a/services/zookeeper/pom.xml +++ b/services/zookeeper/pom.xml @@ -20,13 +20,13 @@ org.apache.whirr whirr - 0.1.0-incubating-SNAPSHOT + 0.2.0-incubating-SNAPSHOT ../pom.xml org.apache.whirr whirr-zookeeper jar - 0.1.0-incubating-SNAPSHOT + 0.2.0-incubating-SNAPSHOT Apache Whirr ZooKeeper From 50a997dcb417e47018e914fe8afb9fd366b66ce6 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Fri, 3 Sep 2010 03:03:08 +0000 Subject: [PATCH 003/216] WHIRR-84. Log4j is missing from the CLI JAR. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@992188 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 ++ pom.xml | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index bc55cf95..26e393f2 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -76,3 +76,5 @@ Release 0.1.0 - 2010-09-02 WHIRR-79. Hadoop service is broken. (tomwhite) WHIRR-82. Integration tests should not run on "mvn install". (tomwhite) + + WHIRR-84. Log4j is missing from the CLI JAR. (tomwhite) diff --git a/pom.xml b/pom.xml index 48016dc8..755e7c31 100644 --- a/pom.xml +++ b/pom.xml @@ -112,7 +112,6 @@ log4j log4j 1.2.15 - provided javax.mail From be4acc7b495bd1e392cd6b34510c66ae825ced79 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Thu, 9 Sep 2010 22:57:27 +0000 Subject: [PATCH 004/216] WHIRR-85. Publish Maven artifacts to http://repository.apache.org. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@995602 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 3 +++ pom.xml | 68 ++++++++++++++++++++++++++++++++--------------------- 2 files changed, 44 insertions(+), 27 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 26e393f2..3375e44a 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -62,6 +62,9 @@ Release 0.1.0 - 2010-09-02 WHIRR-80. Clean up POM dependencies. (tomwhite) + WHIRR-85. Publish Maven artifacts to http://repository.apache.org. + (tomwhite) + BUG FIXES WHIRR-50. Cassandra POM should depend on top-level. (tomwhite) diff --git a/pom.xml b/pom.xml index 755e7c31..22054c06 100644 --- a/pom.xml +++ b/pom.xml @@ -18,10 +18,22 @@ 4.0.0 + + + org.apache + apache + 7 + + org.apache.whirr whirr 0.2.0-incubating-SNAPSHOT pom + + Whirr + Libraries for running cloud services + http://incubator.apache.org/whirr + 2010 build-tools @@ -157,6 +169,26 @@ 1.6 + + org.apache.maven.plugins + maven-enforcer-plugin + 1.0-beta-1 + + + enforce-java + + enforce + + + + + [2.2.1,) + + + + + + org.apache.maven.plugins maven-jar-plugin @@ -309,22 +341,7 @@ - - Whirr - Libraries for running cloud services - http://incubator.apache.org/whirr - 2010 - - - The Apache Software License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - repo - - - - Apache Software Foundation - http://www.apache.org - + apurtell @@ -420,6 +437,14 @@ http://svn.apache.org/viewvc/incubator/whirr/trunk/ + + apache.snapshots + Apache Snapshot Repository + http://repository.apache.org/snapshots + + false + + jclouds http://jclouds.googlecode.com/svn/repo @@ -436,17 +461,6 @@ apache.website scpexe://people.apache.org/www/incubator.apache.org/whirr - - whirr-repo - Whirr staging repo - scpexe://people.apache.org/home/tomwhite/public_html/whirr-repo - - - whirr-snapshot-repo - Whirr snapshot staging repo - scpexe://people.apache.org/home/tomwhite/public_html/whirr-snapshot-repo - - From 96a86cc943d475e3184e4ac08c39fc8f4119787e Mon Sep 17 00:00:00 2001 From: Thomas White Date: Fri, 10 Sep 2010 17:06:44 +0000 Subject: [PATCH 005/216] WHIRR-86. Update quick start documentation to work with release 0.1.0. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@995872 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 3 ++ .../confluence/quick-start-guide.confluence | 32 +++++++++++++------ 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 3375e44a..2eb8a58a 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -81,3 +81,6 @@ Release 0.1.0 - 2010-09-02 WHIRR-82. Integration tests should not run on "mvn install". (tomwhite) WHIRR-84. Log4j is missing from the CLI JAR. (tomwhite) + + WHIRR-86. Update quick start documentation to work with release 0.1.0. + (tomwhite) diff --git a/src/site/confluence/quick-start-guide.confluence b/src/site/confluence/quick-start-guide.confluence index e776e36d..724b540f 100644 --- a/src/site/confluence/quick-start-guide.confluence +++ b/src/site/confluence/quick-start-guide.confluence @@ -12,27 +12,41 @@ h3. Install Whirr [build|https://cwiki.apache.org/confluence/display/WHIRR/How+To+Contribute] Whirr. Call the directory which contains the Whirr JAR files {{WHIRR\_HOME}} (you might like to define this as an environment variable). -You can test that Whirr is working by running: +You can test that Whirr is working by running +(this is for version {{0.1.0-incubating}}): {code} -% java -jar $WHIRR_HOME/whirr-cli-0.1.0-SNAPSHOT.jar +% java -jar $WHIRR_HOME/whirr-cli-0.1.0-incubating.jar {code} -It is handy to create an alias for whirr, and for one including cloud credentials: +It is handy to create an alias for whirr: {code} -% alias whirr='java -jar $WHIRR_HOME/whirr-cli-0.1.0-SNAPSHOT.jar' -% alias whirr-ec2='whirr --identity=$AWS_ACCESS_KEY_ID --credential=$AWS_SECRET_ACCESS_KEY' +% alias whirr='java -jar $WHIRR_HOME/whirr-cli-0.1.0-incubating.jar' {code} h3. Launch a cluster -The following will launch a Hadoop cluster with a single machine for the namenode and jobtracker, and +First, create a properties file to define the cluster. The name doesn't matter, +but here we will assume it is called _hadoop.properties_ and located in your home directory. +This file defines a cluster +with a single machine for the namenode and jobtracker, and a further machine for a datanode and tasktracker. {code} -% whirr-ec2 launch-cluster --service-name=hadoop --cluster-name=tomhadoopcluster \ - --instance-templates='1 nn+jt 1 dn+tt' +whirr.service-name=hadoop +whirr.cluster-name=myhadoopcluster +whirr.instance-templates=1 jt+nn,1 dn+tt +whirr.provider=ec2 +whirr.identity= +whirr.credential= +whirr.private-key-file=${sys:user.home}/.ssh/id_rsa +{code} + +Run the following command to launch a cluster: + +{code} +% whirr launch-cluster --config hadoop.properties {code} Once the cluster has launched you can browse it by connecting to http://master-host:50030. @@ -48,7 +62,7 @@ h3. Destroy a cluster When you've finished using a cluster you can terminate the instances and clean up resources with {code} -% whirr-ec2 destroy-cluster --service-name hadoop --cluster-name tomhadoopcluster +% whirr destroy-cluster --config hadoop.properties {code} h2. Whirr API From da2beb3d541f86b6a12588ee4dfa4f5b60adbd49 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Thu, 16 Sep 2010 22:19:40 +0000 Subject: [PATCH 006/216] WHIRR-89. Support maven 3 builds. Contributed by Adrian Cole. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@997939 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 5 +++++ services/cassandra/pom.xml | 2 +- services/hadoop/pom.xml | 2 +- services/zookeeper/pom.xml | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 2eb8a58a..894d0f86 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -2,6 +2,10 @@ Apache Whirr Change Log Trunk (unreleased changes) + IMPROVEMENTS + + WHIRR-89. Support maven 3 builds. (Adrian Cole via tomwhite) + Release 0.1.0 - 2010-09-02 INCOMPATIBLE CHANGES @@ -84,3 +88,4 @@ Release 0.1.0 - 2010-09-02 WHIRR-86. Update quick start documentation to work with release 0.1.0. (tomwhite) + diff --git a/services/cassandra/pom.xml b/services/cassandra/pom.xml index 290d2411..68ff55c2 100644 --- a/services/cassandra/pom.xml +++ b/services/cassandra/pom.xml @@ -21,7 +21,7 @@ org.apache.whirr whirr 0.2.0-incubating-SNAPSHOT - ../pom.xml + ../../pom.xml org.apache.whirr whirr-cassandra diff --git a/services/hadoop/pom.xml b/services/hadoop/pom.xml index d8d9f605..3c513fcb 100644 --- a/services/hadoop/pom.xml +++ b/services/hadoop/pom.xml @@ -21,7 +21,7 @@ org.apache.whirr whirr 0.2.0-incubating-SNAPSHOT - ../pom.xml + ../../pom.xml org.apache.whirr whirr-hadoop diff --git a/services/zookeeper/pom.xml b/services/zookeeper/pom.xml index df025287..df343558 100644 --- a/services/zookeeper/pom.xml +++ b/services/zookeeper/pom.xml @@ -21,7 +21,7 @@ org.apache.whirr whirr 0.2.0-incubating-SNAPSHOT - ../pom.xml + ../../pom.xml org.apache.whirr whirr-zookeeper From 5603b15f110a98965529f5511a93ea1ca24dae19 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Mon, 20 Sep 2010 16:59:04 +0000 Subject: [PATCH 007/216] WHIRR-93. Fail on checkstyle violation. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@999008 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 4 ++++ .../cli/command/LaunchClusterCommandTest.java | 4 ---- .../org/apache/whirr/service/ClusterSpec.java | 2 -- pom.xml | 5 +++++ .../integration/CassandraServiceTest.java | 1 - .../hadoop/integration/HadoopServiceTest.java | 6 +++--- .../integration/ZooKeeperServiceTest.java | 19 +++++++++---------- 7 files changed, 21 insertions(+), 20 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 894d0f86..7620e552 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -6,6 +6,10 @@ Trunk (unreleased changes) WHIRR-89. Support maven 3 builds. (Adrian Cole via tomwhite) + BUG FIXES + + WHIRR-93. Fail on checkstyle violation. (tomwhite) + Release 0.1.0 - 2010-09-02 INCOMPATIBLE CHANGES diff --git a/cli/src/test/java/org/apache/whirr/cli/command/LaunchClusterCommandTest.java b/cli/src/test/java/org/apache/whirr/cli/command/LaunchClusterCommandTest.java index 971fcbd4..ef716eb7 100644 --- a/cli/src/test/java/org/apache/whirr/cli/command/LaunchClusterCommandTest.java +++ b/cli/src/test/java/org/apache/whirr/cli/command/LaunchClusterCommandTest.java @@ -18,7 +18,6 @@ package org.apache.whirr.cli.command; -import static org.apache.whirr.service.ClusterSpec.Property.INSTANCE_TEMPLATES; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; @@ -28,7 +27,6 @@ import static org.mockito.Mockito.when; import com.google.common.collect.Sets; -import com.google.common.io.ByteStreams; import com.google.common.io.Files; import com.google.inject.internal.Lists; @@ -37,8 +35,6 @@ import java.io.PrintStream; import java.util.Collections; -import org.apache.commons.configuration.Configuration; -import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.whirr.service.Cluster; import org.apache.whirr.service.ClusterSpec; import org.apache.whirr.service.Service; diff --git a/core/src/main/java/org/apache/whirr/service/ClusterSpec.java b/core/src/main/java/org/apache/whirr/service/ClusterSpec.java index 11a91ac1..ab7e59ae 100644 --- a/core/src/main/java/org/apache/whirr/service/ClusterSpec.java +++ b/core/src/main/java/org/apache/whirr/service/ClusterSpec.java @@ -24,11 +24,9 @@ import static org.jclouds.http.Payloads.newFilePayload; import static org.jclouds.util.Utils.toStringAndClose; -import com.google.common.base.Charsets; import com.google.common.base.Objects; import com.google.common.collect.Lists; import com.google.common.collect.Sets; -import com.google.common.io.Files; import java.io.File; import java.io.IOException; diff --git a/pom.xml b/pom.xml index 22054c06..0e6e5a0b 100644 --- a/pom.xml +++ b/pom.xml @@ -153,6 +153,11 @@ org.apache.maven.plugins maven-checkstyle-plugin 2.5 + + true + true + **/org/jclouds/aws/ec2/compute/functions/RunningInstanceToNodeMetadata.java + org.apache.whirr diff --git a/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java b/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java index 752a0bfc..b7e8577e 100644 --- a/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java +++ b/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java @@ -30,7 +30,6 @@ import org.apache.cassandra.thrift.Cassandra; import org.apache.cassandra.thrift.TokenRange; import org.apache.commons.configuration.CompositeConfiguration; -import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.thrift.TException; diff --git a/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceTest.java b/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceTest.java index c2251d85..e15b79bc 100644 --- a/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceTest.java +++ b/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceTest.java @@ -127,11 +127,11 @@ private static void waitForTaskTrackers(JobClient client) throws IOException { ClusterStatus clusterStatus = client.getClusterStatus(); int taskTrackerCount = clusterStatus.getTaskTrackers(); if (taskTrackerCount > 0) { - break; + break; } try { - System.out.print("."); - Thread.sleep(1000); + System.out.print("."); + Thread.sleep(1000); } catch (InterruptedException e) { break; } diff --git a/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java b/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java index e70e4cf5..465031a7 100644 --- a/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java +++ b/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java @@ -26,7 +26,6 @@ import java.util.concurrent.CountDownLatch; import org.apache.commons.configuration.CompositeConfiguration; -import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.whirr.service.ClusterSpec; @@ -73,25 +72,25 @@ class ConnectionWatcher implements Watcher { private CountDownLatch latch = new CountDownLatch(1); public void connect(String hosts) throws IOException, InterruptedException { - zk = new ZooKeeper(hosts, 5000, this); - latch.await(); + zk = new ZooKeeper(hosts, 5000, this); + latch.await(); } public ZooKeeper getZooKeeper() { - return zk; + return zk; } @Override public void process(WatchedEvent event) { - if (event.getState() == KeeperState.SyncConnected) { - latch.countDown(); - } + if (event.getState() == KeeperState.SyncConnected) { + latch.countDown(); + } } public void close() throws InterruptedException { - if (zk != null) { - zk.close(); - } + if (zk != null) { + zk.close(); + } } } From 842719e0b8196e4e2711ee5ee831e9c2182ad7f8 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Tue, 21 Sep 2010 21:43:32 +0000 Subject: [PATCH 008/216] WHIRR-90. Scripts should be versioned. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@999659 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 + .../whirr/cli/command/ClusterSpecCommand.java | 2 +- core/pom.xml | 8 +++ .../org/apache/whirr/service/ClusterSpec.java | 70 ++++++++++++------- .../apache/whirr/service/RunUrlBuilder.java | 28 ++++---- .../main/resources/whirr-default.properties | 3 + .../apache/whirr/service/ClusterSpecTest.java | 30 ++++++++ .../whirr/service/RunUrlBuilderTest.java | 52 +++++--------- .../service/cassandra/CassandraService.java | 6 +- .../integration/CassandraServiceTest.java | 2 +- .../whirr/service/hadoop/HadoopService.java | 4 +- .../hadoop/integration/HadoopServiceTest.java | 2 +- .../service/zookeeper/ZooKeeperService.java | 4 +- .../integration/ZooKeeperServiceTest.java | 2 +- .../confluence/configuration-guide.confluence | 2 + 15 files changed, 133 insertions(+), 84 deletions(-) create mode 100644 core/src/main/resources/whirr-default.properties create mode 100644 core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java diff --git a/CHANGES.txt b/CHANGES.txt index 7620e552..4c542c78 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -6,6 +6,8 @@ Trunk (unreleased changes) WHIRR-89. Support maven 3 builds. (Adrian Cole via tomwhite) + WHIRR-90. Scripts should be versioned. (tomwhite) + BUG FIXES WHIRR-93. Fail on checkstyle violation. (tomwhite) diff --git a/cli/src/main/java/org/apache/whirr/cli/command/ClusterSpecCommand.java b/cli/src/main/java/org/apache/whirr/cli/command/ClusterSpecCommand.java index 8b4bffac..1a54a431 100644 --- a/cli/src/main/java/org/apache/whirr/cli/command/ClusterSpecCommand.java +++ b/cli/src/main/java/org/apache/whirr/cli/command/ClusterSpecCommand.java @@ -95,7 +95,7 @@ protected ClusterSpec getClusterSpec(OptionSet optionSet) throws ConfigurationEx required.getSimpleName())); } } - return ClusterSpec.fromConfiguration(config); + return new ClusterSpec(config); } } diff --git a/core/pom.xml b/core/pom.xml index c1a98eb7..6883b321 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -82,4 +82,12 @@ log4j + + + + ${project.basedir}/src/main/resources + true + + + diff --git a/core/src/main/java/org/apache/whirr/service/ClusterSpec.java b/core/src/main/java/org/apache/whirr/service/ClusterSpec.java index ab7e59ae..5b718f40 100644 --- a/core/src/main/java/org/apache/whirr/service/ClusterSpec.java +++ b/core/src/main/java/org/apache/whirr/service/ClusterSpec.java @@ -33,6 +33,7 @@ import java.util.List; import java.util.Set; +import org.apache.commons.configuration.CompositeConfiguration; import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; @@ -53,7 +54,8 @@ public enum Property { CLUSTER_NAME(String.class, false), PUBLIC_KEY_FILE(String.class, false), PRIVATE_KEY_FILE(String.class, false), - CLIENT_CIDRS(String.class, true); + CLIENT_CIDRS(String.class, true), + RUN_URL_BASE(String.class, false); private Class type; private boolean multipleArguments; @@ -134,8 +136,10 @@ public static List parse(String... strings) { return templates; } } + + private static final String DEFAULT_PROPERTIES = "whirr-default.properties"; - private List instanceTemplates = Lists.newArrayList(); + private List instanceTemplates; private String serviceName; private String provider; private String identity; @@ -143,41 +147,48 @@ public static List parse(String... strings) { private String clusterName; private Payload privateKey; private Payload publicKey; - private List clientCidrs = Lists.newArrayList(); - private Configuration config = new PropertiesConfiguration(); + private List clientCidrs; + private String runUrlBase; + + private Configuration config; + + public ClusterSpec() throws ConfigurationException { + this(new PropertiesConfiguration()); + } /** * * @throws ConfigurationException if the public or private key cannot be read. */ - public static ClusterSpec fromConfiguration(Configuration config) - throws ConfigurationException { - ClusterSpec spec = new ClusterSpec(); - spec.setServiceName(config.getString(Property.SERVICE_NAME.getConfigName())); - spec.setInstanceTemplates(InstanceTemplate.parse( - config.getStringArray(Property.INSTANCE_TEMPLATES.getConfigName()))); - spec.setProvider(config.getString(Property.PROVIDER.getConfigName())); - spec.setIdentity(checkNotNull( - config.getString(Property.IDENTITY.getConfigName()), Property.IDENTITY)); - spec.setCredential(config.getString(Property.CREDENTIAL.getConfigName())); - spec.setClusterName(config.getString(Property.CLUSTER_NAME.getConfigName())); + public ClusterSpec(Configuration config) + throws ConfigurationException { + CompositeConfiguration c = new CompositeConfiguration(); + c.addConfiguration(config); + c.addConfiguration(new PropertiesConfiguration(DEFAULT_PROPERTIES)); + setServiceName(c.getString(Property.SERVICE_NAME.getConfigName())); + setInstanceTemplates(InstanceTemplate.parse( + c.getStringArray(Property.INSTANCE_TEMPLATES.getConfigName()))); + setProvider(c.getString(Property.PROVIDER.getConfigName())); + setIdentity(c.getString(Property.IDENTITY.getConfigName())); + setCredential(c.getString(Property.CREDENTIAL.getConfigName())); + setClusterName(c.getString(Property.CLUSTER_NAME.getConfigName())); try { - String privateKeyPath = config.getString( + String privateKeyPath = c.getString( Property.PRIVATE_KEY_FILE.getConfigName()); if (privateKeyPath != null) - spec.setPrivateKey(new File(privateKeyPath)); - String publicKeyPath = config.getString(Property.PUBLIC_KEY_FILE. + setPrivateKey(new File(privateKeyPath)); + String publicKeyPath = c.getString(Property.PUBLIC_KEY_FILE. getConfigName()); publicKeyPath = publicKeyPath == null && privateKeyPath != null ? privateKeyPath + ".pub" : publicKeyPath; if (publicKeyPath != null) - spec.setPublicKey(new File(publicKeyPath)); + setPublicKey(new File(publicKeyPath)); } catch (IOException e) { throw new ConfigurationException("error reading key from file", e); } - spec.setClientCidrs(config.getList(Property.CLIENT_CIDRS.getConfigName())); - spec.config = config; - return spec; + setClientCidrs(c.getList(Property.CLIENT_CIDRS.getConfigName())); + setRunUrlBase(c.getString(Property.RUN_URL_BASE.getConfigName())); + this.config = c; } public List getInstanceTemplates() { @@ -236,6 +247,10 @@ public List getClientCidrs() { return clientCidrs; } + public String getRunUrlBase() { + return runUrlBase; + } + public void setInstanceTemplates(List instanceTemplates) { this.instanceTemplates = instanceTemplates; } @@ -310,6 +325,10 @@ public void setClientCidrs(List clientCidrs) { this.clientCidrs = clientCidrs; } + public void setRunUrlBase(String runUrlBase) { + this.runUrlBase = runUrlBase; + } + // public Configuration getConfiguration() { @@ -325,7 +344,9 @@ public boolean equals(Object o) { && Objects.equal(identity, that.identity) && Objects.equal(credential, that.credential) && Objects.equal(clusterName, that.clusterName) - && Objects.equal(clientCidrs, that.clientCidrs); + && Objects.equal(clientCidrs, that.clientCidrs) + && Objects.equal(runUrlBase, that.runUrlBase) + ; } return false; } @@ -333,7 +354,7 @@ public boolean equals(Object o) { public int hashCode() { return Objects.hashCode(instanceTemplates, serviceName, provider, identity, credential, clusterName, publicKey, - privateKey, clientCidrs); + privateKey, clientCidrs, runUrlBase); } public String toString() { @@ -347,6 +368,7 @@ public String toString() { .add("publicKey", publicKey) .add("privateKey", privateKey) .add("clientCidrs", clientCidrs) + .add("runUrlBase", runUrlBase) .toString(); } diff --git a/core/src/main/java/org/apache/whirr/service/RunUrlBuilder.java b/core/src/main/java/org/apache/whirr/service/RunUrlBuilder.java index d5a8c7f2..b666fd70 100644 --- a/core/src/main/java/org/apache/whirr/service/RunUrlBuilder.java +++ b/core/src/main/java/org/apache/whirr/service/RunUrlBuilder.java @@ -18,35 +18,35 @@ package org.apache.whirr.service; +import static org.jclouds.scriptbuilder.domain.Statements.exec; + import java.net.MalformedURLException; import java.net.URL; -import static org.jclouds.scriptbuilder.domain.Statements.exec; - import org.jclouds.scriptbuilder.ScriptBuilder; +import org.jclouds.scriptbuilder.domain.OsFamily; /** * A convenience class for building scripts to run on nodes. */ public class RunUrlBuilder { - // Need to be able to specify base URL - // Perhaps make these scripts parameterizable? - // e.g. just java/install then base url is .../openjdk or .../sun or - // .../apache or .../cloudera - public static byte[] runUrls(String... urls) throws MalformedURLException { + /** + * + * @param runUrlBase The base URL to construct URLs from. + * @param urls The (possibly relative) URLs to build the runurls from. + * @return + * @throws MalformedURLException + */ + public static byte[] runUrls(String runUrlBase, String... urls) throws MalformedURLException { ScriptBuilder scriptBuilder = new ScriptBuilder().addStatement( exec("wget -qO/usr/bin/runurl run.alestic.com/runurl")).addStatement( exec("chmod 755 /usr/bin/runurl")); - - // Note that the runurl scripts should be checked in to whirr/scripts/ - String runUrlBase = System.getProperty("whirr.runurl.base", "http://whirr.s3.amazonaws.com/"); for (String url : urls) { - scriptBuilder.addStatement(exec("runurl " + new URL(new URL(runUrlBase), url))); + String runUrl = new URL(new URL(runUrlBase), url).toExternalForm(); + scriptBuilder.addStatement(exec("runurl " + runUrl)); } - - return scriptBuilder.build(org.jclouds.scriptbuilder.domain.OsFamily.UNIX) - .getBytes(); + return scriptBuilder.build(OsFamily.UNIX).getBytes(); } } diff --git a/core/src/main/resources/whirr-default.properties b/core/src/main/resources/whirr-default.properties new file mode 100644 index 00000000..b3a42347 --- /dev/null +++ b/core/src/main/resources/whirr-default.properties @@ -0,0 +1,3 @@ +whirr.private-key-file=${sys:user.home}/.ssh/id_rsa +whirr.public-key-file=${sys:user.home}/.ssh/id_rsa.pub +whirr.run-url-base=http://whirr.s3.amazonaws.com/${version}/ \ No newline at end of file diff --git a/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java b/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java new file mode 100644 index 00000000..23df7005 --- /dev/null +++ b/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java @@ -0,0 +1,30 @@ +package org.apache.whirr.service; + +import static org.hamcrest.Matchers.startsWith; +import static org.junit.Assert.assertThat; + +import org.apache.commons.configuration.Configuration; +import org.apache.commons.configuration.ConfigurationException; +import org.apache.commons.configuration.PropertiesConfiguration; +import org.junit.Test; + +public class ClusterSpecTest { + + @Test + public void testDefaultsAreSet() throws ConfigurationException { + ClusterSpec spec = new ClusterSpec(); + assertThat(spec.getRunUrlBase(), + startsWith("http://whirr.s3.amazonaws.com/")); + } + + @Test + public void testDefaultsCanBeOverridden() throws ConfigurationException { + Configuration conf = new PropertiesConfiguration(); + conf.setProperty(ClusterSpec.Property.RUN_URL_BASE.getConfigName(), + "http://example.org"); + ClusterSpec spec = new ClusterSpec(conf); + assertThat(spec.getRunUrlBase(), + startsWith("http://example.org")); + } + +} diff --git a/core/src/test/java/org/apache/whirr/service/RunUrlBuilderTest.java b/core/src/test/java/org/apache/whirr/service/RunUrlBuilderTest.java index c2b71b2d..feacbc9e 100644 --- a/core/src/test/java/org/apache/whirr/service/RunUrlBuilderTest.java +++ b/core/src/test/java/org/apache/whirr/service/RunUrlBuilderTest.java @@ -28,53 +28,33 @@ public class RunUrlBuilderTest { - private static final String WHIRR_RUNURL_BASE = "whirr.runurl.base"; - @Test public void testOnePath() throws MalformedURLException { - assertThat(runUrls("/a/b"), - containsString("runurl http://whirr.s3.amazonaws.com/a/b")); + assertThat(runUrls("http://example.org/", "a/b"), + containsString("runurl http://example.org/a/b")); } - @SuppressWarnings("unchecked") @Test - public void testTwoPaths() throws MalformedURLException { - assertThat(runUrls("/a/b", "/c/d"), allOf( - containsString("runurl http://whirr.s3.amazonaws.com/a/b"), - containsString("runurl http://whirr.s3.amazonaws.com/c/d"))); - } - - @Test - public void testAbsolutePath() throws MalformedURLException { - assertThat(runUrls("http://example.org/a/b"), + public void testOnePathNoSlash() throws MalformedURLException { + assertThat(runUrls("http://example.org", "a/b"), containsString("runurl http://example.org/a/b")); } + @SuppressWarnings("unchecked") @Test - public void testSystemOverrideOfRunUrlBaseNoSlash() throws MalformedURLException { - String prev = System.setProperty(WHIRR_RUNURL_BASE, "http://example.org"); - assertThat(runUrls("/a/b"), - containsString("runurl http://example.org/a/b")); - if (prev == null) { - System.clearProperty(WHIRR_RUNURL_BASE); - } else { - System.setProperty(WHIRR_RUNURL_BASE, prev); - } + public void testTwoPaths() throws MalformedURLException { + assertThat(runUrls("http://example.org/", "a/b", "c/d"), allOf( + containsString("runurl http://example.org/a/b"), + containsString("runurl http://example.org/c/d"))); } - + @Test - public void testSystemOverrideOfRunUrlBaseWithSlash() throws MalformedURLException { - String prev = System.setProperty(WHIRR_RUNURL_BASE, "http://example.org/"); - assertThat(runUrls("/a/b"), - containsString("runurl http://example.org/a/b")); - if (prev == null) { - System.clearProperty(WHIRR_RUNURL_BASE); - } else { - System.setProperty(WHIRR_RUNURL_BASE, prev); - } + public void testAbsolutePath() throws MalformedURLException { + assertThat(runUrls("http://example.org/", "http://example2.org/a/b"), + containsString("runurl http://example2.org/a/b")); } - - private String runUrls(String... urls) throws MalformedURLException { - return new String(RunUrlBuilder.runUrls(urls)); + + private String runUrls(String runUrlBase, String... urls) throws MalformedURLException { + return new String(RunUrlBuilder.runUrls(runUrlBase, urls)); } } diff --git a/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java b/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java index 624e71fe..b51bc7be 100644 --- a/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java +++ b/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java @@ -73,7 +73,8 @@ public Cluster launchCluster(ClusterSpec clusterSpec) throws IOException { ComputeServiceContextBuilder.build(clusterSpec); ComputeService computeService = computeServiceContext.getComputeService(); - byte[] bootScript = RunUrlBuilder.runUrls("sun/java/install", + byte[] bootScript = RunUrlBuilder.runUrls(clusterSpec.getRunUrlBase(), + "sun/java/install", "apache/cassandra/install"); TemplateBuilder templateBuilder = computeService.templateBuilder() @@ -110,7 +111,8 @@ public Cluster launchCluster(ClusterSpec clusterSpec) throws IOException { // Pass list of all servers in cluster to configure script. String servers = Joiner.on(' ').join(getPrivateIps(seeds)); byte[] configureScript = RunUrlBuilder - .runUrls("apache/cassandra/post-configure " + servers); + .runUrls(clusterSpec.getRunUrlBase(), + "apache/cassandra/post-configure " + servers); try { Map responses = computeService diff --git a/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java b/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java index b7e8577e..6ee6dbfd 100644 --- a/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java +++ b/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java @@ -60,7 +60,7 @@ public void setUp() throws ConfigurationException, IOException { config.addConfiguration(new PropertiesConfiguration(System.getProperty("config"))); } config.addConfiguration(new PropertiesConfiguration("whirr-cassandra-test.properties")); - clusterSpec = ClusterSpec.fromConfiguration(config); + clusterSpec = new ClusterSpec(config); Service s = new ServiceFactory().create(clusterSpec.getServiceName()); assertThat(s, instanceOf(CassandraService.class)); service = (CassandraService) s; diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java index 7cbcf0e3..4c6263f9 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java @@ -80,7 +80,7 @@ public HadoopCluster launchCluster(ClusterSpec clusterSpec) throws IOException { // deal with user packages and autoshutdown with extra runurls String hadoopInstallRunUrl = clusterSpec.getConfiguration().getString( "whirr.hadoop-install-runurl", "apache/hadoop/install"); - byte[] nnjtBootScript = RunUrlBuilder.runUrls( + byte[] nnjtBootScript = RunUrlBuilder.runUrls(clusterSpec.getRunUrlBase(), "sun/java/install", String.format("%s nn,jt -c %s", hadoopInstallRunUrl, clusterSpec.getProvider())); @@ -132,7 +132,7 @@ public HadoopCluster launchCluster(ClusterSpec clusterSpec) throws IOException { } // Launch slaves (DN and TT) - byte[] slaveBootScript = RunUrlBuilder.runUrls( + byte[] slaveBootScript = RunUrlBuilder.runUrls(clusterSpec.getRunUrlBase(), "sun/java/install", String.format("%s dn,tt -n %s -j %s", hadoopInstallRunUrl, diff --git a/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceTest.java b/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceTest.java index e15b79bc..ade35842 100644 --- a/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceTest.java +++ b/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceTest.java @@ -71,7 +71,7 @@ public void setUp() throws ConfigurationException, IOException { config.addConfiguration(new PropertiesConfiguration(System.getProperty("config"))); } config.addConfiguration(new PropertiesConfiguration("whirr-hadoop-test.properties")); - clusterSpec = ClusterSpec.fromConfiguration(config); + clusterSpec = new ClusterSpec(config); Service s = new ServiceFactory().create(clusterSpec.getServiceName()); assertThat(s, instanceOf(HadoopService.class)); service = (HadoopService) s; diff --git a/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java b/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java index 27403e42..974c5986 100644 --- a/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java +++ b/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java @@ -70,7 +70,7 @@ public ZooKeeperCluster launchCluster(ClusterSpec clusterSpec) throws IOExceptio ComputeServiceContextBuilder.build(clusterSpec); ComputeService computeService = computeServiceContext.getComputeService(); - byte[] bootScript = RunUrlBuilder.runUrls( + byte[] bootScript = RunUrlBuilder.runUrls(clusterSpec.getRunUrlBase(), "sun/java/install", "apache/zookeeper/install"); @@ -107,7 +107,7 @@ public ZooKeeperCluster launchCluster(ClusterSpec clusterSpec) throws IOExceptio // Pass list of all servers in ensemble to configure script. // Position is significant: i-th server has id i. String servers = Joiner.on(' ').join(getPrivateIps(nodes)); - byte[] configureScript = RunUrlBuilder.runUrls( + byte[] configureScript = RunUrlBuilder.runUrls(clusterSpec.getRunUrlBase(), "apache/zookeeper/post-configure " + servers); try { computeService.runScriptOnNodesMatching(runningWithTag(clusterSpec.getClusterName()), configureScript); diff --git a/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java b/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java index 465031a7..928fa923 100644 --- a/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java +++ b/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java @@ -56,7 +56,7 @@ public void setUp() throws ConfigurationException, IOException { config.addConfiguration(new PropertiesConfiguration(System.getProperty("config"))); } config.addConfiguration(new PropertiesConfiguration("whirr-zookeeper-test.properties")); - clusterSpec = ClusterSpec.fromConfiguration(config); + clusterSpec = new ClusterSpec(config); Service s = new ServiceFactory().create(clusterSpec.getServiceName()); assertThat(s, instanceOf(ZooKeeperService.class)); service = (ZooKeeperService) s; diff --git a/src/site/confluence/configuration-guide.confluence b/src/site/confluence/configuration-guide.confluence index b7a45716..2b227f04 100644 --- a/src/site/confluence/configuration-guide.confluence +++ b/src/site/confluence/configuration-guide.confluence @@ -12,6 +12,7 @@ Whirr is configured using a properties file, and optionally using command line a | {{credential}} | {{\--credential}} | none | The cloud credential. See the table below for how this maps to the credentials for your provider. | | {{secret-key-file}} | {{\--secret-key-file}} | _\~/.ssh/id\_rsa_ | The filename of the private key used to connect to instances. | | {{client-cidrs}} | {{\--client-cidrs}} | none | A comma-separated list of [CIDR |http://en.wikipedia.org/wiki/Classless\_Inter-Domain\_Routing] blocks. E.g. {{208.128.0.0/11,108.128.0.0/11}} | +| {{run-url-base}} | {{\--run-url-base}} | {{http://whirr.s3.amazonaws.com/VERSION/}} | The base URL for forming run urls from. Change this to host your own set of launch scripts. | h2. Cloud provider specific configuration @@ -35,6 +36,7 @@ h2. Comparison | none | {{credential}} | Specified using environment variables for Python. E.g. {{AWS\_ACCESS\_KEY\_ID}}, {{RACKSPACE\_SECRET}} | | {{private-key-file}} | {{private-key-file}} | | | {{client-cidr}} | {{client-cidrs}} | Python {{client-cidr}} option may be repeated multiple times, whereas Java {{client-cidrs}} contains comma-separated CIDRs. | +| none | {{run-url-base}} | Specified using {{user-data-file}} in Python. | | {{public-key}} | none | Based on secret key in Java (add {{.pub}}). | | {{image-id}} | none | Need to add to Java. Along with more flexible image matching (pattern, OS, arch). See jclouds TemplateBuilder. | | {{instance-type}} | none | Ditto. | From 8f3a416ef2997a8c9dca43a51a4d451ecb42f865 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Wed, 22 Sep 2010 19:10:58 +0000 Subject: [PATCH 009/216] WHIRR-66. Upgrade to jclouds 1.0-beta-7. Contributed by Adrian Cole. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1000146 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 + .../java/org/apache/whirr/cli/MainTest.java | 2 +- .../command/DestroyClusterCommandTest.java | 2 +- .../cli/command/LaunchClusterCommandTest.java | 2 +- .../org/apache/whirr/service/ClusterSpec.java | 10 +- .../apache/whirr/service/RunUrlBuilder.java | 4 +- .../service/jclouds/FirewallSettings.java | 2 +- .../RunningInstanceToNodeMetadata.java | 279 ------------------ pom.xml | 2 +- .../service/cassandra/CassandraService.java | 24 +- .../cassandra/CassandraServiceTest.java | 6 +- .../whirr/service/hadoop/HadoopProxy.java | 4 +- .../whirr/service/hadoop/HadoopService.java | 34 ++- .../service/zookeeper/ZooKeeperService.java | 24 +- 14 files changed, 63 insertions(+), 334 deletions(-) delete mode 100644 core/src/main/java/org/jclouds/aws/ec2/compute/functions/RunningInstanceToNodeMetadata.java diff --git a/CHANGES.txt b/CHANGES.txt index 4c542c78..de58fde9 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -8,6 +8,8 @@ Trunk (unreleased changes) WHIRR-90. Scripts should be versioned. (tomwhite) + WHIRR-66. Upgrade to jclouds 1.0-beta-7. (Adrian Cole via tomwhite) + BUG FIXES WHIRR-93. Fail on checkstyle violation. (tomwhite) diff --git a/cli/src/test/java/org/apache/whirr/cli/MainTest.java b/cli/src/test/java/org/apache/whirr/cli/MainTest.java index 4d23fe2a..62fb5ec5 100644 --- a/cli/src/test/java/org/apache/whirr/cli/MainTest.java +++ b/cli/src/test/java/org/apache/whirr/cli/MainTest.java @@ -25,7 +25,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import com.google.inject.internal.Lists; +import com.google.common.collect.Lists; import java.io.ByteArrayOutputStream; import java.io.InputStream; diff --git a/cli/src/test/java/org/apache/whirr/cli/command/DestroyClusterCommandTest.java b/cli/src/test/java/org/apache/whirr/cli/command/DestroyClusterCommandTest.java index 4a854cb1..ac47e143 100644 --- a/cli/src/test/java/org/apache/whirr/cli/command/DestroyClusterCommandTest.java +++ b/cli/src/test/java/org/apache/whirr/cli/command/DestroyClusterCommandTest.java @@ -26,7 +26,7 @@ import static org.mockito.Mockito.when; import com.google.common.io.Files; -import com.google.inject.internal.Lists; +import com.google.common.collect.Lists; import java.io.ByteArrayOutputStream; import java.io.File; diff --git a/cli/src/test/java/org/apache/whirr/cli/command/LaunchClusterCommandTest.java b/cli/src/test/java/org/apache/whirr/cli/command/LaunchClusterCommandTest.java index ef716eb7..d4a76c0a 100644 --- a/cli/src/test/java/org/apache/whirr/cli/command/LaunchClusterCommandTest.java +++ b/cli/src/test/java/org/apache/whirr/cli/command/LaunchClusterCommandTest.java @@ -28,7 +28,7 @@ import com.google.common.collect.Sets; import com.google.common.io.Files; -import com.google.inject.internal.Lists; +import com.google.common.collect.Lists; import java.io.ByteArrayOutputStream; import java.io.File; diff --git a/core/src/main/java/org/apache/whirr/service/ClusterSpec.java b/core/src/main/java/org/apache/whirr/service/ClusterSpec.java index 5b718f40..394a5048 100644 --- a/core/src/main/java/org/apache/whirr/service/ClusterSpec.java +++ b/core/src/main/java/org/apache/whirr/service/ClusterSpec.java @@ -20,8 +20,8 @@ import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; -import static org.jclouds.http.Payloads.newStringPayload; -import static org.jclouds.http.Payloads.newFilePayload; +import static org.jclouds.io.Payloads.newStringPayload; +import static org.jclouds.io.Payloads.newFilePayload; import static org.jclouds.util.Utils.toStringAndClose; import com.google.common.base.Objects; @@ -37,7 +37,7 @@ import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; -import org.jclouds.http.Payload; +import org.jclouds.io.Payload; /** * This class represents the specification of a cluster. It is used to describe @@ -234,14 +234,14 @@ public Payload getPublicKey() { * @throws IOException if the payload cannot be read */ public String readPrivateKey() throws IOException { - return toStringAndClose(getPrivateKey().getContent()); + return toStringAndClose(getPrivateKey().getInput()); } /** * @see #getPublicKey * @throws IOException if the payload cannot be read */ public String readPublicKey() throws IOException { - return toStringAndClose(getPublicKey().getContent()); + return toStringAndClose(getPublicKey().getInput()); } public List getClientCidrs() { return clientCidrs; diff --git a/core/src/main/java/org/apache/whirr/service/RunUrlBuilder.java b/core/src/main/java/org/apache/whirr/service/RunUrlBuilder.java index b666fd70..9a902561 100644 --- a/core/src/main/java/org/apache/whirr/service/RunUrlBuilder.java +++ b/core/src/main/java/org/apache/whirr/service/RunUrlBuilder.java @@ -38,7 +38,7 @@ public class RunUrlBuilder { * @return * @throws MalformedURLException */ - public static byte[] runUrls(String runUrlBase, String... urls) throws MalformedURLException { + public static String runUrls(String runUrlBase, String... urls) throws MalformedURLException { ScriptBuilder scriptBuilder = new ScriptBuilder().addStatement( exec("wget -qO/usr/bin/runurl run.alestic.com/runurl")).addStatement( exec("chmod 755 /usr/bin/runurl")); @@ -46,7 +46,7 @@ public static byte[] runUrls(String runUrlBase, String... urls) throws Malformed String runUrl = new URL(new URL(runUrlBase), url).toExternalForm(); scriptBuilder.addStatement(exec("runurl " + runUrl)); } - return scriptBuilder.build(OsFamily.UNIX).getBytes(); + return scriptBuilder.build(OsFamily.UNIX); } } diff --git a/core/src/main/java/org/apache/whirr/service/jclouds/FirewallSettings.java b/core/src/main/java/org/apache/whirr/service/jclouds/FirewallSettings.java index 2d2bd164..d874c279 100644 --- a/core/src/main/java/org/apache/whirr/service/jclouds/FirewallSettings.java +++ b/core/src/main/java/org/apache/whirr/service/jclouds/FirewallSettings.java @@ -85,7 +85,7 @@ private static void authorizeIngress(ComputeServiceContext computeServiceContext String region = EC2Utils.parseHandle(Iterables.get(nodes, 0).getId())[0]; EC2Client ec2Client = EC2Client.class.cast( computeServiceContext.getProviderSpecificContext().getApi()); - String groupName = "jclouds#" + clusterSpec.getClusterName(); + String groupName = "jclouds#" + clusterSpec.getClusterName() + "#" + region; for (String cidr : cidrs) { for (int port : ports) { ec2Client.getSecurityGroupServices() diff --git a/core/src/main/java/org/jclouds/aws/ec2/compute/functions/RunningInstanceToNodeMetadata.java b/core/src/main/java/org/jclouds/aws/ec2/compute/functions/RunningInstanceToNodeMetadata.java deleted file mode 100644 index 39282147..00000000 --- a/core/src/main/java/org/jclouds/aws/ec2/compute/functions/RunningInstanceToNodeMetadata.java +++ /dev/null @@ -1,279 +0,0 @@ -/** - * - * Copyright (C) 2009 Cloud Conscious, LLC. - * - * ==================================================================== - * Licensed 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.aws.ec2.compute.functions; - -import static com.google.common.base.Preconditions.checkNotNull; -import static org.jclouds.util.Utils.nullSafeSet; - -import java.net.URI; -import java.util.Map; -import java.util.NoSuchElementException; -import java.util.Set; -import java.util.concurrent.ConcurrentMap; - -import javax.annotation.Resource; -import javax.inject.Inject; -import javax.inject.Named; -import javax.inject.Provider; -import javax.inject.Singleton; - -import org.jclouds.aws.ec2.compute.domain.RegionAndName; -import org.jclouds.aws.ec2.domain.InstanceState; -import org.jclouds.aws.ec2.domain.KeyPair; -import org.jclouds.aws.ec2.domain.RunningInstance; -import org.jclouds.aws.ec2.options.DescribeImagesOptions; -import org.jclouds.aws.ec2.services.AMIClient; -import org.jclouds.compute.domain.Image; -import org.jclouds.compute.domain.NodeMetadata; -import org.jclouds.compute.domain.NodeState; -import org.jclouds.compute.domain.internal.NodeMetadataImpl; -import org.jclouds.compute.strategy.PopulateDefaultLoginCredentialsForImageStrategy; -import org.jclouds.domain.Credentials; -import org.jclouds.domain.Location; -import org.jclouds.logging.Logger; - -import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Function; -import com.google.common.base.Predicate; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.Iterables; -import com.google.common.collect.Maps; - -/** - * @author Adrian Cole - */ -@Singleton -public class RunningInstanceToNodeMetadata implements Function { - - @Resource - protected Logger logger = Logger.NULL; - - @VisibleForTesting - static class FindImageForInstance implements Predicate { - private final Location location; - private final RunningInstance instance; - - FindImageForInstance(Location location, RunningInstance instance) { - this.location = checkNotNull(location, "location"); - this.instance = checkNotNull(instance, "instance"); - } - - @Override - public boolean apply(Image input) { - return input.getProviderId().equals(instance.getImageId()) - && (input.getLocation() == null || input.getLocation().equals(location) || input - .getLocation().equals(location.getParent())); - } - - @Override - public int hashCode() { - final int prime = 31; - int result = 1; - result = prime * result + ((instance.getId() == null) ? 0 : instance.getId().hashCode()); - result = prime * result + ((location.getId() == null) ? 0 : location.getId().hashCode()); - return result; - } - - @Override - public boolean equals(Object obj) { - if (this == obj) - return true; - if (obj == null) - return false; - if (getClass() != obj.getClass()) - return false; - FindImageForInstance other = (FindImageForInstance) obj; - if (instance.getId() == null) { - if (other.instance.getId() != null) - return false; - } else if (!instance.getId().equals(other.instance.getId())) - return false; - if (location.getId() == null) { - if (other.location.getId() != null) - return false; - } else if (!location.getId().equals(other.location.getId())) - return false; - return true; - } - } - - private static final Map instanceToNodeState = ImmutableMap - . builder().put(InstanceState.PENDING, NodeState.PENDING).put( - InstanceState.RUNNING, NodeState.RUNNING).put(InstanceState.SHUTTING_DOWN, NodeState.PENDING).put( - InstanceState.TERMINATED, NodeState.TERMINATED).put( - InstanceState.STOPPING, NodeState.PENDING).put( - InstanceState.STOPPED, NodeState.SUSPENDED).build(); - - private final AMIClient amiClient; - private final Map credentialsMap; - private final PopulateDefaultLoginCredentialsForImageStrategy credentialProvider; - private final Provider> images; - private final Set locations; - private final Function> instanceToStorageMapping; - private final ConcurrentMap imageMap; - - @Inject - RunningInstanceToNodeMetadata( - AMIClient amiClient, - Map credentialsMap, - PopulateDefaultLoginCredentialsForImageStrategy credentialProvider, - Provider> images, // to facilitate on-demand refresh of image list - ConcurrentMap imageMap, - Set locations, - @Named("volumeMapping") Function> instanceToStorageMapping) { - this.amiClient = checkNotNull(amiClient, "amiClient"); - this.credentialsMap = checkNotNull(credentialsMap, "credentialsMap"); - this.credentialProvider = checkNotNull(credentialProvider, "credentialProvider"); - this.images = checkNotNull(images, "images"); - this.locations = checkNotNull(locations, "locations"); - this.instanceToStorageMapping = checkNotNull(instanceToStorageMapping, - "instanceToStorageMapping"); - this.imageMap = checkNotNull(imageMap, "imageMap"); - } - - @Override - public NodeMetadata apply(final RunningInstance instance) { - String id = checkNotNull(instance, "instance").getId(); - - String name = null; // user doesn't determine a node name; - URI uri = null; // no uri to get rest access to host info - - String tag = getTagForInstace(instance); - - Credentials credentials = getCredentialsForInstanceWithTag(instance, tag); - - Map userMetadata = ImmutableMap. of(); - - NodeState state = instanceToNodeState.get(instance.getInstanceState()); - - Set publicAddresses = nullSafeSet(instance.getIpAddress()); - Set privateAddresses = nullSafeSet(instance.getPrivateIpAddress()); - - Map extra = getExtra(instance); - - Location location = getLocationForAvailabilityZone(instance); - - Image image = resolveImageForInstanceInLocation(instance, location); - - return new NodeMetadataImpl(id, name, instance.getRegion() + "/" + instance.getId(), - location, uri, userMetadata, tag, image, state, publicAddresses, privateAddresses, - extra, credentials); - } - - private Credentials getCredentialsForInstanceWithTag(final RunningInstance instance, String tag) { - Credentials credentials = null;// default if no keypair exists - - if (instance.getKeyName() != null) { - credentials = new Credentials(getLoginAccountFor(instance), getPrivateKeyOrNull(instance, - tag)); - } - return credentials; - } - - private String getTagForInstace(final RunningInstance instance) { - String tag = String.format("NOTAG-%s", instance.getId());// default - try { - tag = Iterables.getOnlyElement( - Iterables.filter(instance.getGroupIds(), new Predicate() { - - @Override - public boolean apply(String input) { - return input.startsWith("jclouds#"); - } - - })).substring(8); - } catch (NoSuchElementException e) { - logger - .warn("no tag parsed from %s's groups: %s", instance.getId(), instance - .getGroupIds()); - } catch (IllegalArgumentException e) { - logger.warn("too many groups match %s; %s's groups: %s", "jclouds#", instance.getId(), - instance.getGroupIds()); - } - return tag; - } - - private Location getLocationForAvailabilityZone(final RunningInstance instance) { - final String locationId = instance.getAvailabilityZone(); - - Location location = Iterables.find(locations, new Predicate() { - - @Override - public boolean apply(Location input) { - return input.getId().equals(locationId); - } - - }); - return location; - } - - @VisibleForTesting - Image resolveImageForInstanceInLocation(final RunningInstance instance, final Location location) { - Image image = null; - try { - image = Iterables.find(images.get(), new FindImageForInstance(location, instance)); - } catch (NoSuchElementException e) { - RegionAndName key = new RegionAndName(instance.getRegion(), instance.getImageId()); - try { - image = imageMap.get(key); - } catch (NullPointerException nex) { - logger.warn("could not find a matching image for instance %s in location %s", instance, - location); - } - } - return image; - } - - /** - * Set extras for the node. - * - * Extras are derived from either additional API calls or hard-coded values. - * - * @param instance - * instance for which the extras are retrieved - * @return map with extras - */ - @VisibleForTesting - Map getExtra(RunningInstance instance) { - Map extra = Maps.newHashMap(); - - // put storage info - /* TODO: only valid for UNIX */ - extra.putAll(instanceToStorageMapping.apply(instance)); - - return extra; - } - - @VisibleForTesting - String getPrivateKeyOrNull(RunningInstance instance, String tag) { - KeyPair keyPair = credentialsMap.get(new RegionAndName(instance.getRegion(), instance - .getKeyName())); - return keyPair != null ? keyPair.getKeyMaterial() : null; - } - - @VisibleForTesting - String getLoginAccountFor(RunningInstance from) { - org.jclouds.aws.ec2.domain.Image image = Iterables.getOnlyElement(amiClient - .describeImagesInRegion(from.getRegion(), DescribeImagesOptions.Builder - .imageIds(from.getImageId()))); - return checkNotNull(credentialProvider.execute(image), "login from image: " - + from.getImageId()).account; - } - -} \ No newline at end of file diff --git a/pom.xml b/pom.xml index 0e6e5a0b..d42e92ff 100644 --- a/pom.xml +++ b/pom.xml @@ -45,7 +45,7 @@ - 1.0-beta-6 + 1.0-beta-7 diff --git a/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java b/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java index b51bc7be..d94243af 100644 --- a/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java +++ b/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java @@ -19,9 +19,11 @@ package org.apache.whirr.service.cassandra; import static com.google.common.base.Preconditions.checkNotNull; +import static org.apache.whirr.service.RunUrlBuilder.runUrls; import static org.jclouds.compute.domain.OsFamily.UBUNTU; import static org.jclouds.compute.options.TemplateOptions.Builder.runScript; import static org.jclouds.compute.predicates.NodePredicates.runningWithTag; +import static org.jclouds.io.Payloads.newStringPayload; import java.io.IOException; import java.net.InetAddress; @@ -35,19 +37,19 @@ import org.apache.whirr.service.Cluster; import org.apache.whirr.service.ClusterSpec; import org.apache.whirr.service.ComputeServiceContextBuilder; -import org.apache.whirr.service.RunUrlBuilder; import org.apache.whirr.service.Service; import org.apache.whirr.service.Cluster.Instance; import org.apache.whirr.service.ClusterSpec.InstanceTemplate; import org.apache.whirr.service.jclouds.FirewallSettings; +import org.jclouds.aws.ec2.domain.InstanceType; import org.jclouds.compute.ComputeService; import org.jclouds.compute.ComputeServiceContext; import org.jclouds.compute.RunNodesException; import org.jclouds.compute.RunScriptOnNodesException; -import org.jclouds.compute.domain.Architecture; import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.Template; import org.jclouds.compute.domain.TemplateBuilder; +import org.jclouds.io.Payload; import org.jclouds.ssh.ExecResponse; import com.google.common.base.Function; @@ -73,20 +75,21 @@ public Cluster launchCluster(ClusterSpec clusterSpec) throws IOException { ComputeServiceContextBuilder.build(clusterSpec); ComputeService computeService = computeServiceContext.getComputeService(); - byte[] bootScript = RunUrlBuilder.runUrls(clusterSpec.getRunUrlBase(), + Payload bootScript = newStringPayload(runUrls(clusterSpec.getRunUrlBase(), "sun/java/install", - "apache/cassandra/install"); + "apache/cassandra/install")); TemplateBuilder templateBuilder = computeService.templateBuilder() .osFamily(UBUNTU).options( runScript(bootScript).installPrivateKey( - clusterSpec.readPrivateKey()).authorizePublicKey( - clusterSpec.readPublicKey())); + clusterSpec.getPrivateKey()).authorizePublicKey( + clusterSpec.getPublicKey())); // TODO extract this logic elsewhere if (clusterSpec.getProvider().equals("ec2")) - templateBuilder.imageNameMatches(".*10\\.?04.*").osDescriptionMatches( - "^ubuntu-images.*").architecture(Architecture.X86_32); + templateBuilder.osVersionMatches("10.04") + .imageDescriptionMatches(".*ubuntu-images.*") + .hardwareId(InstanceType.M1_SMALL); Template template = templateBuilder.build(); @@ -110,9 +113,8 @@ public Cluster launchCluster(ClusterSpec clusterSpec) throws IOException { // Pass list of all servers in cluster to configure script. String servers = Joiner.on(' ').join(getPrivateIps(seeds)); - byte[] configureScript = RunUrlBuilder - .runUrls(clusterSpec.getRunUrlBase(), - "apache/cassandra/post-configure " + servers); + Payload configureScript = newStringPayload(runUrls(clusterSpec.getRunUrlBase(), + "apache/cassandra/post-configure " + servers)); try { Map responses = computeService diff --git a/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/CassandraServiceTest.java b/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/CassandraServiceTest.java index 3bb43c98..f564eb18 100644 --- a/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/CassandraServiceTest.java +++ b/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/CassandraServiceTest.java @@ -32,10 +32,10 @@ public class CassandraServiceTest { private NodeMetadata getNodeMetadata(String id) { - return new NodeMetadataImpl("1", null, "1", null, null, - new HashMap(), null, null, + return new NodeMetadataImpl("1", null, "1", null, null, + new HashMap(), null, null, null, null, NodeState.RUNNING, new ArrayList(), - new ArrayList(), new HashMap(), null); + new ArrayList(), null); } @Test() diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java index 8348e142..59c84fb5 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java @@ -52,9 +52,9 @@ public void start() throws IOException { } else { identity = File.createTempFile("hadoop", "key"); identity.deleteOnExit(); - Files.write(ByteStreams.toByteArray(clusterSpec.getPrivateKey().getContent()), identity); + Files.write(ByteStreams.toByteArray(clusterSpec.getPrivateKey().getInput()), identity); } - String user = Iterables.get(cluster.getInstances(), 0).getLoginCredentials().account; + String user = Iterables.get(cluster.getInstances(), 0).getLoginCredentials().identity; String server = cluster.getNamenodePublicAddress().getHostName(); String[] command = new String[] { "ssh", "-i", identity.getAbsolutePath(), diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java index 4c6263f9..af9c9b98 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java @@ -18,10 +18,12 @@ package org.apache.whirr.service.hadoop; +import static org.apache.whirr.service.RunUrlBuilder.runUrls; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; import static org.jclouds.compute.domain.OsFamily.UBUNTU; import static org.jclouds.compute.options.TemplateOptions.Builder.runScript; +import static org.jclouds.io.Payloads.newStringPayload; import com.google.common.base.Charsets; import com.google.common.base.Function; @@ -41,18 +43,18 @@ import org.apache.whirr.service.ClusterSpec; import org.apache.whirr.service.ComputeServiceContextBuilder; -import org.apache.whirr.service.RunUrlBuilder; import org.apache.whirr.service.Service; import org.apache.whirr.service.Cluster.Instance; import org.apache.whirr.service.ClusterSpec.InstanceTemplate; import org.apache.whirr.service.jclouds.FirewallSettings; +import org.jclouds.aws.ec2.domain.InstanceType; import org.jclouds.compute.ComputeService; import org.jclouds.compute.ComputeServiceContext; import org.jclouds.compute.RunNodesException; -import org.jclouds.compute.domain.Architecture; import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.Template; import org.jclouds.compute.domain.TemplateBuilder; +import org.jclouds.io.Payload; public class HadoopService extends Service { @@ -80,22 +82,22 @@ public HadoopCluster launchCluster(ClusterSpec clusterSpec) throws IOException { // deal with user packages and autoshutdown with extra runurls String hadoopInstallRunUrl = clusterSpec.getConfiguration().getString( "whirr.hadoop-install-runurl", "apache/hadoop/install"); - byte[] nnjtBootScript = RunUrlBuilder.runUrls(clusterSpec.getRunUrlBase(), + Payload nnjtBootScript = newStringPayload(runUrls(clusterSpec.getRunUrlBase(), "sun/java/install", String.format("%s nn,jt -c %s", hadoopInstallRunUrl, - clusterSpec.getProvider())); + clusterSpec.getProvider()))); TemplateBuilder masterTemplateBuilder = computeService.templateBuilder() .osFamily(UBUNTU) .options(runScript(nnjtBootScript) - .installPrivateKey(clusterSpec.readPrivateKey()) - .authorizePublicKey(clusterSpec.readPublicKey())); + .installPrivateKey(clusterSpec.getPrivateKey()) + .authorizePublicKey(clusterSpec.getPublicKey())); // TODO extract this logic elsewhere if (clusterSpec.getProvider().equals("ec2")) - masterTemplateBuilder.imageNameMatches(".*10\\.?04.*") - .osDescriptionMatches("^ubuntu-images.*") - .architecture(Architecture.X86_32); + masterTemplateBuilder.osVersionMatches("10.04") + .imageDescriptionMatches(".*ubuntu-images.*") + .hardwareId(InstanceType.M1_SMALL); Template masterTemplate = masterTemplateBuilder.build(); @@ -132,24 +134,24 @@ public HadoopCluster launchCluster(ClusterSpec clusterSpec) throws IOException { } // Launch slaves (DN and TT) - byte[] slaveBootScript = RunUrlBuilder.runUrls(clusterSpec.getRunUrlBase(), + Payload slaveBootScript = newStringPayload(runUrls(clusterSpec.getRunUrlBase(), "sun/java/install", String.format("%s dn,tt -n %s -j %s", hadoopInstallRunUrl, namenodePublicAddress.getHostName(), - jobtrackerPublicAddress.getHostName())); + jobtrackerPublicAddress.getHostName()))); TemplateBuilder slaveTemplateBuilder = computeService.templateBuilder() .osFamily(UBUNTU) .options(runScript(slaveBootScript) - .installPrivateKey(clusterSpec.readPrivateKey()) - .authorizePublicKey(clusterSpec.readPublicKey())); + .installPrivateKey(clusterSpec.getPrivateKey()) + .authorizePublicKey(clusterSpec.getPublicKey())); // TODO extract this logic elsewhere if (clusterSpec.getProvider().equals("ec2")) - slaveTemplateBuilder.imageNameMatches(".*10\\.?04.*") - .osDescriptionMatches("^ubuntu-images.*") - .architecture(Architecture.X86_32); + slaveTemplateBuilder.osVersionMatches("10.04") + .imageDescriptionMatches(".*ubuntu-images.*") + .hardwareId(InstanceType.M1_SMALL); Template slaveTemplate = slaveTemplateBuilder.build(); diff --git a/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java b/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java index 974c5986..66b9eac6 100644 --- a/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java +++ b/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java @@ -19,9 +19,11 @@ package org.apache.whirr.service.zookeeper; import static com.google.common.base.Preconditions.checkNotNull; +import static org.apache.whirr.service.RunUrlBuilder.runUrls; import static org.jclouds.compute.domain.OsFamily.UBUNTU; import static org.jclouds.compute.options.TemplateOptions.Builder.runScript; import static org.jclouds.compute.predicates.NodePredicates.runningWithTag; +import static org.jclouds.io.Payloads.newStringPayload; import java.io.IOException; import java.net.InetAddress; @@ -32,19 +34,19 @@ import org.apache.whirr.service.ClusterSpec; import org.apache.whirr.service.ComputeServiceContextBuilder; -import org.apache.whirr.service.RunUrlBuilder; import org.apache.whirr.service.Service; import org.apache.whirr.service.Cluster.Instance; import org.apache.whirr.service.ClusterSpec.InstanceTemplate; import org.apache.whirr.service.jclouds.FirewallSettings; +import org.jclouds.aws.ec2.domain.InstanceType; import org.jclouds.compute.ComputeService; import org.jclouds.compute.ComputeServiceContext; import org.jclouds.compute.RunNodesException; import org.jclouds.compute.RunScriptOnNodesException; -import org.jclouds.compute.domain.Architecture; import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.Template; import org.jclouds.compute.domain.TemplateBuilder; +import org.jclouds.io.Payload; import com.google.common.base.Function; import com.google.common.base.Joiner; @@ -70,21 +72,21 @@ public ZooKeeperCluster launchCluster(ClusterSpec clusterSpec) throws IOExceptio ComputeServiceContextBuilder.build(clusterSpec); ComputeService computeService = computeServiceContext.getComputeService(); - byte[] bootScript = RunUrlBuilder.runUrls(clusterSpec.getRunUrlBase(), + Payload bootScript = newStringPayload(runUrls(clusterSpec.getRunUrlBase(), "sun/java/install", - "apache/zookeeper/install"); + "apache/zookeeper/install")); TemplateBuilder templateBuilder = computeService.templateBuilder() .osFamily(UBUNTU) .options(runScript(bootScript) - .installPrivateKey(clusterSpec.readPrivateKey()) - .authorizePublicKey(clusterSpec.readPublicKey())); + .installPrivateKey(clusterSpec.getPrivateKey()) + .authorizePublicKey(clusterSpec.getPublicKey())); // TODO extract this logic elsewhere if (clusterSpec.getProvider().equals("ec2")) - templateBuilder.imageNameMatches(".*10\\.?04.*") - .osDescriptionMatches("^ubuntu-images.*") - .architecture(Architecture.X86_32); + templateBuilder.osVersionMatches("10.04") + .imageDescriptionMatches(".*ubuntu-images.*") + .hardwareId(InstanceType.M1_SMALL); Template template = templateBuilder.build(); @@ -107,8 +109,8 @@ public ZooKeeperCluster launchCluster(ClusterSpec clusterSpec) throws IOExceptio // Pass list of all servers in ensemble to configure script. // Position is significant: i-th server has id i. String servers = Joiner.on(' ').join(getPrivateIps(nodes)); - byte[] configureScript = RunUrlBuilder.runUrls(clusterSpec.getRunUrlBase(), - "apache/zookeeper/post-configure " + servers); + Payload configureScript = newStringPayload(runUrls(clusterSpec.getRunUrlBase(), + "apache/zookeeper/post-configure " + servers)); try { computeService.runScriptOnNodesMatching(runningWithTag(clusterSpec.getClusterName()), configureScript); } catch (RunScriptOnNodesException e) { From 5f7a7d44b2a1b29a382a204fa2a2aada5d9e628e Mon Sep 17 00:00:00 2001 From: Thomas White Date: Tue, 28 Sep 2010 03:28:40 +0000 Subject: [PATCH 010/216] WHIRR-97. Lucid is not stable on EC2. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1001999 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 3 + core/pom.xml | 4 ++ .../org/apache/whirr/service/ClusterSpec.java | 39 ++++++++++- .../jclouds/TemplateBuilderStrategy.java | 26 ++++++++ .../service/TemplateBuilderStrategyTest.java | 46 +++++++++++++ scripts/apache/hadoop/install | 5 +- scripts/cloudera/cdh/install | 9 ++- scripts/sun/java/install | 65 ++++++++++++++----- .../service/cassandra/CassandraService.java | 30 ++++----- .../whirr/service/hadoop/HadoopService.java | 24 ++----- .../hadoop/HadoopTemplateBuilderStrategy.java | 20 ++++++ .../service/zookeeper/ZooKeeperService.java | 31 ++++----- .../confluence/configuration-guide.confluence | 9 ++- 13 files changed, 233 insertions(+), 78 deletions(-) create mode 100644 core/src/main/java/org/apache/whirr/service/jclouds/TemplateBuilderStrategy.java create mode 100644 core/src/test/java/org/apache/whirr/service/TemplateBuilderStrategyTest.java create mode 100644 services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopTemplateBuilderStrategy.java diff --git a/CHANGES.txt b/CHANGES.txt index de58fde9..1d837b6d 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -14,6 +14,9 @@ Trunk (unreleased changes) WHIRR-93. Fail on checkstyle violation. (tomwhite) + WHIRR-97. Lucid is not stable on EC2. Default is now the Amazon Linux AMI + on EC2. (tomwhite) + Release 0.1.0 - 2010-09-02 INCOMPATIBLE CHANGES diff --git a/core/pom.xml b/core/pom.xml index 6883b321..34a613da 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -61,6 +61,10 @@ junit junit + + org.mockito + mockito-all + org.hamcrest hamcrest-all diff --git a/core/src/main/java/org/apache/whirr/service/ClusterSpec.java b/core/src/main/java/org/apache/whirr/service/ClusterSpec.java index 394a5048..62919341 100644 --- a/core/src/main/java/org/apache/whirr/service/ClusterSpec.java +++ b/core/src/main/java/org/apache/whirr/service/ClusterSpec.java @@ -54,6 +54,9 @@ public enum Property { CLUSTER_NAME(String.class, false), PUBLIC_KEY_FILE(String.class, false), PRIVATE_KEY_FILE(String.class, false), + IMAGE_ID(String.class, false), + HARDWARE_ID(String.class, false), + LOCATION_ID(String.class, false), CLIENT_CIDRS(String.class, true), RUN_URL_BASE(String.class, false); @@ -147,6 +150,9 @@ public static List parse(String... strings) { private String clusterName; private Payload privateKey; private Payload publicKey; + private String imageId; + private String hardwareId; + private String locationId; private List clientCidrs; private String runUrlBase; @@ -186,6 +192,9 @@ public ClusterSpec(Configuration config) } catch (IOException e) { throw new ConfigurationException("error reading key from file", e); } + setImageId(config.getString(Property.IMAGE_ID.getConfigName())); + setHardwareId(config.getString(Property.HARDWARE_ID.getConfigName())); + setLocationId(config.getString(Property.LOCATION_ID.getConfigName())); setClientCidrs(c.getList(Property.CLIENT_CIDRS.getConfigName())); setRunUrlBase(c.getString(Property.RUN_URL_BASE.getConfigName())); this.config = c; @@ -243,6 +252,15 @@ public String readPrivateKey() throws IOException { public String readPublicKey() throws IOException { return toStringAndClose(getPublicKey().getInput()); } + public String getImageId() { + return imageId; + } + public String getHardwareId() { + return hardwareId; + } + public String getLocationId() { + return locationId; + } public List getClientCidrs() { return clientCidrs; } @@ -321,6 +339,18 @@ public void setPrivateKey(File privateKey) throws IOException { checkNotNull(privateKey, "privateKey")); } + public void setImageId(String imageId) { + this.imageId = imageId; + } + + public void setHardwareId(String hardwareId) { + this.hardwareId = hardwareId; + } + + public void setLocationId(String locationId) { + this.locationId = locationId; + } + public void setClientCidrs(List clientCidrs) { this.clientCidrs = clientCidrs; } @@ -344,6 +374,9 @@ public boolean equals(Object o) { && Objects.equal(identity, that.identity) && Objects.equal(credential, that.credential) && Objects.equal(clusterName, that.clusterName) + && Objects.equal(imageId, that.imageId) + && Objects.equal(hardwareId, that.hardwareId) + && Objects.equal(locationId, that.locationId) && Objects.equal(clientCidrs, that.clientCidrs) && Objects.equal(runUrlBase, that.runUrlBase) ; @@ -354,7 +387,8 @@ public boolean equals(Object o) { public int hashCode() { return Objects.hashCode(instanceTemplates, serviceName, provider, identity, credential, clusterName, publicKey, - privateKey, clientCidrs, runUrlBase); + privateKey, imageId, hardwareId, locationId, clientCidrs, + runUrlBase); } public String toString() { @@ -367,6 +401,9 @@ public String toString() { .add("clusterName", clusterName) .add("publicKey", publicKey) .add("privateKey", privateKey) + .add("imageId", imageId) + .add("instanceSizeId", hardwareId) + .add("locationId", locationId) .add("clientCidrs", clientCidrs) .add("runUrlBase", runUrlBase) .toString(); diff --git a/core/src/main/java/org/apache/whirr/service/jclouds/TemplateBuilderStrategy.java b/core/src/main/java/org/apache/whirr/service/jclouds/TemplateBuilderStrategy.java new file mode 100644 index 00000000..02ed463f --- /dev/null +++ b/core/src/main/java/org/apache/whirr/service/jclouds/TemplateBuilderStrategy.java @@ -0,0 +1,26 @@ +package org.apache.whirr.service.jclouds; + +import org.apache.whirr.service.ClusterSpec; +import org.jclouds.compute.domain.TemplateBuilder; + +/** + * A class to configure a {@link TemplateBuilder}. + */ +public class TemplateBuilderStrategy { + + public void configureTemplateBuilder(ClusterSpec clusterSpec, + TemplateBuilder templateBuilder) { + + if (clusterSpec.getImageId() != null) { + templateBuilder.imageId(clusterSpec.getImageId()); + } + + if (clusterSpec.getHardwareId() != null) { + templateBuilder.hardwareId(clusterSpec.getHardwareId()); + } + + if (clusterSpec.getLocationId() != null) { + templateBuilder.locationId(clusterSpec.getLocationId()); + } + } +} diff --git a/core/src/test/java/org/apache/whirr/service/TemplateBuilderStrategyTest.java b/core/src/test/java/org/apache/whirr/service/TemplateBuilderStrategyTest.java new file mode 100644 index 00000000..e0ba3a03 --- /dev/null +++ b/core/src/test/java/org/apache/whirr/service/TemplateBuilderStrategyTest.java @@ -0,0 +1,46 @@ +package org.apache.whirr.service; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +import org.apache.commons.configuration.ConfigurationException; +import org.apache.whirr.service.jclouds.TemplateBuilderStrategy; +import org.jclouds.compute.domain.TemplateBuilder; +import org.junit.Before; +import org.junit.Test; + +public class TemplateBuilderStrategyTest { + + private TemplateBuilderStrategy strategy = new TemplateBuilderStrategy(); + private ClusterSpec spec; + + @Before + public void setUp() throws ConfigurationException { + spec = new ClusterSpec(); + } + + @Test + public void testImageIdIsPassedThrough() { + spec.setImageId("my-image-id"); + TemplateBuilder builder = mock(TemplateBuilder.class); + strategy.configureTemplateBuilder(spec, builder); + verify(builder).imageId("my-image-id"); + } + + @Test + public void testHardwareIdIsPassedThrough() { + spec.setHardwareId("my-hardware-id"); + TemplateBuilder builder = mock(TemplateBuilder.class); + strategy.configureTemplateBuilder(spec, builder); + verify(builder).hardwareId("my-hardware-id"); + } + + @Test + public void testLocationIdIsPassedThrough() { + spec.setLocationId("my-location-id"); + TemplateBuilder builder = mock(TemplateBuilder.class); + strategy.configureTemplateBuilder(spec, builder); + verify(builder).locationId("my-location-id"); + } + +} diff --git a/scripts/apache/hadoop/install b/scripts/apache/hadoop/install index 5b2ffa8b..5a2b9a24 100644 --- a/scripts/apache/hadoop/install +++ b/scripts/apache/hadoop/install @@ -371,7 +371,10 @@ function setup_web() { apt-get -y install thttpd WWW_BASE=/var/www elif which rpm &> /dev/null; then - yum install -y thttpd + # enable EPEL for thttpd package + rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm + sed -i -e 's/enabled=1/enabled=0/' /etc/yum.repos.d/epel.repo + yum install -y --enablerepo=epel thttpd chkconfig --add thttpd WWW_BASE=/var/www/thttpd/html fi diff --git a/scripts/cloudera/cdh/install b/scripts/cloudera/cdh/install index ae01eb72..4b4de6ab 100644 --- a/scripts/cloudera/cdh/install +++ b/scripts/cloudera/cdh/install @@ -399,18 +399,20 @@ function install_hue() { apt-get -y install hue-useradmin hue-jobsub hue-beeswax elif which rpm &> /dev/null; then yum install -y hue-common - yum install hue-useradmin hue-jobsub hue-beeswax + yum install -y hue-useradmin hue-jobsub hue-beeswax fi # Configure hue sed -i -e "s|http_port=8088|http_port=80|" /etc/hue/hue.ini # Hue logs should be on the /mnt partition - rm -rf /var/log/hue + mv /var/log/hue /var/log/hue.tmp mkdir -p $MOUNT/hue/logs chown hue:hue $MOUNT/hue/logs ln -s $MOUNT/hue/logs /var/log/hue chown -R hue:hue /var/log/hue + mv /var/log/hue.tmp/* /var/log/hue + rm -rf /var/log/hue.tmp } function install_hue_plugins() { @@ -431,17 +433,14 @@ function start_namenode() { # Format HDFS [ ! -e $FIRST_MOUNT/hadoop/hdfs ] && $AS_HADOOP "$HADOOP namenode -format" update-rc.d $HADOOP-namenode defaults - update-rc.d $HADOOP-secondarynamenode defaults elif which rpm &> /dev/null; then AS_HADOOP="/sbin/runuser -s /bin/bash - hadoop -c" # Format HDFS [ ! -e $FIRST_MOUNT/hadoop/hdfs ] && $AS_HADOOP "$HADOOP namenode -format" chkconfig --add $HADOOP-namenode - chkconfig --add $HADOOP-secondarynamenode fi service $HADOOP-namenode start - service $HADOOP-secondarynamenode start $AS_HADOOP "$HADOOP dfsadmin -safemode wait" $AS_HADOOP "/usr/bin/$HADOOP fs -mkdir /user" diff --git a/scripts/sun/java/install b/scripts/sun/java/install index 762c95b0..e7eed15b 100644 --- a/scripts/sun/java/install +++ b/scripts/sun/java/install @@ -17,23 +17,24 @@ # # Install Sun Java 6. # -# TODO: Update for RPM-based systems too. set -x set -e -# Enable multiverse -# TODO: check that it is not already enabled -sed -i -e 's/universe$/universe multiverse/' /etc/apt/sources.list - -cat > /etc/apt/sources.list.d/canonical.com.list < /etc/apt/sources.list.d/canonical.com.list <> /etc/profile + export JAVA_HOME=/usr/lib/jvm/java-6-sun + java -version + +} -apt-get -y install sun-java6-jdk +function install_java_rpm() { + MACHINE_TYPE=`uname -m` + if [ ${MACHINE_TYPE} == 'x86_64' ]; then + JDK_PACKAGE=jdk-6u21-linux-x64-rpm.bin + else + JDK_PACKAGE=jdk-6u21-linux-i586-rpm.bin + fi + JDK_INSTALL_PATH=/usr/java + mkdir -p $JDK_INSTALL_PATH + cd $JDK_INSTALL_PATH + wget http://whirr-third-party.s3.amazonaws.com/$JDK_PACKAGE + chmod +x $JDK_PACKAGE + mv /bin/more /bin/more.no + yes | ./$JDK_PACKAGE -noregister + mv /bin/more.no /bin/more + rm -f *.rpm $JDK_PACKAGE + + export JAVA_HOME=$(ls -d $JDK_INSTALL_PATH/jdk*) + echo "export JAVA_HOME=$JAVA_HOME" >> /etc/profile + alternatives --install /usr/bin/java java $JAVA_HOME/bin/java 17000 + alternatives --set java $JAVA_HOME/bin/java + java -version +} -echo "export JAVA_HOME=/usr/lib/jvm/java-6-sun" >> /etc/profile -export JAVA_HOME=/usr/lib/jvm/java-6-sun -java -version \ No newline at end of file +if which dpkg &> /dev/null; then + install_java_deb +elif which rpm &> /dev/null; then + install_java_rpm +fi diff --git a/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java b/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java index d94243af..c5d30ad6 100644 --- a/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java +++ b/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java @@ -20,11 +20,17 @@ import static com.google.common.base.Preconditions.checkNotNull; import static org.apache.whirr.service.RunUrlBuilder.runUrls; -import static org.jclouds.compute.domain.OsFamily.UBUNTU; import static org.jclouds.compute.options.TemplateOptions.Builder.runScript; import static org.jclouds.compute.predicates.NodePredicates.runningWithTag; import static org.jclouds.io.Payloads.newStringPayload; +import com.google.common.base.Function; +import com.google.common.base.Joiner; +import com.google.common.collect.Collections2; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; + import java.io.IOException; import java.net.InetAddress; import java.net.UnknownHostException; @@ -35,13 +41,13 @@ import java.util.Set; import org.apache.whirr.service.Cluster; +import org.apache.whirr.service.Cluster.Instance; import org.apache.whirr.service.ClusterSpec; +import org.apache.whirr.service.ClusterSpec.InstanceTemplate; import org.apache.whirr.service.ComputeServiceContextBuilder; import org.apache.whirr.service.Service; -import org.apache.whirr.service.Cluster.Instance; -import org.apache.whirr.service.ClusterSpec.InstanceTemplate; import org.apache.whirr.service.jclouds.FirewallSettings; -import org.jclouds.aws.ec2.domain.InstanceType; +import org.apache.whirr.service.jclouds.TemplateBuilderStrategy; import org.jclouds.compute.ComputeService; import org.jclouds.compute.ComputeServiceContext; import org.jclouds.compute.RunNodesException; @@ -52,13 +58,6 @@ import org.jclouds.io.Payload; import org.jclouds.ssh.ExecResponse; -import com.google.common.base.Function; -import com.google.common.base.Joiner; -import com.google.common.collect.Collections2; -import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; -import com.google.common.collect.Sets; - public class CassandraService extends Service { public static final String CASSANDRA_ROLE = "cassandra"; @@ -80,16 +79,13 @@ public Cluster launchCluster(ClusterSpec clusterSpec) throws IOException { "apache/cassandra/install")); TemplateBuilder templateBuilder = computeService.templateBuilder() - .osFamily(UBUNTU).options( + .options( runScript(bootScript).installPrivateKey( clusterSpec.getPrivateKey()).authorizePublicKey( clusterSpec.getPublicKey())); - // TODO extract this logic elsewhere - if (clusterSpec.getProvider().equals("ec2")) - templateBuilder.osVersionMatches("10.04") - .imageDescriptionMatches(".*ubuntu-images.*") - .hardwareId(InstanceType.M1_SMALL); + new TemplateBuilderStrategy().configureTemplateBuilder(clusterSpec, + templateBuilder); Template template = templateBuilder.build(); diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java index af9c9b98..f4e980ec 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java @@ -18,10 +18,9 @@ package org.apache.whirr.service.hadoop; -import static org.apache.whirr.service.RunUrlBuilder.runUrls; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; -import static org.jclouds.compute.domain.OsFamily.UBUNTU; +import static org.apache.whirr.service.RunUrlBuilder.runUrls; import static org.jclouds.compute.options.TemplateOptions.Builder.runScript; import static org.jclouds.io.Payloads.newStringPayload; @@ -41,13 +40,13 @@ import java.util.Properties; import java.util.Set; +import org.apache.whirr.service.Cluster.Instance; import org.apache.whirr.service.ClusterSpec; +import org.apache.whirr.service.ClusterSpec.InstanceTemplate; import org.apache.whirr.service.ComputeServiceContextBuilder; import org.apache.whirr.service.Service; -import org.apache.whirr.service.Cluster.Instance; -import org.apache.whirr.service.ClusterSpec.InstanceTemplate; import org.apache.whirr.service.jclouds.FirewallSettings; -import org.jclouds.aws.ec2.domain.InstanceType; +import org.apache.whirr.service.jclouds.TemplateBuilderStrategy; import org.jclouds.compute.ComputeService; import org.jclouds.compute.ComputeServiceContext; import org.jclouds.compute.RunNodesException; @@ -88,16 +87,12 @@ public HadoopCluster launchCluster(ClusterSpec clusterSpec) throws IOException { clusterSpec.getProvider()))); TemplateBuilder masterTemplateBuilder = computeService.templateBuilder() - .osFamily(UBUNTU) .options(runScript(nnjtBootScript) .installPrivateKey(clusterSpec.getPrivateKey()) .authorizePublicKey(clusterSpec.getPublicKey())); - // TODO extract this logic elsewhere - if (clusterSpec.getProvider().equals("ec2")) - masterTemplateBuilder.osVersionMatches("10.04") - .imageDescriptionMatches(".*ubuntu-images.*") - .hardwareId(InstanceType.M1_SMALL); + TemplateBuilderStrategy strategy = new HadoopTemplateBuilderStrategy(); + strategy.configureTemplateBuilder(clusterSpec, masterTemplateBuilder); Template masterTemplate = masterTemplateBuilder.build(); @@ -142,16 +137,11 @@ public HadoopCluster launchCluster(ClusterSpec clusterSpec) throws IOException { jobtrackerPublicAddress.getHostName()))); TemplateBuilder slaveTemplateBuilder = computeService.templateBuilder() - .osFamily(UBUNTU) .options(runScript(slaveBootScript) .installPrivateKey(clusterSpec.getPrivateKey()) .authorizePublicKey(clusterSpec.getPublicKey())); - // TODO extract this logic elsewhere - if (clusterSpec.getProvider().equals("ec2")) - slaveTemplateBuilder.osVersionMatches("10.04") - .imageDescriptionMatches(".*ubuntu-images.*") - .hardwareId(InstanceType.M1_SMALL); + strategy.configureTemplateBuilder(clusterSpec, slaveTemplateBuilder); Template slaveTemplate = slaveTemplateBuilder.build(); diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopTemplateBuilderStrategy.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopTemplateBuilderStrategy.java new file mode 100644 index 00000000..fdf3becb --- /dev/null +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopTemplateBuilderStrategy.java @@ -0,0 +1,20 @@ +package org.apache.whirr.service.hadoop; + +import org.apache.whirr.service.ClusterSpec; +import org.apache.whirr.service.jclouds.TemplateBuilderStrategy; +import org.jclouds.aws.ec2.compute.domain.EC2Hardware; +import org.jclouds.compute.domain.TemplateBuilder; + +public class HadoopTemplateBuilderStrategy extends TemplateBuilderStrategy { + + public void configureTemplateBuilder(ClusterSpec clusterSpec, + TemplateBuilder templateBuilder) { + super.configureTemplateBuilder(clusterSpec, templateBuilder); + + if ("ec2".equals(clusterSpec.getProvider()) + && clusterSpec.getHardwareId() == null) { + // micro is too small for Hadoop (even for testing) + templateBuilder.fromHardware(EC2Hardware.M1_SMALL); + } + } +} diff --git a/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java b/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java index 66b9eac6..667ef5e3 100644 --- a/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java +++ b/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java @@ -20,11 +20,18 @@ import static com.google.common.base.Preconditions.checkNotNull; import static org.apache.whirr.service.RunUrlBuilder.runUrls; -import static org.jclouds.compute.domain.OsFamily.UBUNTU; import static org.jclouds.compute.options.TemplateOptions.Builder.runScript; import static org.jclouds.compute.predicates.NodePredicates.runningWithTag; import static org.jclouds.io.Payloads.newStringPayload; +import com.google.common.base.Function; +import com.google.common.base.Joiner; +import com.google.common.base.Throwables; +import com.google.common.collect.Collections2; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; + import java.io.IOException; import java.net.InetAddress; import java.net.UnknownHostException; @@ -32,13 +39,13 @@ import java.util.List; import java.util.Set; +import org.apache.whirr.service.Cluster.Instance; import org.apache.whirr.service.ClusterSpec; +import org.apache.whirr.service.ClusterSpec.InstanceTemplate; import org.apache.whirr.service.ComputeServiceContextBuilder; import org.apache.whirr.service.Service; -import org.apache.whirr.service.Cluster.Instance; -import org.apache.whirr.service.ClusterSpec.InstanceTemplate; import org.apache.whirr.service.jclouds.FirewallSettings; -import org.jclouds.aws.ec2.domain.InstanceType; +import org.apache.whirr.service.jclouds.TemplateBuilderStrategy; import org.jclouds.compute.ComputeService; import org.jclouds.compute.ComputeServiceContext; import org.jclouds.compute.RunNodesException; @@ -48,14 +55,6 @@ import org.jclouds.compute.domain.TemplateBuilder; import org.jclouds.io.Payload; -import com.google.common.base.Function; -import com.google.common.base.Joiner; -import com.google.common.base.Throwables; -import com.google.common.collect.Collections2; -import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; -import com.google.common.collect.Sets; - public class ZooKeeperService extends Service { public static final String ZOOKEEPER_ROLE = "zk"; @@ -77,16 +76,12 @@ public ZooKeeperCluster launchCluster(ClusterSpec clusterSpec) throws IOExceptio "apache/zookeeper/install")); TemplateBuilder templateBuilder = computeService.templateBuilder() - .osFamily(UBUNTU) .options(runScript(bootScript) .installPrivateKey(clusterSpec.getPrivateKey()) .authorizePublicKey(clusterSpec.getPublicKey())); - // TODO extract this logic elsewhere - if (clusterSpec.getProvider().equals("ec2")) - templateBuilder.osVersionMatches("10.04") - .imageDescriptionMatches(".*ubuntu-images.*") - .hardwareId(InstanceType.M1_SMALL); + new TemplateBuilderStrategy().configureTemplateBuilder(clusterSpec, + templateBuilder); Template template = templateBuilder.build(); diff --git a/src/site/confluence/configuration-guide.confluence b/src/site/confluence/configuration-guide.confluence index 2b227f04..77cf7742 100644 --- a/src/site/confluence/configuration-guide.confluence +++ b/src/site/confluence/configuration-guide.confluence @@ -11,6 +11,9 @@ Whirr is configured using a properties file, and optionally using command line a | {{identity}} | {{\--identity}} | none | The cloud identity. See the table below for how this maps to the credentials for your provider. | | {{credential}} | {{\--credential}} | none | The cloud credential. See the table below for how this maps to the credentials for your provider. | | {{secret-key-file}} | {{\--secret-key-file}} | _\~/.ssh/id\_rsa_ | The filename of the private key used to connect to instances. | +| {{image-id}} | {{\--image-id}} | none | The ID of the image to use for instances. If not specified then a vanilla Ubuntu image is chosen. | +| {{hardware-id}} | {{\--hardware-id}} | none | The type of hardware to use for the instance. This must be compatible with the image ID. | +| {{location-id}} | {{\--location-id}} | none | The location to launch instances in. If not specified then an arbitrary location will be chosen. | | {{client-cidrs}} | {{\--client-cidrs}} | none | A comma-separated list of [CIDR |http://en.wikipedia.org/wiki/Classless\_Inter-Domain\_Routing] blocks. E.g. {{208.128.0.0/11,108.128.0.0/11}} | | {{run-url-base}} | {{\--run-url-base}} | {{http://whirr.s3.amazonaws.com/VERSION/}} | The base URL for forming run urls from. Change this to host your own set of launch scripts. | @@ -38,9 +41,9 @@ h2. Comparison | {{client-cidr}} | {{client-cidrs}} | Python {{client-cidr}} option may be repeated multiple times, whereas Java {{client-cidrs}} contains comma-separated CIDRs. | | none | {{run-url-base}} | Specified using {{user-data-file}} in Python. | | {{public-key}} | none | Based on secret key in Java (add {{.pub}}). | -| {{image-id}} | none | Need to add to Java. Along with more flexible image matching (pattern, OS, arch). See jclouds TemplateBuilder. | -| {{instance-type}} | none | Ditto. | -| {{availability-zone}} | none | Ditto. | +| {{image-id}} | {{image-id}} | | +| {{instance-type}} | {{hardware-id}} | | +| {{availability-zone}} | {{location-id}} | Location is more general than availability zone. | | {{security-group}} | none | Amazon-specific. However, Amazon users may wish to start a cluster in additional security groups. | | {{env}} | none | May not be needed in Java with runurls. | | {{user-data-file}} | none | Amazon-specific. Use runurls. | From d8131b64d4893657b74b18531a0f996997d05548 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Tue, 28 Sep 2010 03:33:32 +0000 Subject: [PATCH 011/216] WHIRR-103. Add more to .gitignore. Contributed by phunt. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1002001 13f79535-47bb-0310-9956-ffa450edef68 --- .gitignore | 4 ++++ CHANGES.txt | 2 ++ 2 files changed, 6 insertions(+) diff --git a/.gitignore b/.gitignore index 90ec22be..a21c345a 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,5 @@ .svn +.classpath +.project +.settings +target diff --git a/CHANGES.txt b/CHANGES.txt index 1d837b6d..bad45a04 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -10,6 +10,8 @@ Trunk (unreleased changes) WHIRR-66. Upgrade to jclouds 1.0-beta-7. (Adrian Cole via tomwhite) + WHIRR-103. Add more to .gitignore. (phunt via tomwhite) + BUG FIXES WHIRR-93. Fail on checkstyle violation. (tomwhite) From cbabae4046d8b7c93e9eb52331d82037bd3f8d5b Mon Sep 17 00:00:00 2001 From: Thomas White Date: Tue, 28 Sep 2010 16:30:36 +0000 Subject: [PATCH 012/216] WHIRR-100. Create a binary distribution of Whirr. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1002244 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 4 + NOTICE.txt | 8 + bin/whirr | 21 ++ build-tools/src/assemble-bin.xml | 60 ++++ .../src/{assemble.xml => assemble-src.xml} | 0 lib/bcprov-jdk15-1.44-LICENSE.html | 22 ++ lib/guava-r06-LICENSE.txt | 203 ++++++++++++++ lib/guice-2.1-r1201-LICENSE.txt | 203 ++++++++++++++ lib/inject-1.0-LICENSE.txt | 203 ++++++++++++++ lib/java-xmlbuilder-0.3-LICENSE.txt | 203 ++++++++++++++ lib/jclouds-1.0-beta-7-LICENSE.txt | 203 ++++++++++++++ lib/jersey-core-1.4-ea06-LICENSE.txt | 263 ++++++++++++++++++ lib/jsch-0.1.42-LICENSE.txt | 30 ++ lib/jsr250-api-1.0-LICENSE.txt | 93 +++++++ lib/jsr305-1.3.9-LICENSE.txt | 28 ++ lib/oauth-20100527-LICENSE.txt | 203 ++++++++++++++ lib/slf4j-1.6.0-LICENSE.txt | 24 ++ pom.xml | 20 +- 18 files changed, 1789 insertions(+), 2 deletions(-) create mode 100755 bin/whirr create mode 100644 build-tools/src/assemble-bin.xml rename build-tools/src/{assemble.xml => assemble-src.xml} (100%) create mode 100644 lib/bcprov-jdk15-1.44-LICENSE.html create mode 100644 lib/guava-r06-LICENSE.txt create mode 100644 lib/guice-2.1-r1201-LICENSE.txt create mode 100644 lib/inject-1.0-LICENSE.txt create mode 100644 lib/java-xmlbuilder-0.3-LICENSE.txt create mode 100644 lib/jclouds-1.0-beta-7-LICENSE.txt create mode 100644 lib/jersey-core-1.4-ea06-LICENSE.txt create mode 100644 lib/jsch-0.1.42-LICENSE.txt create mode 100644 lib/jsr250-api-1.0-LICENSE.txt create mode 100644 lib/jsr305-1.3.9-LICENSE.txt create mode 100644 lib/oauth-20100527-LICENSE.txt create mode 100644 lib/slf4j-1.6.0-LICENSE.txt diff --git a/CHANGES.txt b/CHANGES.txt index bad45a04..6ef4bce1 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -2,6 +2,10 @@ Apache Whirr Change Log Trunk (unreleased changes) + NEW FEATURES + + WHIRR-100. Create a binary distribution of Whirr. (tomwhite) + IMPROVEMENTS WHIRR-89. Support maven 3 builds. (Adrian Cole via tomwhite) diff --git a/NOTICE.txt b/NOTICE.txt index ec97fb30..717e0c0b 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -4,3 +4,11 @@ Copyright 2010 The Apache Software Foundation This product includes software developed at The Apache Software Foundation (http://www.apache.org/). +------------------------------------------------------------------------------- +This product includes Common Annotations (JSR 250, https://jsr250.dev.java.net/) +distributed under the CDDL Version 1.0 license. + +------------------------------------------------------------------------------- +This product includes Jersey (https://jersey.dev.java.net/) +distributed under the CDDL Version 1.0 license. + diff --git a/bin/whirr b/bin/whirr new file mode 100755 index 00000000..c7f8dcb3 --- /dev/null +++ b/bin/whirr @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +# 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. + +bin=`dirname "$0"` +bin=`cd "$bin"; pwd` + +java -jar $bin/../whirr-cli-*.jar "$@" diff --git a/build-tools/src/assemble-bin.xml b/build-tools/src/assemble-bin.xml new file mode 100644 index 00000000..a38a7fda --- /dev/null +++ b/build-tools/src/assemble-bin.xml @@ -0,0 +1,60 @@ + + + bin + + tar.gz + + + + + org.apache.whirr:whirr-cli + + + true + lib + false + + + + + + + + org.apache.whirr:whirr-cli + + + . + false + + + + + + ${project.basedir} + true + + **/.project + **/.gitignore + **/${project.build.directory}/** + **/dependency-reduced-pom.xml + + + + diff --git a/build-tools/src/assemble.xml b/build-tools/src/assemble-src.xml similarity index 100% rename from build-tools/src/assemble.xml rename to build-tools/src/assemble-src.xml diff --git a/lib/bcprov-jdk15-1.44-LICENSE.html b/lib/bcprov-jdk15-1.44-LICENSE.html new file mode 100644 index 00000000..9c07f838 --- /dev/null +++ b/lib/bcprov-jdk15-1.44-LICENSE.html @@ -0,0 +1,22 @@ + + + +Copyright (c) 2000-2009 The Legion Of The Bouncy Castle (http://www.bouncycastle.org) +

+Permission is hereby granted, free of charge, to any person obtaining a copy of this software +and associated documentation files (the "Software"), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, +and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: +

+The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. +

+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. + + diff --git a/lib/guava-r06-LICENSE.txt b/lib/guava-r06-LICENSE.txt new file mode 100644 index 00000000..6b0b1270 --- /dev/null +++ b/lib/guava-r06-LICENSE.txt @@ -0,0 +1,203 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed 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. + diff --git a/lib/guice-2.1-r1201-LICENSE.txt b/lib/guice-2.1-r1201-LICENSE.txt new file mode 100644 index 00000000..6b0b1270 --- /dev/null +++ b/lib/guice-2.1-r1201-LICENSE.txt @@ -0,0 +1,203 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed 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. + diff --git a/lib/inject-1.0-LICENSE.txt b/lib/inject-1.0-LICENSE.txt new file mode 100644 index 00000000..6b0b1270 --- /dev/null +++ b/lib/inject-1.0-LICENSE.txt @@ -0,0 +1,203 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed 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. + diff --git a/lib/java-xmlbuilder-0.3-LICENSE.txt b/lib/java-xmlbuilder-0.3-LICENSE.txt new file mode 100644 index 00000000..6b0b1270 --- /dev/null +++ b/lib/java-xmlbuilder-0.3-LICENSE.txt @@ -0,0 +1,203 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed 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. + diff --git a/lib/jclouds-1.0-beta-7-LICENSE.txt b/lib/jclouds-1.0-beta-7-LICENSE.txt new file mode 100644 index 00000000..6b0b1270 --- /dev/null +++ b/lib/jclouds-1.0-beta-7-LICENSE.txt @@ -0,0 +1,203 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed 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. + diff --git a/lib/jersey-core-1.4-ea06-LICENSE.txt b/lib/jersey-core-1.4-ea06-LICENSE.txt new file mode 100644 index 00000000..4aea5374 --- /dev/null +++ b/lib/jersey-core-1.4-ea06-LICENSE.txt @@ -0,0 +1,263 @@ +COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0 + +1. Definitions. + + 1.1. Contributor. means each individual or entity that creates or contributes to the creation of Modifications. + + 1.2. Contributor Version. means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor. + + 1.3. Covered Software. means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof. + + 1.4. Executable. means the Covered Software in any form other than Source Code. + + 1.5. Initial Developer. means the individual or entity that first makes Original Software available under this License. + + 1.6. Larger Work. means a work which combines Covered Software or portions thereof with code not governed by the terms of this License. + + 1.7. License. means this document. + + 1.8. Licensable. means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein. + + 1.9. Modifications. means the Source Code and Executable form of any of the following: + + A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications; + + B. Any new file that contains any part of the Original Software or previous Modification; or + + C. Any new file that is contributed or otherwise made available under the terms of this License. + + 1.10. Original Software. means the Source Code and Executable form of computer software code that is originally released under this License. + + 1.11. Patent Claims. means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor. + + 1.12. Source Code. means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code. + + 1.13. You. (or .Your.) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, .You. includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, .control. means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. + +2. License Grants. + + 2.1. The Initial Developer Grant. + + Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license: + + (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof). + + (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices. + + 2.2. Contributor Grant. + + Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license: + + (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination). + + (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party. + + (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor. + +3. Distribution Obligations. + + 3.1. Availability of Source Code. + Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange. + + 3.2. Modifications. + The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License. + + 3.3. Required Notices. + You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer. + + 3.4. Application of Additional Terms. + You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients. rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer. + + 3.5. Distribution of Executable Versions. + You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient.s rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer. + + 3.6. Larger Works. + You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software. + +4. Versions of the License. + + 4.1. New Versions. + Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License. + + 4.2. Effect of New Versions. + You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward. + + 4.3. Modified Versions. + When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License. + +5. DISCLAIMER OF WARRANTY. + + COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN .AS IS. BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +6. TERMINATION. + + 6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. + + 6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as .Participant.) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant. + + 6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination. + +7. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY.S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +8. U.S. GOVERNMENT END USERS. + + The Covered Software is a .commercial item,. as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of .commercial computer software. (as that term is defined at 48 C.F.R. º 252.227-7014(a)(1)) and .commercial computer software documentation. as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License. + +9. MISCELLANEOUS. + + This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction.s conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys. fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software. + +10. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability. + + NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) + + The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California. + + +The GNU General Public License (GPL) Version 2, June 1991 + + +Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + +Preamble + +The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. + +To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. + +For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. + +We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. + +Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. + +Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. + +The precise terms and conditions for copying, distribution and modification follow. + + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. + +1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. + +You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. + + c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. + +3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. + +If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. + +4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. + +5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. + +6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. + +7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. + +This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. + +8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. + +9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. + +10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. + +NO WARRANTY + +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + + +How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. + + One line to give the program's name and a brief idea of what it does. + + Copyright (C) + + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. + + signature of Ty Coon, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. + + +"CLASSPATH" EXCEPTION TO THE GPL VERSION 2 + +Certain source files distributed by Sun Microsystems, Inc. are subject to the following clarification and special exception to the GPL Version 2, but only where Sun has expressly included in the particular source file's header the words + +"Sun designates this particular file as subject to the "Classpath" exception as provided by Sun in the License file that accompanied this code." + +Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License Version 2 cover the whole combination. + +As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module.? An independent module is a module which is not derived from or based on this library.? If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so.? If you do not wish to do so, delete this exception statement from your version. diff --git a/lib/jsch-0.1.42-LICENSE.txt b/lib/jsch-0.1.42-LICENSE.txt new file mode 100644 index 00000000..fedc2081 --- /dev/null +++ b/lib/jsch-0.1.42-LICENSE.txt @@ -0,0 +1,30 @@ +JSch 0.0.* was released under the GNU LGPL license. Later, we have switched +over to a BSD-style license. + +------------------------------------------------------------------------------ +Copyright (c) 2002,2003,2004,2005,2006,2007,2008,2009 Atsuhiko Yamanaka, JCraft,Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/lib/jsr250-api-1.0-LICENSE.txt b/lib/jsr250-api-1.0-LICENSE.txt new file mode 100644 index 00000000..e910a937 --- /dev/null +++ b/lib/jsr250-api-1.0-LICENSE.txt @@ -0,0 +1,93 @@ +COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0 1. + +Definitions. + +1.1. Contributor means each individual or entity that creates or contributes to the creation of Modifications. + +1.2. Contributor Version means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor. + +1.3. Covered Software means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof. + +1.4. Executable means the Covered Software in any form other than Source Code. + +1.5. Initial Developer means the individual or entity that first makes Original Software available under this License. + +1.6. Larger Work means a work which combines Covered Software or portions thereof with code not governed by the terms of this License. + +1.7. License means this document. + +1.8. Licensable means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein. + +1.9. Modifications means the Source Code and Executable form of any of the following: A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications; B. Any new file that contains any part of the Original Software or previous Modification; or C. Any new file that is contributed or otherwise made available under the terms of this License. + +1.10. Original Software means the Source Code and Executable form of computer software code that is originally released under this License. + +1.11. Patent Claims means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor. + +1.12. Source Code means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code. + +1.13. You (or Your) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, You includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, control means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. + +2. License Grants. + + 2.1. The Initial Developer Grant. Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and + +(b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof); + + (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License; + + (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices. + +2.2. Contributor Grant. Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license: + +(a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and + +(b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination). + +(c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party. + +(d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor. + +3. Distribution Obligations. + +3.1. Availability of Source Code. Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange. + +3.2. Modifications. The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License. + +3.3. Required Notices. You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer. + +3.4. Application of Additional Terms. You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer. + +3.5. Distribution of Executable Versions. You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipients rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer. + +3.6. Larger Works. You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software. + +4. Versions of the License. + +4.1. New Versions. Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License. + +4.2. Effect of New Versions. You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward. + +4.3. Modified Versions. When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License. + +5. DISCLAIMER OF WARRANTY. COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN AS IS BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +6. TERMINATION. + +6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. + +6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as Participant) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant. + +6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination. + +7. LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTYS NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +8. U.S. GOVERNMENT END USERS. The Covered Software is a commercial item, as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of commercial computer software (as that term is defined at 48 C.F.R.  252.227-7014(a)(1)) and commercial computer software documentation as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License. + +9. MISCELLANEOUS. This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdictions conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software. + +10. RESPONSIBILITY FOR CLAIMS. As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability. + +NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California. diff --git a/lib/jsr305-1.3.9-LICENSE.txt b/lib/jsr305-1.3.9-LICENSE.txt new file mode 100644 index 00000000..67366813 --- /dev/null +++ b/lib/jsr305-1.3.9-LICENSE.txt @@ -0,0 +1,28 @@ +Copyright (c) 2007-2009, JSR305 expert group +All rights reserved. + +http://www.opensource.org/licenses/bsd-license.php + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the JSR305 expert group nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. diff --git a/lib/oauth-20100527-LICENSE.txt b/lib/oauth-20100527-LICENSE.txt new file mode 100644 index 00000000..6b0b1270 --- /dev/null +++ b/lib/oauth-20100527-LICENSE.txt @@ -0,0 +1,203 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed 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. + diff --git a/lib/slf4j-1.6.0-LICENSE.txt b/lib/slf4j-1.6.0-LICENSE.txt new file mode 100644 index 00000000..48b18e39 --- /dev/null +++ b/lib/slf4j-1.6.0-LICENSE.txt @@ -0,0 +1,24 @@ +Copyright (c) 2004-2008 QOS.ch +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + + diff --git a/pom.xml b/pom.xml index d42e92ff..e7927688 100644 --- a/pom.xml +++ b/pom.xml @@ -89,16 +89,19 @@ junit junit 4.8.1 + test org.hamcrest hamcrest-all 1.1 + test org.mockito mockito-all - 1.8.5 + 1.8.5 + test commons-configuration @@ -149,6 +152,18 @@ + + org.apache.maven.plugins + maven-assembly-plugin + 2.2-beta-5 + + false + gnu + + build-tools/src/assemble-bin.xml + + + org.apache.maven.plugins maven-checkstyle-plugin @@ -572,7 +587,7 @@ 2.2-beta-5 - build-tools/src/assemble.xml + build-tools/src/assemble-src.xml @@ -583,6 +598,7 @@ single + true true gnu From d29a8b0fd0a60dd8519ca3610dbdde5d323434bc Mon Sep 17 00:00:00 2001 From: Thomas White Date: Wed, 29 Sep 2010 23:17:01 +0000 Subject: [PATCH 013/216] WHIRR-105. Add version command to the CLI. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1002888 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 + cli/pom.xml | 6 +++ .../main/java/org/apache/whirr/cli/Main.java | 2 + .../whirr/cli/command/VersionCommand.java | 46 +++++++++++++++++ cli/src/main/resources/version-banner.txt | 1 + .../whirr/cli/command/VersionCommandTest.java | 51 +++++++++++++++++++ 6 files changed, 108 insertions(+) create mode 100644 cli/src/main/java/org/apache/whirr/cli/command/VersionCommand.java create mode 100644 cli/src/main/resources/version-banner.txt create mode 100644 cli/src/test/java/org/apache/whirr/cli/command/VersionCommandTest.java diff --git a/CHANGES.txt b/CHANGES.txt index 6ef4bce1..e0f846ea 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -16,6 +16,8 @@ Trunk (unreleased changes) WHIRR-103. Add more to .gitignore. (phunt via tomwhite) + WHIRR-105. Add version command to the CLI. (tomwhite) + BUG FIXES WHIRR-93. Fail on checkstyle violation. (tomwhite) diff --git a/cli/pom.xml b/cli/pom.xml index c174bdec..2119cbe2 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -96,6 +96,12 @@ + + + ${project.basedir}/src/main/resources + true + + org.apache.maven.plugins diff --git a/cli/src/main/java/org/apache/whirr/cli/Main.java b/cli/src/main/java/org/apache/whirr/cli/Main.java index 35d65712..312a7eeb 100644 --- a/cli/src/main/java/org/apache/whirr/cli/Main.java +++ b/cli/src/main/java/org/apache/whirr/cli/Main.java @@ -29,6 +29,7 @@ import org.apache.whirr.cli.command.DestroyClusterCommand; import org.apache.whirr.cli.command.LaunchClusterCommand; +import org.apache.whirr.cli.command.VersionCommand; /** * The entry point for the Whirr CLI. @@ -63,6 +64,7 @@ int run(InputStream in, PrintStream out, PrintStream err, public static void main(String... args) throws Exception { Main main = new Main( + new VersionCommand(), new LaunchClusterCommand(), new DestroyClusterCommand() ); diff --git a/cli/src/main/java/org/apache/whirr/cli/command/VersionCommand.java b/cli/src/main/java/org/apache/whirr/cli/command/VersionCommand.java new file mode 100644 index 00000000..60bf3a1e --- /dev/null +++ b/cli/src/main/java/org/apache/whirr/cli/command/VersionCommand.java @@ -0,0 +1,46 @@ +/** + * 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 org.apache.whirr.cli.command; + +import java.io.InputStream; +import java.io.PrintStream; +import java.util.List; + +import org.apache.commons.io.IOUtils; +import org.apache.whirr.cli.Command; + +public class VersionCommand extends Command { + + public VersionCommand() { + super("version", "Print the version number and exit."); + } + + @Override + public int run(InputStream in, PrintStream out, PrintStream err, + List args) throws Exception { + InputStream input = getClass().getResourceAsStream("/version-banner.txt"); + if (input == null) { + err.printf("Cannot determine version number\n"); + return -1; + } + out.write(IOUtils.toByteArray(input)); + return 0; + } + +} diff --git a/cli/src/main/resources/version-banner.txt b/cli/src/main/resources/version-banner.txt new file mode 100644 index 00000000..debe753f --- /dev/null +++ b/cli/src/main/resources/version-banner.txt @@ -0,0 +1 @@ +Apache Whirr ${version} diff --git a/cli/src/test/java/org/apache/whirr/cli/command/VersionCommandTest.java b/cli/src/test/java/org/apache/whirr/cli/command/VersionCommandTest.java new file mode 100644 index 00000000..8bd096c5 --- /dev/null +++ b/cli/src/test/java/org/apache/whirr/cli/command/VersionCommandTest.java @@ -0,0 +1,51 @@ +/** + * 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 org.apache.whirr.cli.command; + +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.startsWith; +import static org.junit.Assert.assertThat; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.util.Collections; + +import org.junit.Before; +import org.junit.Test; + +public class VersionCommandTest { + + private ByteArrayOutputStream outBytes; + private PrintStream out; + + @Before + public void setUp() { + outBytes = new ByteArrayOutputStream(); + out = new PrintStream(outBytes); + } + + @Test + public void testOverrides() throws Exception { + VersionCommand command = new VersionCommand(); + int rc = command.run(null, out, null, Collections.emptyList()); + assertThat(rc, is(0)); + assertThat(outBytes.toString(), startsWith("Apache Whirr ")); + } + +} From 37f002cf5417ca87301389e1d1749bb1ca157247 Mon Sep 17 00:00:00 2001 From: "Patrick D. Hunt" Date: Thu, 30 Sep 2010 20:19:17 +0000 Subject: [PATCH 014/216] WHIRR-102. unknown service NPEs cli, should print the bad service to console git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1003237 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 3 ++ ...d.java => AbstractClusterSpecCommand.java} | 32 ++++++++++++++----- .../cli/command/DestroyClusterCommand.java | 4 +-- .../cli/command/LaunchClusterCommand.java | 4 +-- ...va => AbstractClusterSpecCommandTest.java} | 29 ++++++++++++++--- 5 files changed, 56 insertions(+), 16 deletions(-) rename cli/src/main/java/org/apache/whirr/cli/command/{ClusterSpecCommand.java => AbstractClusterSpecCommand.java} (85%) rename cli/src/test/java/org/apache/whirr/cli/command/{ClusterSpecCommandTest.java => AbstractClusterSpecCommandTest.java} (65%) diff --git a/CHANGES.txt b/CHANGES.txt index e0f846ea..e0fce771 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -25,6 +25,9 @@ Trunk (unreleased changes) WHIRR-97. Lucid is not stable on EC2. Default is now the Amazon Linux AMI on EC2. (tomwhite) + WHIRR-102. unknown service NPEs cli, should print the bad service + to console (phunt) + Release 0.1.0 - 2010-09-02 INCOMPATIBLE CHANGES diff --git a/cli/src/main/java/org/apache/whirr/cli/command/ClusterSpecCommand.java b/cli/src/main/java/org/apache/whirr/cli/command/AbstractClusterSpecCommand.java similarity index 85% rename from cli/src/main/java/org/apache/whirr/cli/command/ClusterSpecCommand.java rename to cli/src/main/java/org/apache/whirr/cli/command/AbstractClusterSpecCommand.java index 1a54a431..c32c7c91 100644 --- a/cli/src/main/java/org/apache/whirr/cli/command/ClusterSpecCommand.java +++ b/cli/src/main/java/org/apache/whirr/cli/command/AbstractClusterSpecCommand.java @@ -22,8 +22,6 @@ import static org.apache.whirr.service.ClusterSpec.Property.IDENTITY; import static org.apache.whirr.service.ClusterSpec.Property.SERVICE_NAME; -import com.google.common.collect.Maps; - import java.util.EnumSet; import java.util.Map; @@ -38,25 +36,28 @@ import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.whirr.cli.Command; import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.service.ServiceFactory; import org.apache.whirr.service.ClusterSpec.Property; +import org.apache.whirr.service.Service; +import org.apache.whirr.service.ServiceFactory; + +import com.google.common.collect.Maps; /** * An abstract command for interacting with clusters. */ -public abstract class ClusterSpecCommand extends Command { +public abstract class AbstractClusterSpecCommand extends Command { protected ServiceFactory factory; - + protected OptionParser parser = new OptionParser(); private Map optionSpecs; private OptionSpec configOption = parser.accepts("config") .withRequiredArg().ofType(String.class); - public ClusterSpecCommand(String name, String description, ServiceFactory factory) { + public AbstractClusterSpecCommand(String name, String description, ServiceFactory factory) { super(name, description); this.factory = factory; - + optionSpecs = Maps.newHashMap(); for (Property property : EnumSet.allOf(Property.class)) { ArgumentAcceptingOptionSpec spec = parser.accepts(property.getSimpleName()) @@ -68,7 +69,7 @@ public ClusterSpecCommand(String name, String description, ServiceFactory factor optionSpecs.put(property, spec); } } - + protected ClusterSpec getClusterSpec(OptionSet optionSet) throws ConfigurationException { Configuration optionsConfig = new PropertiesConfiguration(); for (Map.Entry entry : optionSpecs.entrySet()) { @@ -98,4 +99,19 @@ protected ClusterSpec getClusterSpec(OptionSet optionSet) throws ConfigurationEx return new ClusterSpec(config); } + /** + * Create the specified service + * @param serviceName + * @return + * @throws IllegalArgumentException if serviceName is not found + */ + protected Service createService(String serviceName) { + Service service = factory.create(serviceName); + if (service == null) { + throw new IllegalArgumentException("Unable to find service " + + serviceName + ", exiting"); + } + return service; + } + } diff --git a/cli/src/main/java/org/apache/whirr/cli/command/DestroyClusterCommand.java b/cli/src/main/java/org/apache/whirr/cli/command/DestroyClusterCommand.java index a866f76f..62239d1b 100644 --- a/cli/src/main/java/org/apache/whirr/cli/command/DestroyClusterCommand.java +++ b/cli/src/main/java/org/apache/whirr/cli/command/DestroyClusterCommand.java @@ -33,7 +33,7 @@ /** * A command to destroy a running cluster (terminate and cleanup). */ -public class DestroyClusterCommand extends ClusterSpecCommand { +public class DestroyClusterCommand extends AbstractClusterSpecCommand { public DestroyClusterCommand() throws IOException { this(new ServiceFactory()); @@ -56,7 +56,7 @@ public int run(InputStream in, PrintStream out, PrintStream err, try { ClusterSpec clusterSpec = getClusterSpec(optionSet); - Service service = factory.create(clusterSpec.getServiceName()); + Service service = createService(clusterSpec.getServiceName()); service.destroyCluster(clusterSpec); return 0; } catch (IllegalArgumentException e) { diff --git a/cli/src/main/java/org/apache/whirr/cli/command/LaunchClusterCommand.java b/cli/src/main/java/org/apache/whirr/cli/command/LaunchClusterCommand.java index 6331162b..1656b98b 100644 --- a/cli/src/main/java/org/apache/whirr/cli/command/LaunchClusterCommand.java +++ b/cli/src/main/java/org/apache/whirr/cli/command/LaunchClusterCommand.java @@ -34,7 +34,7 @@ /** * A command to launch a new cluster. */ -public class LaunchClusterCommand extends ClusterSpecCommand { +public class LaunchClusterCommand extends AbstractClusterSpecCommand { public LaunchClusterCommand() throws IOException { this(new ServiceFactory()); @@ -57,7 +57,7 @@ public int run(InputStream in, PrintStream out, PrintStream err, try { ClusterSpec clusterSpec = getClusterSpec(optionSet); - Service service = factory.create(clusterSpec.getServiceName()); + Service service = createService(clusterSpec.getServiceName()); Cluster cluster = service.launchCluster(clusterSpec); out.printf("Started cluster of %s instances\n", cluster.getInstances().size()); diff --git a/cli/src/test/java/org/apache/whirr/cli/command/ClusterSpecCommandTest.java b/cli/src/test/java/org/apache/whirr/cli/command/AbstractClusterSpecCommandTest.java similarity index 65% rename from cli/src/test/java/org/apache/whirr/cli/command/ClusterSpecCommandTest.java rename to cli/src/test/java/org/apache/whirr/cli/command/AbstractClusterSpecCommandTest.java index 6409c4bf..0c362c2a 100644 --- a/cli/src/test/java/org/apache/whirr/cli/command/ClusterSpecCommandTest.java +++ b/cli/src/test/java/org/apache/whirr/cli/command/AbstractClusterSpecCommandTest.java @@ -31,11 +31,11 @@ import org.apache.whirr.service.ServiceFactory; import org.junit.Test; -public class ClusterSpecCommandTest { +public class AbstractClusterSpecCommandTest { @Test public void testOverrides() throws Exception { - ClusterSpecCommand clusterSpecCommand = new ClusterSpecCommand("name", + AbstractClusterSpecCommand clusterSpecCommand = new AbstractClusterSpecCommand("name", "description", new ServiceFactory()) { @Override public int run(InputStream in, PrintStream out, PrintStream err, @@ -43,7 +43,7 @@ public int run(InputStream in, PrintStream out, PrintStream err, return 0; } }; - + OptionSet optionSet = clusterSpecCommand.parser.parse( "--service-name", "overridden-test-service", "--config", "whirr-override-test.properties"); @@ -51,5 +51,26 @@ public int run(InputStream in, PrintStream out, PrintStream err, assertThat(clusterSpec.getServiceName(), is("overridden-test-service")); assertThat(clusterSpec.getClusterName(), is("test-cluster")); } - + + /** + * Ensure that an invalid service name causes failure + */ + @Test(expected=IllegalArgumentException.class) + public void testCreateServer_InvalidServiceName() throws Exception { + AbstractClusterSpecCommand clusterSpecCommand = new AbstractClusterSpecCommand("name", + "description", new ServiceFactory()) { + @Override + public int run(InputStream in, PrintStream out, PrintStream err, + List args) throws Exception { + return 0; + } + }; + + OptionSet optionSet = clusterSpecCommand.parser.parse( + "--service-name", "foo", + "--config", "whirr-override-test.properties"); + ClusterSpec clusterSpec = clusterSpecCommand.getClusterSpec(optionSet); + // this should fail - non-existent service + clusterSpecCommand.createService("bar"); + } } From d88a31e65997f4a3b97c2a250de4f4a62103fc40 Mon Sep 17 00:00:00 2001 From: "Patrick D. Hunt" Date: Thu, 30 Sep 2010 21:02:36 +0000 Subject: [PATCH 015/216] WHIRR-104. print available services in cli help string git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1003262 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 ++ cli/src/main/java/org/apache/whirr/cli/Main.java | 13 +++++++++++-- .../org/apache/whirr/service/ServiceFactory.java | 15 +++++++++++++++ 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index e0fce771..7964b54f 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -28,6 +28,8 @@ Trunk (unreleased changes) WHIRR-102. unknown service NPEs cli, should print the bad service to console (phunt) + WHIRR-104. print available services in cli help string (phunt) + Release 0.1.0 - 2010-09-02 INCOMPATIBLE CHANGES diff --git a/cli/src/main/java/org/apache/whirr/cli/Main.java b/cli/src/main/java/org/apache/whirr/cli/Main.java index 312a7eeb..645e648c 100644 --- a/cli/src/main/java/org/apache/whirr/cli/Main.java +++ b/cli/src/main/java/org/apache/whirr/cli/Main.java @@ -18,18 +18,20 @@ package org.apache.whirr.cli; -import com.google.common.collect.Maps; - import java.io.IOException; import java.io.InputStream; import java.io.PrintStream; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.TreeSet; import org.apache.whirr.cli.command.DestroyClusterCommand; import org.apache.whirr.cli.command.LaunchClusterCommand; import org.apache.whirr.cli.command.VersionCommand; +import org.apache.whirr.service.ServiceFactory; + +import com.google.common.collect.Maps; /** * The entry point for the Whirr CLI. @@ -56,6 +58,13 @@ int run(InputStream in, PrintStream out, PrintStream err, out.printf("%" + maxLen + "s %s\n", command.getName(), command.getDescription()); } + out.println(); + out.println("Available services:"); + ServiceFactory serviceFactory = new ServiceFactory(); + for (String serviceName : + new TreeSet(serviceFactory.availableServices())) { + out.println(" " + serviceName); + } return -1; } Command command = commandMap.get(list.get(0)); diff --git a/core/src/main/java/org/apache/whirr/service/ServiceFactory.java b/core/src/main/java/org/apache/whirr/service/ServiceFactory.java index c688c931..4745c2a1 100644 --- a/core/src/main/java/org/apache/whirr/service/ServiceFactory.java +++ b/core/src/main/java/org/apache/whirr/service/ServiceFactory.java @@ -19,6 +19,9 @@ package org.apache.whirr.service; import java.util.ServiceLoader; +import java.util.Set; + +import com.google.common.collect.Sets; /** * This class is used to create {@link Service} instances. @@ -44,4 +47,16 @@ public Service create(String serviceName) { } return null; } + + /** + * Return a collection of available services. + * @return + */ + public Set availableServices() { + Set result = Sets.newHashSet(); + for (Service s : serviceLoader) { + result.add(s.getName()); + } + return result; + } } From 543bd0c72197c62681d00ba6d7c6bdd81dd84db4 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Fri, 1 Oct 2010 04:07:36 +0000 Subject: [PATCH 016/216] WHIRR-73. Add a list command to the CLI. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1003381 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 + .../main/java/org/apache/whirr/cli/Main.java | 47 ++++--- .../whirr/cli/command/ListClusterCommand.java | 89 ++++++++++++++ .../java/org/apache/whirr/cli/MainTest.java | 10 ++ .../cli/command/ListClusterCommandTest.java | 115 ++++++++++++++++++ .../org/apache/whirr/service/Service.java | 33 +++++ .../service/cassandra/CassandraService.java | 5 +- .../service/zookeeper/ZooKeeperService.java | 5 +- 8 files changed, 284 insertions(+), 22 deletions(-) create mode 100644 cli/src/main/java/org/apache/whirr/cli/command/ListClusterCommand.java create mode 100644 cli/src/test/java/org/apache/whirr/cli/command/ListClusterCommandTest.java diff --git a/CHANGES.txt b/CHANGES.txt index 7964b54f..68941b37 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -6,6 +6,8 @@ Trunk (unreleased changes) WHIRR-100. Create a binary distribution of Whirr. (tomwhite) + WHIRR-73. Add a list command to the CLI. (tomwhite) + IMPROVEMENTS WHIRR-89. Support maven 3 builds. (Adrian Cole via tomwhite) diff --git a/cli/src/main/java/org/apache/whirr/cli/Main.java b/cli/src/main/java/org/apache/whirr/cli/Main.java index 645e648c..86d2ad75 100644 --- a/cli/src/main/java/org/apache/whirr/cli/Main.java +++ b/cli/src/main/java/org/apache/whirr/cli/Main.java @@ -18,6 +18,8 @@ package org.apache.whirr.cli; +import com.google.common.collect.Maps; + import java.io.IOException; import java.io.InputStream; import java.io.PrintStream; @@ -28,11 +30,10 @@ import org.apache.whirr.cli.command.DestroyClusterCommand; import org.apache.whirr.cli.command.LaunchClusterCommand; +import org.apache.whirr.cli.command.ListClusterCommand; import org.apache.whirr.cli.command.VersionCommand; import org.apache.whirr.service.ServiceFactory; -import com.google.common.collect.Maps; - /** * The entry point for the Whirr CLI. */ @@ -51,31 +52,41 @@ public class Main { int run(InputStream in, PrintStream out, PrintStream err, List list) throws Exception { if (list.isEmpty()) { - out.println("Usage: whirr COMMAND [ARGS]"); - out.println("where COMMAND may be one of:"); - out.println(); - for (Command command : commandMap.values()) { - out.printf("%" + maxLen + "s %s\n", command.getName(), - command.getDescription()); - } - out.println(); - out.println("Available services:"); - ServiceFactory serviceFactory = new ServiceFactory(); - for (String serviceName : - new TreeSet(serviceFactory.availableServices())) { - out.println(" " + serviceName); - } + printUsage(out); return -1; } Command command = commandMap.get(list.get(0)); + if (command == null) { + err.printf("Unrecognized command '%s'\n", list.get(0)); + err.println(); + printUsage(err); + return -1; + } return command.run(in, out, err, list.subList(1, list.size())); } - + + private void printUsage(PrintStream stream) { + stream.println("Usage: whirr COMMAND [ARGS]"); + stream.println("where COMMAND may be one of:"); + stream.println(); + for (Command command : commandMap.values()) { + stream.printf("%" + maxLen + "s %s\n", command.getName(), + command.getDescription()); + } + stream.println(); + stream.println("Available services:"); + ServiceFactory serviceFactory = new ServiceFactory(); + for (String serviceName : new TreeSet( + serviceFactory.availableServices())) { + stream.println(" " + serviceName); + } + } public static void main(String... args) throws Exception { Main main = new Main( new VersionCommand(), new LaunchClusterCommand(), - new DestroyClusterCommand() + new DestroyClusterCommand(), + new ListClusterCommand() ); int rc = main.run(System.in, System.out, System.err, Arrays.asList(args)); System.exit(rc); diff --git a/cli/src/main/java/org/apache/whirr/cli/command/ListClusterCommand.java b/cli/src/main/java/org/apache/whirr/cli/command/ListClusterCommand.java new file mode 100644 index 00000000..722e8f29 --- /dev/null +++ b/cli/src/main/java/org/apache/whirr/cli/command/ListClusterCommand.java @@ -0,0 +1,89 @@ +/** + * 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 org.apache.whirr.cli.command; + +import com.google.common.base.Joiner; +import com.google.common.collect.Iterables; + +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintStream; +import java.util.List; +import java.util.Set; + +import joptsimple.OptionParser; +import joptsimple.OptionSet; + +import org.apache.whirr.service.ClusterSpec; +import org.apache.whirr.service.Service; +import org.apache.whirr.service.ServiceFactory; +import org.jclouds.compute.domain.NodeMetadata; + +/** + * A command to list the nodes in a cluster. + */ +public class ListClusterCommand extends AbstractClusterSpecCommand { + + public ListClusterCommand() throws IOException { + this(new ServiceFactory()); + } + + public ListClusterCommand(ServiceFactory factory) { + super("list-cluster", "List the nodes in a cluster.", factory); + } + + @Override + public int run(InputStream in, PrintStream out, PrintStream err, + List args) throws Exception { + + OptionSet optionSet = parser.parse(args.toArray(new String[0])); + + if (!optionSet.nonOptionArguments().isEmpty()) { + printUsage(parser, err); + return -1; + } + try { + ClusterSpec clusterSpec = getClusterSpec(optionSet); + + Service service = factory.create(clusterSpec.getServiceName()); + Set nodes = service.getNodes(clusterSpec); + for (NodeMetadata node : nodes) { + out.println(Joiner.on('\t').join(node.getId(), node.getImageId(), + getFirstAddress(node.getPublicAddresses()), + getFirstAddress(node.getPrivateAddresses()), + node.getState(), node.getLocation().getId())); + } + return 0; + } catch (IllegalArgumentException e) { + err.println(e.getMessage()); + printUsage(parser, err); + return -1; + } + } + + private String getFirstAddress(Set addresses) { + return addresses.isEmpty() ? "" : Iterables.get(addresses, 0); + } + + private void printUsage(OptionParser parser, PrintStream stream) throws IOException { + stream.println("Usage: whirr list-cluster [OPTIONS]"); + stream.println(); + parser.printHelpOn(stream); + } +} diff --git a/cli/src/test/java/org/apache/whirr/cli/MainTest.java b/cli/src/test/java/org/apache/whirr/cli/MainTest.java index 62fb5ec5..63fb2f07 100644 --- a/cli/src/test/java/org/apache/whirr/cli/MainTest.java +++ b/cli/src/test/java/org/apache/whirr/cli/MainTest.java @@ -60,6 +60,16 @@ public void testNoArgs() throws Exception { assertThat(bytes.toString(), containsString("test-command test description")); } + @Test + public void testUnrecognizedCommand() throws Exception { + Main main = new Main(new TestCommand()); + ByteArrayOutputStream bytes = new ByteArrayOutputStream(); + PrintStream err = new PrintStream(bytes); + int rc = main.run(null, null, err, Lists.newArrayList("bogus-command")); + assertThat(rc, is(-1)); + assertThat(bytes.toString(), containsString("Unrecognized command 'bogus-command'")); + } + @Test public void testCommand() throws Exception { Command command = mock(Command.class); diff --git a/cli/src/test/java/org/apache/whirr/cli/command/ListClusterCommandTest.java b/cli/src/test/java/org/apache/whirr/cli/command/ListClusterCommandTest.java new file mode 100644 index 00000000..ba7c9712 --- /dev/null +++ b/cli/src/test/java/org/apache/whirr/cli/command/ListClusterCommandTest.java @@ -0,0 +1,115 @@ +/** + * 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 org.apache.whirr.cli.command; + +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; + +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; +import java.util.Collections; +import java.util.Set; + +import org.apache.whirr.service.ClusterSpec; +import org.apache.whirr.service.Service; +import org.apache.whirr.service.ServiceFactory; +import org.hamcrest.Matcher; +import org.jclouds.compute.domain.NodeMetadata; +import org.jclouds.compute.domain.NodeState; +import org.jclouds.compute.domain.internal.NodeMetadataImpl; +import org.jclouds.domain.LocationScope; +import org.jclouds.domain.internal.LocationImpl; +import org.junit.Before; +import org.junit.Test; +import org.junit.internal.matchers.StringContains; + +public class ListClusterCommandTest { + + private ByteArrayOutputStream outBytes; + private PrintStream out; + private ByteArrayOutputStream errBytes; + private PrintStream err; + + @Before + public void setUp() { + outBytes = new ByteArrayOutputStream(); + out = new PrintStream(outBytes); + errBytes = new ByteArrayOutputStream(); + err = new PrintStream(errBytes); + } + + @Test + public void testInsufficientOptions() throws Exception { + ListClusterCommand command = new ListClusterCommand(); + int rc = command.run(null, null, err, Collections.emptyList()); + assertThat(rc, is(-1)); + assertThat(errBytes.toString(), containsUsageString()); + } + + private Matcher containsUsageString() { + return StringContains.containsString("Usage: whirr list-cluster [OPTIONS]"); + } + + @Test + public void testAllOptions() throws Exception { + + ServiceFactory factory = mock(ServiceFactory.class); + Service service = mock(Service.class); + when(factory.create((String) any())).thenReturn(service); + NodeMetadata node1 = new NodeMetadataImpl(null, "name1", "id1", + new LocationImpl(LocationScope.PROVIDER, "location-id1", + "location-desc1", null), + null, Collections.emptyMap(), null, null, "image-id", + null, NodeState.RUNNING, + Lists.newArrayList("100.0.0.1"), + Lists.newArrayList("10.0.0.1"), null); + NodeMetadata node2 = new NodeMetadataImpl(null, "name2", "id2", + new LocationImpl(LocationScope.PROVIDER, "location-id2", + "location-desc2", null), + null, Collections.emptyMap(), null, null, "image-id", + null, NodeState.RUNNING, + Lists.newArrayList("100.0.0.2"), + Lists.newArrayList("10.0.0.2"), null); + when(service.getNodes((ClusterSpec) any())).thenReturn( + (Set) Sets.newLinkedHashSet(Lists.newArrayList(node1, node2))); + + ListClusterCommand command = new ListClusterCommand(factory); + + int rc = command.run(null, out, null, Lists.newArrayList( + "--service-name", "test-service", + "--cluster-name", "test-cluster", + "--identity", "myusername")); + + assertThat(rc, is(0)); + + assertThat(outBytes.toString(), is( + "id1\timage-id\t100.0.0.1\t10.0.0.1\tRUNNING\tlocation-id1\n" + + "id2\timage-id\t100.0.0.2\t10.0.0.2\tRUNNING\tlocation-id2\n")); + + verify(factory).create("test-service"); + + } +} diff --git a/core/src/main/java/org/apache/whirr/service/Service.java b/core/src/main/java/org/apache/whirr/service/Service.java index c242371e..ade139d3 100644 --- a/core/src/main/java/org/apache/whirr/service/Service.java +++ b/core/src/main/java/org/apache/whirr/service/Service.java @@ -20,9 +20,15 @@ import static org.jclouds.compute.predicates.NodePredicates.withTag; +import com.google.common.base.Predicate; + import java.io.IOException; +import java.util.Set; import org.jclouds.compute.ComputeService; +import org.jclouds.compute.domain.ComputeMetadata; +import org.jclouds.compute.domain.NodeMetadata; +import org.jclouds.compute.domain.NodeState; /** * This class represents a service that a client wants to use. This class is @@ -58,5 +64,32 @@ public void destroyCluster(ClusterSpec clusterSpec) throws IOException { ComputeServiceContextBuilder.build(clusterSpec).getComputeService(); computeService.destroyNodesMatching(withTag(clusterSpec.getClusterName())); } + + public Set getNodes(ClusterSpec clusterSpec) + throws IOException { + ComputeService computeService = + ComputeServiceContextBuilder.build(clusterSpec).getComputeService(); + return computeService.listNodesDetailsMatching( + runningWithTag(clusterSpec.getClusterName())); + } + + public static Predicate runningWithTag(final String tag) { + return new Predicate() { + @Override + public boolean apply(ComputeMetadata computeMetadata) { + // Not all list calls return NodeMetadata (e.g. VCloud) + if (computeMetadata instanceof NodeMetadata) { + NodeMetadata nodeMetadata = (NodeMetadata) computeMetadata; + return tag.equals(nodeMetadata.getTag()) + && nodeMetadata.getState() == NodeState.RUNNING; + } + return false; + } + @Override + public String toString() { + return "runningWithTag(" + tag + ")"; + } + }; + } } diff --git a/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java b/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java index c5d30ad6..5225f022 100644 --- a/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java +++ b/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java @@ -21,7 +21,6 @@ import static com.google.common.base.Preconditions.checkNotNull; import static org.apache.whirr.service.RunUrlBuilder.runUrls; import static org.jclouds.compute.options.TemplateOptions.Builder.runScript; -import static org.jclouds.compute.predicates.NodePredicates.runningWithTag; import static org.jclouds.io.Payloads.newStringPayload; import com.google.common.base.Function; @@ -55,6 +54,7 @@ import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.Template; import org.jclouds.compute.domain.TemplateBuilder; +import org.jclouds.compute.predicates.NodePredicates; import org.jclouds.io.Payload; import org.jclouds.ssh.ExecResponse; @@ -115,7 +115,8 @@ public Cluster launchCluster(ClusterSpec clusterSpec) throws IOException { try { Map responses = computeService .runScriptOnNodesMatching( - runningWithTag(clusterSpec.getClusterName()), configureScript); + NodePredicates.runningWithTag(clusterSpec.getClusterName()), + configureScript); assert responses.size() > 0 : "no nodes matched " + clusterSpec.getClusterName(); } catch (RunScriptOnNodesException e) { diff --git a/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java b/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java index 667ef5e3..c2c91cee 100644 --- a/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java +++ b/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java @@ -21,7 +21,6 @@ import static com.google.common.base.Preconditions.checkNotNull; import static org.apache.whirr.service.RunUrlBuilder.runUrls; import static org.jclouds.compute.options.TemplateOptions.Builder.runScript; -import static org.jclouds.compute.predicates.NodePredicates.runningWithTag; import static org.jclouds.io.Payloads.newStringPayload; import com.google.common.base.Function; @@ -53,6 +52,7 @@ import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.Template; import org.jclouds.compute.domain.TemplateBuilder; +import org.jclouds.compute.predicates.NodePredicates; import org.jclouds.io.Payload; public class ZooKeeperService extends Service { @@ -107,7 +107,8 @@ public ZooKeeperCluster launchCluster(ClusterSpec clusterSpec) throws IOExceptio Payload configureScript = newStringPayload(runUrls(clusterSpec.getRunUrlBase(), "apache/zookeeper/post-configure " + servers)); try { - computeService.runScriptOnNodesMatching(runningWithTag(clusterSpec.getClusterName()), configureScript); + computeService.runScriptOnNodesMatching(NodePredicates.runningWithTag( + clusterSpec.getClusterName()), configureScript); } catch (RunScriptOnNodesException e) { // TODO: retry throw new IOException(e); From b8d681ccd20c3f522fc4da1c38fa94b00d53f1a9 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Fri, 1 Oct 2010 04:38:23 +0000 Subject: [PATCH 017/216] WHIRR-108. Fix checkstyle and rat violations. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1003386 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 ++ .../AbstractClusterSpecCommandTest.java | 2 +- .../jclouds/TemplateBuilderStrategy.java | 18 ++++++++++++++++++ .../main/resources/whirr-default.properties | 12 ++++++++++++ .../apache/whirr/service/ClusterSpecTest.java | 18 ++++++++++++++++++ .../service/TemplateBuilderStrategyTest.java | 18 ++++++++++++++++++ pom.xml | 2 ++ .../hadoop/HadoopTemplateBuilderStrategy.java | 18 ++++++++++++++++++ 8 files changed, 89 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 68941b37..3699711d 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -32,6 +32,8 @@ Trunk (unreleased changes) WHIRR-104. print available services in cli help string (phunt) + WHIRR-108. Fix checkstyle and rat violations. (tomwhite) + Release 0.1.0 - 2010-09-02 INCOMPATIBLE CHANGES diff --git a/cli/src/test/java/org/apache/whirr/cli/command/AbstractClusterSpecCommandTest.java b/cli/src/test/java/org/apache/whirr/cli/command/AbstractClusterSpecCommandTest.java index 0c362c2a..43978f81 100644 --- a/cli/src/test/java/org/apache/whirr/cli/command/AbstractClusterSpecCommandTest.java +++ b/cli/src/test/java/org/apache/whirr/cli/command/AbstractClusterSpecCommandTest.java @@ -56,7 +56,7 @@ public int run(InputStream in, PrintStream out, PrintStream err, * Ensure that an invalid service name causes failure */ @Test(expected=IllegalArgumentException.class) - public void testCreateServer_InvalidServiceName() throws Exception { + public void testCreateServerWithInvalidServiceName() throws Exception { AbstractClusterSpecCommand clusterSpecCommand = new AbstractClusterSpecCommand("name", "description", new ServiceFactory()) { @Override diff --git a/core/src/main/java/org/apache/whirr/service/jclouds/TemplateBuilderStrategy.java b/core/src/main/java/org/apache/whirr/service/jclouds/TemplateBuilderStrategy.java index 02ed463f..e21c806f 100644 --- a/core/src/main/java/org/apache/whirr/service/jclouds/TemplateBuilderStrategy.java +++ b/core/src/main/java/org/apache/whirr/service/jclouds/TemplateBuilderStrategy.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 org.apache.whirr.service.jclouds; import org.apache.whirr.service.ClusterSpec; diff --git a/core/src/main/resources/whirr-default.properties b/core/src/main/resources/whirr-default.properties index b3a42347..35d371fc 100644 --- a/core/src/main/resources/whirr-default.properties +++ b/core/src/main/resources/whirr-default.properties @@ -1,3 +1,15 @@ +# Licensed 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. + whirr.private-key-file=${sys:user.home}/.ssh/id_rsa whirr.public-key-file=${sys:user.home}/.ssh/id_rsa.pub whirr.run-url-base=http://whirr.s3.amazonaws.com/${version}/ \ No newline at end of file diff --git a/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java b/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java index 23df7005..b8999226 100644 --- a/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java +++ b/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.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 org.apache.whirr.service; import static org.hamcrest.Matchers.startsWith; diff --git a/core/src/test/java/org/apache/whirr/service/TemplateBuilderStrategyTest.java b/core/src/test/java/org/apache/whirr/service/TemplateBuilderStrategyTest.java index e0ba3a03..564e7f90 100644 --- a/core/src/test/java/org/apache/whirr/service/TemplateBuilderStrategyTest.java +++ b/core/src/test/java/org/apache/whirr/service/TemplateBuilderStrategyTest.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 org.apache.whirr.service; import static org.mockito.Mockito.mock; diff --git a/pom.xml b/pom.xml index e7927688..77ddef3a 100644 --- a/pom.xml +++ b/pom.xml @@ -295,6 +295,8 @@ **/.project **/META-INF/services/* **/target/** + lib/*LICENSE* + **/src/main/resources/version-banner.txt diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopTemplateBuilderStrategy.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopTemplateBuilderStrategy.java index fdf3becb..53820ce7 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopTemplateBuilderStrategy.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopTemplateBuilderStrategy.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 org.apache.whirr.service.hadoop; import org.apache.whirr.service.ClusterSpec; From 1314a82eb611a9c7d677e81289adc35c08dec1a9 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Mon, 4 Oct 2010 04:30:13 +0000 Subject: [PATCH 018/216] WHIRR-101. Hadoop on EC2 does not use the /mnt partition. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1004106 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 ++ scripts/apache/hadoop/install | 10 ++++++++-- scripts/cloudera/cdh/install | 10 ++++++++-- .../org/apache/whirr/service/hadoop/HadoopService.java | 5 +++-- 4 files changed, 21 insertions(+), 6 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 3699711d..958d6c55 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -34,6 +34,8 @@ Trunk (unreleased changes) WHIRR-108. Fix checkstyle and rat violations. (tomwhite) + WHIRR-101. Hadoop on EC2 does not use the /mnt partition. (tomwhite) + Release 0.1.0 - 2010-09-02 INCOMPATIBLE CHANGES diff --git a/scripts/apache/hadoop/install b/scripts/apache/hadoop/install index 5a2b9a24..062a0642 100644 --- a/scripts/apache/hadoop/install +++ b/scripts/apache/hadoop/install @@ -147,8 +147,14 @@ function make_hadoop_dirs { # Configure Hadoop by setting up disks and site file function configure_hadoop() { - - MOUNT=/data + case $CLOUD_PROVIDER in + ec2) + MOUNT=/mnt + ;; + *) + MOUNT=/data + ;; + esac FIRST_MOUNT=$MOUNT DFS_NAME_DIR=$MOUNT/hadoop/hdfs/name FS_CHECKPOINT_DIR=$MOUNT/hadoop/hdfs/secondary diff --git a/scripts/cloudera/cdh/install b/scripts/cloudera/cdh/install index 4b4de6ab..59a63e80 100644 --- a/scripts/cloudera/cdh/install +++ b/scripts/cloudera/cdh/install @@ -144,8 +144,14 @@ function make_hadoop_dirs { # Configure Hadoop by setting up disks and site file function configure_hadoop() { - - MOUNT=/data + case $CLOUD_PROVIDER in + ec2) + MOUNT=/mnt + ;; + *) + MOUNT=/data + ;; + esac FIRST_MOUNT=$MOUNT DFS_NAME_DIR=$MOUNT/hadoop/hdfs/name FS_CHECKPOINT_DIR=$MOUNT/hadoop/hdfs/secondary diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java index f4e980ec..ad6e6912 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java @@ -131,10 +131,11 @@ public HadoopCluster launchCluster(ClusterSpec clusterSpec) throws IOException { // Launch slaves (DN and TT) Payload slaveBootScript = newStringPayload(runUrls(clusterSpec.getRunUrlBase(), "sun/java/install", - String.format("%s dn,tt -n %s -j %s", + String.format("%s dn,tt -n %s -j %s -c %s", hadoopInstallRunUrl, namenodePublicAddress.getHostName(), - jobtrackerPublicAddress.getHostName()))); + jobtrackerPublicAddress.getHostName(), + clusterSpec.getProvider()))); TemplateBuilder slaveTemplateBuilder = computeService.templateBuilder() .options(runScript(slaveBootScript) From 67f01959be46a621d672d010581434c64bfbf93e Mon Sep 17 00:00:00 2001 From: Thomas White Date: Mon, 4 Oct 2010 05:09:02 +0000 Subject: [PATCH 019/216] WHIRR-109. Unit tests fail if there is no private key found at ~/.ssh/id_rsa. Contributed by Adrian Cole. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1004117 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 3 ++ .../org/apache/whirr/service/ClusterSpec.java | 4 +- .../java/org/apache/whirr/ssh/KeyPair.java | 49 +++++++++++++++++++ .../org/apache/whirr/ssh/KeyPairTest.java | 41 ++++++++++++++++ pom.xml | 7 +++ services/cassandra/pom.xml | 7 +++ .../integration/CassandraServiceTest.java | 12 ++++- services/hadoop/pom.xml | 7 +++ .../hadoop/integration/HadoopServiceTest.java | 12 ++++- services/zookeeper/pom.xml | 7 +++ .../integration/ZooKeeperServiceTest.java | 12 ++++- 11 files changed, 156 insertions(+), 5 deletions(-) create mode 100644 core/src/test/java/org/apache/whirr/ssh/KeyPair.java create mode 100644 core/src/test/java/org/apache/whirr/ssh/KeyPairTest.java diff --git a/CHANGES.txt b/CHANGES.txt index 958d6c55..545ca669 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -20,6 +20,9 @@ Trunk (unreleased changes) WHIRR-105. Add version command to the CLI. (tomwhite) + WHIRR-109. Unit tests fail if there is no private key found at + ~/.ssh/id_rsa. (Adrian Cole via tomwhite) + BUG FIXES WHIRR-93. Fail on checkstyle violation. (tomwhite) diff --git a/core/src/main/java/org/apache/whirr/service/ClusterSpec.java b/core/src/main/java/org/apache/whirr/service/ClusterSpec.java index 62919341..470268b8 100644 --- a/core/src/main/java/org/apache/whirr/service/ClusterSpec.java +++ b/core/src/main/java/org/apache/whirr/service/ClusterSpec.java @@ -181,13 +181,13 @@ public ClusterSpec(Configuration config) try { String privateKeyPath = c.getString( Property.PRIVATE_KEY_FILE.getConfigName()); - if (privateKeyPath != null) + if (privateKeyPath != null && new File(privateKeyPath).exists()) setPrivateKey(new File(privateKeyPath)); String publicKeyPath = c.getString(Property.PUBLIC_KEY_FILE. getConfigName()); publicKeyPath = publicKeyPath == null && privateKeyPath != null ? privateKeyPath + ".pub" : publicKeyPath; - if (publicKeyPath != null) + if (publicKeyPath != null && new File(publicKeyPath).exists()) setPublicKey(new File(publicKeyPath)); } catch (IOException e) { throw new ConfigurationException("error reading key from file", e); diff --git a/core/src/test/java/org/apache/whirr/ssh/KeyPair.java b/core/src/test/java/org/apache/whirr/ssh/KeyPair.java new file mode 100644 index 00000000..5ef779a8 --- /dev/null +++ b/core/src/test/java/org/apache/whirr/ssh/KeyPair.java @@ -0,0 +1,49 @@ +/** + * 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 org.apache.whirr.ssh; + +import java.io.ByteArrayOutputStream; +import java.util.Map; + +import com.google.common.collect.ImmutableMap; +import com.jcraft.jsch.JSch; +import com.jcraft.jsch.JSchException; + +/** + * A convenience class for generating an RSA key pair. + */ +public class KeyPair { + + /** + * return a "public" -> rsa public key, "private" -> its corresponding + * private key + */ + public static Map generate() throws JSchException { + com.jcraft.jsch.KeyPair pair = com.jcraft.jsch.KeyPair.genKeyPair( + new JSch(), com.jcraft.jsch.KeyPair.RSA); + ByteArrayOutputStream publicKeyOut = new ByteArrayOutputStream(); + ByteArrayOutputStream privateKeyOut = new ByteArrayOutputStream(); + pair.writePublicKey(publicKeyOut, "whirr"); + pair.writePrivateKey(privateKeyOut); + String publicKey = new String(publicKeyOut.toByteArray()); + String privateKey = new String(privateKeyOut.toByteArray()); + return ImmutableMap. of("public", publicKey, + "private", privateKey); + } +} diff --git a/core/src/test/java/org/apache/whirr/ssh/KeyPairTest.java b/core/src/test/java/org/apache/whirr/ssh/KeyPairTest.java new file mode 100644 index 00000000..9095b946 --- /dev/null +++ b/core/src/test/java/org/apache/whirr/ssh/KeyPairTest.java @@ -0,0 +1,41 @@ +/** + * 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 org.apache.whirr.ssh; + +import static org.hamcrest.Matchers.containsString; +import static org.junit.Assert.assertThat; + +import java.util.Map; + +import org.junit.Test; + +import com.jcraft.jsch.JSchException; + +public class KeyPairTest { + + @Test + public void testGenerate() throws JSchException { + Map pair = KeyPair.generate(); + assertThat(pair.get("public"), + containsString("ssh-rsa ")); + assertThat(pair.get("private"), + containsString("-----BEGIN RSA PRIVATE KEY-----\n")); + } + +} diff --git a/pom.xml b/pom.xml index 77ddef3a..aaa085df 100644 --- a/pom.xml +++ b/pom.xml @@ -213,6 +213,13 @@ org.apache.maven.plugins maven-jar-plugin 2.3.1 + + + + test-jar + + + diff --git a/services/cassandra/pom.xml b/services/cassandra/pom.xml index 68ff55c2..5713d5c1 100644 --- a/services/cassandra/pom.xml +++ b/services/cassandra/pom.xml @@ -34,6 +34,13 @@ whirr-core ${project.version} + + ${project.groupId} + whirr-core + ${project.version} + test-jar + test + org.jclouds jclouds-aws diff --git a/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java b/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java index 6ee6dbfd..5a3a587d 100644 --- a/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java +++ b/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java @@ -25,6 +25,7 @@ import java.io.IOException; import java.util.HashSet; import java.util.List; +import java.util.Map; import java.util.Set; import org.apache.cassandra.thrift.Cassandra; @@ -41,10 +42,13 @@ import org.apache.whirr.service.ServiceFactory; import org.apache.whirr.service.Cluster.Instance; import org.apache.whirr.service.cassandra.CassandraService; +import org.apache.whirr.ssh.KeyPair; import org.junit.After; import org.junit.Before; import org.junit.Test; +import com.jcraft.jsch.JSchException; + public class CassandraServiceTest { private static final String KEYSPACE = "Keyspace1"; @@ -54,13 +58,19 @@ public class CassandraServiceTest { private Cluster cluster; @Before - public void setUp() throws ConfigurationException, IOException { + public void setUp() throws ConfigurationException, IOException, + JSchException { CompositeConfiguration config = new CompositeConfiguration(); if (System.getProperty("config") != null) { config.addConfiguration(new PropertiesConfiguration(System.getProperty("config"))); } config.addConfiguration(new PropertiesConfiguration("whirr-cassandra-test.properties")); clusterSpec = new ClusterSpec(config); + if (clusterSpec.getPrivateKey() == null) { + Map pair = KeyPair.generate(); + clusterSpec.setPublicKey(pair.get("public")); + clusterSpec.setPrivateKey(pair.get("private")); + } Service s = new ServiceFactory().create(clusterSpec.getServiceName()); assertThat(s, instanceOf(CassandraService.class)); service = (CassandraService) s; diff --git a/services/hadoop/pom.xml b/services/hadoop/pom.xml index 3c513fcb..e84cd950 100644 --- a/services/hadoop/pom.xml +++ b/services/hadoop/pom.xml @@ -34,6 +34,13 @@ whirr-core ${project.version} + + ${project.groupId} + whirr-core + ${project.version} + test-jar + test + org.jclouds jclouds-aws diff --git a/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceTest.java b/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceTest.java index ade35842..0f913880 100644 --- a/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceTest.java +++ b/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceTest.java @@ -29,6 +29,7 @@ import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Writer; +import java.util.Map; import java.util.Map.Entry; import org.apache.commons.configuration.CompositeConfiguration; @@ -53,10 +54,13 @@ import org.apache.whirr.service.hadoop.HadoopCluster; import org.apache.whirr.service.hadoop.HadoopProxy; import org.apache.whirr.service.hadoop.HadoopService; +import org.apache.whirr.ssh.KeyPair; import org.junit.After; import org.junit.Before; import org.junit.Test; +import com.jcraft.jsch.JSchException; + public class HadoopServiceTest { private ClusterSpec clusterSpec; @@ -65,13 +69,19 @@ public class HadoopServiceTest { private HadoopCluster cluster; @Before - public void setUp() throws ConfigurationException, IOException { + public void setUp() throws ConfigurationException, IOException, + JSchException { CompositeConfiguration config = new CompositeConfiguration(); if (System.getProperty("config") != null) { config.addConfiguration(new PropertiesConfiguration(System.getProperty("config"))); } config.addConfiguration(new PropertiesConfiguration("whirr-hadoop-test.properties")); clusterSpec = new ClusterSpec(config); + if (clusterSpec.getPrivateKey() == null) { + Map pair = KeyPair.generate(); + clusterSpec.setPublicKey(pair.get("public")); + clusterSpec.setPrivateKey(pair.get("private")); + } Service s = new ServiceFactory().create(clusterSpec.getServiceName()); assertThat(s, instanceOf(HadoopService.class)); service = (HadoopService) s; diff --git a/services/zookeeper/pom.xml b/services/zookeeper/pom.xml index df343558..6da1ef67 100644 --- a/services/zookeeper/pom.xml +++ b/services/zookeeper/pom.xml @@ -34,6 +34,13 @@ whirr-core ${project.version} + + ${project.groupId} + whirr-core + ${project.version} + test-jar + test + org.jclouds jclouds-aws diff --git a/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java b/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java index 928fa923..f762fced 100644 --- a/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java +++ b/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java @@ -23,6 +23,7 @@ import static org.junit.Assert.assertThat; import java.io.IOException; +import java.util.Map; import java.util.concurrent.CountDownLatch; import org.apache.commons.configuration.CompositeConfiguration; @@ -33,6 +34,7 @@ import org.apache.whirr.service.ServiceFactory; import org.apache.whirr.service.zookeeper.ZooKeeperCluster; import org.apache.whirr.service.zookeeper.ZooKeeperService; +import org.apache.whirr.ssh.KeyPair; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; @@ -43,6 +45,8 @@ import org.junit.Before; import org.junit.Test; +import com.jcraft.jsch.JSchException; + public class ZooKeeperServiceTest { private ClusterSpec clusterSpec; @@ -50,13 +54,19 @@ public class ZooKeeperServiceTest { private ZooKeeperCluster cluster; @Before - public void setUp() throws ConfigurationException, IOException { + public void setUp() throws ConfigurationException, IOException, + JSchException { CompositeConfiguration config = new CompositeConfiguration(); if (System.getProperty("config") != null) { config.addConfiguration(new PropertiesConfiguration(System.getProperty("config"))); } config.addConfiguration(new PropertiesConfiguration("whirr-zookeeper-test.properties")); clusterSpec = new ClusterSpec(config); + if (clusterSpec.getPrivateKey() == null) { + Map pair = KeyPair.generate(); + clusterSpec.setPublicKey(pair.get("public")); + clusterSpec.setPrivateKey(pair.get("private")); + } Service s = new ServiceFactory().create(clusterSpec.getServiceName()); assertThat(s, instanceOf(ZooKeeperService.class)); service = (ZooKeeperService) s; From 8af7366192ead49e1c6b86bf227fbe54c8936fd1 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Mon, 4 Oct 2010 17:31:34 +0000 Subject: [PATCH 020/216] WHIRR-107. Test failing due to not matching Amazon Linux AMI on EC2. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1004330 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 3 +++ .../whirr/service/hadoop/HadoopTemplateBuilderStrategy.java | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 545ca669..33d1bdd4 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -39,6 +39,9 @@ Trunk (unreleased changes) WHIRR-101. Hadoop on EC2 does not use the /mnt partition. (tomwhite) + WHIRR-107. Test failing due to not matching Amazon Linux AMI on EC2. + (tomwhite) + Release 0.1.0 - 2010-09-02 INCOMPATIBLE CHANGES diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopTemplateBuilderStrategy.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopTemplateBuilderStrategy.java index 53820ce7..1b32342d 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopTemplateBuilderStrategy.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopTemplateBuilderStrategy.java @@ -21,6 +21,7 @@ import org.apache.whirr.service.ClusterSpec; import org.apache.whirr.service.jclouds.TemplateBuilderStrategy; import org.jclouds.aws.ec2.compute.domain.EC2Hardware; +import org.jclouds.compute.domain.OsFamily; import org.jclouds.compute.domain.TemplateBuilder; public class HadoopTemplateBuilderStrategy extends TemplateBuilderStrategy { @@ -29,6 +30,10 @@ public void configureTemplateBuilder(ClusterSpec clusterSpec, TemplateBuilder templateBuilder) { super.configureTemplateBuilder(clusterSpec, templateBuilder); + if ("ec2".equals(clusterSpec.getProvider()) + && clusterSpec.getImageId() == null) { + templateBuilder.osFamily(OsFamily.AMZN_LINUX); + } if ("ec2".equals(clusterSpec.getProvider()) && clusterSpec.getHardwareId() == null) { // micro is too small for Hadoop (even for testing) From 01f5b1b5480752f5dcbd54b2db891feea7686694 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Mon, 4 Oct 2010 19:29:23 +0000 Subject: [PATCH 021/216] WHIRR-106. Improve logging in whirr cli. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1004375 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 + cli/pom.xml | 10 ++++ cli/src/main/resources/log4j.xml | 59 +++++++++++++++++++ core/pom.xml | 4 ++ .../org/apache/whirr/service/Service.java | 7 +++ core/src/test/resources/log4j.xml | 35 +++++++++++ pom.xml | 2 + .../service/cassandra/CassandraService.java | 13 ++++ .../cassandra/src/test/resources/log4j.xml | 35 +++++++++++ services/hadoop/pom.xml | 8 +++ .../whirr/service/hadoop/HadoopService.java | 16 +++++ services/hadoop/src/test/resources/log4j.xml | 35 +++++++++++ services/zookeeper/pom.xml | 8 +++ .../service/zookeeper/ZooKeeperService.java | 14 +++++ .../integration/ZooKeeperServiceTest.java | 1 - .../zookeeper/src/test/resources/log4j.xml | 35 +++++++++++ 16 files changed, 283 insertions(+), 1 deletion(-) create mode 100644 cli/src/main/resources/log4j.xml diff --git a/CHANGES.txt b/CHANGES.txt index 33d1bdd4..975c3367 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -42,6 +42,8 @@ Trunk (unreleased changes) WHIRR-107. Test failing due to not matching Amazon Linux AMI on EC2. (tomwhite) + WHIRR-106. Improve logging in whirr cli. (tomwhite) + Release 0.1.0 - 2010-09-02 INCOMPATIBLE CHANGES diff --git a/cli/pom.xml b/cli/pom.xml index 2119cbe2..d797af20 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -81,9 +81,19 @@ org.mockito mockito-all + + org.slf4j + slf4j-api + + + org.slf4j + slf4j-log4j12 + compile + log4j log4j + compile commons-configuration diff --git a/cli/src/main/resources/log4j.xml b/cli/src/main/resources/log4j.xml new file mode 100644 index 00000000..e2da3e03 --- /dev/null +++ b/cli/src/main/resources/log4j.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/core/pom.xml b/core/pom.xml index 34a613da..290fa35a 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -81,6 +81,10 @@ org.slf4j slf4j-api + + org.slf4j + slf4j-log4j12 + log4j log4j diff --git a/core/src/main/java/org/apache/whirr/service/Service.java b/core/src/main/java/org/apache/whirr/service/Service.java index ade139d3..045e5185 100644 --- a/core/src/main/java/org/apache/whirr/service/Service.java +++ b/core/src/main/java/org/apache/whirr/service/Service.java @@ -30,11 +30,16 @@ import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.NodeState; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /** * This class represents a service that a client wants to use. This class is * used to start and stop clusters that provide the service. */ public abstract class Service { + + private static final Logger LOG = LoggerFactory.getLogger(Service.class); /** * @return the unique name of the service. @@ -60,9 +65,11 @@ public abstract Cluster launchCluster(ClusterSpec clusterSpec) * cluster may or may not have been stopped. */ public void destroyCluster(ClusterSpec clusterSpec) throws IOException { + LOG.info("Destroying " + clusterSpec.getClusterName() + " cluster"); ComputeService computeService = ComputeServiceContextBuilder.build(clusterSpec).getComputeService(); computeService.destroyNodesMatching(withTag(clusterSpec.getClusterName())); + LOG.info("Cluster {} destroyed", clusterSpec.getClusterName()); } public Set getNodes(ClusterSpec clusterSpec) diff --git a/core/src/test/resources/log4j.xml b/core/src/test/resources/log4j.xml index 73d5012e..e3a7d54c 100644 --- a/core/src/test/resources/log4j.xml +++ b/core/src/test/resources/log4j.xml @@ -24,6 +24,13 @@ --> + + + + + + + @@ -102,6 +109,28 @@ --> + + + + + + + + + + + + + + + + + + @@ -129,6 +158,11 @@ + + + + + @@ -156,6 +190,7 @@ + \ No newline at end of file diff --git a/pom.xml b/pom.xml index aaa085df..4bd08d75 100644 --- a/pom.xml +++ b/pom.xml @@ -122,11 +122,13 @@ org.slf4j slf4j-log4j12 1.6.0 + test log4j log4j 1.2.15 + test javax.mail diff --git a/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java b/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java index 5225f022..de7e13e9 100644 --- a/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java +++ b/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java @@ -57,8 +57,13 @@ import org.jclouds.compute.predicates.NodePredicates; import org.jclouds.io.Payload; import org.jclouds.ssh.ExecResponse; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class CassandraService extends Service { + + private static final Logger LOG = + LoggerFactory.getLogger(CassandraService.class); public static final String CASSANDRA_ROLE = "cassandra"; public static final int CLIENT_PORT = 9160; @@ -70,6 +75,8 @@ public String getName() { @Override public Cluster launchCluster(ClusterSpec clusterSpec) throws IOException { + LOG.info("Launching " + clusterSpec.getClusterName() + " cluster"); + ComputeServiceContext computeServiceContext = ComputeServiceContextBuilder.build(clusterSpec); ComputeService computeService = computeServiceContext.getComputeService(); @@ -87,6 +94,7 @@ public Cluster launchCluster(ClusterSpec clusterSpec) throws IOException { new TemplateBuilderStrategy().configureTemplateBuilder(clusterSpec, templateBuilder); + LOG.info("Configuring template"); Template template = templateBuilder.build(); InstanceTemplate instanceTemplate = clusterSpec @@ -95,13 +103,16 @@ public Cluster launchCluster(ClusterSpec clusterSpec) throws IOException { int clusterSize = instanceTemplate.getNumberOfInstances(); Set nodeMap; try { + LOG.info("Starting {} node(s)", clusterSize); nodeMap = computeService.runNodesWithTag(clusterSpec.getClusterName(), clusterSize, template); + LOG.info("Nodes started: {}", nodeMap); } catch (RunNodesException e) { // TODO: can we do better here throw new IOException(e); } + LOG.info("Authorizing firewall"); FirewallSettings.authorizeIngress(computeServiceContext, nodeMap, clusterSpec, CLIENT_PORT); List nodes = Lists.newArrayList(nodeMap); @@ -113,6 +124,7 @@ public Cluster launchCluster(ClusterSpec clusterSpec) throws IOException { "apache/cassandra/post-configure " + servers)); try { + LOG.info("Running configuration script"); Map responses = computeService .runScriptOnNodesMatching( NodePredicates.runningWithTag(clusterSpec.getClusterName()), @@ -124,6 +136,7 @@ public Cluster launchCluster(ClusterSpec clusterSpec) throws IOException { throw new IOException(e); } + LOG.info("Completed launch of {}", clusterSpec.getClusterName()); return new Cluster(getInstances(nodes)); } diff --git a/services/cassandra/src/test/resources/log4j.xml b/services/cassandra/src/test/resources/log4j.xml index 73d5012e..e3a7d54c 100644 --- a/services/cassandra/src/test/resources/log4j.xml +++ b/services/cassandra/src/test/resources/log4j.xml @@ -24,6 +24,13 @@ --> + + + + + + + @@ -102,6 +109,28 @@ --> + + + + + + + + + + + + + + + + + + @@ -129,6 +158,11 @@ + + + + + @@ -156,6 +190,7 @@ + \ No newline at end of file diff --git a/services/hadoop/pom.xml b/services/hadoop/pom.xml index e84cd950..a8e34a66 100644 --- a/services/hadoop/pom.xml +++ b/services/hadoop/pom.xml @@ -77,6 +77,14 @@ commons-configuration commons-configuration + + org.slf4j + slf4j-api + + + org.slf4j + slf4j-log4j12 + log4j log4j diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java index ad6e6912..5fd6ce8c 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java @@ -54,9 +54,14 @@ import org.jclouds.compute.domain.Template; import org.jclouds.compute.domain.TemplateBuilder; import org.jclouds.io.Payload; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class HadoopService extends Service { + private static final Logger LOG = + LoggerFactory.getLogger(HadoopService.class); + public static final Set MASTER_ROLE = Sets.newHashSet("nn", "jt"); public static final Set WORKER_ROLE = Sets.newHashSet("dn", "tt"); @@ -73,6 +78,8 @@ public String getName() { @Override public HadoopCluster launchCluster(ClusterSpec clusterSpec) throws IOException { + LOG.info("Launching " + clusterSpec.getClusterName() + " cluster"); + ComputeServiceContext computeServiceContext = ComputeServiceContextBuilder.build(clusterSpec); ComputeService computeService = computeServiceContext.getComputeService(); @@ -86,6 +93,7 @@ public HadoopCluster launchCluster(ClusterSpec clusterSpec) throws IOException { String.format("%s nn,jt -c %s", hadoopInstallRunUrl, clusterSpec.getProvider()))); + LOG.info("Configuring template"); TemplateBuilder masterTemplateBuilder = computeService.templateBuilder() .options(runScript(nnjtBootScript) .installPrivateKey(clusterSpec.getPrivateKey()) @@ -101,8 +109,10 @@ public HadoopCluster launchCluster(ClusterSpec clusterSpec) throws IOException { checkArgument(instanceTemplate.getNumberOfInstances() == 1); Set nodes; try { + LOG.info("Starting master node"); nodes = computeService.runNodesWithTag( clusterSpec.getClusterName(), 1, masterTemplate); + LOG.info("Master node started: {}", nodes); } catch (RunNodesException e) { // TODO: can we do better here (retry?) throw new IOException(e); @@ -111,6 +121,7 @@ public HadoopCluster launchCluster(ClusterSpec clusterSpec) throws IOException { InetAddress namenodePublicAddress = InetAddress.getByName(Iterables.get(node.getPublicAddresses(),0)); InetAddress jobtrackerPublicAddress = InetAddress.getByName(Iterables.get(node.getPublicAddresses(),0)); + LOG.info("Authorizing firewall"); FirewallSettings.authorizeIngress(computeServiceContext, node, clusterSpec, WEB_PORT); FirewallSettings.authorizeIngress(computeServiceContext, node, clusterSpec, @@ -151,8 +162,10 @@ public HadoopCluster launchCluster(ClusterSpec clusterSpec) throws IOException { Set workerNodes; try { + LOG.info("Starting {} worker node(s)", instanceTemplate.getNumberOfInstances()); workerNodes = computeService.runNodesWithTag(clusterSpec.getClusterName(), instanceTemplate.getNumberOfInstances(), slaveTemplate); + LOG.info("Worker nodes started: {}", workerNodes); } catch (RunNodesException e) { // TODO: don't bail out if only a few have failed to start throw new IOException(e); @@ -163,6 +176,9 @@ public HadoopCluster launchCluster(ClusterSpec clusterSpec) throws IOException { Set instances = Sets.union(getInstances(MASTER_ROLE, Collections.singleton(node)), getInstances(WORKER_ROLE, workerNodes)); + LOG.info("Completed launch of {}", clusterSpec.getClusterName()); + LOG.info("Web UI available at http://{}", + namenodePublicAddress.getHostName()); Properties config = createClientSideProperties(namenodePublicAddress, jobtrackerPublicAddress); return new HadoopCluster(instances, config); } diff --git a/services/hadoop/src/test/resources/log4j.xml b/services/hadoop/src/test/resources/log4j.xml index 73d5012e..e3a7d54c 100644 --- a/services/hadoop/src/test/resources/log4j.xml +++ b/services/hadoop/src/test/resources/log4j.xml @@ -24,6 +24,13 @@ --> + + + + + + + @@ -102,6 +109,28 @@ --> + + + + + + + + + + + + + + + + + + @@ -129,6 +158,11 @@ + + + + + @@ -156,6 +190,7 @@ + \ No newline at end of file diff --git a/services/zookeeper/pom.xml b/services/zookeeper/pom.xml index 6da1ef67..27d7495d 100644 --- a/services/zookeeper/pom.xml +++ b/services/zookeeper/pom.xml @@ -77,6 +77,14 @@ commons-configuration commons-configuration + + org.slf4j + slf4j-api + + + org.slf4j + slf4j-log4j12 + log4j log4j diff --git a/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java b/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java index c2c91cee..d13a02b8 100644 --- a/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java +++ b/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java @@ -54,8 +54,13 @@ import org.jclouds.compute.domain.TemplateBuilder; import org.jclouds.compute.predicates.NodePredicates; import org.jclouds.io.Payload; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class ZooKeeperService extends Service { + + private static final Logger LOG = + LoggerFactory.getLogger(ZooKeeperService.class); public static final String ZOOKEEPER_ROLE = "zk"; private static final int CLIENT_PORT = 2181; @@ -67,6 +72,8 @@ public String getName() { @Override public ZooKeeperCluster launchCluster(ClusterSpec clusterSpec) throws IOException { + LOG.info("Launching " + clusterSpec.getClusterName() + " cluster"); + ComputeServiceContext computeServiceContext = ComputeServiceContextBuilder.build(clusterSpec); ComputeService computeService = computeServiceContext.getComputeService(); @@ -83,6 +90,7 @@ public ZooKeeperCluster launchCluster(ClusterSpec clusterSpec) throws IOExceptio new TemplateBuilderStrategy().configureTemplateBuilder(clusterSpec, templateBuilder); + LOG.info("Configuring template"); Template template = templateBuilder.build(); InstanceTemplate instanceTemplate = clusterSpec.getInstanceTemplate(ZOOKEEPER_ROLE); @@ -90,13 +98,16 @@ public ZooKeeperCluster launchCluster(ClusterSpec clusterSpec) throws IOExceptio int ensembleSize = instanceTemplate.getNumberOfInstances(); Set nodeMap; try { + LOG.info("Starting {} node(s)", ensembleSize); nodeMap = computeService.runNodesWithTag(clusterSpec.getClusterName(), ensembleSize, template); + LOG.info("Nodes started: {}", nodeMap); } catch (RunNodesException e) { // TODO: can we do better here - proceed if ensemble is big enough? throw new IOException(e); } + LOG.info("Authorizing firewall"); FirewallSettings.authorizeIngress(computeServiceContext, nodeMap, clusterSpec, CLIENT_PORT); List nodes = Lists.newArrayList(nodeMap); @@ -107,6 +118,7 @@ public ZooKeeperCluster launchCluster(ClusterSpec clusterSpec) throws IOExceptio Payload configureScript = newStringPayload(runUrls(clusterSpec.getRunUrlBase(), "apache/zookeeper/post-configure " + servers)); try { + LOG.info("Running configuration script"); computeService.runScriptOnNodesMatching(NodePredicates.runningWithTag( clusterSpec.getClusterName()), configureScript); } catch (RunScriptOnNodesException e) { @@ -114,7 +126,9 @@ public ZooKeeperCluster launchCluster(ClusterSpec clusterSpec) throws IOExceptio throw new IOException(e); } + LOG.info("Completed launch of {}", clusterSpec.getClusterName()); String hosts = Joiner.on(',').join(getHosts(nodes)); + LOG.info("Hosts: {}", hosts); return new ZooKeeperCluster(getInstances(nodes), hosts); } diff --git a/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java b/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java index f762fced..1cea28c3 100644 --- a/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java +++ b/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java @@ -71,7 +71,6 @@ public void setUp() throws ConfigurationException, IOException, assertThat(s, instanceOf(ZooKeeperService.class)); service = (ZooKeeperService) s; cluster = service.launchCluster(clusterSpec); - System.out.println(cluster.getHosts()); } @Test diff --git a/services/zookeeper/src/test/resources/log4j.xml b/services/zookeeper/src/test/resources/log4j.xml index 73d5012e..e3a7d54c 100644 --- a/services/zookeeper/src/test/resources/log4j.xml +++ b/services/zookeeper/src/test/resources/log4j.xml @@ -24,6 +24,13 @@ --> + + + + + + + @@ -102,6 +109,28 @@ --> + + + + + + + + + + + + + + + + + + @@ -129,6 +158,11 @@ + + + + + @@ -156,6 +190,7 @@ + \ No newline at end of file From 1475adad5c820d04932e71953bdee45255b75518 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Tue, 5 Oct 2010 16:22:47 +0000 Subject: [PATCH 022/216] WHIRR-110. Create client-side Hadoop configuration file during cluster launch. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1004698 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 3 ++ .../whirr/service/hadoop/HadoopProxy.java | 29 ++++++----- .../whirr/service/hadoop/HadoopService.java | 51 ++++++++++++++++--- 3 files changed, 63 insertions(+), 20 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 975c3367..3de9dc85 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -23,6 +23,9 @@ Trunk (unreleased changes) WHIRR-109. Unit tests fail if there is no private key found at ~/.ssh/id_rsa. (Adrian Cole via tomwhite) + WHIRR-110. Create client-side Hadoop configuration file during cluster + launch. (tomwhite) + BUG FIXES WHIRR-93. Fail on checkstyle violation. (tomwhite) diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java index 59c84fb5..66b6ee42 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java @@ -41,10 +41,8 @@ public HadoopProxy(ClusterSpec clusterSpec, HadoopCluster cluster) { this.clusterSpec = clusterSpec; this.cluster = cluster; } - - public void start() throws IOException { - // jsch doesn't support SOCKS-based dynamic port forwarding, so we need to shell out... - // TODO: Use static port forwarding instead? + + public String[] getProxyCommand() throws IOException { checkState(clusterSpec.getPrivateKey() != null, "privateKey is needed"); File identity; if (clusterSpec.getPrivateKey().getRawContent() instanceof File) { @@ -56,14 +54,21 @@ public void start() throws IOException { } String user = Iterables.get(cluster.getInstances(), 0).getLoginCredentials().identity; String server = cluster.getNamenodePublicAddress().getHostName(); - String[] command = new String[] { "ssh", - "-i", identity.getAbsolutePath(), - "-o", "ConnectTimeout=10", - "-o", "ServerAliveInterval=60", - "-o", "StrictHostKeyChecking=no", - "-N", - "-D 6666", - String.format("%s@%s", user, server)}; + return new String[] { "ssh", + "-i", identity.getAbsolutePath(), + "-o", "ConnectTimeout=10", + "-o", "ServerAliveInterval=60", + "-o", "StrictHostKeyChecking=no", + "-N", + "-D 6666", + String.format("%s@%s", user, server)}; + } + + public void start() throws IOException { + // jsch doesn't support SOCKS-based dynamic port forwarding + // so we need to shell out + + String[] command = getProxyCommand(); ProcessBuilder processBuilder = new ProcessBuilder(command); process = processBuilder.start(); diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java index 5fd6ce8c..c386259a 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java @@ -26,6 +26,7 @@ import com.google.common.base.Charsets; import com.google.common.base.Function; +import com.google.common.base.Joiner; import com.google.common.collect.Collections2; import com.google.common.collect.Iterables; import com.google.common.collect.Sets; @@ -180,7 +181,10 @@ public HadoopCluster launchCluster(ClusterSpec clusterSpec) throws IOException { LOG.info("Web UI available at http://{}", namenodePublicAddress.getHostName()); Properties config = createClientSideProperties(namenodePublicAddress, jobtrackerPublicAddress); - return new HadoopCluster(instances, config); + createClientSideHadoopSiteFile(clusterSpec, config); + HadoopCluster cluster = new HadoopCluster(instances, config); + createProxyScript(clusterSpec, cluster); + return cluster; } private Set getInstances(final Set roles, Set nodes) { @@ -209,9 +213,24 @@ private Properties createClientSideProperties(InetAddress namenode, InetAddress return config; } - private void createClientSideHadoopSiteFile(InetAddress namenode, InetAddress jobtracker) throws IOException { - File file = new File("/tmp/hadoop-site.xml"); - Files.write(generateHadoopConfigurationFile(createClientSideProperties(namenode, jobtracker)), file, Charsets.UTF_8); + private void createClientSideHadoopSiteFile(ClusterSpec clusterSpec, Properties config) { + File configDir = getConfigDir(clusterSpec); + File hadoopSiteFile = new File(configDir, "hadoop-site.xml"); + try { + Files.write(generateHadoopConfigurationFile(config), hadoopSiteFile, + Charsets.UTF_8); + LOG.info("Wrote Hadoop site file {}", hadoopSiteFile); + } catch (IOException e) { + LOG.error("Problem writing Hadoop site file {}", hadoopSiteFile, e); + } + } + + private File getConfigDir(ClusterSpec clusterSpec) { + File configDir = new File(new File(System.getProperty("user.home")), + ".whirr"); + configDir = new File(configDir, clusterSpec.getClusterName()); + configDir.mkdirs(); + return configDir; } private CharSequence generateHadoopConfigurationFile(Properties config) { @@ -220,13 +239,29 @@ private CharSequence generateHadoopConfigurationFile(Properties config) { sb.append("\n"); sb.append("\n"); for (Entry entry : config.entrySet()) { - sb.append("\n"); - sb.append("").append(entry.getKey()).append("\n"); - sb.append("").append(entry.getValue()).append("\n"); - sb.append("\n"); + sb.append(" \n"); + sb.append(" ").append(entry.getKey()).append("\n"); + sb.append(" ").append(entry.getValue()).append("\n"); + sb.append(" \n"); } sb.append("\n"); return sb; } + private void createProxyScript(ClusterSpec clusterSpec, HadoopCluster cluster) { + File configDir = getConfigDir(clusterSpec); + File hadoopProxyFile = new File(configDir, "hadoop-proxy.sh"); + try { + HadoopProxy proxy = new HadoopProxy(clusterSpec, cluster); + String script = String.format("echo 'Running proxy to Hadoop cluster at %s. " + + "Use Ctrl-c to quit.'\n", + cluster.getNamenodePublicAddress().getHostName()) + + Joiner.on(" ").join(proxy.getProxyCommand()); + Files.write(script, hadoopProxyFile, Charsets.UTF_8); + LOG.info("Wrote Hadoop proxy script {}", hadoopProxyFile); + } catch (IOException e) { + LOG.error("Problem writing Hadoop proxy script {}", hadoopProxyFile, e); + } + } + } From 97240dae91ec7596e2c028e88dd5efdcd064b063 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Tue, 5 Oct 2010 20:36:21 +0000 Subject: [PATCH 023/216] WHIRR-113. Hadoop cluster instances should all start in the same location. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1004806 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 3 +++ .../java/org/apache/whirr/service/hadoop/HadoopService.java | 1 + 2 files changed, 4 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 3de9dc85..bd6a68df 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -47,6 +47,9 @@ Trunk (unreleased changes) WHIRR-106. Improve logging in whirr cli. (tomwhite) + WHIRR-113. Hadoop cluster instances should all start in the same location. + (tomwhite) + Release 0.1.0 - 2010-09-02 INCOMPATIBLE CHANGES diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java index c386259a..0556b2f2 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java @@ -155,6 +155,7 @@ public HadoopCluster launchCluster(ClusterSpec clusterSpec) throws IOException { .authorizePublicKey(clusterSpec.getPublicKey())); strategy.configureTemplateBuilder(clusterSpec, slaveTemplateBuilder); + slaveTemplateBuilder.locationId(masterTemplate.getLocation().getId()); Template slaveTemplate = slaveTemplateBuilder.build(); From 26137d874d8c7c8bf25c67d16d2330abdf4260ec Mon Sep 17 00:00:00 2001 From: Thomas White Date: Thu, 7 Oct 2010 18:30:54 +0000 Subject: [PATCH 024/216] WHIRR-112. Expand documentation. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1005565 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 + src/site/confluence/api-guide.confluence | 7 + .../confluence/configuration-guide.confluence | 75 ++++---- ...tically-shutting-down-a-cluster.confluence | 21 +++ .../python/configuring-and-running.confluence | 69 +++++++ .../contrib/python/installation.confluence | 40 ++++ .../python/launching-a-cluster.confluence | 59 ++++++ .../python/running-mapreduce-jobs.confluence | 43 +++++ .../python/running-zookeeper.confluence | 21 +++ .../python/terminating-a-cluster.confluence | 15 ++ .../using-command-line-options.confluence | 77 ++++++++ .../using-persistent-clusters.confluence | 112 ++++++++++++ src/site/confluence/faq.confluence | 173 ++++++++++++++++++ src/site/confluence/index.confluence | 19 ++ .../confluence/quick-start-guide.confluence | 130 ++++++++++--- src/site/site.xml | 16 +- 16 files changed, 817 insertions(+), 62 deletions(-) create mode 100644 src/site/confluence/api-guide.confluence create mode 100644 src/site/confluence/contrib/python/automatically-shutting-down-a-cluster.confluence create mode 100644 src/site/confluence/contrib/python/configuring-and-running.confluence create mode 100644 src/site/confluence/contrib/python/installation.confluence create mode 100644 src/site/confluence/contrib/python/launching-a-cluster.confluence create mode 100644 src/site/confluence/contrib/python/running-mapreduce-jobs.confluence create mode 100644 src/site/confluence/contrib/python/running-zookeeper.confluence create mode 100644 src/site/confluence/contrib/python/terminating-a-cluster.confluence create mode 100644 src/site/confluence/contrib/python/using-command-line-options.confluence create mode 100644 src/site/confluence/contrib/python/using-persistent-clusters.confluence create mode 100644 src/site/confluence/faq.confluence diff --git a/CHANGES.txt b/CHANGES.txt index bd6a68df..c0c0ff52 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -26,6 +26,8 @@ Trunk (unreleased changes) WHIRR-110. Create client-side Hadoop configuration file during cluster launch. (tomwhite) + WHIRR-112. Expand documentation. (tomwhite) + BUG FIXES WHIRR-93. Fail on checkstyle violation. (tomwhite) diff --git a/src/site/confluence/api-guide.confluence b/src/site/confluence/api-guide.confluence new file mode 100644 index 00000000..249371ae --- /dev/null +++ b/src/site/confluence/api-guide.confluence @@ -0,0 +1,7 @@ +h1. API Guide + +Whirr provides a Java API for stopping and starting clusters. Please see the +[javadoc|apidocs/index.html] and the unit test source code for how to +achieve this. + +There's also some example code at [http://github.com/hammer/whirr-demo]. \ No newline at end of file diff --git a/src/site/confluence/configuration-guide.confluence b/src/site/confluence/configuration-guide.confluence index 77cf7742..361a4a39 100644 --- a/src/site/confluence/configuration-guide.confluence +++ b/src/site/confluence/configuration-guide.confluence @@ -1,50 +1,51 @@ -h1. Java +h1. Configuration Guide Whirr is configured using a properties file, and optionally using command line arguments when using the CLI. Command line arguments take precedence over properties specified in a properties file. || Name || Command line option || Default || Description || -| {{config}} | {{\--config}} | none | A filename of a properties file containing properties in this table. | -| {{service-name}} | {{\--service-name}} | none | The name of the service to use. E.g. {{hadoop}} | -| {{cluster-name}} | {{\--cluster-name}} | none | The name of the cluster to operate on. E.g. {{hadoopcluster}}. The cluster name is used to tag the instances in some cloud-specific way. For example, in Amazon it is used to form the security group name. | -| {{instance-templates}} | {{\--instance-templates}} | none | The number of instances to launch for each set of roles. E.g. {{1 nn+jt 1 dn+tt}}. | -| {{provider}} | {{\--provider}} | {{ec2}} | The name of the cloud provider. | -| {{identity}} | {{\--identity}} | none | The cloud identity. See the table below for how this maps to the credentials for your provider. | -| {{credential}} | {{\--credential}} | none | The cloud credential. See the table below for how this maps to the credentials for your provider. | -| {{secret-key-file}} | {{\--secret-key-file}} | _\~/.ssh/id\_rsa_ | The filename of the private key used to connect to instances. | -| {{image-id}} | {{\--image-id}} | none | The ID of the image to use for instances. If not specified then a vanilla Ubuntu image is chosen. | -| {{hardware-id}} | {{\--hardware-id}} | none | The type of hardware to use for the instance. This must be compatible with the image ID. | -| {{location-id}} | {{\--location-id}} | none | The location to launch instances in. If not specified then an arbitrary location will be chosen. | -| {{client-cidrs}} | {{\--client-cidrs}} | none | A comma-separated list of [CIDR |http://en.wikipedia.org/wiki/Classless\_Inter-Domain\_Routing] blocks. E.g. {{208.128.0.0/11,108.128.0.0/11}} | -| {{run-url-base}} | {{\--run-url-base}} | {{http://whirr.s3.amazonaws.com/VERSION/}} | The base URL for forming run urls from. Change this to host your own set of launch scripts. | - +| {{whirr.config}} | {{\--config}} | none | A filename of a properties file containing properties in this table. Note that Whirr properties specified in this file all have a {{whirr.}} prefix. | +| {{whirr.service-name}} | {{\--service-name}} | none | The name of the service to use. E.g. {{hadoop}}. | +| {{whirr.cluster-name}} | {{\--cluster-name}} | none | The name of the cluster to operate on. E.g. {{hadoopcluster}}. The cluster name is used to tag the instances in some cloud-specific way. For example, in Amazon it is used to form the security group name. | +| {{whirr.instance-templates}} | {{\--instance-templates}} | none | The number of instances to launch for each set of roles. E.g. {{1 nn+jt,10 dn+tt}} means one instance with the roles {{nn}} (namenode) and {{jt}} (jobtracker), and ten instances each with the roles {{dn}} (datanode) and {{tt}} (tasktracker). | +| {{whirr.provider}} | {{\--provider}} | {{ec2}} | The name of the cloud provider. See the [table below|#cloud-provider-config] for possible provider names.| +| {{whirr.identity}} | {{\--identity}} | none | The cloud identity. See the [table below|#cloud-provider-config] for how this maps to the credentials for your provider. | +| {{whirr.credential}} | {{\--credential}} | none | The cloud credential. See the [table below|#cloud-provider-config] for how this maps to the credentials for your provider. | +| {{whirr.private-key-file}} | {{\--private-key-file}} | _\~/.ssh/id\_rsa_ | The filename of the private key used to connect to instances. | +| {{whirr.public-key-file}} | {{\--public-key-file}} | _\~/.ssh/id\_rsa_.pub | The filename of the public key used to connect to instances. | +| {{whirr.image-id}} | {{\--image-id}} | none | The ID of the image to use for instances. If not specified then a vanilla Linux image is chosen. | +| {{whirr.hardware-id}} | {{\--hardware-id}} | none | The type of hardware to use for the instance. This must be compatible with the image ID. | +| {{whirr.location-id}} | {{\--location-id}} | none | The location to launch instances in. If not specified then an arbitrary location will be chosen. | +| {{whirr.client-cidrs}} | {{\--client-cidrs}} | none | A comma-separated list of [CIDR |http://en.wikipedia.org/wiki/Classless\_Inter-Domain\_Routing] blocks. E.g. {{208.128.0.0/11,108.128.0.0/11}} | +| {{whirr.run-url-base}} | {{\--run-url-base}} | {{http://whirr.s3.amazonaws.com/VERSION/}} | The base URL for forming run urls from. Change this to host your own set of launch scripts, as explained in the [FAQ|faq#how-can-i-modify-the-instance-installation-and-configuration-scripts]. | + +{anchor:cloud-provider-config} h2. Cloud provider specific configuration -|| Compute Service Provider || {{provider}} || {{identity}} || {{credential}} || Cluster name usage || -| Amazon EC2 | {{ec2}} | Access Key ID | Secret Access Key | Used to form security Group (via jclouds tag) | -| Rackspace Cloud Servers | {{cloudservers}} | Username | API Key | Server name ({{--}}) | - -h1. Python +|| Compute Service Provider || {{whirr.provider}} || {{whirr.identity}} || {{whirr.credential}} || Cluster name usage || Notes || +| Amazon EC2 | {{ec2}} | Access Key ID | Secret Access Key | Used to form security Group (via jclouds tag) | | +| Rackspace Cloud Servers | {{cloudservers}} | Username | API Key | Server name ({{--}}) | Rackspace is not yet supported | -See [https://docs.cloudera.com/display/DOC/Using+Command+Line+Options] +{anchor:comparison-with-python} +h1. Comparison with Python -h2. Comparison +See [Using Command Line Options|contrib/python/using-command-line-options]. || Python || Java || Notes || -| {{config-dir}} | {{config}} | | -| {{service}} | {{service-name}} | | -| none | {{cluster-name}} | Specified as a positional argument on the Python CLI. | -| none | {{instance-templates}} | Specified as a positional arguments on the Python CLI. | -| {{cloud-provider}} | {{provider}} | | -| none | {{identity}} | Specified using environment variables for Python. E.g. {{AWS\_ACCESS\_KEY\_ID}}, {{RACKSPACE\_KEY}} | -| none | {{credential}} | Specified using environment variables for Python. E.g. {{AWS\_ACCESS\_KEY\_ID}}, {{RACKSPACE\_SECRET}} | -| {{private-key-file}} | {{private-key-file}} | | -| {{client-cidr}} | {{client-cidrs}} | Python {{client-cidr}} option may be repeated multiple times, whereas Java {{client-cidrs}} contains comma-separated CIDRs. | -| none | {{run-url-base}} | Specified using {{user-data-file}} in Python. | -| {{public-key}} | none | Based on secret key in Java (add {{.pub}}). | -| {{image-id}} | {{image-id}} | | -| {{instance-type}} | {{hardware-id}} | | -| {{availability-zone}} | {{location-id}} | Location is more general than availability zone. | -| {{security-group}} | none | Amazon-specific. However, Amazon users may wish to start a cluster in additional security groups. | +| {{config-dir}} | {{whirr.config}} | | +| {{service}} | {{whirr.service-name}} | | +| none | {{whirr.cluster-name}} | Specified as a positional argument on the Python CLI. | +| none | {{whirr.instance-templates}} | Specified as a positional arguments on the Python CLI. | +| {{cloud-provider}} | {{whirr.provider}} | | +| none | {{whirr.identity}} | Specified using environment variables for Python. E.g. {{AWS\_ACCESS\_KEY\_ID}}, {{RACKSPACE\_KEY}} | +| none | {{whirr.credential}} | Specified using environment variables for Python. E.g. {{AWS\_ACCESS\_KEY\_ID}}, {{RACKSPACE\_SECRET}} | +| {{private-key}} | {{whirr.private-key-file}} | | +| {{public-key}} | {{whirr.public-key-file}} | | +| {{client-cidr}} | {{whirr.client-cidrs}} | Python's {{client-cidr}} option may be repeated multiple times, whereas Java's {{whirr.client-cidrs}} contains comma-separated CIDRs. | +| none | {{whirr.run-url-base}} | Specified using {{user-data-file}} in Python. | +| {{image-id}} | {{whirr.image-id}} | | +| {{instance-type}} | {{whirr.hardware-id}} | | +| {{availability-zone}} | {{whirr.location-id}} | Location is more general than availability zone. | +| {{security-group}} | none | Amazon-specific. However, Amazon users may wish to start a cluster in additional security groups, which isn't currently supported in Java. | | {{env}} | none | May not be needed in Java with runurls. | | {{user-data-file}} | none | Amazon-specific. Use runurls. | | {{key-name}} | none | Amazon-specific. Jclouds generates a new key for clusters. | diff --git a/src/site/confluence/contrib/python/automatically-shutting-down-a-cluster.confluence b/src/site/confluence/contrib/python/automatically-shutting-down-a-cluster.confluence new file mode 100644 index 00000000..7ae59c81 --- /dev/null +++ b/src/site/confluence/contrib/python/automatically-shutting-down-a-cluster.confluence @@ -0,0 +1,21 @@ +h1. Automatically Shutting Down a Cluster + +You can use the {{--auto-shutdown}} option to automatically terminate a cluster +at a specified number of minutes after launch. This is useful for short-lived +clusters where the jobs complete in a known amount of time. + +*To configure the automatic shutdown (for example, 50 minutes after launch):* +{code} +hadoop-ec2 launch-cluster --auto-shutdown 50 my-hadoop-cluster 2 +{code} + +You can also use the configuration property {{auto\_shutdown}} +in the configuration file; for example, to shut down 50 minutes after launch, +you would use {{auto\_shutdown=50}}. + +*To cancel the automatic shutdown:* +{code} +% hadoop-ec2 exec my-hadoop-cluster shutdown -c +% hadoop-ec2 update-slaves-file my-hadoop-cluster +% hadoop-ec2 exec my-hadoop-cluster /usr/lib/hadoop/bin/slaves.sh shutdown -c +{code} \ No newline at end of file diff --git a/src/site/confluence/contrib/python/configuring-and-running.confluence b/src/site/confluence/contrib/python/configuring-and-running.confluence new file mode 100644 index 00000000..3c091994 --- /dev/null +++ b/src/site/confluence/contrib/python/configuring-and-running.confluence @@ -0,0 +1,69 @@ +h1. Configuring and Running + +h2. Setting Environment Variables to Specify AWS Credentials + +You must specify your AWS credentials when using the cloud scripts (see + [How do I find my cloud credentials?|../../faq#how-do-i-find-my-cloud-credentials]). The +simplest way to do this is to set the environment variables (see +[this page|http://code.google.com/p/boto/wiki/BotoConfig] for other options): +* {{AWS\_ACCESS\_KEY\_ID}}: Your AWS Access Key ID +* {{AWS\_SECRET\_ACCESS\_KEY}}: Your AWS Secret Access Key + +h2. Configuring the Python Cloud Scripts + +To configure the scripts, create a directory called _.hadoop-cloud_ in your +home directory (note the leading period "."). In that directory, create a file +called _clusters.cfg_ that contains a section for each cluster you want to +control. The following example shows how to specify an i386 Ubuntu OS as the +AMI in a _clusters.cfg_ file. + +{code} +[my-hadoop-cluster] +image_id=ami-ed59bf84 +instance_type=c1.medium +key_name=tom +availability_zone=us-east-1c +private_key=/path/to/private/key/file +ssh_options=-i %(private_key)s -o StrictHostKeyChecking=no +{code} + +You can select a suitable AMI from the following table: + +|| AMI (bucket/name) || ID || OS || +| cloudera-ec2-hadoop-images/cloudera-hadoop-ubuntu-20090623-i386 | ami-ed59bf84 | Ubuntu 8.10 (Intrepid) | +| cloudera-ec2-hadoop-images/cloudera-hadoop-ubuntu-20090623-x86_64 | ami-8759bfee | Ubuntu 8.10 (Intrepid) | +| cloudera-ec2-hadoop-images/cloudera-hadoop-fedora-20090623-i386 | ami-6159bf08 | Fedora release 8 (Werewolf) | +| cloudera-ec2-hadoop-images/cloudera-hadoop-fedora-20090623-x86_64 | ami-2359bf4a | Fedora release 8 (Werewolf) | + +*The architecture must be compatible with the instance type. For {{m1.small}} and {{c1.medium}} instances, use the i386 AMIs. For {{m1.large}}, {{m1.xlarge}}, and {{c1.xlarge}} instances, use the x86_64 AMIs. One of the high CPU instances ({{c1.medium}} or {{c1.xlarge}}) is recommended.* + +If you wish to use [CDH|http://www.cloudera.com/hadoop/] instead of Apache +Hadoop, use the following configuration: + +{code} +[my-hadoop-cluster] +image_id=ami-2d4aa444 +instance_type=c1.medium +key_name=tom +availability_zone=us-east-1c +private_key=/path/to/private/key/file +ssh_options=-i %(private_key)s -o StrictHostKeyChecking=no +user_data_file=http://archive.cloudera.com/cloud/ec2/cdh3/hadoop-ec2-init-remote.sh +{code} + +Note that this example uses CDH3, as specified by the {{user\_data\_file}} +property (the version of Hadoop to install is determined by this script). +For CDH, use one of the AMIs from this table: + +|| AMI (bucket/name) || ID || OS || Notes || +| ubuntu-images/ubuntu-lucid-10.04-i386-server-20100427.1 | ami-2d4aa444 | Ubuntu 10.04 (Lucid) | This AMI is suitable for use with CDH3b2 onwards. See http://alestic.com/ | +| ubuntu-images/ubuntu-lucid-10.04-amd64-server-20100427.1 | ami-fd4aa494 | Ubuntu 10.04 (Lucid) | This AMI is suitable for use with CDH3b2 onwards. See http://alestic.com/ | + +h2. {anchor:running-a-basic-cloud-script}Running a Basic Cloud Script + +After specifying an AMI, you can run the {{hadoop-ec2}} script. It will display usage instructions when you invoke it without arguments. + +You can test that the script can connect to your cloud provider by typing: +{code} +% hadoop-ec2 list +{code} \ No newline at end of file diff --git a/src/site/confluence/contrib/python/installation.confluence b/src/site/confluence/contrib/python/installation.confluence new file mode 100644 index 00000000..a349a9d0 --- /dev/null +++ b/src/site/confluence/contrib/python/installation.confluence @@ -0,0 +1,40 @@ +h1. Installation + +The Python cloud scripts enable you to run Hadoop on cloud providers. +A working cluster will start immediately with one command. It's ideal for +running temporary Hadoop clusters to carry out a proof of concept, or to run a +few one-time jobs. Currently, the scripts support Amazon EC2 only, but in the +future other cloud providers may also be supported. + +Amazon Machine Images (AMIs) and associated launch scripts are provided that +make it easy to run Hadoop on EC2. Note that the AMIs contain only base packages +(such as Java), and not a particular version of Hadoop because Hadoop is +installed at launch time. + +*In this section, command lines that start with {{#}} are executed on a cloud +instance, and command lines starting with a {{%}} are executed on your +workstation.* + +h2. Installing the Python Cloud Scripts + +The following prerequisites apply to using the Python cloud scripts: +* Python 2.5 +* boto 1.8d +* simplejson 2.0.9 + +You can install bot and simplejson by using +[easy\_install|http://pypi.python.org/pypi/setuptools]: +{code} +% easy_install "simplejson==2.0.9" +% easy_install "boto==1.8d" +{code} + +*NOTE: If you have both Python 2.5 and 2.6 on your system (e.g. OS X Snow Leopard), then you should use {{easy_install-2.5}}.* + +Alternatively, you might like to use the python-boto and python-simplejson RPM +and Debian packages. + +The Python Cloud scripts are packaged in the source tarball. Unpack the tarball +on your system. The CDH Cloud scripts are in _contrib/python/src/py_. +For convenience, you can add this directory to your path. + diff --git a/src/site/confluence/contrib/python/launching-a-cluster.confluence b/src/site/confluence/contrib/python/launching-a-cluster.confluence new file mode 100644 index 00000000..8d494849 --- /dev/null +++ b/src/site/confluence/contrib/python/launching-a-cluster.confluence @@ -0,0 +1,59 @@ +h1. Launching a Cluster + +After you install the client scripts and enter your EC2 account information, +starting a Hadoop cluster with 10 nodes is easy with a single command. +\\ +\\ +To launch a cluster called "my-hadoop-cluster" with 10 worker (slave) nodes, use this command: +{code} +% hadoop-ec2 launch-cluster my-hadoop-cluster 10 +{code} +\\ +This command boots the master node and 10 worker nodes. The master node runs the +Namenode, secondary Namenode, and Jobtracker, and each worker node runs a +Datanode and a Tasktracker. + +Equivalently, you can launch the cluster by using this command syntax: +{code} +% hadoop-ec2 launch-cluster my-hadoop-cluster 1 nn,snn,jt 10 dn,tt +{code} +Note that by using this syntax, you can also launch a split Namenode/Jobtracker +cluster. For example: +{code} +% hadoop-ec2 launch-cluster my-hadoop-cluster 1 nn,snn 1 jt 10 dn,tt +{code} +After the nodes have started and the Hadoop cluster is operational, the console +will display a message such as: +{code} +Browse the cluster at http://ec2-xxx-xxx-xxx-xxx.compute-1.amazonaws.com/ +{code} +You can access Hadoop's web UI at the URL in the message. By default, port 80 is +opened for access from your client machine. You can change the firewall settings +(to allow access from a network, rather than just a single machine, for example) +by using the Amazon EC2 command line tools, or by using a tool such as +[Elastic Fox|http://developer.amazonwebservices.com/connect/entry.jspa?externalID=609]. +The security group to change is the one named {{-}}. +For example, for the Namenode in the cluster started above, it would be +{{my-hadoop-cluster-nn}}. + +For security reasons, traffic from the network your client is running on is +proxied through the master node of the cluster using an SSH tunnel (a SOCKS +proxy on port 6666). + +To set up the proxy, run the following command: +{code} +% eval `hadoop-ec2 proxy my-hadoop-cluster` +{code} +Note the backticks, which are used to evaluate the result of the command. This +allows you to stop the proxy later on (from the same terminal): +{code} +% kill $HADOOP_CLOUD_PROXY_PID +{code} +Web browsers need to be configured to use this proxy too, so you can view pages +served by worker nodes in the cluster. The most convenient way to do this is to +use a [proxy auto-config (PAC) file|http://en.wikipedia.org/wiki/Proxy\_auto-config] +file, such as [this one|http://apache-hadoop-ec2.s3.amazonaws.com/proxy.pac] +for Hadoop EC2 clusters. + +If you are using Firefox, then you may find +[FoxyProxy|http://foxyproxy.mozdev.org/] useful for managing PAC files. \ No newline at end of file diff --git a/src/site/confluence/contrib/python/running-mapreduce-jobs.confluence b/src/site/confluence/contrib/python/running-mapreduce-jobs.confluence new file mode 100644 index 00000000..5c217bc9 --- /dev/null +++ b/src/site/confluence/contrib/python/running-mapreduce-jobs.confluence @@ -0,0 +1,43 @@ +h1. Running MapReduce Jobs + +After you launch a cluster, a {{hadoop-site.xml}} file is created in the +directory {{~/.hadoop-cloud/}}. You can use this to connect to +the cluster by setting the {{HADOOP\_CONF\_DIR}} environment variable. (It is +also possible to set the configuration file to use by passing it as a {{-conf}} +option to Hadoop Tools): +{code} +% export HADOOP_CONF_DIR=~/.hadoop-cloud/my-hadoop-cluster +{code} +*To browse HDFS:* +{code} +% hadoop fs -ls / +{code} +Note that the version of Hadoop installed locally should match the version +installed on the cluster. +\\ +\\ +*To run a job locally:* +{code} +% hadoop fs -mkdir input # create an input directory +% hadoop fs -put $HADOOP_HOME/LICENSE.txt input # copy a file there +% hadoop jar $HADOOP_HOME/hadoop-*examples*.jar wordcount input output +% hadoop fs -cat output/part-* | head +{code} +The preceding examples assume that you installed Hadoop on your local machine. +But you can also run jobs within the cluster. +\\ +\\ +*To run jobs within the cluster:* + +1. Log into the Namenode: +{code} +% hadoop-ec2 login my-hadoop-cluster +{code} + +2. Run the job: +{code} +# hadoop fs -mkdir input +# hadoop fs -put /etc/hadoop/conf/*.xml input +# hadoop jar /usr/lib/hadoop/hadoop-*-examples.jar grep input output 'dfs\[a-z.]+' +# hadoop fs -cat output/part-* | head +{code} \ No newline at end of file diff --git a/src/site/confluence/contrib/python/running-zookeeper.confluence b/src/site/confluence/contrib/python/running-zookeeper.confluence new file mode 100644 index 00000000..48d94f28 --- /dev/null +++ b/src/site/confluence/contrib/python/running-zookeeper.confluence @@ -0,0 +1,21 @@ +h1. Running Apache ZooKeeper + +The main use of the Python Cloud Scripts is to run Hadoop clusters, but you can +also run other services such as Apache ZooKeeper. + +*To run Apache ZooKeeper, set the {{service}} parameter to {{zookeeper}}:* +{code} +[my-zookeeper-cluster] +service=zookeeper +ami=ami-ed59bf84 +instance_type=m1.small +key_name=tom +availability_zone=us-east-1c +public_key=/path/to/public/key/file +private_key=/path/to/private/key/file +{code} + +*To launch a three-node ZooKeeper ensemble:* +{code} +% ./hadoop-ec2 launch-cluster my-zookeeper-cluster 3 zk +{code} \ No newline at end of file diff --git a/src/site/confluence/contrib/python/terminating-a-cluster.confluence b/src/site/confluence/contrib/python/terminating-a-cluster.confluence new file mode 100644 index 00000000..4d58ae56 --- /dev/null +++ b/src/site/confluence/contrib/python/terminating-a-cluster.confluence @@ -0,0 +1,15 @@ +h1. Terminating a Cluster + +When you are done using your cluster, you can terminate all instances in it. + +*WARNING: All data will be deleted when you terminate the cluster, unless you are using EBS.* + +*To terminate a cluster:* +{code} +% hadoop-ec2 terminate-cluster my-hadoop-cluster +{code} + +*To delete the EC2 security groups:* +{code} +% hadoop-ec2 delete-cluster my-hadoop-cluster +{code} \ No newline at end of file diff --git a/src/site/confluence/contrib/python/using-command-line-options.confluence b/src/site/confluence/contrib/python/using-command-line-options.confluence new file mode 100644 index 00000000..aa650d5f --- /dev/null +++ b/src/site/confluence/contrib/python/using-command-line-options.confluence @@ -0,0 +1,77 @@ +h1. Using Command Line Options + +It is possible to specify options on the command line when you launch a cluster. +The options take precedence over any settings specified in the configuration +file. + +For example, the following command launches a 10-node cluster using a specified +image and instance type, overriding the equivalent settings (if any) that are +in the {{my-hadoop-cluster}} section of the configuration file. Note that words +in options are separated by hyphens ({{--instance-type}}) while the +corresponding configuration parameter are separated by underscores +({{instance\_type}}). +{code} +% hadoop-ec2 launch-cluster --image-id ami-2359bf4a --instance-type c1.xlarge \ +my-hadoop-cluster 10 +{code} + +If there options are that you want to specify multiple times, you can set them +in the configuration file by separating them with newlines (and leading +whitespace). For example: +{code} +env=AWS_ACCESS_KEY_ID=... + AWS_SECRET_ACCESS_KEY=... +{code} + +The scripts install Hadoop from a tarball (or, in the case of CDH, from RPMs or +Debian packages, depending on the OS) at instance boot time. + +By default, Apache Hadoop 0.20.1 is installed. To run a different version of +Hadoop, change the {{user\_data\_file}} setting. + +For example, to use the latest version of CDH3 add the following parameter: +{code} +--user-data-file http://archive.cloudera.com/cloud/ec2/cdh3/hadoop-ec2-init-remote.sh +{code} +By default, the latest version of the specified CDH release series is used. To +use a particular release of CDH, use the {{REPO env}} parameter, in addition to +setting {{user\_data\_file}}. For example, to specify the Beta 1 release of CDH3: +{code} +--env REPO=cdh3b1 +{code} +For this release, Hadoop configuration files can be found in {{/etc/hadoop/conf}} and logs are in {{/var/log/hadoop}}. + + +h2. Customization + +You can specify a list of packages to install on every instance at boot time by +using the {{--user-packages}} command-line option or the {{user\_packages}} +configuration parameter. Packages should be space-separated. Note that package +names should reflect the package manager being used to install them ({{yum}} or +{{apt-get}} depending on the OS). + +For example, to install RPMs for R and git: +{code} +% hadoop-ec2 launch-cluster --user-packages 'R git-core' my-hadoop-cluster 10 +{code} +You have full control over the script that is run when each instance boots. The +default script, {{hadoop-ec2-init-remote.sh}}, may be used as a starting point +to add extra configuration or customization of the instance. Make a copy of the +script in your home directory, or somewhere similar, and set the +{{--user-data-file}} command-line option (or the {{user\_data\_file}} +configuration parameter) to point to the (modified) copy. This option may also +point to an arbitrary URL, which makes it easy to share scripts. + +For CDH, use the script located at [http://archive.cloudera.com/cloud/ec2/cdh3/hadoop-ec2-init-remote.sh] + +The {{hadoop-ec2}} script will replace {{%ENV%}} in your user data script with +{{USER\_PACKAGES}}, {{AUTO\_SHUTDOWN}}, and {{EBS\_MAPPINGS}}, as well as extra +parameters supplied using the {{--env}} command-line flag. + +Another way of customizing the instance, which may be more appropriate for +larger changes, is to create your own image. + +It's possible to use any image, as long as it satisfies both of the following +conditions: +* Runs (gzip compressed) user data on boot +* Has Java installed diff --git a/src/site/confluence/contrib/python/using-persistent-clusters.confluence b/src/site/confluence/contrib/python/using-persistent-clusters.confluence new file mode 100644 index 00000000..13f908d5 --- /dev/null +++ b/src/site/confluence/contrib/python/using-persistent-clusters.confluence @@ -0,0 +1,112 @@ +h1. Using Persistent Clusters + +*Support for Amazon Elastic Block Storage (EBS) is a Beta feature.* + +When not in use, an EBS-cluster can surrender unneeded EC2 instances, then +restart later and continue where it left off. Users no longer need to copy +large volumes of data from S3 to local disk on the EC2 instance; data persists +reliably and independently in Amazon's EBS, saving compute costs. + +*Schematic showing how the cluster is set up:* +!../../images/persistent-ec2.png! + +*To Use Persistent Cluster with EBS Storage* +# Create a new section called {{my-ebs-cluster}} in the +{{\~/.hadoop-cloud/clusters.cfg}} file. +# Create storage for the new cluster by creating a temporary EBS volume of size +100GiB, formatting it, and saving it as a snapshot in S3. This way, you only +have to do the formatting once. + +{code} +% hadoop-ec2 create-formatted-snapshot my-ebs-cluster 100 +{code} + +You create storage for a single Namenode and for two Datanodes. The volumes to +create are described in a JSON spec file, which references the snapshot you +just created. Here is the contents of a JSON file, called +{{my-ebs-cluster-storage-spec.jso}}: + +*Example contents of my-ebs-cluster-storage-spec.json* +{code} +{ + "nn": [ + { + "device": "/dev/sdj", + "mount_point": "/ebs1", + "size_gb": "100", + "snapshot_id": "snap-268e704f" + }, + { + "device": "/dev/sdk", + "mount_point": "/ebs2", + "size_gb": "100", + "snapshot_id": "snap-268e704f" + } + ], + "dn": [ + { + "device": "/dev/sdj", + "mount_point": "/ebs1", + "size_gb": "100", + "snapshot_id": "snap-268e704f" + }, + { + "device": "/dev/sdk", + "mount_point": "/ebs2", + "size_gb": "100", + "snapshot_id": "snap-268e704f" + } + ] +} +{code} + +Each role ({{nn}} and {{dn}}) is the key to an array of volume specifications. +In this example, each role has two devices ({{/dev/sdj}} and {{/dev/sdk}}) with +different mount points, and generated from an EBS snapshot. The snapshot is the +formatted snapshot created earlier, so that the volumes you create are +pre-formatted. The size of the drives must match the size of the snapshot +created earlier. + +*To use this file to create actual volumes:* +{code} +% hadoop-ec2 create-storage my-ebs-cluster nn 1 \ +my-ebs-cluster-storage-spec.json +% hadoop-ec2 create-storage my-ebs-cluster dn 2 \ +my-ebs-cluster-storage-spec.json +{code} + +*To start the cluster with two slave nodes:* +{code} +% hadoop-ec2 launch-cluster my-ebs-cluster 1 nn,snn,jt 2 dn,tt +{code} + +*To login and run a job which creates some output:* +{code} +% hadoop-ec2 login my-ebs-cluster + +# hadoop fs -mkdir input +# hadoop fs -put /etc/hadoop/conf/*.xml input +# hadoop jar /usr/lib/hadoop/hadoop-*-examples.jar grep input output \ +'dfs[a-z.]+' +{code} + +*To view the output:* +{code} +# hadoop fs -cat output/part-* | head +{code} + +*To shutdown the cluster:* +{code} +% hadoop-ec2 terminate-cluster my-ebs-cluster +{code} + +*To restart the cluster and login (after a short delay):* +{code} +% hadoop-ec2 launch-cluster my-ebs-cluster 2 +% hadoop-ec2 login my-ebs-cluster +{code} + +*The output from the job you ran before should still be there:* +{code} +# hadoop fs -cat output/part-* | head +{code} \ No newline at end of file diff --git a/src/site/confluence/faq.confluence b/src/site/confluence/faq.confluence new file mode 100644 index 00000000..114fe685 --- /dev/null +++ b/src/site/confluence/faq.confluence @@ -0,0 +1,173 @@ +h1. Frequently Asked Questions + +{anchor:how-do-i-find-my-cloud-credentials} +h2. How do I find my cloud credentials? + +On EC2: +# Go to [http://aws-portal.amazon.com/gp/aws/developer/account/index.html?action=access-key] +# Log in, if prompted +# Find your Access Key ID and Secret Access Key in the "Access Credentials" section, under the "Access Keys" tab. You will have to click "Show" to see the text of your secret access key. + +Another good resource is [Understanding Access Credentials for AWS/EC2|http://alestic.com/2009/11/ec2-credentials] by Eric Hammond. + +h2. How do I access my cluster from a different network? + +By default, access to clusters is restricted to the single IP address of the +machine starting the cluster, as determined by +[Amazon's check IP service|http://checkip.amazonaws.com/]. However, some +networks report multiple origin IP addresses (e.g. they round-robin between +them by connection), which may cause problems if the address used for later +connections is different to the one reported at the time of the first +connection. + +A related problem is when you wish to access the cluster from a different +network to the one it was launched from. + +In these cases you can specify the IP addresses of the machines that may connect +to the cluster by setting the {{client-cidrs}} property to a comma-separated +list of [CIDR|http://en.wikipedia.org/wiki/Classless\_Inter-Domain\_Routing] +blocks. + +For example, {{208.128.0.0/16,38.102.147.107/32}} would allow access from the +{{208.128.0.0}} class B network, and the (single) IP address 38.102.147.107. + +h2. How can I start a cluster in a particular location? + +By default clusters are started in an arbitrary location (e.g. region or +data center). You can control the location by setting {{location-id}} (see the +[configuration guide|configuration-guide] for details). + +For example, in EC2, setting {{location-id}} to {{us-east-1}} would start the +cluster in the US-East region, while setting it to {{us-east-1a}} (note the +final {{a}}) would start the cluster in that particular availability zone +({{us-east-1a}}) in the US-East region. + +h2. How do I log in to a node in the cluster? + +On EC2, if you know the node's address you can do + +{code} +ssh -i ~/.ssh/id_rsa ec2-user@host +{code} + +This assumes that you use the default private key; if this is not the case then +specify the one you used at cluster launch. + +The Amazon Linux AMI requires that you login as {{ec2-user}}. If needed, you can +become root by doing {{sudo su -}} after logging in. + +{anchor:how-can-i-modify-the-instance-installation-and-configuration-scripts} +h2. How can I modify the instance installation and configuration scripts? + +The scripts to install and configure cloud instances are downloaded from an S3 +bucket by the instances at, or after, boot time. The base URL defaults to +{{http://whirr.s3.amazonaws.com/VERSION/}}, where {{VERSION}} is the +version of Whirr. (Note that S3 buckets are not browsable, so you can't +use a browser to look at these scripts unless you know the URL.) + +If you want to change the scripts then you can place a modified copy of the +scripts in the _scripts_ directory of the distribution on a webserver (such as +S3) and change the base URL, by setting the {{run-url-base}} property. + +For example, by setting {{run-url-base}} to {{http://example.org/}} the scripts +would be loaded from the {{example.org}} domain. The Java install script, for +instance, would be requested from {{http://example.org/sun/java/install}}. + +Scripts have to be publicly readable, so on S3 you have to set the ACL to give +everyone read access. [S3Fox|http://www.s3fox.net/] is a useful Firefox +extension for uploading and managing script files on S3. + +You can debug the scripts that run on a cloud instance without having to log +into the instance, since the output is +sent to _whirr.log_ in the directory from which you launched the _whirr_ CLI. + +h2. How do I specify the service version and other service properties? + +Currently the only way to do this is to modify the scripts to install a +particular version of the service, or to change the service properties from +the defaults. + +See "How to modify the instance installation and configuration scripts" above +for details on how to do this. + +h2. How can I install custom packages? + +You can install extra software by modifying the scripts that run on +the cloud instances. See "How to modify the instance installation and +configuration scripts" above. + +h2. How do I run Cloudera's Distribution for Hadoop? + +You can run CDH rather than Apache Hadoop by running the {{hadoop}} service and +setting {{whirr.hadoop-install-runurl}} to {{cloudera/cdh/install}} (the +default is {{apache/hadoop/install}}). Here is a sample configuration: + +{code} +whirr.service-name=hadoop +whirr.cluster-name=myhadoopcluster +whirr.instance-templates=1 jt+nn,1 dn+tt +whirr.provider=ec2 +whirr.identity= +whirr.credential= +whirr.private-key-file=${sys:user.home}/.ssh/id_rsa +whirr.hadoop-install-runurl=cloudera/cdh/install +{code} + +{anchor:other-services} +h2. How do I run a ZooKeeper cluster? + +The {{service-name}} property determines the service to run, for ZooKeeper it +should be set to {{zookeeper}}. Here is a sample ZooKeeper configuration for +running a three-node ensemble: + +{code} +whirr.service-name=zookeeper +whirr.cluster-name=myzkcluster +whirr.instance-templates=3 zk +whirr.provider=ec2 +whirr.identity= +whirr.credential= +whirr.private-key-file=${sys:user.home}/.ssh/id_rsa +{code} + +h2. How do I run a Cassandra cluster? + +The {{service-name}} property determines the service to run, for Cassandra it +should be set to {{cassandra}}. Here is a sample Cassandra configuration for +running a three-node cluster: + +{code} +whirr.service-name=cassandra +whirr.cluster-name=mycassandracluster +whirr.instance-templates=3 cassandra +whirr.provider=ec2 +whirr.identity= +whirr.credential= +whirr.private-key-file=${sys:user.home}/.ssh/id_rsa +{code} + +h2. How do I automatically tear down a cluster after a fixed time? + +It's often convenient to terminate a cluster a fixed time after launch. This is +the case for test clusters, for example. You can achieve this by scheduling the +destroy command using the {{at}} command from your local machine. + +*WARNING: The machine from which you issued the {{at}} command must be running (and able +to contact the cloud provider) at the time it runs.* + +{code} +% echo 'bin/whirr destroy-cluster --config hadoop.properties' \ + | at 'now + 50 min' +{code} + +Note that issuing a {{shutdown}} command on an instance may simply stop the +instance, which is not sufficient to fully terminate the instance, in which +case you would continue to be charged for it. This is the +case for EBS boot instances, for example. + +You can read more about this technique on +[Eric Hammond's blog|http://alestic.com/2010/09/ec2-instance-termination]. + +Also, Mac OS X users might find +[this thread|http://superuser.com/questions/43678/mac-os-x-at-command-not-working] +a useful reference for the {{at}} command. diff --git a/src/site/confluence/index.confluence b/src/site/confluence/index.confluence index 95d71b8c..eb4c148a 100644 --- a/src/site/confluence/index.confluence +++ b/src/site/confluence/index.confluence @@ -26,6 +26,25 @@ h2. Getting Started You can use Whirr's CLI or APIs to [get started with Whirr|quick-start-guide]. +There is also an [FAQ|faq] which covers how to achieve common +tasks with Whirr, and a [configuration guide|configuration-guide] for reference. + h2. Getting Involved Have you got a suggestion for improving Whirr? It's easy to [get involved|https://cwiki.apache.org/confluence/display/WHIRR/How+To+Contribute]. + +h2. History + +The code that would become Whirr started out in 2007 as some +[bash scripts in Apache Hadoop|https://issues.apache.org/jira/browse/HADOOP-884] +for running Hadoop clusters on EC2. Later the scripts were +[ported to Python|https://issues.apache.org/jira/browse/WHIRR-3] +for extra features (such as EBS support) and a wider range of cloud providers. +These Python scripts are available today in Whirr under _contrib/python_. + +In May 2010 the [Apache Whirr Incubator|http://incubator.apache.org/whirr] +project was started to give a home to +the existing work that had been done, but also to create a Java version +using [jclouds|http://code.google.com/p/jclouds/] as the cloud provisioning +library. jclouds supports many providers and has a very rich API for running +code on instances, so it provides a very solid foundation for building Whirr on. \ No newline at end of file diff --git a/src/site/confluence/quick-start-guide.confluence b/src/site/confluence/quick-start-guide.confluence index 724b540f..102e9d6a 100644 --- a/src/site/confluence/quick-start-guide.confluence +++ b/src/site/confluence/quick-start-guide.confluence @@ -1,37 +1,37 @@ h1. Getting Started with Whirr -h2. Whirr CLI +The Whirr CLI provides the most convenient way to launch clusters. h3. Pre-requisites -You need to install Java 6 on your machine. Also, you need to have an account with a cloud provider, -such as Amazon EC2. +You need to install Java 6 on your machine. Also, you need to have an account with a cloud provider, such as Amazon EC2. h3. Install Whirr [Download|http://www.apache.org/dyn/closer.cgi/incubator/whirr/] or -[build|https://cwiki.apache.org/confluence/display/WHIRR/How+To+Contribute] Whirr. Call the directory -which contains the Whirr JAR files {{WHIRR\_HOME}} (you might like to define this as an environment variable). +[build|https://cwiki.apache.org/confluence/display/WHIRR/How+To+Contribute] Whirr. -You can test that Whirr is working by running -(this is for version {{0.1.0-incubating}}): +You can test that Whirr is working by running: {code} -% java -jar $WHIRR_HOME/whirr-cli-0.1.0-incubating.jar +% bin/whirr version {code} -It is handy to create an alias for whirr: +Which will display the version of Whirr that is installed. + +To get usage instructions and a list of available services type: {code} -% alias whirr='java -jar $WHIRR_HOME/whirr-cli-0.1.0-incubating.jar' +% bin/whirr {code} -h3. Launch a cluster +h3. Launch a Hadoop cluster First, create a properties file to define the cluster. The name doesn't matter, but here we will assume it is called _hadoop.properties_ and located in your home directory. This file defines a cluster with a single machine for the namenode and jobtracker, and -a further machine for a datanode and tasktracker. +a further machine for a datanode and tasktracker. You can see how to launch +other services in the [FAQ|faq#other-services]. {code} whirr.service-name=hadoop @@ -43,32 +43,114 @@ whirr.credential= whirr.private-key-file=${sys:user.home}/.ssh/id_rsa {code} +Note that you do not need to choose a particular cloud image, since the default +(which depends on the provider) should work well. However, it is possible to +choose a particular image if you want to; see the [Configuration Guide|configuration-guide] +for details. + Run the following command to launch a cluster: {code} -% whirr launch-cluster --config hadoop.properties +% bin/whirr launch-cluster --config hadoop.properties {code} -Once the cluster has launched you can browse it by connecting to http://master-host:50030. +Messages will be logged to the console as the cluster starts. You can see +debug-level logging in a file named _whirr.log_ in the directory you ran the +_whirr_ command from. -h3. Configuration +A message will be printed out when the cluster has started, with a URL that you +can use to access the web UI. -Whirr is configured using a properties file, and optionally using command line arguments when using the CLI. Command line arguments take precedence over properties specified in a properties file. +h3. Run a proxy -See the [Configuration Guide|configuration-guide] for details. +For security reasons, traffic from the network your client is running on is +proxied through the master node of the cluster using an SSH tunnel +(a SOCKS proxy on port 6666). -h3. Destroy a cluster +A script to launch the proxy is created when you launch the cluster, and may be found in +_~/.whirr/_. Run it as a follows (in a new terminal window): + +{code} +% . ~/.whirr/myhadoopcluster/hadoop-proxy.sh +{code} + +To stop the proxy, just kill the process with Ctrl-C. -When you've finished using a cluster you can terminate the instances and clean up resources with +Web browsers need to be configured to use this proxy too, so you can view pages +served by worker nodes in the cluster. The most convenient way to do this is to +use a +[proxy auto-config (PAC) file|http://en.wikipedia.org/wiki/Proxy\_auto-config] +file, such as [this one|http://apache-hadoop-ec2.s3.amazonaws.com/proxy.pac] for +Hadoop EC2 clusters. + +If you are using Firefox, then you may find +[FoxyProxy|http://foxyproxy.mozdev.org/] useful for managing PAC files. + +h3. Run a MapReduce job + +After you launch a cluster, a _hadoop-site.xml_ file is created in the directory +_~/.whirr/_. You can use this to connect to the cluster by setting +the {{HADOOP\_CONF\_DIR}} environment variable. +(It is also possible to set the configuration file to use by passing it as a +{{-conf}} option to Hadoop Tools): {code} -% whirr destroy-cluster --config hadoop.properties +% export HADOOP_CONF_DIR=~/.whirr/myhadoopcluster {code} -h2. Whirr API +You should now be able to browse HDFS: -Whirr provides a Java API for stopping and starting clusters. Please see the unit test source code for -how to achieve this. +{code} +% hadoop fs -ls / +{code} -There's also some example code at [http://github.com/hammer/whirr-demo]. +Note that the version of Hadoop installed locally should match the version +installed on the cluster. You should also make sure that the {{HADOOP\_HOME}} +environment variable is set. + +Here's how you can run a MapReduce job: + +{code} +hadoop fs -mkdir input +hadoop fs -put $HADOOP_HOME/LICENSE.txt input +hadoop jar $HADOOP_HOME/hadoop-*examples.jar wordcount input output +hadoop fs -cat output/part-* | head +{code} + +h3. Configuration + +Whirr is configured using a properties file, and optionally using command line arguments when using the CLI. Command line arguments take precedence over properties specified in a properties file. + +For example, instead of using the properties file above, you could launch a +Hadoop cluster with the following command line (note that the {{whirr.}} prefix +for properties is not reflected in the command line argument): + +{code} +% bin/whirr launch-cluster \ + --service-name=hadoop \ + --cluster-name=myhadoopcluster \ + --instance-templates='1 jt+nn,1 dn+tt' \ + --provider=ec2 \ + --identity=$AWS_ACCESS_KEY_ID \ + --credential=$AWS_SECRET_ACCESS_KEY \ + --private-key-file=~/.ssh/id_rsa +{code} + +Notice that here we took advantage of the fact that the AWS credentials have +been defined in environment variables. + +See the [configuration guide|configuration-guide] for a list of all the configuration +properties you can set. + +h3. Destroy a cluster + +When you've finished using a cluster you can terminate the instances and clean up resources with the following. + +*WARNING: All data will be deleted when you destroy the cluster.* + +{code} +% bin/whirr destroy-cluster --config hadoop.properties +{code} +At this point you shut down the SSH proxy to the cluster if you started one +earlier. diff --git a/src/site/site.xml b/src/site/site.xml index 593d10c2..e683ae66 100644 --- a/src/site/site.xml +++ b/src/site/site.xml @@ -66,11 +66,25 @@ -

+ + + + + + + + + + + + + + + From c7b5b983f714536f5b1c497d8a695bc6ac67033c Mon Sep 17 00:00:00 2001 From: Thomas White Date: Tue, 26 Oct 2010 16:39:35 +0000 Subject: [PATCH 025/216] WHIRR-114. Support + character in version number. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1027637 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 ++ .../org/apache/whirr/service/ClusterSpec.java | 28 +++++++++++++++++-- .../main/resources/whirr-default.properties | 2 +- .../apache/whirr/service/ClusterSpecTest.java | 13 +++++++-- 4 files changed, 39 insertions(+), 6 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index c0c0ff52..b8fd2f6b 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -52,6 +52,8 @@ Trunk (unreleased changes) WHIRR-113. Hadoop cluster instances should all start in the same location. (tomwhite) + WHIRR-114. Support + character in version number. (tomwhite) + Release 0.1.0 - 2010-09-02 INCOMPATIBLE CHANGES diff --git a/core/src/main/java/org/apache/whirr/service/ClusterSpec.java b/core/src/main/java/org/apache/whirr/service/ClusterSpec.java index 470268b8..3a0dd533 100644 --- a/core/src/main/java/org/apache/whirr/service/ClusterSpec.java +++ b/core/src/main/java/org/apache/whirr/service/ClusterSpec.java @@ -30,6 +30,8 @@ import java.io.File; import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; import java.util.List; import java.util.Set; @@ -58,6 +60,7 @@ public enum Property { HARDWARE_ID(String.class, false), LOCATION_ID(String.class, false), CLIENT_CIDRS(String.class, true), + VERSION(String.class, false), RUN_URL_BASE(String.class, false); private Class type; @@ -154,6 +157,7 @@ public static List parse(String... strings) { private String hardwareId; private String locationId; private List clientCidrs; + private String version; private String runUrlBase; private Configuration config; @@ -196,7 +200,17 @@ public ClusterSpec(Configuration config) setHardwareId(config.getString(Property.HARDWARE_ID.getConfigName())); setLocationId(config.getString(Property.LOCATION_ID.getConfigName())); setClientCidrs(c.getList(Property.CLIENT_CIDRS.getConfigName())); - setRunUrlBase(c.getString(Property.RUN_URL_BASE.getConfigName())); + setVersion(c.getString(Property.VERSION.getConfigName())); + String runUrlBase = c.getString(Property.RUN_URL_BASE.getConfigName()); + if (runUrlBase == null) { + try { + runUrlBase = String.format("http://whirr.s3.amazonaws.com/%s/", + URLEncoder.encode(getVersion(), "UTF-8")); + } catch (UnsupportedEncodingException e) { + throw new ConfigurationException(e); + } + } + setRunUrlBase(runUrlBase); this.config = c; } @@ -264,7 +278,9 @@ public String getLocationId() { public List getClientCidrs() { return clientCidrs; } - + public String getVersion() { + return version; + } public String getRunUrlBase() { return runUrlBase; } @@ -354,6 +370,10 @@ public void setLocationId(String locationId) { public void setClientCidrs(List clientCidrs) { this.clientCidrs = clientCidrs; } + + public void setVersion(String version) { + this.version = version; + } public void setRunUrlBase(String runUrlBase) { this.runUrlBase = runUrlBase; @@ -378,6 +398,7 @@ public boolean equals(Object o) { && Objects.equal(hardwareId, that.hardwareId) && Objects.equal(locationId, that.locationId) && Objects.equal(clientCidrs, that.clientCidrs) + && Objects.equal(version, that.version) && Objects.equal(runUrlBase, that.runUrlBase) ; } @@ -387,7 +408,7 @@ public boolean equals(Object o) { public int hashCode() { return Objects.hashCode(instanceTemplates, serviceName, provider, identity, credential, clusterName, publicKey, - privateKey, imageId, hardwareId, locationId, clientCidrs, + privateKey, imageId, hardwareId, locationId, clientCidrs, version, runUrlBase); } @@ -405,6 +426,7 @@ public String toString() { .add("instanceSizeId", hardwareId) .add("locationId", locationId) .add("clientCidrs", clientCidrs) + .add("version", version) .add("runUrlBase", runUrlBase) .toString(); } diff --git a/core/src/main/resources/whirr-default.properties b/core/src/main/resources/whirr-default.properties index 35d371fc..731d6e11 100644 --- a/core/src/main/resources/whirr-default.properties +++ b/core/src/main/resources/whirr-default.properties @@ -12,4 +12,4 @@ whirr.private-key-file=${sys:user.home}/.ssh/id_rsa whirr.public-key-file=${sys:user.home}/.ssh/id_rsa.pub -whirr.run-url-base=http://whirr.s3.amazonaws.com/${version}/ \ No newline at end of file +whirr.version=${version} diff --git a/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java b/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java index b8999226..05df5bac 100644 --- a/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java +++ b/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java @@ -18,6 +18,7 @@ package org.apache.whirr.service; +import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.startsWith; import static org.junit.Assert.assertThat; @@ -41,8 +42,16 @@ public void testDefaultsCanBeOverridden() throws ConfigurationException { conf.setProperty(ClusterSpec.Property.RUN_URL_BASE.getConfigName(), "http://example.org"); ClusterSpec spec = new ClusterSpec(conf); - assertThat(spec.getRunUrlBase(), - startsWith("http://example.org")); + assertThat(spec.getRunUrlBase(), is("http://example.org")); } + @Test + public void testVersionInRunUrlbaseIsUrlEncoded() + throws ConfigurationException { + Configuration conf = new PropertiesConfiguration(); + conf.setProperty(ClusterSpec.Property.VERSION.getConfigName(), "0.1.0+1"); + ClusterSpec spec = new ClusterSpec(conf); + assertThat(spec.getRunUrlBase(), + is("http://whirr.s3.amazonaws.com/0.1.0%2B1/")); + } } From 59df44eb42137ef99d86232c66a25879dd1acbc1 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Wed, 27 Oct 2010 17:03:08 +0000 Subject: [PATCH 026/216] WHIRR-52. Support all services on Rackspace Cloud Servers. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1028038 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 + cli/pom.xml | 2 +- core/pom.xml | 2 +- pom.xml | 2 +- scripts/apache/cassandra/post-configure | 29 +++++++++-- scripts/apache/zookeeper/post-configure | 23 ++++++++- scripts/util/configure-hostnames | 48 +++++++++++++++++++ services/cassandra/pom.xml | 2 +- .../service/cassandra/CassandraService.java | 13 ++++- services/hadoop/pom.xml | 2 +- .../whirr/service/hadoop/HadoopService.java | 4 +- services/zookeeper/pom.xml | 2 +- .../service/zookeeper/ZooKeeperService.java | 42 +++++++++------- src/site/confluence/faq.confluence | 15 ++++++ src/site/confluence/index.confluence | 2 +- 15 files changed, 159 insertions(+), 31 deletions(-) create mode 100644 scripts/util/configure-hostnames diff --git a/CHANGES.txt b/CHANGES.txt index b8fd2f6b..cd5a87c2 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -28,6 +28,8 @@ Trunk (unreleased changes) WHIRR-112. Expand documentation. (tomwhite) + WHIRR-52. Support all services on Rackspace Cloud Servers. (tomwhite) + BUG FIXES WHIRR-93. Fail on checkstyle violation. (tomwhite) diff --git a/cli/pom.xml b/cli/pom.xml index d797af20..8d010f4a 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -51,7 +51,7 @@ org.jclouds - jclouds-aws + jclouds-allcompute org.jclouds diff --git a/core/pom.xml b/core/pom.xml index 290fa35a..a93d8b8f 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -31,7 +31,7 @@ org.jclouds - jclouds-aws + jclouds-allcompute org.jclouds diff --git a/pom.xml b/pom.xml index 4bd08d75..15efb168 100644 --- a/pom.xml +++ b/pom.xml @@ -52,7 +52,7 @@ org.jclouds - jclouds-aws + jclouds-allcompute ${jclouds.version} diff --git a/scripts/apache/cassandra/post-configure b/scripts/apache/cassandra/post-configure index c45e6f12..b5751bfe 100644 --- a/scripts/apache/cassandra/post-configure +++ b/scripts/apache/cassandra/post-configure @@ -21,7 +21,30 @@ set -x set -e -SELF_HOST=`/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'` +CLOUD_PROVIDER= +while getopts "c:" OPTION; do + case $OPTION in + c) + CLOUD_PROVIDER="$OPTARG" + shift $((OPTIND-1)); OPTIND=1 + ;; + esac +done + +case $CLOUD_PROVIDER in + # We want the gossip protocol to use internal (private) addresses, and the + # client to use public addresses. + # See http://wiki.apache.org/cassandra/FAQ#cant_listen_on_ip_any + ec2) + PRIVATE_SELF_HOST=`wget -q -O - http://169.254.169.254/latest/meta-data/local-ipv4` + # EC2 is NATed + PUBLIC_SELF_HOST=$PRIVATE_SELF_HOST + ;; + *) + PUBLIC_SELF_HOST=`/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'` + PRIVATE_SELF_HOST=`/sbin/ifconfig eth1 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'` + ;; +esac config_file=/etc/cassandra/conf/storage-conf.xml @@ -33,8 +56,8 @@ done #TODO set replication sed -i -e "s|127.0.0.1|$seeds|" $config_file -sed -i -e "s|localhost|$SELF_HOST|" $config_file -sed -i -e "s|localhost|$SELF_HOST|" $config_file +sed -i -e "s|localhost|$PRIVATE_SELF_HOST|" $config_file +sed -i -e "s|localhost|$PUBLIC_SELF_HOST|" $config_file # Now that it's configured, start Cassandra nohup /etc/rc.local & \ No newline at end of file diff --git a/scripts/apache/zookeeper/post-configure b/scripts/apache/zookeeper/post-configure index a20089b5..5ff48d7c 100644 --- a/scripts/apache/zookeeper/post-configure +++ b/scripts/apache/zookeeper/post-configure @@ -18,12 +18,31 @@ # Configure Apache ZooKeeper after the ensemble has started. # # Call with arguments listing all the servers in the ensemble: -# post-configure * +# post-configure -c * set -x set -e -SELF_HOST=`/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'` +CLOUD_PROVIDER= +while getopts "c:" OPTION; do + case $OPTION in + c) + CLOUD_PROVIDER="$OPTARG" + shift $((OPTIND-1)); OPTIND=1 + ;; + esac +done + +case $CLOUD_PROVIDER in + # Use private IP for SELF_HOST + # ZooKeeper listens on all addresses, not just the one specified in server. + ec2) + SELF_HOST=`wget -q -O - http://169.254.169.254/latest/meta-data/local-ipv4` + ;; + *) + SELF_HOST=`/sbin/ifconfig eth1 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'` + ;; +esac myid_file=/var/log/zookeeper/txlog/myid config_file=/etc/zookeeper/conf/zoo.cfg diff --git a/scripts/util/configure-hostnames b/scripts/util/configure-hostnames new file mode 100644 index 00000000..4bb7a54e --- /dev/null +++ b/scripts/util/configure-hostnames @@ -0,0 +1,48 @@ +#!/usr/bin/env bash +# +# 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. +# + +# Ensure that hostnames resolve correctly. + +set -x +set -e + +CLOUD_PROVIDER= +while getopts "c:" OPTION; do + case $OPTION in + c) + CLOUD_PROVIDER="$OPTARG" + shift $((OPTIND-1)); OPTIND=1 + ;; + esac +done + +case $CLOUD_PROVIDER in + cloudservers) + if which dpkg &> /dev/null; then + PRIVATE_IP=`/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'` + HOSTNAME=`echo $PRIVATE_IP | tr . -`.static.cloud-ips.com + echo $HOSTNAME > /etc/hostname + sed -i -e "s/$PRIVATE_IP.*/$PRIVATE_IP $HOSTNAME/" /etc/hosts + set +e + /etc/init.d/hostname restart + set -e + sleep 2 + hostname + fi + ;; +esac \ No newline at end of file diff --git a/services/cassandra/pom.xml b/services/cassandra/pom.xml index 5713d5c1..b65fd4e3 100644 --- a/services/cassandra/pom.xml +++ b/services/cassandra/pom.xml @@ -43,7 +43,7 @@ org.jclouds - jclouds-aws + jclouds-allcompute org.jclouds diff --git a/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java b/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java index de7e13e9..954b68b9 100644 --- a/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java +++ b/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java @@ -54,7 +54,9 @@ import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.Template; import org.jclouds.compute.domain.TemplateBuilder; +import org.jclouds.compute.options.RunScriptOptions; import org.jclouds.compute.predicates.NodePredicates; +import org.jclouds.domain.Credentials; import org.jclouds.io.Payload; import org.jclouds.ssh.ExecResponse; import org.slf4j.Logger; @@ -121,14 +123,21 @@ public Cluster launchCluster(ClusterSpec clusterSpec) throws IOException { // Pass list of all servers in cluster to configure script. String servers = Joiner.on(' ').join(getPrivateIps(seeds)); Payload configureScript = newStringPayload(runUrls(clusterSpec.getRunUrlBase(), - "apache/cassandra/post-configure " + servers)); + String.format("apache/cassandra/post-configure -c %s %s", + clusterSpec.getProvider(), + servers))); + // Use private key to run script + Credentials credentials = new Credentials( + Iterables.get(nodes, 0).getCredentials().identity, + clusterSpec.readPrivateKey()); try { LOG.info("Running configuration script"); Map responses = computeService .runScriptOnNodesMatching( NodePredicates.runningWithTag(clusterSpec.getClusterName()), - configureScript); + configureScript, + RunScriptOptions.Builder.overrideCredentialsWith(credentials)); assert responses.size() > 0 : "no nodes matched " + clusterSpec.getClusterName(); } catch (RunScriptOnNodesException e) { diff --git a/services/hadoop/pom.xml b/services/hadoop/pom.xml index a8e34a66..8a24e91a 100644 --- a/services/hadoop/pom.xml +++ b/services/hadoop/pom.xml @@ -43,7 +43,7 @@ org.jclouds - jclouds-aws + jclouds-allcompute org.jclouds diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java index 0556b2f2..43cff32e 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java @@ -90,6 +90,7 @@ public HadoopCluster launchCluster(ClusterSpec clusterSpec) throws IOException { String hadoopInstallRunUrl = clusterSpec.getConfiguration().getString( "whirr.hadoop-install-runurl", "apache/hadoop/install"); Payload nnjtBootScript = newStringPayload(runUrls(clusterSpec.getRunUrlBase(), + String.format("util/configure-hostnames -c %s", clusterSpec.getProvider()), "sun/java/install", String.format("%s nn,jt -c %s", hadoopInstallRunUrl, clusterSpec.getProvider()))); @@ -142,6 +143,7 @@ public HadoopCluster launchCluster(ClusterSpec clusterSpec) throws IOException { // Launch slaves (DN and TT) Payload slaveBootScript = newStringPayload(runUrls(clusterSpec.getRunUrlBase(), + String.format("util/configure-hostnames -c %s", clusterSpec.getProvider()), "sun/java/install", String.format("%s dn,tt -n %s -j %s -c %s", hadoopInstallRunUrl, @@ -154,7 +156,7 @@ public HadoopCluster launchCluster(ClusterSpec clusterSpec) throws IOException { .installPrivateKey(clusterSpec.getPrivateKey()) .authorizePublicKey(clusterSpec.getPublicKey())); - strategy.configureTemplateBuilder(clusterSpec, slaveTemplateBuilder); + slaveTemplateBuilder.fromTemplate(masterTemplate); // base on master slaveTemplateBuilder.locationId(masterTemplate.getLocation().getId()); Template slaveTemplate = slaveTemplateBuilder.build(); diff --git a/services/zookeeper/pom.xml b/services/zookeeper/pom.xml index 27d7495d..87d4f35a 100644 --- a/services/zookeeper/pom.xml +++ b/services/zookeeper/pom.xml @@ -43,7 +43,7 @@ org.jclouds - jclouds-aws + jclouds-allcompute org.jclouds diff --git a/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java b/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java index d13a02b8..6c5cb9a1 100644 --- a/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java +++ b/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java @@ -52,7 +52,9 @@ import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.Template; import org.jclouds.compute.domain.TemplateBuilder; +import org.jclouds.compute.options.RunScriptOptions; import org.jclouds.compute.predicates.NodePredicates; +import org.jclouds.domain.Credentials; import org.jclouds.io.Payload; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -116,11 +118,19 @@ public ZooKeeperCluster launchCluster(ClusterSpec clusterSpec) throws IOExceptio // Position is significant: i-th server has id i. String servers = Joiner.on(' ').join(getPrivateIps(nodes)); Payload configureScript = newStringPayload(runUrls(clusterSpec.getRunUrlBase(), - "apache/zookeeper/post-configure " + servers)); + String.format("apache/zookeeper/post-configure -c %s %s", + clusterSpec.getProvider(), + servers))); + // Use private key to run script + Credentials credentials = new Credentials( + Iterables.get(nodes, 0).getCredentials().identity, + clusterSpec.readPrivateKey()); try { LOG.info("Running configuration script"); computeService.runScriptOnNodesMatching(NodePredicates.runningWithTag( - clusterSpec.getClusterName()), configureScript); + clusterSpec.getClusterName()), + configureScript, + RunScriptOptions.Builder.overrideCredentialsWith(credentials)); } catch (RunScriptOnNodesException e) { // TODO: retry throw new IOException(e); @@ -138,11 +148,11 @@ private List getPrivateIps(List nodes) { @Override public String apply(NodeMetadata node) { try { - return InetAddress.getByName(Iterables.get(node.getPrivateAddresses(), 0)).getHostAddress(); - } catch (UnknownHostException e) { - Throwables.propagate(e); - return null; - } + return InetAddress.getByName(Iterables.get(node.getPrivateAddresses(), 0)).getHostAddress(); + } catch (UnknownHostException e) { + Throwables.propagate(e); + return null; + } } }); } @@ -153,9 +163,9 @@ private Set getInstances(List nodes) { @Override public Instance apply(NodeMetadata node) { try { - return new Instance(node.getCredentials(), Collections.singleton(ZOOKEEPER_ROLE), - InetAddress.getByName(Iterables.get(node.getPublicAddresses(), 0)), - InetAddress.getByName(Iterables.get(node.getPrivateAddresses(), 0))); + return new Instance(node.getCredentials(), Collections.singleton(ZOOKEEPER_ROLE), + InetAddress.getByName(Iterables.get(node.getPublicAddresses(), 0)), + InetAddress.getByName(Iterables.get(node.getPrivateAddresses(), 0))); } catch (UnknownHostException e) { throw new RuntimeException(e); } @@ -169,12 +179,12 @@ private List getHosts(List nodes) { @Override public String apply(NodeMetadata node) { String publicIp; - try { - publicIp = InetAddress.getByName(Iterables.get(node.getPublicAddresses(), 0)).getHostName(); - } catch (UnknownHostException e) { - Throwables.propagate(e); - return null; - } + try { + publicIp = InetAddress.getByName(Iterables.get(node.getPublicAddresses(), 0)).getHostName(); + } catch (UnknownHostException e) { + Throwables.propagate(e); + return null; + } return String.format("%s:%d", publicIp, CLIENT_PORT); } }); diff --git a/src/site/confluence/faq.confluence b/src/site/confluence/faq.confluence index 114fe685..1148788a 100644 --- a/src/site/confluence/faq.confluence +++ b/src/site/confluence/faq.confluence @@ -10,6 +10,21 @@ On EC2: Another good resource is [Understanding Access Credentials for AWS/EC2|http://alestic.com/2009/11/ec2-credentials] by Eric Hammond. +h2. Can I specify my own private key? + +Yes, by setting {{whirr.private-key-file}} (or {{\--private-key-file}} on the +command line). You should also set {{whirr.public-key-file}} +({{\--public-key-file}}) at the same time. + +Private keys must not have a passphrase associated with them. You can check this +with: + +{code} +grep ENCRYPTED ~/.ssh/id_rsa +{code} + +If there is no passphrase then there will be no match. + h2. How do I access my cluster from a different network? By default, access to clusters is restricted to the single IP address of the diff --git a/src/site/confluence/index.confluence b/src/site/confluence/index.confluence index eb4c148a..b670c6be 100644 --- a/src/site/confluence/index.confluence +++ b/src/site/confluence/index.confluence @@ -16,7 +16,7 @@ the cloud provider and service combinations that have been tested. ||Cloud provider||Cassandra||Hadoop||ZooKeeper|| |Amazon EC2|Yes|Yes|Yes| -|Rackspace|No|No|No| +|Rackspace Cloud Servers|Yes|Yes|Yes| h2. Download From 7596b3dadfb6a668b9fd44f3f125851711d534c0 Mon Sep 17 00:00:00 2001 From: "Patrick D. Hunt" Date: Mon, 1 Nov 2010 22:59:27 +0000 Subject: [PATCH 027/216] WHIRR-91. Add DISCLAIMER file to CLI JAR git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1029887 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 ++ cli/src/main/resources/META-INF/DISCLAIMER.txt | 15 +++++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 cli/src/main/resources/META-INF/DISCLAIMER.txt diff --git a/CHANGES.txt b/CHANGES.txt index cd5a87c2..0ac50f0c 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -56,6 +56,8 @@ Trunk (unreleased changes) WHIRR-114. Support + character in version number. (tomwhite) + WHIRR-91. Add DISCLAIMER file to CLI JAR (phunt) + Release 0.1.0 - 2010-09-02 INCOMPATIBLE CHANGES diff --git a/cli/src/main/resources/META-INF/DISCLAIMER.txt b/cli/src/main/resources/META-INF/DISCLAIMER.txt new file mode 100644 index 00000000..dc9ed05c --- /dev/null +++ b/cli/src/main/resources/META-INF/DISCLAIMER.txt @@ -0,0 +1,15 @@ +Apache Whirr is an effort undergoing incubation at the Apache Software +Foundation (ASF), sponsored by the Apache Incubator PMC. + +Incubation is required of all newly accepted projects until a further review +indicates that the infrastructure, communications, and decision making process +have stabilized in a manner consistent with other successful ASF projects. + +While incubation status is not necessarily a reflection of the completeness +or stability of the code, it does indicate that the project has yet to be +fully endorsed by the ASF. + +For more information about the incubation status of the Whirr project you +can go to the following page: + +http://incubator.apache.org/whirr/ From 6d9f0839d4fbb156032e68f855a64b4951603742 Mon Sep 17 00:00:00 2001 From: "Patrick D. Hunt" Date: Mon, 1 Nov 2010 23:08:01 +0000 Subject: [PATCH 028/216] Preparing for release 0.2.0-incubating git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1029888 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 0ac50f0c..d516c018 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,6 +1,6 @@ Apache Whirr Change Log -Trunk (unreleased changes) +Release 0.2.0 - 2010-11-04 NEW FEATURES From 1d9eb1d72f3de16fb140c52ce38b8d19c5cd5b81 Mon Sep 17 00:00:00 2001 From: "Patrick D. Hunt" Date: Mon, 1 Nov 2010 23:13:12 +0000 Subject: [PATCH 029/216] Preparing for release 0.2.0-incubating git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1029890 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 9 +++++++++ build-tools/pom.xml | 4 ++-- cli/pom.xml | 4 ++-- core/pom.xml | 4 ++-- pom.xml | 4 ++-- services/cassandra/pom.xml | 4 ++-- services/hadoop/pom.xml | 4 ++-- services/zookeeper/pom.xml | 4 ++-- 8 files changed, 23 insertions(+), 14 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index d516c018..22b0a841 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,5 +1,14 @@ Apache Whirr Change Log +Trunk (unreleased changes) + + NEW FEATURES + + IMPROVEMENTS + + BUG FIXES + + Release 0.2.0 - 2010-11-04 NEW FEATURES diff --git a/build-tools/pom.xml b/build-tools/pom.xml index 15c5dfe9..8660dba2 100644 --- a/build-tools/pom.xml +++ b/build-tools/pom.xml @@ -20,12 +20,12 @@ org.apache.whirr whirr - 0.2.0-incubating-SNAPSHOT + 0.3.0-incubating-SNAPSHOT ../pom.xml org.apache.whirr whirr-build-tools jar - 0.2.0-incubating-SNAPSHOT + 0.3.0-incubating-SNAPSHOT Apache Whirr Build Tools diff --git a/cli/pom.xml b/cli/pom.xml index 8d010f4a..bf572f45 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -20,13 +20,13 @@ org.apache.whirr whirr - 0.2.0-incubating-SNAPSHOT + 0.3.0-incubating-SNAPSHOT ../pom.xml org.apache.whirr whirr-cli jar - 0.2.0-incubating-SNAPSHOT + 0.3.0-incubating-SNAPSHOT Apache Whirr CLI diff --git a/core/pom.xml b/core/pom.xml index a93d8b8f..072d1c27 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -20,13 +20,13 @@ org.apache.whirr whirr - 0.2.0-incubating-SNAPSHOT + 0.3.0-incubating-SNAPSHOT ../pom.xml org.apache.whirr whirr-core jar - 0.2.0-incubating-SNAPSHOT + 0.3.0-incubating-SNAPSHOT Apache Whirr Core diff --git a/pom.xml b/pom.xml index 15efb168..9fabda3c 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ org.apache.whirr whirr - 0.2.0-incubating-SNAPSHOT + 0.3.0-incubating-SNAPSHOT pom Whirr @@ -179,7 +179,7 @@ org.apache.whirr whirr-build-tools - 0.2.0-incubating-SNAPSHOT + 0.3.0-incubating-SNAPSHOT diff --git a/services/cassandra/pom.xml b/services/cassandra/pom.xml index b65fd4e3..44f8ae33 100644 --- a/services/cassandra/pom.xml +++ b/services/cassandra/pom.xml @@ -20,13 +20,13 @@ org.apache.whirr whirr - 0.2.0-incubating-SNAPSHOT + 0.3.0-incubating-SNAPSHOT ../../pom.xml org.apache.whirr whirr-cassandra jar - 0.2.0-incubating-SNAPSHOT + 0.3.0-incubating-SNAPSHOT Apache Whirr Cassandra diff --git a/services/hadoop/pom.xml b/services/hadoop/pom.xml index 8a24e91a..7154999d 100644 --- a/services/hadoop/pom.xml +++ b/services/hadoop/pom.xml @@ -20,13 +20,13 @@ org.apache.whirr whirr - 0.2.0-incubating-SNAPSHOT + 0.3.0-incubating-SNAPSHOT ../../pom.xml org.apache.whirr whirr-hadoop jar - 0.2.0-incubating-SNAPSHOT + 0.3.0-incubating-SNAPSHOT Apache Whirr Hadoop diff --git a/services/zookeeper/pom.xml b/services/zookeeper/pom.xml index 87d4f35a..7ff6e10a 100644 --- a/services/zookeeper/pom.xml +++ b/services/zookeeper/pom.xml @@ -20,13 +20,13 @@ org.apache.whirr whirr - 0.2.0-incubating-SNAPSHOT + 0.3.0-incubating-SNAPSHOT ../../pom.xml org.apache.whirr whirr-zookeeper jar - 0.2.0-incubating-SNAPSHOT + 0.3.0-incubating-SNAPSHOT Apache Whirr ZooKeeper From 08c56a7be926c66610bbdc35867d629c53d4dc99 Mon Sep 17 00:00:00 2001 From: "Patrick D. Hunt" Date: Tue, 2 Nov 2010 05:22:51 +0000 Subject: [PATCH 030/216] WHIRR-122. whirr site has two FAQ links git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1029957 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 ++ src/site/site.xml | 3 +-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 22b0a841..806dad6f 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -67,6 +67,8 @@ Release 0.2.0 - 2010-11-04 WHIRR-91. Add DISCLAIMER file to CLI JAR (phunt) + WHIRR-122. whirr site has two FAQ links + Release 0.1.0 - 2010-09-02 INCOMPATIBLE CHANGES diff --git a/src/site/site.xml b/src/site/site.xml index e683ae66..5db69183 100644 --- a/src/site/site.xml +++ b/src/site/site.xml @@ -54,7 +54,7 @@ - + @@ -69,7 +69,6 @@ - From a733c5d2df9a82d77d57bf941070be82c94f51db Mon Sep 17 00:00:00 2001 From: "Patrick D. Hunt" Date: Thu, 4 Nov 2010 03:16:34 +0000 Subject: [PATCH 031/216] WHIRR-126. Deployment process does not deploy required test JARs git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1030818 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 3 +++ pom.xml | 6 ++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 806dad6f..991b84ef 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -69,6 +69,9 @@ Release 0.2.0 - 2010-11-04 WHIRR-122. whirr site has two FAQ links + WHIRR-126. Deployment process does not deploy required test JARs + (tomwhite) + Release 0.1.0 - 2010-09-02 INCOMPATIBLE CHANGES diff --git a/pom.xml b/pom.xml index 9fabda3c..dd596acc 100644 --- a/pom.xml +++ b/pom.xml @@ -519,8 +519,10 @@ true - - true + + true From a98c293e09a8fcab32e81e720b228fbb61a87f6f Mon Sep 17 00:00:00 2001 From: Thomas White Date: Tue, 9 Nov 2010 04:57:23 +0000 Subject: [PATCH 032/216] WHIRR-128. Fix DNS resolution for clients running within EC2. Contributed by Tibor Kiss. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1032844 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 + pom.xml | 5 ++ services/hadoop/pom.xml | 4 + .../apache/whirr/service/hadoop/DnsUtil.java | 60 +++++++++++++ .../whirr/service/hadoop/HadoopProxy.java | 2 +- .../whirr/service/hadoop/HadoopService.java | 12 +-- .../whirr/service/hadoop/DnsUtilTest.java | 84 +++++++++++++++++++ 7 files changed, 162 insertions(+), 7 deletions(-) create mode 100644 services/hadoop/src/main/java/org/apache/whirr/service/hadoop/DnsUtil.java create mode 100644 services/hadoop/src/test/java/org/apache/whirr/service/hadoop/DnsUtilTest.java diff --git a/CHANGES.txt b/CHANGES.txt index 991b84ef..a65c5301 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -8,6 +8,8 @@ Trunk (unreleased changes) BUG FIXES + WHIRR-128. Fix DNS resolution for clients running within EC2. + (Tibor Kiss via tomwhite) Release 0.2.0 - 2010-11-04 diff --git a/pom.xml b/pom.xml index dd596acc..b2eeda8e 100644 --- a/pom.xml +++ b/pom.xml @@ -148,6 +148,11 @@ + + dnsjava + dnsjava + 2.0.8 + diff --git a/services/hadoop/pom.xml b/services/hadoop/pom.xml index 7154999d..a6edd090 100644 --- a/services/hadoop/pom.xml +++ b/services/hadoop/pom.xml @@ -95,5 +95,9 @@ 0.20.2 test + + dnsjava + dnsjava + diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/DnsUtil.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/DnsUtil.java new file mode 100644 index 00000000..624f9a2a --- /dev/null +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/DnsUtil.java @@ -0,0 +1,60 @@ +/** + * 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 org.apache.whirr.service.hadoop; + +import java.io.IOException; + +import org.xbill.DNS.DClass; +import org.xbill.DNS.ExtendedResolver; +import org.xbill.DNS.Message; +import org.xbill.DNS.Name; +import org.xbill.DNS.Record; +import org.xbill.DNS.Resolver; +import org.xbill.DNS.ReverseMap; +import org.xbill.DNS.Section; +import org.xbill.DNS.Type; + +public class DnsUtil { + + /** + * resolve the reverse dns name for the given IP address + * + * @param hostIp + * @return + * @throws IOException + */ + public static String resolveAddress(String hostIp) throws IOException { + Resolver res = new ExtendedResolver(); + + Name name = ReverseMap.fromAddress(hostIp); + int type = Type.PTR; + int dclass = DClass.IN; + Record rec = Record.newRecord(name, type, dclass); + Message query = Message.newQuery(rec); + Message response = res.send(query); + + Record[] answers = response.getSectionArray(Section.ANSWER); + if (answers.length == 0) + return hostIp; + else { + String revaddr = answers[0].rdataToString(); + return revaddr.endsWith(".") ? revaddr.substring(0, revaddr.length() - 1) : revaddr; + } + } +} diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java index 66b6ee42..d6995fbe 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java @@ -53,7 +53,7 @@ public String[] getProxyCommand() throws IOException { Files.write(ByteStreams.toByteArray(clusterSpec.getPrivateKey().getInput()), identity); } String user = Iterables.get(cluster.getInstances(), 0).getLoginCredentials().identity; - String server = cluster.getNamenodePublicAddress().getHostName(); + String server = DnsUtil.resolveAddress(cluster.getNamenodePublicAddress().getHostAddress()); return new String[] { "ssh", "-i", identity.getAbsolutePath(), "-o", "ConnectTimeout=10", diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java index 43cff32e..e6bf3405 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java @@ -147,8 +147,8 @@ public HadoopCluster launchCluster(ClusterSpec clusterSpec) throws IOException { "sun/java/install", String.format("%s dn,tt -n %s -j %s -c %s", hadoopInstallRunUrl, - namenodePublicAddress.getHostName(), - jobtrackerPublicAddress.getHostName(), + DnsUtil.resolveAddress(namenodePublicAddress.getHostAddress()), + DnsUtil.resolveAddress(jobtrackerPublicAddress.getHostAddress()), clusterSpec.getProvider()))); TemplateBuilder slaveTemplateBuilder = computeService.templateBuilder() @@ -182,7 +182,7 @@ public HadoopCluster launchCluster(ClusterSpec clusterSpec) throws IOException { LOG.info("Completed launch of {}", clusterSpec.getClusterName()); LOG.info("Web UI available at http://{}", - namenodePublicAddress.getHostName()); + DnsUtil.resolveAddress(namenodePublicAddress.getHostAddress())); Properties config = createClientSideProperties(namenodePublicAddress, jobtrackerPublicAddress); createClientSideHadoopSiteFile(clusterSpec, config); HadoopCluster cluster = new HadoopCluster(instances, config); @@ -209,8 +209,8 @@ public Instance apply(NodeMetadata node) { private Properties createClientSideProperties(InetAddress namenode, InetAddress jobtracker) throws IOException { Properties config = new Properties(); config.setProperty("hadoop.job.ugi", "root,root"); - config.setProperty("fs.default.name", String.format("hdfs://%s:8020/", namenode.getHostName())); - config.setProperty("mapred.job.tracker", String.format("%s:8021", jobtracker.getHostName())); + config.setProperty("fs.default.name", String.format("hdfs://%s:8020/", DnsUtil.resolveAddress(namenode.getHostAddress()))); + config.setProperty("mapred.job.tracker", String.format("%s:8021", DnsUtil.resolveAddress(jobtracker.getHostAddress()))); config.setProperty("hadoop.socks.server", "localhost:6666"); config.setProperty("hadoop.rpc.socket.factory.class.default", "org.apache.hadoop.net.SocksSocketFactory"); return config; @@ -258,7 +258,7 @@ private void createProxyScript(ClusterSpec clusterSpec, HadoopCluster cluster) { HadoopProxy proxy = new HadoopProxy(clusterSpec, cluster); String script = String.format("echo 'Running proxy to Hadoop cluster at %s. " + "Use Ctrl-c to quit.'\n", - cluster.getNamenodePublicAddress().getHostName()) + DnsUtil.resolveAddress(cluster.getNamenodePublicAddress().getHostAddress())) + Joiner.on(" ").join(proxy.getProxyCommand()); Files.write(script, hadoopProxyFile, Charsets.UTF_8); LOG.info("Wrote Hadoop proxy script {}", hadoopProxyFile); diff --git a/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/DnsUtilTest.java b/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/DnsUtilTest.java new file mode 100644 index 00000000..b717ab99 --- /dev/null +++ b/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/DnsUtilTest.java @@ -0,0 +1,84 @@ +/** + * 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 org.apache.whirr.service.hadoop; + +import static org.junit.Assert.*; +import static java.lang.System.out; + +import java.io.IOException; +import java.net.Inet4Address; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.net.UnknownHostException; +import java.util.Collections; +import java.util.Enumeration; + +import org.apache.whirr.service.hadoop.DnsUtil; +import org.junit.Test; +import org.xbill.DNS.Address; + +public class DnsUtilTest { + + @Test + public void testResolveAddress() throws IOException { + // test it with all interfaces + Enumeration en = NetworkInterface.getNetworkInterfaces(); + while (en.hasMoreElements()) { + NetworkInterface netint = (NetworkInterface) en.nextElement(); + Enumeration inetAddresses = netint.getInetAddresses(); + for (InetAddress inetAddress : Collections.list(inetAddresses)) { + if (inetAddress instanceof Inet4Address) { + long start = System.currentTimeMillis(); + String reverse = DnsUtil.resolveAddress(inetAddress.getHostAddress()); + long end = System.currentTimeMillis(); + // we know that java.net.InetAddress's getHostName takes > 4.5s if + // there is no reverse address assigned to it + // but DnsUtil can resolve any address without this delaying problem. + assertTrue("DnsUtil.resolveAddress takes " + (end - start) + + " millis, it should be shorter than a second", + end - start < 1000); + if (inetAddress.toString().substring(1).equals(reverse)) { + out.printf( + "InetAddress %s on interface %s does not have reverse dns name, so their reverse remains: %s\n", + inetAddress, netint.getDisplayName(), reverse); + } else { + if (inetAddress.isLoopbackAddress()) { + out.printf( + "InetAddress %s on loopback interface %s obtained reverse name as %s\n", + inetAddress, netint.getDisplayName(), reverse); + } else { + out.printf( + "InetAddress %s on interface %s has reverse dns name: %s\n", + inetAddress, netint.getDisplayName(), reverse); + try { + InetAddress checkedAddr = Address.getByName(reverse); + assertEquals(inetAddress, checkedAddr); + } catch (UnknownHostException uhex) { + fail("InetAddress " + inetAddress + " on interface " + + netint.getDisplayName() + " got " + reverse + + " reverse dns name which in return is an unknown host!"); + } + } + } + } + } + } + } + +} From 80902052763796135353fb18d4c19470352496e8 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Tue, 23 Nov 2010 18:00:18 +0000 Subject: [PATCH 033/216] WHIRR-137. Allow use of an arbitrary AMI on EC2. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1038236 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 ++ .../org/apache/whirr/service/ClusterSpec.java | 12 ++++++++++ .../service/ComputeServiceContextBuilder.java | 12 ++++++---- .../apache/whirr/service/ClusterSpecTest.java | 23 +++++++++++++++++++ src/site/confluence/faq.confluence | 11 +++++++++ 5 files changed, 55 insertions(+), 5 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index a65c5301..84768beb 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -11,6 +11,8 @@ Trunk (unreleased changes) WHIRR-128. Fix DNS resolution for clients running within EC2. (Tibor Kiss via tomwhite) + WHIRR-137. Allow use of an arbitrary AMI on EC2. (tomwhite) + Release 0.2.0 - 2010-11-04 NEW FEATURES diff --git a/core/src/main/java/org/apache/whirr/service/ClusterSpec.java b/core/src/main/java/org/apache/whirr/service/ClusterSpec.java index 3a0dd533..7704d1e2 100644 --- a/core/src/main/java/org/apache/whirr/service/ClusterSpec.java +++ b/core/src/main/java/org/apache/whirr/service/ClusterSpec.java @@ -25,6 +25,7 @@ import static org.jclouds.util.Utils.toStringAndClose; import com.google.common.base.Objects; +import com.google.common.base.Predicate; import com.google.common.collect.Lists; import com.google.common.collect.Sets; @@ -32,6 +33,7 @@ import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; +import java.util.Iterator; import java.util.List; import java.util.Set; @@ -384,6 +386,16 @@ public void setRunUrlBase(String runUrlBase) { public Configuration getConfiguration() { return config; } + + public Configuration getConfigurationForKeysWithPrefix(String prefix) { + Configuration c = new PropertiesConfiguration(); + for (@SuppressWarnings("unchecked") + Iterator it = config.getKeys(prefix); it.hasNext(); ) { + String key = it.next(); + c.setProperty(key, config.getProperty(key)); + } + return c; + } public boolean equals(Object o) { if (o instanceof ClusterSpec) { diff --git a/core/src/main/java/org/apache/whirr/service/ComputeServiceContextBuilder.java b/core/src/main/java/org/apache/whirr/service/ComputeServiceContextBuilder.java index 7adc3b74..4d90975c 100644 --- a/core/src/main/java/org/apache/whirr/service/ComputeServiceContextBuilder.java +++ b/core/src/main/java/org/apache/whirr/service/ComputeServiceContextBuilder.java @@ -24,6 +24,8 @@ import java.io.IOException; import java.util.Set; +import org.apache.commons.configuration.Configuration; +import org.apache.commons.configuration.ConfigurationConverter; import org.jclouds.compute.ComputeServiceContext; import org.jclouds.compute.ComputeServiceContextFactory; import org.jclouds.logging.log4j.config.Log4JLoggingModule; @@ -35,13 +37,13 @@ public class ComputeServiceContextBuilder { public static ComputeServiceContext build(ClusterSpec spec) throws IOException { + Configuration jcloudsConfig = + spec.getConfigurationForKeysWithPrefix("jclouds"); Set wiring = ImmutableSet.of(new JschSshClientModule(), new Log4JLoggingModule()); - ComputeServiceContext context = new ComputeServiceContextFactory() - .createContext(spec.getProvider(), spec.getIdentity(), spec.getCredential(), - wiring); - - return context; + return new ComputeServiceContextFactory().createContext(spec.getProvider(), + spec.getIdentity(), spec.getCredential(), + wiring, ConfigurationConverter.getProperties(jcloudsConfig)); } } diff --git a/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java b/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java index 05df5bac..cbb646de 100644 --- a/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java +++ b/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java @@ -22,6 +22,13 @@ import static org.hamcrest.Matchers.startsWith; import static org.junit.Assert.assertThat; +import com.google.common.collect.Iterators; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; + +import java.util.List; +import java.util.SortedSet; + import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; @@ -54,4 +61,20 @@ public void testVersionInRunUrlbaseIsUrlEncoded() assertThat(spec.getRunUrlBase(), is("http://whirr.s3.amazonaws.com/0.1.0%2B1/")); } + + @Test + public void testGetConfigurationForKeysWithPrefix() + throws ConfigurationException { + Configuration conf = new PropertiesConfiguration(); + conf.setProperty("a.b", 1); + conf.setProperty("b.a", 2); + conf.setProperty("a.c", 3); + ClusterSpec spec = new ClusterSpec(conf); + Configuration prefixConf = spec.getConfigurationForKeysWithPrefix("a"); + List prefixKeys = Lists.newArrayList(); + Iterators.addAll(prefixKeys, prefixConf.getKeys()); + assertThat(prefixKeys.size(), is(2)); + assertThat(prefixKeys.get(0), is("a.b")); + assertThat(prefixKeys.get(1), is("a.c")); + } } diff --git a/src/site/confluence/faq.confluence b/src/site/confluence/faq.confluence index 1148788a..f0432e0b 100644 --- a/src/site/confluence/faq.confluence +++ b/src/site/confluence/faq.confluence @@ -57,6 +57,17 @@ cluster in the US-East region, while setting it to {{us-east-1a}} (note the final {{a}}) would start the cluster in that particular availability zone ({{us-east-1a}}) in the US-East region. +h2. How can I use a custom image? How can I control the cloud hardware used? + +The default image used is dependent on the Cloud provider, the hardware, and the +service. + +Use {{image-id}} to specify the image used, and {{hardware-id}} to specify the +hardware. Both are cloud-specific. + +In addition, on EC2 you need to set jclouds.ec2.ami-owners to include the AMI +owner if it is not Amazon, Alestic, Canonical, or RightScale. + h2. How do I log in to a node in the cluster? On EC2, if you know the node's address you can do From a76c54cd3dcd40d1036fa4a0391adb8118781bf7 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Tue, 30 Nov 2010 05:11:33 +0000 Subject: [PATCH 034/216] WHIRR-87. Parallelize Hadoop cluster creation. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1040404 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 + .../org/apache/whirr/service/ClusterSpec.java | 1 - .../org/apache/whirr/service/Service.java | 9 +- .../apache/whirr/service/ClusterSpecTest.java | 2 - pom.xml | 5 + scripts/apache/hadoop/install | 377 +------------- scripts/apache/hadoop/post-configure | 407 +++++++++++++++ scripts/cloudera/cdh/install | 426 +--------------- scripts/cloudera/cdh/post-configure | 465 ++++++++++++++++++ .../integration/CassandraServiceTest.java | 10 +- services/cdh/pom.xml | 115 +++++ .../cdh/integration/CdhHadoopServiceTest.java | 155 ++++++ services/cdh/src/test/resources/log4j.xml | 196 ++++++++ .../resources/whirr-hadoop-test.properties | 26 + .../whirr/service/hadoop/HadoopService.java | 167 +++++-- .../whirr/service/hadoop/DnsUtilTest.java | 1 - .../hadoop/integration/HadoopServiceTest.java | 8 +- .../integration/ZooKeeperServiceTest.java | 10 +- 18 files changed, 1503 insertions(+), 879 deletions(-) create mode 100644 scripts/apache/hadoop/post-configure create mode 100644 scripts/cloudera/cdh/post-configure create mode 100644 services/cdh/pom.xml create mode 100644 services/cdh/src/test/java/org/apache/whirr/service/cdh/integration/CdhHadoopServiceTest.java create mode 100644 services/cdh/src/test/resources/log4j.xml create mode 100644 services/cdh/src/test/resources/whirr-hadoop-test.properties diff --git a/CHANGES.txt b/CHANGES.txt index 84768beb..07a8ebe3 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -6,6 +6,8 @@ Trunk (unreleased changes) IMPROVEMENTS + WHIRR-87. Parallelize Hadoop cluster creation. (tomwhite) + BUG FIXES WHIRR-128. Fix DNS resolution for clients running within EC2. diff --git a/core/src/main/java/org/apache/whirr/service/ClusterSpec.java b/core/src/main/java/org/apache/whirr/service/ClusterSpec.java index 7704d1e2..f81a6d58 100644 --- a/core/src/main/java/org/apache/whirr/service/ClusterSpec.java +++ b/core/src/main/java/org/apache/whirr/service/ClusterSpec.java @@ -25,7 +25,6 @@ import static org.jclouds.util.Utils.toStringAndClose; import com.google.common.base.Objects; -import com.google.common.base.Predicate; import com.google.common.collect.Lists; import com.google.common.collect.Sets; diff --git a/core/src/main/java/org/apache/whirr/service/Service.java b/core/src/main/java/org/apache/whirr/service/Service.java index 045e5185..108bb01d 100644 --- a/core/src/main/java/org/apache/whirr/service/Service.java +++ b/core/src/main/java/org/apache/whirr/service/Service.java @@ -55,16 +55,19 @@ public abstract class Service { * @return an object representing the running cluster * @throws IOException if there is a problem while starting the cluster. The * cluster may or may not have started. + * @throws InterruptedException if the thread is interrupted. */ public abstract Cluster launchCluster(ClusterSpec clusterSpec) - throws IOException; + throws IOException, InterruptedException; /** * Stop the cluster and destroy all resources associated with it. * @throws IOException if there is a problem while stopping the cluster. The * cluster may or may not have been stopped. + * @throws InterruptedException if the thread is interrupted. */ - public void destroyCluster(ClusterSpec clusterSpec) throws IOException { + public void destroyCluster(ClusterSpec clusterSpec) throws IOException, + InterruptedException { LOG.info("Destroying " + clusterSpec.getClusterName() + " cluster"); ComputeService computeService = ComputeServiceContextBuilder.build(clusterSpec).getComputeService(); @@ -73,7 +76,7 @@ public void destroyCluster(ClusterSpec clusterSpec) throws IOException { } public Set getNodes(ClusterSpec clusterSpec) - throws IOException { + throws IOException, InterruptedException { ComputeService computeService = ComputeServiceContextBuilder.build(clusterSpec).getComputeService(); return computeService.listNodesDetailsMatching( diff --git a/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java b/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java index cbb646de..b520a890 100644 --- a/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java +++ b/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java @@ -24,10 +24,8 @@ import com.google.common.collect.Iterators; import com.google.common.collect.Lists; -import com.google.common.collect.Sets; import java.util.List; -import java.util.SortedSet; import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; diff --git a/pom.xml b/pom.xml index b2eeda8e..2ac4c8a2 100644 --- a/pom.xml +++ b/pom.xml @@ -40,6 +40,7 @@ cli core services/cassandra + services/cdh services/hadoop services/zookeeper @@ -485,6 +486,10 @@ jclouds http://jclouds.googlecode.com/svn/repo + + cloudera + https://repository.cloudera.com/content/repositories/releases/ + diff --git a/scripts/apache/hadoop/install b/scripts/apache/hadoop/install index 062a0642..73496157 100644 --- a/scripts/apache/hadoop/install +++ b/scripts/apache/hadoop/install @@ -25,49 +25,17 @@ set -e # Initialize variables ################################################################################ -ROLES=$1 -shift - -NN_HOST= -JT_HOST= CLOUD_PROVIDER= -while getopts "n:j:c:" OPTION; do +while getopts "c:" OPTION; do case $OPTION in - n) - NN_HOST="$OPTARG" - ;; - j) - JT_HOST="$OPTARG" - ;; c) CLOUD_PROVIDER="$OPTARG" ;; esac done -case $CLOUD_PROVIDER in - ec2) - # Use public hostname for EC2 - SELF_HOST=`wget -q -O - http://169.254.169.254/latest/meta-data/public-hostname` - ;; - *) - SELF_HOST=`/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'` - ;; -esac - HADOOP_VERSION=${HADOOP_VERSION:-0.20.2} HADOOP_HOME=/usr/local/hadoop-$HADOOP_VERSION -HADOOP_CONF_DIR=$HADOOP_HOME/conf -for role in $(echo "$ROLES" | tr "," "\n"); do - case $role in - nn) - NN_HOST=$SELF_HOST - ;; - jt) - JT_HOST=$SELF_HOST - ;; - esac -done function update_repo() { if which dpkg &> /dev/null; then @@ -120,348 +88,5 @@ function install_hadoop() { echo 'export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH' >> ~root/.bashrc } -function prep_disk() { - mount=$1 - device=$2 - automount=${3:-false} - - echo "warning: ERASING CONTENTS OF $device" - mkfs.xfs -f $device - if [ ! -e $mount ]; then - mkdir $mount - fi - mount -o defaults,noatime $device $mount - if $automount ; then - echo "$device $mount xfs defaults,noatime 0 0" >> /etc/fstab - fi -} - -function make_hadoop_dirs { - for mount in "$@"; do - if [ ! -e $mount/hadoop ]; then - mkdir -p $mount/hadoop - chown hadoop:hadoop $mount/hadoop - fi - done -} - -# Configure Hadoop by setting up disks and site file -function configure_hadoop() { - case $CLOUD_PROVIDER in - ec2) - MOUNT=/mnt - ;; - *) - MOUNT=/data - ;; - esac - FIRST_MOUNT=$MOUNT - DFS_NAME_DIR=$MOUNT/hadoop/hdfs/name - FS_CHECKPOINT_DIR=$MOUNT/hadoop/hdfs/secondary - DFS_DATA_DIR=$MOUNT/hadoop/hdfs/data - MAPRED_LOCAL_DIR=$MOUNT/hadoop/mapred/local - MAX_MAP_TASKS=2 - MAX_REDUCE_TASKS=1 - CHILD_OPTS=-Xmx550m - CHILD_ULIMIT=1126400 - TMP_DIR=$MOUNT/tmp/hadoop-\${user.name} - - mkdir -p $MOUNT/hadoop - chown hadoop:hadoop $MOUNT/hadoop - mkdir $MOUNT/tmp - chmod a+rwxt $MOUNT/tmp - - mkdir /etc/hadoop - ln -s $HADOOP_CONF_DIR /etc/hadoop/conf - - ############################################################################## - # Modify this section to customize your Hadoop cluster. - ############################################################################## - cat > $HADOOP_CONF_DIR/hadoop-site.xml < - - - - dfs.block.size - 134217728 - true - - - dfs.data.dir - $DFS_DATA_DIR - true - - - dfs.datanode.du.reserved - 1073741824 - true - - - dfs.datanode.handler.count - 3 - true - - - - - dfs.name.dir - $DFS_NAME_DIR - true - - - dfs.namenode.handler.count - 5 - true - - - dfs.permissions - true - true - - - dfs.replication - $DFS_REPLICATION - - - fs.checkpoint.dir - $FS_CHECKPOINT_DIR - true - - - fs.default.name - hdfs://$NN_HOST:8020/ - - - fs.trash.interval - 1440 - true - - - hadoop.tmp.dir - $MOUNT/tmp/hadoop-\${user.name} - true - - - io.file.buffer.size - 65536 - - - mapred.child.java.opts - $CHILD_OPTS - - - mapred.child.ulimit - $CHILD_ULIMIT - true - - - mapred.job.tracker - $JT_HOST:8021 - - - mapred.job.tracker.handler.count - 5 - true - - - mapred.local.dir - $MAPRED_LOCAL_DIR - true - - - mapred.map.tasks.speculative.execution - true - - - mapred.reduce.parallel.copies - 10 - - - mapred.reduce.tasks - 10 - - - mapred.reduce.tasks.speculative.execution - false - - - mapred.submit.replication - 10 - - - mapred.system.dir - /hadoop/system/mapred - - - mapred.tasktracker.map.tasks.maximum - $MAX_MAP_TASKS - true - - - mapred.tasktracker.reduce.tasks.maximum - $MAX_REDUCE_TASKS - true - - - tasktracker.http.threads - 46 - true - - - mapred.compress.map.output - true - - - mapred.output.compression.type - BLOCK - - - hadoop.rpc.socket.factory.class.default - org.apache.hadoop.net.StandardSocketFactory - true - - - hadoop.rpc.socket.factory.class.ClientProtocol - - true - - - hadoop.rpc.socket.factory.class.JobSubmissionProtocol - - true - - - io.compression.codecs - org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec - - -EOF - - # Keep PID files in a non-temporary directory - sed -i -e "s|# export HADOOP_PID_DIR=.*|export HADOOP_PID_DIR=/var/run/hadoop|" \ - $HADOOP_CONF_DIR/hadoop-env.sh - mkdir -p /var/run/hadoop - chown -R hadoop:hadoop /var/run/hadoop - - # Set SSH options within the cluster - sed -i -e 's|# export HADOOP_SSH_OPTS=.*|export HADOOP_SSH_OPTS="-o StrictHostKeyChecking=no"|' \ - $HADOOP_CONF_DIR/hadoop-env.sh - - # Disable IPv6 - sed -i -e 's|# export HADOOP_OPTS=.*|export HADOOP_OPTS="-Djava.net.preferIPv4Stack=true"|' \ - $HADOOP_CONF_DIR/hadoop-env.sh - - # Hadoop logs should be on the /mnt partition - sed -i -e 's|# export HADOOP_LOG_DIR=.*|export HADOOP_LOG_DIR=/var/log/hadoop/logs|' \ - $HADOOP_CONF_DIR/hadoop-env.sh - rm -rf /var/log/hadoop - mkdir $MOUNT/hadoop/logs - chown hadoop:hadoop $MOUNT/hadoop/logs - ln -s $MOUNT/hadoop/logs /var/log/hadoop - chown -R hadoop:hadoop /var/log/hadoop - -} - -# Sets up small website on cluster. -function setup_web() { - - if which dpkg &> /dev/null; then - apt-get -y install thttpd - WWW_BASE=/var/www - elif which rpm &> /dev/null; then - # enable EPEL for thttpd package - rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm - sed -i -e 's/enabled=1/enabled=0/' /etc/yum.repos.d/epel.repo - yum install -y --enablerepo=epel thttpd - chkconfig --add thttpd - WWW_BASE=/var/www/thttpd/html - fi - - cat > $WWW_BASE/index.html << END - - -Hadoop Cloud Cluster - - -

Hadoop Cloud Cluster

-To browse the cluster you need to have a proxy configured. -Start the proxy with hadoop-cloud proxy <cluster_name>, -and point your browser to -this Proxy -Auto-Configuration (PAC) file. To manage multiple proxy configurations, -you may wish to use -FoxyProxy. - - - -END - - service thttpd restart - -} - -function start_namenode() { - if which dpkg &> /dev/null; then - AS_HADOOP="su -s /bin/bash - hadoop -c" - elif which rpm &> /dev/null; then - AS_HADOOP="/sbin/runuser -s /bin/bash - hadoop -c" - fi - - # Format HDFS - [ ! -e $FIRST_MOUNT/hadoop/hdfs ] && $AS_HADOOP "$HADOOP_HOME/bin/hadoop namenode -format" - - $AS_HADOOP "$HADOOP_HOME/bin/hadoop-daemon.sh start namenode" - - $AS_HADOOP "$HADOOP_HOME/bin/hadoop dfsadmin -safemode wait" - $AS_HADOOP "$HADOOP_HOME/bin/hadoop fs -mkdir /user" - # The following is questionable, as it allows a user to delete another user - # It's needed to allow users to create their own user directories - $AS_HADOOP "$HADOOP_HOME/bin/hadoop fs -chmod +w /user" - -} - -function start_daemon() { - if which dpkg &> /dev/null; then - AS_HADOOP="su -s /bin/bash - hadoop -c" - elif which rpm &> /dev/null; then - AS_HADOOP="/sbin/runuser -s /bin/bash - hadoop -c" - fi - $AS_HADOOP "$HADOOP_HOME/bin/hadoop-daemon.sh start $1" -} - update_repo install_hadoop -configure_hadoop - -for role in $(echo "$ROLES" | tr "," "\n"); do - case $role in - nn) - setup_web - start_namenode - ;; - snn) - start_daemon secondarynamenode - ;; - jt) - start_daemon jobtracker - ;; - dn) - start_daemon datanode - ;; - tt) - start_daemon tasktracker - ;; - esac -done - diff --git a/scripts/apache/hadoop/post-configure b/scripts/apache/hadoop/post-configure new file mode 100644 index 00000000..3c79793e --- /dev/null +++ b/scripts/apache/hadoop/post-configure @@ -0,0 +1,407 @@ +#!/usr/bin/env bash +# +# 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. +# +# Configure Apache Hadoop after the cluster has started. +# +# Call with the following arguments +# -n +# -j +# -c + +set -x +set -e + +################################################################################ +# Initialize variables +################################################################################ + +ROLES=$1 +shift + +NN_HOST= +JT_HOST= +CLOUD_PROVIDER= +while getopts "n:j:c:" OPTION; do + case $OPTION in + n) + NN_HOST="$OPTARG" + ;; + j) + JT_HOST="$OPTARG" + ;; + c) + CLOUD_PROVIDER="$OPTARG" + ;; + esac +done + +case $CLOUD_PROVIDER in + ec2) + # Use public hostname for EC2 + SELF_HOST=`wget -q -O - http://169.254.169.254/latest/meta-data/public-hostname` + ;; + *) + SELF_HOST=`/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'` + ;; +esac + +HADOOP_VERSION=${HADOOP_VERSION:-0.20.2} +HADOOP_HOME=/usr/local/hadoop-$HADOOP_VERSION +HADOOP_CONF_DIR=$HADOOP_HOME/conf + +function prep_disk() { + mount=$1 + device=$2 + automount=${3:-false} + + echo "warning: ERASING CONTENTS OF $device" + mkfs.xfs -f $device + if [ ! -e $mount ]; then + mkdir $mount + fi + mount -o defaults,noatime $device $mount + if $automount ; then + echo "$device $mount xfs defaults,noatime 0 0" >> /etc/fstab + fi +} + +function make_hadoop_dirs { + for mount in "$@"; do + if [ ! -e $mount/hadoop ]; then + mkdir -p $mount/hadoop + chown hadoop:hadoop $mount/hadoop + fi + done +} + +# Configure Hadoop by setting up disks and site file +function configure_hadoop() { + case $CLOUD_PROVIDER in + ec2) + MOUNT=/mnt + ;; + *) + MOUNT=/data + ;; + esac + FIRST_MOUNT=$MOUNT + DFS_NAME_DIR=$MOUNT/hadoop/hdfs/name + FS_CHECKPOINT_DIR=$MOUNT/hadoop/hdfs/secondary + DFS_DATA_DIR=$MOUNT/hadoop/hdfs/data + MAPRED_LOCAL_DIR=$MOUNT/hadoop/mapred/local + MAX_MAP_TASKS=2 + MAX_REDUCE_TASKS=1 + CHILD_OPTS=-Xmx550m + CHILD_ULIMIT=1126400 + TMP_DIR=$MOUNT/tmp/hadoop-\${user.name} + + mkdir -p $MOUNT/hadoop + chown hadoop:hadoop $MOUNT/hadoop + mkdir $MOUNT/tmp + chmod a+rwxt $MOUNT/tmp + + mkdir /etc/hadoop + ln -s $HADOOP_CONF_DIR /etc/hadoop/conf + + ############################################################################## + # Modify this section to customize your Hadoop cluster. + ############################################################################## + cat > $HADOOP_CONF_DIR/hadoop-site.xml < + + + + dfs.block.size + 134217728 + true + + + dfs.data.dir + $DFS_DATA_DIR + true + + + dfs.datanode.du.reserved + 1073741824 + true + + + dfs.datanode.handler.count + 3 + true + + + + + dfs.name.dir + $DFS_NAME_DIR + true + + + dfs.namenode.handler.count + 5 + true + + + dfs.permissions + true + true + + + dfs.replication + $DFS_REPLICATION + + + fs.checkpoint.dir + $FS_CHECKPOINT_DIR + true + + + fs.default.name + hdfs://$NN_HOST:8020/ + + + fs.trash.interval + 1440 + true + + + hadoop.tmp.dir + $MOUNT/tmp/hadoop-\${user.name} + true + + + io.file.buffer.size + 65536 + + + mapred.child.java.opts + $CHILD_OPTS + + + mapred.child.ulimit + $CHILD_ULIMIT + true + + + mapred.job.tracker + $JT_HOST:8021 + + + mapred.job.tracker.handler.count + 5 + true + + + mapred.local.dir + $MAPRED_LOCAL_DIR + true + + + mapred.map.tasks.speculative.execution + true + + + mapred.reduce.parallel.copies + 10 + + + mapred.reduce.tasks + 10 + + + mapred.reduce.tasks.speculative.execution + false + + + mapred.submit.replication + 10 + + + mapred.system.dir + /hadoop/system/mapred + + + mapred.tasktracker.map.tasks.maximum + $MAX_MAP_TASKS + true + + + mapred.tasktracker.reduce.tasks.maximum + $MAX_REDUCE_TASKS + true + + + tasktracker.http.threads + 46 + true + + + mapred.compress.map.output + true + + + mapred.output.compression.type + BLOCK + + + hadoop.rpc.socket.factory.class.default + org.apache.hadoop.net.StandardSocketFactory + true + + + hadoop.rpc.socket.factory.class.ClientProtocol + + true + + + hadoop.rpc.socket.factory.class.JobSubmissionProtocol + + true + + + io.compression.codecs + org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec + + +EOF + + # Keep PID files in a non-temporary directory + sed -i -e "s|# export HADOOP_PID_DIR=.*|export HADOOP_PID_DIR=/var/run/hadoop|" \ + $HADOOP_CONF_DIR/hadoop-env.sh + mkdir -p /var/run/hadoop + chown -R hadoop:hadoop /var/run/hadoop + + # Set SSH options within the cluster + sed -i -e 's|# export HADOOP_SSH_OPTS=.*|export HADOOP_SSH_OPTS="-o StrictHostKeyChecking=no"|' \ + $HADOOP_CONF_DIR/hadoop-env.sh + + # Disable IPv6 + sed -i -e 's|# export HADOOP_OPTS=.*|export HADOOP_OPTS="-Djava.net.preferIPv4Stack=true"|' \ + $HADOOP_CONF_DIR/hadoop-env.sh + + # Hadoop logs should be on the /mnt partition + sed -i -e 's|# export HADOOP_LOG_DIR=.*|export HADOOP_LOG_DIR=/var/log/hadoop/logs|' \ + $HADOOP_CONF_DIR/hadoop-env.sh + rm -rf /var/log/hadoop + mkdir $MOUNT/hadoop/logs + chown hadoop:hadoop $MOUNT/hadoop/logs + ln -s $MOUNT/hadoop/logs /var/log/hadoop + chown -R hadoop:hadoop /var/log/hadoop + +} + +# Sets up small website on cluster. +function setup_web() { + + if which dpkg &> /dev/null; then + apt-get -y install thttpd + WWW_BASE=/var/www + elif which rpm &> /dev/null; then + # enable EPEL for thttpd package + rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm + sed -i -e 's/enabled=1/enabled=0/' /etc/yum.repos.d/epel.repo + yum install -y --enablerepo=epel thttpd + chkconfig --add thttpd + WWW_BASE=/var/www/thttpd/html + fi + + cat > $WWW_BASE/index.html << END + + +Hadoop Cloud Cluster + + +

Hadoop Cloud Cluster

+To browse the cluster you need to have a proxy configured. +Start the proxy with hadoop-cloud proxy <cluster_name>, +and point your browser to +this Proxy +Auto-Configuration (PAC) file. To manage multiple proxy configurations, +you may wish to use +FoxyProxy. + + + +END + + service thttpd restart + +} + +function start_namenode() { + if which dpkg &> /dev/null; then + AS_HADOOP="su -s /bin/bash - hadoop -c" + elif which rpm &> /dev/null; then + AS_HADOOP="/sbin/runuser -s /bin/bash - hadoop -c" + fi + + # Format HDFS + [ ! -e $FIRST_MOUNT/hadoop/hdfs ] && $AS_HADOOP "$HADOOP_HOME/bin/hadoop namenode -format" + + $AS_HADOOP "$HADOOP_HOME/bin/hadoop-daemon.sh start namenode" + + $AS_HADOOP "$HADOOP_HOME/bin/hadoop dfsadmin -safemode wait" + $AS_HADOOP "$HADOOP_HOME/bin/hadoop fs -mkdir /user" + # The following is questionable, as it allows a user to delete another user + # It's needed to allow users to create their own user directories + $AS_HADOOP "$HADOOP_HOME/bin/hadoop fs -chmod +w /user" + +} + +function start_daemon() { + if which dpkg &> /dev/null; then + AS_HADOOP="su -s /bin/bash - hadoop -c" + elif which rpm &> /dev/null; then + AS_HADOOP="/sbin/runuser -s /bin/bash - hadoop -c" + fi + $AS_HADOOP "$HADOOP_HOME/bin/hadoop-daemon.sh start $1" +} + +configure_hadoop + +for role in $(echo "$ROLES" | tr "," "\n"); do + case $role in + nn) + setup_web + start_namenode + ;; + snn) + start_daemon secondarynamenode + ;; + jt) + start_daemon jobtracker + ;; + dn) + start_daemon datanode + ;; + tt) + start_daemon tasktracker + ;; + esac +done diff --git a/scripts/cloudera/cdh/install b/scripts/cloudera/cdh/install index 59a63e80..3d022f06 100644 --- a/scripts/cloudera/cdh/install +++ b/scripts/cloudera/cdh/install @@ -25,49 +25,18 @@ set -e # Initialize variables ################################################################################ -ROLES=$1 -shift - -NN_HOST= -JT_HOST= CLOUD_PROVIDER= -while getopts "n:j:c:" OPTION; do +while getopts "c:" OPTION; do case $OPTION in - n) - NN_HOST="$OPTARG" - ;; - j) - JT_HOST="$OPTARG" - ;; c) CLOUD_PROVIDER="$OPTARG" ;; esac done -case $CLOUD_PROVIDER in - ec2) - # Use public hostname for EC2 - SELF_HOST=`wget -q -O - http://169.254.169.254/latest/meta-data/public-hostname` - ;; - *) - SELF_HOST=`/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'` - ;; -esac - REPO=${REPO:-cdh3} HADOOP=hadoop-${HADOOP_VERSION:-0.20} HADOOP_CONF_DIR=/etc/$HADOOP/conf.dist -for role in $(echo "$ROLES" | tr "," "\n"); do - case $role in - nn) - NN_HOST=$SELF_HOST - ;; - jt) - JT_HOST=$SELF_HOST - ;; - esac -done function update_repo() { if which dpkg &> /dev/null; then @@ -91,18 +60,6 @@ EOF fi } -# Install a list of packages on debian or redhat as appropriate -function install_packages() { - if which dpkg &> /dev/null; then - apt-get update - apt-get -y install $@ - elif which rpm &> /dev/null; then - yum install -y $@ - else - echo "No package manager found." - fi -} - # Install Hadoop packages and dependencies function install_hadoop() { if which dpkg &> /dev/null; then @@ -117,384 +74,5 @@ function install_hadoop() { fi } -function prep_disk() { - mount=$1 - device=$2 - automount=${3:-false} - - echo "warning: ERASING CONTENTS OF $device" - mkfs.xfs -f $device - if [ ! -e $mount ]; then - mkdir $mount - fi - mount -o defaults,noatime $device $mount - if $automount ; then - echo "$device $mount xfs defaults,noatime 0 0" >> /etc/fstab - fi -} - -function make_hadoop_dirs { - for mount in "$@"; do - if [ ! -e $mount/hadoop ]; then - mkdir -p $mount/hadoop - chown hadoop:hadoop $mount/hadoop - fi - done -} - -# Configure Hadoop by setting up disks and site file -function configure_hadoop() { - case $CLOUD_PROVIDER in - ec2) - MOUNT=/mnt - ;; - *) - MOUNT=/data - ;; - esac - FIRST_MOUNT=$MOUNT - DFS_NAME_DIR=$MOUNT/hadoop/hdfs/name - FS_CHECKPOINT_DIR=$MOUNT/hadoop/hdfs/secondary - DFS_DATA_DIR=$MOUNT/hadoop/hdfs/data - MAPRED_LOCAL_DIR=$MOUNT/hadoop/mapred/local - MAX_MAP_TASKS=2 - MAX_REDUCE_TASKS=1 - CHILD_OPTS=-Xmx550m - CHILD_ULIMIT=1126400 - TMP_DIR=$MOUNT/tmp/hadoop-\${user.name} - - mkdir -p $MOUNT/hadoop - chown hadoop:hadoop $MOUNT/hadoop - mkdir $MOUNT/tmp - chmod a+rwxt $MOUNT/tmp - - ############################################################################## - # Modify this section to customize your Hadoop cluster. - ############################################################################## - cat > $HADOOP_CONF_DIR/hadoop-site.xml < - - - - dfs.block.size - 134217728 - true - - - dfs.data.dir - $DFS_DATA_DIR - true - - - dfs.datanode.du.reserved - 1073741824 - true - - - dfs.datanode.handler.count - 3 - true - - - - - dfs.name.dir - $DFS_NAME_DIR - true - - - dfs.namenode.handler.count - 5 - true - - - dfs.permissions - true - true - - - dfs.replication - $DFS_REPLICATION - - - fs.checkpoint.dir - $FS_CHECKPOINT_DIR - true - - - fs.default.name - hdfs://$NN_HOST:8020/ - - - fs.trash.interval - 1440 - true - - - hadoop.tmp.dir - $MOUNT/tmp/hadoop-\${user.name} - true - - - io.file.buffer.size - 65536 - - - mapred.child.java.opts - $CHILD_OPTS - - - mapred.child.ulimit - $CHILD_ULIMIT - true - - - mapred.job.tracker - $JT_HOST:8021 - - - mapred.job.tracker.handler.count - 5 - true - - - mapred.local.dir - $MAPRED_LOCAL_DIR - true - - - mapred.map.tasks.speculative.execution - true - - - mapred.reduce.parallel.copies - 10 - - - mapred.reduce.tasks - 10 - - - mapred.reduce.tasks.speculative.execution - false - - - mapred.submit.replication - 10 - - - mapred.system.dir - /hadoop/system/mapred - - - mapred.tasktracker.map.tasks.maximum - $MAX_MAP_TASKS - true - - - mapred.tasktracker.reduce.tasks.maximum - $MAX_REDUCE_TASKS - true - - - tasktracker.http.threads - 46 - true - - - mapred.compress.map.output - true - - - mapred.output.compression.type - BLOCK - - - hadoop.rpc.socket.factory.class.default - org.apache.hadoop.net.StandardSocketFactory - true - - - hadoop.rpc.socket.factory.class.ClientProtocol - - true - - - hadoop.rpc.socket.factory.class.JobSubmissionProtocol - - true - - - io.compression.codecs - org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec - - - - dfs.namenode.plugins - org.apache.hadoop.thriftfs.NamenodePlugin - Comma-separated list of namenode plug-ins to be activated. - - - - dfs.datanode.plugins - org.apache.hadoop.thriftfs.DatanodePlugin - Comma-separated list of datanode plug-ins to be activated. - - - - dfs.thrift.address - 0.0.0.0:9090 - - - jobtracker.thrift.address - 0.0.0.0:9290 - - - mapred.jobtracker.plugins - org.apache.hadoop.thriftfs.ThriftJobTrackerPlugin - Comma-separated list of jobtracker plug-ins to be activated. - - -EOF - -# Expose /metrics URL endpoint - cat > $HADOOP_CONF_DIR/hadoop-metrics.properties < /dev/null; then - apt-get -y install hue-common - apt-get -y install hue-useradmin hue-jobsub hue-beeswax - elif which rpm &> /dev/null; then - yum install -y hue-common - yum install -y hue-useradmin hue-jobsub hue-beeswax - fi - - # Configure hue - sed -i -e "s|http_port=8088|http_port=80|" /etc/hue/hue.ini - - # Hue logs should be on the /mnt partition - mv /var/log/hue /var/log/hue.tmp - mkdir -p $MOUNT/hue/logs - chown hue:hue $MOUNT/hue/logs - ln -s $MOUNT/hue/logs /var/log/hue - chown -R hue:hue /var/log/hue - mv /var/log/hue.tmp/* /var/log/hue - rm -rf /var/log/hue.tmp -} - -function install_hue_plugins() { - if which dpkg &> /dev/null; then - apt-get -y install hue-plugins - elif which rpm &> /dev/null; then - yum install -y hue-plugins - fi -} - -function start_hue() { - /etc/init.d/hue start -} - -function start_namenode() { - if which dpkg &> /dev/null; then - AS_HADOOP="su -s /bin/bash - hadoop -c" - # Format HDFS - [ ! -e $FIRST_MOUNT/hadoop/hdfs ] && $AS_HADOOP "$HADOOP namenode -format" - update-rc.d $HADOOP-namenode defaults - elif which rpm &> /dev/null; then - AS_HADOOP="/sbin/runuser -s /bin/bash - hadoop -c" - # Format HDFS - [ ! -e $FIRST_MOUNT/hadoop/hdfs ] && $AS_HADOOP "$HADOOP namenode -format" - chkconfig --add $HADOOP-namenode - fi - - service $HADOOP-namenode start - - $AS_HADOOP "$HADOOP dfsadmin -safemode wait" - $AS_HADOOP "/usr/bin/$HADOOP fs -mkdir /user" - # The following is questionable, as it allows a user to delete another user - # It's needed to allow users to create their own user directories - $AS_HADOOP "/usr/bin/$HADOOP fs -chmod +w /user" - - # Create temporary directory for Pig and Hive in HDFS - $AS_HADOOP "/usr/bin/$HADOOP fs -mkdir /tmp" - $AS_HADOOP "/usr/bin/$HADOOP fs -chmod +w /tmp" - $AS_HADOOP "/usr/bin/$HADOOP fs -mkdir /user/hive/warehouse" - $AS_HADOOP "/usr/bin/$HADOOP fs -chmod +w /user/hive/warehouse" -} - -function start_daemon() { - daemon=$1 - if which dpkg &> /dev/null; then - update-rc.d $HADOOP-$daemon defaults - elif which rpm &> /dev/null; then - chkconfig --add $HADOOP-$daemon - fi - service $HADOOP-$daemon start -} - update_repo -install_hadoop -configure_hadoop -install_hue_plugins - -for role in $(echo "$ROLES" | tr "," "\n"); do - case $role in - nn) - install_hue - start_namenode - start_hue - ;; - snn) - start_daemon secondarynamenode - ;; - jt) - start_daemon jobtracker - ;; - dn) - start_daemon datanode - ;; - tt) - start_daemon tasktracker - ;; - esac -done - +install_hadoop \ No newline at end of file diff --git a/scripts/cloudera/cdh/post-configure b/scripts/cloudera/cdh/post-configure new file mode 100644 index 00000000..6054dbea --- /dev/null +++ b/scripts/cloudera/cdh/post-configure @@ -0,0 +1,465 @@ +#!/usr/bin/env bash +# +# 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. +# +# Install CDH. +# + +set -x +set -e + +################################################################################ +# Initialize variables +################################################################################ + +ROLES=$1 +shift + +NN_HOST= +JT_HOST= +CLOUD_PROVIDER= +while getopts "n:j:c:" OPTION; do + case $OPTION in + n) + NN_HOST="$OPTARG" + ;; + j) + JT_HOST="$OPTARG" + ;; + c) + CLOUD_PROVIDER="$OPTARG" + ;; + esac +done + +case $CLOUD_PROVIDER in + ec2) + # Use public hostname for EC2 + SELF_HOST=`wget -q -O - http://169.254.169.254/latest/meta-data/public-hostname` + ;; + *) + SELF_HOST=`/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'` + ;; +esac + +REPO=${REPO:-cdh3} +HADOOP=hadoop-${HADOOP_VERSION:-0.20} +HADOOP_CONF_DIR=/etc/$HADOOP/conf.dist +for role in $(echo "$ROLES" | tr "," "\n"); do + case $role in + nn) + NN_HOST=$SELF_HOST + ;; + jt) + JT_HOST=$SELF_HOST + ;; + esac +done + +# Install a list of packages on debian or redhat as appropriate +function install_packages() { + if which dpkg &> /dev/null; then + apt-get update + apt-get -y install $@ + elif which rpm &> /dev/null; then + yum install -y $@ + else + echo "No package manager found." + fi +} + +function prep_disk() { + mount=$1 + device=$2 + automount=${3:-false} + + echo "warning: ERASING CONTENTS OF $device" + mkfs.xfs -f $device + if [ ! -e $mount ]; then + mkdir $mount + fi + mount -o defaults,noatime $device $mount + if $automount ; then + echo "$device $mount xfs defaults,noatime 0 0" >> /etc/fstab + fi +} + +function make_hadoop_dirs { + for mount in "$@"; do + if [ ! -e $mount/hadoop ]; then + mkdir -p $mount/hadoop + chgrp hadoop $mount/hadoop + chmod g+w $mount/hadoop + fi + done +} + +# Configure Hadoop by setting up disks and site file +function configure_hadoop() { + case $CLOUD_PROVIDER in + ec2) + MOUNT=/mnt + ;; + *) + MOUNT=/data + ;; + esac + FIRST_MOUNT=$MOUNT + DFS_NAME_DIR=$MOUNT/hadoop/hdfs/name + FS_CHECKPOINT_DIR=$MOUNT/hadoop/hdfs/secondary + DFS_DATA_DIR=$MOUNT/hadoop/hdfs/data + MAPRED_LOCAL_DIR=$MOUNT/hadoop/mapred/local + MAX_MAP_TASKS=2 + MAX_REDUCE_TASKS=1 + CHILD_OPTS=-Xmx550m + CHILD_ULIMIT=1126400 + TMP_DIR=$MOUNT/tmp/hadoop-\${user.name} + + mkdir -p $MOUNT/hadoop + chgrp hadoop $MOUNT/hadoop + chmod g+w $MOUNT/hadoop + mkdir $MOUNT/tmp + chmod a+rwxt $MOUNT/tmp + + ############################################################################## + # Modify this section to customize your Hadoop cluster. + ############################################################################## + cat > $HADOOP_CONF_DIR/hadoop-site.xml < + + + + dfs.block.size + 134217728 + true + + + dfs.data.dir + $DFS_DATA_DIR + true + + + dfs.datanode.du.reserved + 1073741824 + true + + + dfs.datanode.handler.count + 3 + true + + + + + dfs.name.dir + $DFS_NAME_DIR + true + + + dfs.namenode.handler.count + 5 + true + + + dfs.permissions + true + true + + + dfs.replication + $DFS_REPLICATION + + + fs.checkpoint.dir + $FS_CHECKPOINT_DIR + true + + + fs.default.name + hdfs://$NN_HOST:8020/ + + + fs.trash.interval + 1440 + true + + + hadoop.tmp.dir + $MOUNT/tmp/hadoop-\${user.name} + true + + + io.file.buffer.size + 65536 + + + mapred.child.java.opts + $CHILD_OPTS + + + mapred.child.ulimit + $CHILD_ULIMIT + true + + + mapred.job.tracker + $JT_HOST:8021 + + + mapred.job.tracker.handler.count + 5 + true + + + mapred.local.dir + $MAPRED_LOCAL_DIR + true + + + mapred.map.tasks.speculative.execution + true + + + mapred.reduce.parallel.copies + 10 + + + mapred.reduce.tasks + 10 + + + mapred.reduce.tasks.speculative.execution + false + + + mapred.submit.replication + 10 + + + mapred.system.dir + /hadoop/system/mapred + + + mapred.tasktracker.map.tasks.maximum + $MAX_MAP_TASKS + true + + + mapred.tasktracker.reduce.tasks.maximum + $MAX_REDUCE_TASKS + true + + + tasktracker.http.threads + 46 + true + + + mapred.compress.map.output + true + + + mapred.output.compression.type + BLOCK + + + hadoop.rpc.socket.factory.class.default + org.apache.hadoop.net.StandardSocketFactory + true + + + hadoop.rpc.socket.factory.class.ClientProtocol + + true + + + hadoop.rpc.socket.factory.class.JobSubmissionProtocol + + true + + + io.compression.codecs + org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec + + + + dfs.namenode.plugins + org.apache.hadoop.thriftfs.NamenodePlugin + Comma-separated list of namenode plug-ins to be activated. + + + + dfs.datanode.plugins + org.apache.hadoop.thriftfs.DatanodePlugin + Comma-separated list of datanode plug-ins to be activated. + + + + dfs.thrift.address + 0.0.0.0:9090 + + + jobtracker.thrift.address + 0.0.0.0:9290 + + + mapred.jobtracker.plugins + org.apache.hadoop.thriftfs.ThriftJobTrackerPlugin + Comma-separated list of jobtracker plug-ins to be activated. + + +EOF + +# Expose /metrics URL endpoint + cat > $HADOOP_CONF_DIR/hadoop-metrics.properties < /dev/null; then + apt-get -y install hue-common + apt-get -y install hue-useradmin hue-jobsub hue-beeswax + elif which rpm &> /dev/null; then + yum install -y hue-common + yum install -y hue-useradmin hue-jobsub hue-beeswax + fi + + # Configure hue + sed -i -e "s|http_port=8088|http_port=80|" /etc/hue/hue.ini + + # Hue logs should be on the /mnt partition + mv /var/log/hue /var/log/hue.tmp + mkdir -p $MOUNT/hue/logs + chown hue:hue $MOUNT/hue/logs + ln -s $MOUNT/hue/logs /var/log/hue + chown -R hue:hue /var/log/hue + for files in /var/log/hue.tmp/*; do + if [ -a $files ]; then + mv $files /var/log/hue + fi + done + rm -rf /var/log/hue.tmp +} + +function install_hue_plugins() { + if which dpkg &> /dev/null; then + apt-get -y install hue-plugins + elif which rpm &> /dev/null; then + yum install -y hue-plugins + fi +} + +function start_hue() { + /etc/init.d/hue start +} + +function start_namenode() { + if which dpkg &> /dev/null; then + apt-get -y install $HADOOP-namenode + AS_HDFS="su -s /bin/bash - hdfs -c" + # Format HDFS + [ ! -e $FIRST_MOUNT/hadoop/hdfs ] && $AS_HDFS "$HADOOP namenode -format" + elif which rpm &> /dev/null; then + yum install -y $HADOOP-namenode + AS_HDFS="/sbin/runuser -s /bin/bash - hdfs -c" + # Format HDFS + [ ! -e $FIRST_MOUNT/hadoop/hdfs ] && $AS_HDFS "$HADOOP namenode -format" + fi + + service $HADOOP-namenode start + + $AS_HDFS "$HADOOP dfsadmin -safemode wait" + $AS_HDFS "/usr/bin/$HADOOP fs -mkdir /user" + # The following is questionable, as it allows a user to delete another user + # It's needed to allow users to create their own user directories + $AS_HDFS "/usr/bin/$HADOOP fs -chmod +w /user" + $AS_HDFS "/usr/bin/$HADOOP fs -mkdir /hadoop" + $AS_HDFS "/usr/bin/$HADOOP fs -chmod +w /hadoop" + $AS_HDFS "/usr/bin/$HADOOP fs -mkdir /mnt" + $AS_HDFS "/usr/bin/$HADOOP fs -chmod +w /mnt" + + # Create temporary directory for Pig and Hive in HDFS + $AS_HDFS "/usr/bin/$HADOOP fs -mkdir /tmp" + $AS_HDFS "/usr/bin/$HADOOP fs -chmod +w /tmp" + $AS_HDFS "/usr/bin/$HADOOP fs -mkdir /user/hive/warehouse" + $AS_HDFS "/usr/bin/$HADOOP fs -chmod +w /user/hive/warehouse" +} + +function start_daemon() { + daemon=$1 + if which dpkg &> /dev/null; then + apt-get -y install $HADOOP-$daemon + elif which rpm &> /dev/null; then + yum install -y $HADOOP-$daemon + fi + service $HADOOP-$daemon start +} + +configure_hadoop +#install_hue_plugins + +for role in $(echo "$ROLES" | tr "," "\n"); do + case $role in + nn) + #install_hue + start_namenode + #start_hue + ;; + snn) + start_daemon secondarynamenode + ;; + jt) + start_daemon jobtracker + ;; + dn) + start_daemon datanode + ;; + tt) + start_daemon tasktracker + ;; + esac +done + diff --git a/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java b/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java index 5a3a587d..7949d8f5 100644 --- a/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java +++ b/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java @@ -31,24 +31,21 @@ import org.apache.cassandra.thrift.Cassandra; import org.apache.cassandra.thrift.TokenRange; import org.apache.commons.configuration.CompositeConfiguration; -import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.thrift.TException; import org.apache.thrift.protocol.TBinaryProtocol; import org.apache.thrift.transport.TSocket; import org.apache.whirr.service.Cluster; +import org.apache.whirr.service.Cluster.Instance; import org.apache.whirr.service.ClusterSpec; import org.apache.whirr.service.Service; import org.apache.whirr.service.ServiceFactory; -import org.apache.whirr.service.Cluster.Instance; import org.apache.whirr.service.cassandra.CassandraService; import org.apache.whirr.ssh.KeyPair; import org.junit.After; import org.junit.Before; import org.junit.Test; -import com.jcraft.jsch.JSchException; - public class CassandraServiceTest { private static final String KEYSPACE = "Keyspace1"; @@ -58,8 +55,7 @@ public class CassandraServiceTest { private Cluster cluster; @Before - public void setUp() throws ConfigurationException, IOException, - JSchException { + public void setUp() throws Exception { CompositeConfiguration config = new CompositeConfiguration(); if (System.getProperty("config") != null) { config.addConfiguration(new PropertiesConfiguration(System.getProperty("config"))); @@ -128,7 +124,7 @@ public void testInstances() throws Exception { } @After - public void tearDown() throws IOException { + public void tearDown() throws IOException, InterruptedException { if (service != null) { service.destroyCluster(clusterSpec); } diff --git a/services/cdh/pom.xml b/services/cdh/pom.xml new file mode 100644 index 00000000..65d6ffc4 --- /dev/null +++ b/services/cdh/pom.xml @@ -0,0 +1,115 @@ + + + 4.0.0 + + org.apache.whirr + whirr + 0.3.0-incubating-SNAPSHOT + ../../pom.xml + + org.apache.whirr + whirr-cdh + jar + 0.3.0-incubating-SNAPSHOT + Apache Whirr Hadoop + + + ${project.groupId} + whirr-core + ${project.version} + + + ${project.groupId} + whirr-core + ${project.version} + test-jar + test + + + ${project.groupId} + whirr-hadoop + ${project.version} + + + org.jclouds + jclouds-allcompute + + + org.jclouds + jclouds-compute + + + org.jclouds + jclouds-core + + + org.jclouds + jclouds-enterprise + + + org.jclouds + jclouds-jsch + + + org.jclouds + jclouds-log4j + + + junit + junit + + + org.hamcrest + hamcrest-all + + + commons-configuration + commons-configuration + + + org.slf4j + slf4j-api + + + org.slf4j + slf4j-log4j12 + + + log4j + log4j + + + com.cloudera.hadoop + hadoop-core + 0.20.2-737 + test + + + + org.codehaus.jackson + jackson-core-asl + 1.5.2 + + + org.codehaus.jackson + jackson-mapper-asl + 1.5.2 + + + diff --git a/services/cdh/src/test/java/org/apache/whirr/service/cdh/integration/CdhHadoopServiceTest.java b/services/cdh/src/test/java/org/apache/whirr/service/cdh/integration/CdhHadoopServiceTest.java new file mode 100644 index 00000000..fb2fea6d --- /dev/null +++ b/services/cdh/src/test/java/org/apache/whirr/service/cdh/integration/CdhHadoopServiceTest.java @@ -0,0 +1,155 @@ +/** + * 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 org.apache.whirr.service.cdh.integration; + +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertNull; +import static org.hamcrest.Matchers.instanceOf; +import static org.junit.Assert.assertThat; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.util.Map; +import java.util.Map.Entry; + +import org.apache.commons.configuration.CompositeConfiguration; +import org.apache.commons.configuration.PropertiesConfiguration; +import org.apache.hadoop.conf.Configuration; +import org.apache.hadoop.fs.FSDataInputStream; +import org.apache.hadoop.fs.FileSystem; +import org.apache.hadoop.fs.Path; +import org.apache.hadoop.io.LongWritable; +import org.apache.hadoop.io.Text; +import org.apache.hadoop.mapred.ClusterStatus; +import org.apache.hadoop.mapred.FileInputFormat; +import org.apache.hadoop.mapred.FileOutputFormat; +import org.apache.hadoop.mapred.JobClient; +import org.apache.hadoop.mapred.JobConf; +import org.apache.hadoop.mapred.lib.LongSumReducer; +import org.apache.hadoop.mapred.lib.TokenCountMapper; +import org.apache.whirr.service.ClusterSpec; +import org.apache.whirr.service.Service; +import org.apache.whirr.service.ServiceFactory; +import org.apache.whirr.service.hadoop.HadoopCluster; +import org.apache.whirr.service.hadoop.HadoopProxy; +import org.apache.whirr.service.hadoop.HadoopService; +import org.apache.whirr.ssh.KeyPair; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +public class CdhHadoopServiceTest { + + private ClusterSpec clusterSpec; + private HadoopService service; + private HadoopProxy proxy; + private HadoopCluster cluster; + + @Before + public void setUp() throws Exception { + CompositeConfiguration config = new CompositeConfiguration(); + if (System.getProperty("config") != null) { + config.addConfiguration(new PropertiesConfiguration(System.getProperty("config"))); + } + config.addConfiguration(new PropertiesConfiguration("whirr-hadoop-test.properties")); + clusterSpec = new ClusterSpec(config); + if (clusterSpec.getPrivateKey() == null) { + Map pair = KeyPair.generate(); + clusterSpec.setPublicKey(pair.get("public")); + clusterSpec.setPrivateKey(pair.get("private")); + } + Service s = new ServiceFactory().create(clusterSpec.getServiceName()); + assertThat(s, instanceOf(HadoopService.class)); + service = (HadoopService) s; + + cluster = service.launchCluster(clusterSpec); + proxy = new HadoopProxy(clusterSpec, cluster); + proxy.start(); + } + + @Test + public void test() throws Exception { + Configuration conf = getConfiguration(); + + JobConf job = new JobConf(conf, CdhHadoopServiceTest.class); + JobClient client = new JobClient(job); + waitForTaskTrackers(client); + + FileSystem fs = FileSystem.get(conf); + + OutputStream os = fs.create(new Path("input")); + Writer wr = new OutputStreamWriter(os); + wr.write("b a\n"); + wr.close(); + + job.setMapperClass(TokenCountMapper.class); + job.setReducerClass(LongSumReducer.class); + job.setOutputKeyClass(Text.class); + job.setOutputValueClass(LongWritable.class); + FileInputFormat.setInputPaths(job, new Path("input")); + FileOutputFormat.setOutputPath(job, new Path("output")); + + JobClient.runJob(job); + + FSDataInputStream in = fs.open(new Path("output/part-00000")); + BufferedReader reader = new BufferedReader(new InputStreamReader(in)); + assertEquals("a\t1", reader.readLine()); + assertEquals("b\t1", reader.readLine()); + assertNull(reader.readLine()); + reader.close(); + + } + + private Configuration getConfiguration() { + Configuration conf = new Configuration(); + for (Entry entry : cluster.getConfiguration().entrySet()) { + conf.set(entry.getKey().toString(), entry.getValue().toString()); + } + return conf; + } + + private static void waitForTaskTrackers(JobClient client) throws IOException { + while (true) { + ClusterStatus clusterStatus = client.getClusterStatus(); + int taskTrackerCount = clusterStatus.getTaskTrackers(); + if (taskTrackerCount > 0) { + break; + } + try { + System.out.print("."); + Thread.sleep(1000); + } catch (InterruptedException e) { + break; + } + } + } + + @After + public void tearDown() throws IOException, InterruptedException { + if (proxy != null) { + proxy.stop(); + } + service.destroyCluster(clusterSpec); + } + +} diff --git a/services/cdh/src/test/resources/log4j.xml b/services/cdh/src/test/resources/log4j.xml new file mode 100644 index 00000000..e3a7d54c --- /dev/null +++ b/services/cdh/src/test/resources/log4j.xml @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/services/cdh/src/test/resources/whirr-hadoop-test.properties b/services/cdh/src/test/resources/whirr-hadoop-test.properties new file mode 100644 index 00000000..8b08b0ab --- /dev/null +++ b/services/cdh/src/test/resources/whirr-hadoop-test.properties @@ -0,0 +1,26 @@ +# +# 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. +# +whirr.service-name=hadoop +whirr.cluster-name=cdhclustertest +whirr.instance-templates=1 jt+nn,1 dn+tt +whirr.provider=ec2 +whirr.identity=${sys:whirr.test.identity} +whirr.credential=${sys:whirr.test.credential} +whirr.private-key-file=${sys:user.home}/.ssh/id_rsa +whirr.hadoop-install-runurl=cloudera/cdh/install +whirr.hadoop-configure-runurl=cloudera/cdh/post-configure diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java index e6bf3405..61a2d97c 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java @@ -27,6 +27,8 @@ import com.google.common.base.Charsets; import com.google.common.base.Function; import com.google.common.base.Joiner; +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; import com.google.common.collect.Collections2; import com.google.common.collect.Iterables; import com.google.common.collect.Sets; @@ -40,6 +42,11 @@ import java.util.Map.Entry; import java.util.Properties; import java.util.Set; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; import org.apache.whirr.service.Cluster.Instance; import org.apache.whirr.service.ClusterSpec; @@ -50,7 +57,7 @@ import org.apache.whirr.service.jclouds.TemplateBuilderStrategy; import org.jclouds.compute.ComputeService; import org.jclouds.compute.ComputeServiceContext; -import org.jclouds.compute.RunNodesException; +import org.jclouds.compute.RunScriptOnNodesException; import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.Template; import org.jclouds.compute.domain.TemplateBuilder; @@ -78,44 +85,71 @@ public String getName() { } @Override - public HadoopCluster launchCluster(ClusterSpec clusterSpec) throws IOException { + public HadoopCluster launchCluster(final ClusterSpec clusterSpec) + throws IOException, InterruptedException { LOG.info("Launching " + clusterSpec.getClusterName() + " cluster"); + ExecutorService executorService = Executors.newCachedThreadPool(); ComputeServiceContext computeServiceContext = ComputeServiceContextBuilder.build(clusterSpec); - ComputeService computeService = computeServiceContext.getComputeService(); + final ComputeService computeService = + computeServiceContext.getComputeService(); - // Launch Hadoop "master" (NN and JT) - // deal with user packages and autoshutdown with extra runurls String hadoopInstallRunUrl = clusterSpec.getConfiguration().getString( - "whirr.hadoop-install-runurl", "apache/hadoop/install"); - Payload nnjtBootScript = newStringPayload(runUrls(clusterSpec.getRunUrlBase(), - String.format("util/configure-hostnames -c %s", clusterSpec.getProvider()), + "whirr.hadoop-install-runurl", "apache/hadoop/install"); + + Payload installScript = newStringPayload(runUrls(clusterSpec.getRunUrlBase(), "sun/java/install", - String.format("%s nn,jt -c %s", hadoopInstallRunUrl, + String.format("%s -c %s", hadoopInstallRunUrl, clusterSpec.getProvider()))); LOG.info("Configuring template"); - TemplateBuilder masterTemplateBuilder = computeService.templateBuilder() - .options(runScript(nnjtBootScript) + TemplateBuilder templateBuilder = computeService.templateBuilder() + .options(runScript(installScript) .installPrivateKey(clusterSpec.getPrivateKey()) .authorizePublicKey(clusterSpec.getPublicKey())); TemplateBuilderStrategy strategy = new HadoopTemplateBuilderStrategy(); - strategy.configureTemplateBuilder(clusterSpec, masterTemplateBuilder); + strategy.configureTemplateBuilder(clusterSpec, templateBuilder); + + final Template template = templateBuilder.build(); + + InstanceTemplate masterInstanceTemplate = + clusterSpec.getInstanceTemplate(MASTER_ROLE); + checkNotNull(masterInstanceTemplate); + checkArgument(masterInstanceTemplate.getNumberOfInstances() == 1); + Future> nodesFuture = executorService.submit( + new Callable>(){ + public Set call() throws Exception { + LOG.info("Starting master node"); + Set nodes = computeService.runNodesWithTag( + clusterSpec.getClusterName(), 1, template); + LOG.info("Master node started: {}", nodes); + return nodes; + } + }); - Template masterTemplate = masterTemplateBuilder.build(); + final InstanceTemplate workerInstanceTemplate = + clusterSpec.getInstanceTemplate(WORKER_ROLE); + checkNotNull(workerInstanceTemplate); + Future> workerNodesFuture = + executorService.submit(new Callable>(){ + public Set call() throws Exception { + int num = workerInstanceTemplate.getNumberOfInstances(); + LOG.info("Starting {} worker node(s)", num); + Set nodes = computeService.runNodesWithTag( + clusterSpec.getClusterName(), num, template); + LOG.info("Worker nodes started: {}", nodes); + return nodes; + } + }); - InstanceTemplate instanceTemplate = clusterSpec.getInstanceTemplate(MASTER_ROLE); - checkNotNull(instanceTemplate); - checkArgument(instanceTemplate.getNumberOfInstances() == 1); Set nodes; try { - LOG.info("Starting master node"); - nodes = computeService.runNodesWithTag( - clusterSpec.getClusterName(), 1, masterTemplate); - LOG.info("Master node started: {}", nodes); - } catch (RunNodesException e) { + LOG.info("Waiting for master node to start..."); + nodes = nodesFuture.get(); + } catch (ExecutionException e) { + // Check for RunNodesException // TODO: can we do better here (retry?) throw new IOException(e); } @@ -141,40 +175,54 @@ public HadoopCluster launchCluster(ClusterSpec clusterSpec) throws IOException { jobtrackerPublicAddress.getHostAddress(), JOBTRACKER_PORT); } - // Launch slaves (DN and TT) - Payload slaveBootScript = newStringPayload(runUrls(clusterSpec.getRunUrlBase(), - String.format("util/configure-hostnames -c %s", clusterSpec.getProvider()), - "sun/java/install", - String.format("%s dn,tt -n %s -j %s -c %s", - hadoopInstallRunUrl, - DnsUtil.resolveAddress(namenodePublicAddress.getHostAddress()), - DnsUtil.resolveAddress(jobtrackerPublicAddress.getHostAddress()), + String hadoopConfigureRunUrl = clusterSpec.getConfiguration().getString( + "whirr.hadoop-configure-runurl", "apache/hadoop/post-configure"); + Payload nnjtConfigureScript = newStringPayload(runUrls( + clusterSpec.getRunUrlBase(), + String.format( + "%s nn,jt -n %s -j %s -c %s", + hadoopConfigureRunUrl, + namenodePublicAddress.getHostName(), + jobtrackerPublicAddress.getHostName(), clusterSpec.getProvider()))); - - TemplateBuilder slaveTemplateBuilder = computeService.templateBuilder() - .options(runScript(slaveBootScript) - .installPrivateKey(clusterSpec.getPrivateKey()) - .authorizePublicKey(clusterSpec.getPublicKey())); - - slaveTemplateBuilder.fromTemplate(masterTemplate); // base on master - slaveTemplateBuilder.locationId(masterTemplate.getLocation().getId()); - - Template slaveTemplate = slaveTemplateBuilder.build(); - - instanceTemplate = clusterSpec.getInstanceTemplate(WORKER_ROLE); - checkNotNull(instanceTemplate); - + try { + LOG.info("Running configure script on master"); + computeService.runScriptOnNodesMatching(withIds(node.getId()), + nnjtConfigureScript); + } catch (RunScriptOnNodesException e) { + // TODO: retry + throw new IOException(e); + } + Set workerNodes; try { - LOG.info("Starting {} worker node(s)", instanceTemplate.getNumberOfInstances()); - workerNodes = computeService.runNodesWithTag(clusterSpec.getClusterName(), - instanceTemplate.getNumberOfInstances(), slaveTemplate); - LOG.info("Worker nodes started: {}", workerNodes); - } catch (RunNodesException e) { - // TODO: don't bail out if only a few have failed to start + workerNodes = workerNodesFuture.get(); + } catch (ExecutionException e) { + // TODO: Check for RunNodesException and don't bail out if only a few have + // failed to start throw new IOException(e); } - + + Payload dnttConfigureScript = newStringPayload(runUrls( + clusterSpec.getRunUrlBase(), + String.format( + "%s dn,tt -n %s -j %s -c %s", + hadoopConfigureRunUrl, + namenodePublicAddress.getHostName(), + jobtrackerPublicAddress.getHostName(), + clusterSpec.getProvider()))); + try { + LOG.info("Running configure script on workers"); + Predicate workerPredicate = Predicates.and( + runningWithTag(clusterSpec.getClusterName()), + Predicates.not(withIds(node.getId()))); + computeService.runScriptOnNodesMatching(workerPredicate, + dnttConfigureScript); + } catch (RunScriptOnNodesException e) { + // TODO: retry + throw new IOException(e); + } + // TODO: wait for TTs to come up (done in test for the moment) Set instances = Sets.union(getInstances(MASTER_ROLE, Collections.singleton(node)), @@ -182,7 +230,7 @@ public HadoopCluster launchCluster(ClusterSpec clusterSpec) throws IOException { LOG.info("Completed launch of {}", clusterSpec.getClusterName()); LOG.info("Web UI available at http://{}", - DnsUtil.resolveAddress(namenodePublicAddress.getHostAddress())); + DnsUtil.resolveAddress(namenodePublicAddress.getHostAddress())); Properties config = createClientSideProperties(namenodePublicAddress, jobtrackerPublicAddress); createClientSideHadoopSiteFile(clusterSpec, config); HadoopCluster cluster = new HadoopCluster(instances, config); @@ -206,6 +254,21 @@ public Instance apply(NodeMetadata node) { })); } + private static Predicate withIds(String... ids) { + checkNotNull(ids, "ids must be defined"); + final Set search = Sets.newHashSet(ids); + return new Predicate() { + @Override + public boolean apply(NodeMetadata nodeMetadata) { + return search.contains(nodeMetadata.getId()); + } + @Override + public String toString() { + return "withIds(" + search + ")"; + } + }; + } + private Properties createClientSideProperties(InetAddress namenode, InetAddress jobtracker) throws IOException { Properties config = new Properties(); config.setProperty("hadoop.job.ugi", "root,root"); @@ -259,7 +322,7 @@ private void createProxyScript(ClusterSpec clusterSpec, HadoopCluster cluster) { String script = String.format("echo 'Running proxy to Hadoop cluster at %s. " + "Use Ctrl-c to quit.'\n", DnsUtil.resolveAddress(cluster.getNamenodePublicAddress().getHostAddress())) - + Joiner.on(" ").join(proxy.getProxyCommand()); + + Joiner.on(" ").join(proxy.getProxyCommand()); Files.write(script, hadoopProxyFile, Charsets.UTF_8); LOG.info("Wrote Hadoop proxy script {}", hadoopProxyFile); } catch (IOException e) { diff --git a/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/DnsUtilTest.java b/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/DnsUtilTest.java index b717ab99..86285866 100644 --- a/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/DnsUtilTest.java +++ b/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/DnsUtilTest.java @@ -29,7 +29,6 @@ import java.util.Collections; import java.util.Enumeration; -import org.apache.whirr.service.hadoop.DnsUtil; import org.junit.Test; import org.xbill.DNS.Address; diff --git a/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceTest.java b/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceTest.java index 0f913880..994d557f 100644 --- a/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceTest.java +++ b/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceTest.java @@ -33,7 +33,6 @@ import java.util.Map.Entry; import org.apache.commons.configuration.CompositeConfiguration; -import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; @@ -59,8 +58,6 @@ import org.junit.Before; import org.junit.Test; -import com.jcraft.jsch.JSchException; - public class HadoopServiceTest { private ClusterSpec clusterSpec; @@ -69,8 +66,7 @@ public class HadoopServiceTest { private HadoopCluster cluster; @Before - public void setUp() throws ConfigurationException, IOException, - JSchException { + public void setUp() throws Exception { CompositeConfiguration config = new CompositeConfiguration(); if (System.getProperty("config") != null) { config.addConfiguration(new PropertiesConfiguration(System.getProperty("config"))); @@ -149,7 +145,7 @@ private static void waitForTaskTrackers(JobClient client) throws IOException { } @After - public void tearDown() throws IOException { + public void tearDown() throws IOException, InterruptedException { if (proxy != null) { proxy.stop(); } diff --git a/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java b/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java index 1cea28c3..ceb59f6c 100644 --- a/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java +++ b/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java @@ -27,7 +27,6 @@ import java.util.concurrent.CountDownLatch; import org.apache.commons.configuration.CompositeConfiguration; -import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.whirr.service.ClusterSpec; import org.apache.whirr.service.Service; @@ -38,15 +37,13 @@ import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; -import org.apache.zookeeper.ZooKeeper; import org.apache.zookeeper.Watcher.Event.KeeperState; import org.apache.zookeeper.ZooDefs.Ids; +import org.apache.zookeeper.ZooKeeper; import org.junit.After; import org.junit.Before; import org.junit.Test; -import com.jcraft.jsch.JSchException; - public class ZooKeeperServiceTest { private ClusterSpec clusterSpec; @@ -54,8 +51,7 @@ public class ZooKeeperServiceTest { private ZooKeeperCluster cluster; @Before - public void setUp() throws ConfigurationException, IOException, - JSchException { + public void setUp() throws Exception { CompositeConfiguration config = new CompositeConfiguration(); if (System.getProperty("config") != null) { config.addConfiguration(new PropertiesConfiguration(System.getProperty("config"))); @@ -120,7 +116,7 @@ public void close() throws InterruptedException { } @After - public void tearDown() throws IOException { + public void tearDown() throws IOException, InterruptedException { service.destroyCluster(clusterSpec); } From 187507910b426f18171e1a0b2e6a56a638278c94 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Tue, 30 Nov 2010 16:29:56 +0000 Subject: [PATCH 035/216] WHIRR-146. Changing the mapred.child.java.opts value does not change the heap size from a default one. Contributed by Tibor Kiss. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1040616 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 3 +++ scripts/apache/hadoop/post-configure | 23 +++++++++++++++++------ scripts/cloudera/cdh/post-configure | 23 +++++++++++++++++------ 3 files changed, 37 insertions(+), 12 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 07a8ebe3..e8773b5b 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -15,6 +15,9 @@ Trunk (unreleased changes) WHIRR-137. Allow use of an arbitrary AMI on EC2. (tomwhite) + WHIRR-146. Changing the mapred.child.java.opts value does not change the + heap size from a default one. (Tibor Kiss via tomwhite) + Release 0.2.0 - 2010-11-04 NEW FEATURES diff --git a/scripts/apache/hadoop/post-configure b/scripts/apache/hadoop/post-configure index 3c79793e..fc1d5fa4 100644 --- a/scripts/apache/hadoop/post-configure +++ b/scripts/apache/hadoop/post-configure @@ -105,8 +105,10 @@ function configure_hadoop() { MAPRED_LOCAL_DIR=$MOUNT/hadoop/mapred/local MAX_MAP_TASKS=2 MAX_REDUCE_TASKS=1 - CHILD_OPTS=-Xmx550m - CHILD_ULIMIT=1126400 + CHILD_MAP_OPTS=-Xmx550m + CHILD_REDUCE_OPTS=-Xmx550m + CHILD_MAP_ULIMIT=1126400 + CHILD_REDUCE_ULIMIT=1126400 TMP_DIR=$MOUNT/tmp/hadoop-\${user.name} mkdir -p $MOUNT/hadoop @@ -197,12 +199,21 @@ function configure_hadoop() { 65536 - mapred.child.java.opts - $CHILD_OPTS + mapred.map.child.java.opts + $CHILD_MAP_OPTS - mapred.child.ulimit - $CHILD_ULIMIT + mapred.reduce.child.java.opts + $CHILD_REDUCE_OPTS + + + mapred.map.child.ulimit + $CHILD_MAP_ULIMIT + true + + + mapred.reduce.child.ulimit + $CHILD_REDUCE_ULIMIT true diff --git a/scripts/cloudera/cdh/post-configure b/scripts/cloudera/cdh/post-configure index 6054dbea..955089e7 100644 --- a/scripts/cloudera/cdh/post-configure +++ b/scripts/cloudera/cdh/post-configure @@ -124,8 +124,10 @@ function configure_hadoop() { MAPRED_LOCAL_DIR=$MOUNT/hadoop/mapred/local MAX_MAP_TASKS=2 MAX_REDUCE_TASKS=1 - CHILD_OPTS=-Xmx550m - CHILD_ULIMIT=1126400 + CHILD_MAP_OPTS=-Xmx550m + CHILD_REDUCE_OPTS=-Xmx550m + CHILD_MAP_ULIMIT=1126400 + CHILD_REDUCE_ULIMIT=1126400 TMP_DIR=$MOUNT/tmp/hadoop-\${user.name} mkdir -p $MOUNT/hadoop @@ -214,12 +216,21 @@ function configure_hadoop() { 65536 - mapred.child.java.opts - $CHILD_OPTS + mapred.map.child.java.opts + $CHILD_MAP_OPTS - mapred.child.ulimit - $CHILD_ULIMIT + mapred.reduce.child.java.opts + $CHILD_REDUCE_OPTS + + + mapred.map.child.ulimit + $CHILD_MAP_ULIMIT + true + + + mapred.reduce.child.ulimit + $CHILD_REDUCE_ULIMIT true From 93b1cb1b2e1194b1668989b2d2cac149b2b7780e Mon Sep 17 00:00:00 2001 From: Thomas White Date: Wed, 1 Dec 2010 17:29:08 +0000 Subject: [PATCH 036/216] Reverted changes to scripts/apache/hadoop/post-configure from WHIRR-146 git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1041095 13f79535-47bb-0310-9956-ffa450edef68 --- scripts/apache/hadoop/post-configure | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/scripts/apache/hadoop/post-configure b/scripts/apache/hadoop/post-configure index fc1d5fa4..3c79793e 100644 --- a/scripts/apache/hadoop/post-configure +++ b/scripts/apache/hadoop/post-configure @@ -105,10 +105,8 @@ function configure_hadoop() { MAPRED_LOCAL_DIR=$MOUNT/hadoop/mapred/local MAX_MAP_TASKS=2 MAX_REDUCE_TASKS=1 - CHILD_MAP_OPTS=-Xmx550m - CHILD_REDUCE_OPTS=-Xmx550m - CHILD_MAP_ULIMIT=1126400 - CHILD_REDUCE_ULIMIT=1126400 + CHILD_OPTS=-Xmx550m + CHILD_ULIMIT=1126400 TMP_DIR=$MOUNT/tmp/hadoop-\${user.name} mkdir -p $MOUNT/hadoop @@ -199,21 +197,12 @@ function configure_hadoop() { 65536 - mapred.map.child.java.opts - $CHILD_MAP_OPTS + mapred.child.java.opts + $CHILD_OPTS - mapred.reduce.child.java.opts - $CHILD_REDUCE_OPTS - - - mapred.map.child.ulimit - $CHILD_MAP_ULIMIT - true - - - mapred.reduce.child.ulimit - $CHILD_REDUCE_ULIMIT + mapred.child.ulimit + $CHILD_ULIMIT true From 13b730d4884fa82b903287f7e06fde0276fd8a59 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Wed, 1 Dec 2010 19:15:53 +0000 Subject: [PATCH 037/216] WHIRR-147. Regression on launching clusters from EC2. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1041136 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 ++ .../org/apache/whirr/service/hadoop/HadoopService.java | 8 ++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index e8773b5b..dc397370 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -18,6 +18,8 @@ Trunk (unreleased changes) WHIRR-146. Changing the mapred.child.java.opts value does not change the heap size from a default one. (Tibor Kiss via tomwhite) + WHIRR-147. Regression on launching clusters from EC2. (tomwhite) + Release 0.2.0 - 2010-11-04 NEW FEATURES diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java index 61a2d97c..71aeb5ef 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java @@ -182,8 +182,8 @@ public Set call() throws Exception { String.format( "%s nn,jt -n %s -j %s -c %s", hadoopConfigureRunUrl, - namenodePublicAddress.getHostName(), - jobtrackerPublicAddress.getHostName(), + DnsUtil.resolveAddress(namenodePublicAddress.getHostAddress()), + DnsUtil.resolveAddress(jobtrackerPublicAddress.getHostAddress()), clusterSpec.getProvider()))); try { LOG.info("Running configure script on master"); @@ -208,8 +208,8 @@ public Set call() throws Exception { String.format( "%s dn,tt -n %s -j %s -c %s", hadoopConfigureRunUrl, - namenodePublicAddress.getHostName(), - jobtrackerPublicAddress.getHostName(), + DnsUtil.resolveAddress(namenodePublicAddress.getHostAddress()), + DnsUtil.resolveAddress(jobtrackerPublicAddress.getHostAddress()), clusterSpec.getProvider()))); try { LOG.info("Running configure script on workers"); From faaeac02a2da2685a7972deb4046e738eafb3e34 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Thu, 2 Dec 2010 05:39:07 +0000 Subject: [PATCH 038/216] WHIRR-151. Credentials not set correctly for Hadoop service configure step. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1041284 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 3 +++ .../apache/whirr/service/hadoop/HadoopService.java | 13 +++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index dc397370..a9dea0af 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -20,6 +20,9 @@ Trunk (unreleased changes) WHIRR-147. Regression on launching clusters from EC2. (tomwhite) + WHIRR-151. Credentials not set correctly for Hadoop service configure step. + (tomwhite) + Release 0.2.0 - 2010-11-04 NEW FEATURES diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java index 71aeb5ef..a5791481 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java @@ -61,6 +61,8 @@ import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.Template; import org.jclouds.compute.domain.TemplateBuilder; +import org.jclouds.compute.options.RunScriptOptions; +import org.jclouds.domain.Credentials; import org.jclouds.io.Payload; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -175,6 +177,11 @@ public Set call() throws Exception { jobtrackerPublicAddress.getHostAddress(), JOBTRACKER_PORT); } + // Use private key to run script + Credentials credentials = new Credentials( + Iterables.get(nodes, 0).getCredentials().identity, + clusterSpec.readPrivateKey()); + String hadoopConfigureRunUrl = clusterSpec.getConfiguration().getString( "whirr.hadoop-configure-runurl", "apache/hadoop/post-configure"); Payload nnjtConfigureScript = newStringPayload(runUrls( @@ -188,7 +195,8 @@ public Set call() throws Exception { try { LOG.info("Running configure script on master"); computeService.runScriptOnNodesMatching(withIds(node.getId()), - nnjtConfigureScript); + nnjtConfigureScript, + RunScriptOptions.Builder.overrideCredentialsWith(credentials)); } catch (RunScriptOnNodesException e) { // TODO: retry throw new IOException(e); @@ -217,7 +225,8 @@ public Set call() throws Exception { runningWithTag(clusterSpec.getClusterName()), Predicates.not(withIds(node.getId()))); computeService.runScriptOnNodesMatching(workerPredicate, - dnttConfigureScript); + dnttConfigureScript, + RunScriptOptions.Builder.overrideCredentialsWith(credentials)); } catch (RunScriptOnNodesException e) { // TODO: retry throw new IOException(e); From 1341b3c2ceec99dca9924dab637e250309dccf60 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Fri, 3 Dec 2010 17:53:17 +0000 Subject: [PATCH 039/216] WHIRR-92. Add a benchmark for Hadoop clusters. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1041933 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 + .../lib/hadoop-test-0.20.3-SNAPSHOT.jar | Bin 0 -> 1598246 bytes services/hadoop/pom.xml | 22 ++- .../integration/HadoopServiceController.java | 167 ++++++++++++++++++ .../hadoop/integration/HadoopServiceTest.java | 95 ++-------- .../benchmark/HadoopBenchmarkSuite.java | 45 +++++ .../HadoopServiceTeraSortBenchmark.java | 132 ++++++++++++++ .../HadoopServiceTestDFSIOBenchmark.java | 69 ++++++++ 8 files changed, 450 insertions(+), 82 deletions(-) create mode 100644 services/hadoop/lib/hadoop-test-0.20.3-SNAPSHOT.jar create mode 100644 services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceController.java create mode 100644 services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/benchmark/HadoopBenchmarkSuite.java create mode 100644 services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/benchmark/HadoopServiceTeraSortBenchmark.java create mode 100644 services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/benchmark/HadoopServiceTestDFSIOBenchmark.java diff --git a/CHANGES.txt b/CHANGES.txt index a9dea0af..af2a6ec9 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -8,6 +8,8 @@ Trunk (unreleased changes) WHIRR-87. Parallelize Hadoop cluster creation. (tomwhite) + WHIRR-92. Add a benchmark for Hadoop clusters. (tomwhite) + BUG FIXES WHIRR-128. Fix DNS resolution for clients running within EC2. diff --git a/services/hadoop/lib/hadoop-test-0.20.3-SNAPSHOT.jar b/services/hadoop/lib/hadoop-test-0.20.3-SNAPSHOT.jar new file mode 100644 index 0000000000000000000000000000000000000000..1bcded1c27acb7617425c4b952e6606e0f7ef05f GIT binary patch literal 1598246 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 uP3YuBnQ`Qw))3)j*f_oVp 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νT#I&h`s;O9@fVL%wcw+fsG*2u)$3URd#g0h$<&(NU?#9m=&-S zWpx;d4m05Bulp=~zV_pCt)T7{Ynfq`gObf!qsR%!*JIjdi6ZKVvAqCl?1Xmp)xHCN z;9oQ|z(Td;BZ~&EB{1-5K|)kWa?1EY7r`9mstxsYF^I@-Da7}oJvZBh;Bw?$ntQ=Vec zE~~0H4rFG6Y)!-NSSN#KNxsTbVgW|_=Choa0)ZJ6u=888HWS0+m4lUn1IZVSgwG^G zmUvLa2S4Tmi>!VY>uRzV1qXubn@{rCWZCQpZkZrUaY?M>`=^DqdtXtqDci!rdc#-A zt8tY^yS2Ibx43y!Fu|;jc?p*a*14#(*gBLdQ}777X>d_;4vg0QYW`XhSVb1zNvx%b zPgKrkeaeAt?iP(%?; z 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

^UUVy1C1f?(ldDjB0zEM4cn&Sw9+gV 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 G|u1lYG26Ds5_MRvOo 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%0Aw}%#ZSMa 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

PNkF$ zYuVSZ>6KnYR#paY(6CC9=D5LfEVedEB$n8nY?t>)l7f*JY;(?XD59g&fkMFIrXBZI z-9LK=pEL@ur#6JeA-5R`3E^L(-PgrSVxkVCz9e;)QsPCK+2Zje2s%RW}lrWr44s7lFcBlP0+ zskt+nG))~5^gU;wP7U7a7G0VaykVuW3iN~KC!+)XpA)s|G$kwBCp>rSR0dI?(=Sxv zwy$s-a=D0~j-9ht{atBzF+tK@guBe$tr2OK*l~$$Y#rtXCk>6bkSWYNGL?xY0-$OS z;E8z__6LeCA$m=QUSB*I#w}nz=cM<}?_$(V9ju^34hHimno+)qlUYeJyr#T-ll3f_ zO?1-#3bKxSDoZQgIK=QL(hqRl$Lwr9{GxfO_kyHZ#%;Y;-4`Z%Gqe1mdx{fF@+>E_ z66KSF@HoY2pQua!aP+Q#Go5noiYOrSuQA_~guVZ36#=h2Hx9EnCHIJ&XI;|X(oU-D z82q&NjEg7=^ux6+CNwuK7v<*&Oa!~_SNMx5^PFvMC1zdPlK<6uK%Qg^SoX}CwAfkN zx`(RnIA-RX-YipEx%36A!Rh%n;sCt+zIRZ8!_dV+s0BpVPr@##@0wfst}7$X zqo?RKR|eNglm!p;zh>M@r#!;H`DSnIL8u+e@$tdcyL7QLy_tZyyyWvn;>mD-=cNvR zrqc}xXOW)Kh?yf!A9ROL!_RD^uqhx<2ixH}{gIegA#%xf0A=G85IYwAwW#6v0bTj* zWr%(evxGD8V>3Irg4-M@)J0PPrqbJ{0Uw=Zys2N3Y?)sNpzZs^Pmn zcb)LYu55r{#v?{}Dt>~f@oDmj1+?v1hsndnv{GukL5ffk7^_)4v8}Kv0Mbh5v~Wt5 zUeGT13P=l|uA_Q;Z|N4^zKIt4OU&j*{f6jmM(Uzg5M#vmE#|;0wmQl#+_T+e3@!WO zb&80^_LwTj)lb;}{r~|)!*YgTe*93y`0?Gn@#BZRlR2ZIgQ2m7DWipk4{Yx^b#oE(%k8H*?7zd7vr7=hlDrIdn z?l53L5`{Z(SZ+vyU=r7)W=&UE7SRItOqlUZ_!pvu^o3qC84@}1ajD|WGckXH%@BtFc_*EFoYngd>%-l{zk;$H3m%XW>qwg})0 z+J6y?AQ_>A7|E~XBkgE{Fb1@Kbj`Y@dz3%%Lh>uI&<|&a4^L_Qh*dw8W&PBGChx4l z`;a$k6&vKvc54r$4d>N@Y$bnSU&0w+y20jEMelv7M(93A0PWRu00&y=s}=2fBk&?4 zu_BKY;GB@Ryjw+k>fn9mR2RCfwZ7t#+WNrGyw+=ku!&mucWf`RLdwI$a%1fASCX&= zH&#ntuLaE#%7vUl9~~>x=Brl(^fpu#Wx^BS16i93uo)}vilxRwOyN%hF#+}hq%12s zHV#%ZDM#DPp1N2)<@8SiO)D}Fge_^rJ2xKxi^fOtKuP|2eS)ywU zGt{d#n*)s#Mr7c$_4D^Y;rz_U>a8)Enq`;E^YVI$CuM=*%9iHL3Zr3Rt`}?@%ey9I z@MWQfp4(p)PP)>(5+n*it*m1bVYI0{a1DQP_*9RW6fA4|MaC zIV5(gzQ`lx0A8_qo@BJ~=a2|6Iq&Dmxee%ZY6yYtsN|ifNCqa=E9=u=R#Ph*(A{#$ ztQ#Z?1ndV=+fv$OP8!>)CSq$*hg*N-pqr62&QCBwWHhDQY7LTeT=9?ooN+`_c z^eNwj%`!0bGn+kvatP1lq=cXov`J8&S?uVUp^i$>lGiM^y=X4XHMhW-Z)BB`qzcMw z`&2BR?XcEWM0{v681eN$~`i<+~xe*u*%xOM<&AK0_`H4UyV13;$sT zkfvZ4wyV&nL%ImqQ1D7=Ad4?jH_MkrxY!&uG$Ua@WEo26nh%_zIgd|ztH7~J-I(OP zQ6{~!(hoU$Bt5f*xI2{z(HSP#alVQ#k>6`}?V!B&#q4O*oep^b1blbIuBDtgn_;IdBd~vRUpkOnR z3<w}?Y%=2e}q2Gzeqjr&Y^4}H(<@Crt` z4hPiVjB$4uL(VXh_0~db!^*OuW>M%&nlTe02|RRO46mrjjfFO;B`jE4S-T*9) z-mnag-Y9L#Xyg~8JZ|JqJLrKX>O)O{hvHDxYm-N}gav|fBbZ%qaC1$V0*v#&AXk{L z%6(TpIa8GabZf4kAshG59gDXRJ0<~Pefu{!UxCd*{#LJ;JIc4MVeYr~@ZNW|VGp-? zVK30^x1mG(M50oP2a^a3DMU&19R{rQmg6>fTb3gN$G^y8nS*{jKoMp?mt9d$RWTFN z8ol_x;DLvPF*+jx^b4E-NiJLtuhUBa) zdM-F`Gq}P(J|3I%>cNMOObhvl{w_#s$0v`1j%xBGBg8w?@T(DE<=U;%%^{A5G@5v2 z@VvonOx6$6lM02<@mPvLM5&JLD5(jBUhaTjq0%dhHA?P4#AP^5HIYQ4os?ayhW{#| zTVysiBWYygajR;w2D}s9P$<2`5U*08Zlt-nyfFOHSY4iPjk=DMBQ#q^dsGP`A)KeQ zg5hu9{RzHU;U;v?-{AoUOP9W)n@P=s zK@sE7_88=zj4!W-n3eR!O)s3D16DTGK2SQx(Y(iIp5Z}HW^Z`h1RJ!PNUNlbeoOPtRKV?6N+3>#VMs) zV-6C0I;5$8queJd0H9Ru6OG8&-@m%&2)@ne69!(>@>6Spm9{L~Bu=zUx)P(a*C7+v zBGg^D&g=XZ1}{aS+u>@Lepr`3W9lIte|kfuH-tN)dxNz#NZyfo!_77T?@+u!>XNo_ zFR4e@7Fl2=m5XU_;ReVk4EL}nA$uZSRQyXW_I~`F0!_6G&w1@WL`u;4eB}6*VhPn9 z4x@~p$8CSo{m1#^CgI-EW|%oe&H>bx{ENTQlh@2nSnac=uu9PpTKdIc<$PkDm-)2w zDx(X38G9+G8y50Od--PI+s=s< z^Lmu=c@?hKnX8}cH2Wj=1v*ycdQ?Z!64#KVu^RcGiuegIzP@qMS?y74K;jmdH$>BV z6ITX*xZN|Kydk3jzc+I5C3*4MB-;IN2Z2~jq)(D(Erx0igb?B(o(M0SF^F31via=t z>S^vXdkK)Cbt3g5i)X#&MtA1uhBhTqql^?L113w^{YRTn-CyrirV$?6RtSpM+fh9G z%Uh%8qYVK{xwBP;7D^#3Q2E{CGBf-v4Y&G|%-*1`Y#jBRC3nO{-VW`bXjBe|O!>Wjw?2ZRX-t@y>cHV%PO1manqAT6g7Q=<};=(uWaH?X&d|IXVZ*_YCm_oB3^xJY#6aZZC3=KzvyOWAZ{rZh}rV9 ze}lpT9rZn32wopF;;fn$hVodP%MqT`$g3Tma=c>TahniAA5httu-JEYdVA0y zZ+lrtT#re8+>t)C1v`*|CiAz-{rnG;5s|-Lk1FVoAE1!`Ka9*`rZ%Q7rvEuIt6kWk zN}_$4UA=~(ia-^DX|>w^;3cM$vb4-zN{B9$7?n5W{1u6Wb2-3UzoR=nQ*;aAn<-6S zg!v>%Sb(VZG({G|HjY^NID5@)-usYyaryQ1Lg){oG2AAOwwJ0nJPm>&ZSqzfq5Zm* z(MPq<(K~fm#n)?wWo^%=S;u*?{hqusF~l<@_Q35w-V+cGS_eplgOq^-SSw{%5S+^q z6bJ1;^48t((!N}P)3F{kGbU$d!?l4TZ!lPP_-_q{uHspOL*UDk|m{c^j7!SM767>SPMc=g~F?%b38$plrMEIrO={e zs7%E5ZBZy=0ziPs(UByv%W5X46rzV2ICqc-Cno7Em*zwY7y6C9Bta=_Q%bv>An`vD zO)dv`01?ysnVxR=^hfNSbGbuw1$ZWK-Y|KckeqU9oI2D!2?-Zl4}{L#wu)G=C}@`t zTZ^gO#2A;0@L6-}*l;A7mm%Ro1u%!GY#y;Sg1>`oDRDmWad?l>Gpi*mR#Qs9P2^&~ z#*}@_D2?bX;U8YZ9_3Ri^K7w(9vk?342#koaSly$2EgWDY?B|#Qyn4QA2g_q(XCCZ z0eQe477T~{eg9n2pC=u81=J*lua+h6>cO>U(^02P7c%}ttXU%P8?0z%Mb zLWCd-cvbNPbHGvH^tmS4)K}saos@Plu8gPKHD>*K$3@@3+jZxZs!lYwT+&30}T_0IWiXFZlcna3Uw{e1OCT?S=ur$AP zk|u?J&;r{sPmm@R8YF-5*EiQ!u`+#ww?;-}qBHdq{Y_#zDz;SBKiX$`g$W$cO7iz| z0L)j#91^i4S;ae}4$Q%{9JSF^WZdeV5?7N3AyHKY(z1(3>@vy-&MtZ6AFd)Zn--kq z+x2qvbN*L+<0t=G!9GC$`?nX_k+o#y`}{H>{r{l5Dma+h{pSh(ZK;jBitcAl#zx9a zp}{=tSP#Imfi)z~=7_|#0cIG`!JxE4X_PYHOJG{sSW0AKE1m7QxGtJqWEKBCVUWTp zYwa(T>ZGt;xN`m{}zpTNFvOp9^i6~$k0BL;Ze9z$uuH~!m)`xkBRprk(h zzV)kDM8WnvCmA34;UA>VJ6WjR;kNd9d(MHs*2gNnr2AbUDUYwRUOrUp$v9ZJC`bhS zbu(3wMOH_s*uaHYpS}S4;8H{0%6-|&5g5|U6}}8?EP^a-F8-XvJAQ@Z!FDg~UCcS1 zhV{81J6`)_j)!UuTDE%xe;)Fa7)pmR|GD^|8y2(S^BP@OcvBO@5 zPpeEZ%VaN{!N8^jE-f7tTm8|grT*ljk{8OvrhFusN_l3k26tYUtYR=pB92~hge+1GMx%?VG;N!x+<^R}pMEoq zkJL*ooB~xTWCbl({{AUSvlU2f3?5y<{qumWFoX>S&n`PV*X}6SCJl01D#hJiF@17r zn%o{#uP?-Mj<93Qv6$Db- zO{7xUBc7!NncwAvoT7h#Fy3Zr%{NoOq+4S4Bzq>@76s`aLu&g)&1k(t3c`!K`Tl^^SfGH_%jbvKVZpqWp%6 z@R%e4cg+(w!)7JXg7-&*OBx;hcj zh&-MdVwoWy;<(wfbtfqOnjFM=TN)&I$O!Wl)d!8`dHS9hAe#7RnM{&mCUGw`O$*m6 zGd9Lq9G~$N3=d!wc^l;Y7m5C26UtQV6rYTrvVdNzEqU(R4nb8B1 zmX!yFtI8R3=%OObi5qg}lDo=VnMHQy=Tc?8@ge79v2(xuY|(Mc*5%tMu(nfPZe^pt zv`Cr0$TtP**jjddwV^Jtx*E@XFg{5LkLOILc-L@w41Fg?g#0Eoy=%8(ohS$x{@0Ob zXVgOSt5aZSJE3H{0IZ{Pg!W@b*n89g@zodp2aZtQwh*w=&*`(U!GgD%%%DoWVJv{P zFnujUkM5oq9UTncWS~P!Gudp@WoXfx_O#5x3iI{2%&h={y`GA`n2ccq7 zY)iS*EwM>0#IzH1r{@8%0E}CDIXgaajF;X6pHtId?b0!ww*(>f@OkntSyi-l?LrC) zYyPo1gNYhI)`XAry%$|^A~*2Bvbn8ANBE?O3XNG56N1QH_J-gXp{@7=EXl65=v*TZ z@8RHxNZ;D^2*@6@R$y#YW85|tu)_83sr?R`OYX4ewkMRy2ZaTNf{Ftgv3CSiLoK2h zsddFsxU2#*;g;&{q|Cj5{gow1Q=cnk{C#LT(?&&O+{9BzJ8eE`TzX%dMKg0){kIK# zNZW!6iFkXIHh(VOP8znhuy$JW;FoE$3V}*aQW1E&QENExYE50wj?||)D%|SofD&z*}mEZH0mUwsv?E#tE zAGFqJ^YX36+Gt5n>>}ryDV{{Y0m>G#^JGl?i3R9i3&6Dq0l3J9RFw-3__+?6<4%j) zPsH|TF)JiQ|UZFUzW>ML)oEEzgLGk%)cf(HjuThx#Plwj8okG2Z`@(`|Xls5d^8S7um5IZ3ceg*s(FC)rJyQI+|qXZqbAH7t^0h1_oIF6 zOJ4ptyMUW6^40y?bNe0)H*4Xs5`Fri5hDn5Bj|b8-T#knNWc5F%0Tb-z+UfTJK7(r z&EM;eG4mfi%LgzT)AS+92Epr2e;se(RuG<%R+aIB;B38}q}$Bc-(5dm#P%k26oWK{ zDM_?2P=_K9k0(7mtt@FhCvmEV9mR7o+A*|p>^ye6r-vie?uLQjOrQ=}RZw8d(s&Z( z5k|>s#)BM>)8RoQH5Cvfm`T`S!DWooK=;!y6bFRl&n3AslVy)A)m*Z zJ1>oMA`wdCbofa8f^?E#=o;jaGySg`2hBXDM$P2rbh)CdOF7dp5s8fmgzQ2?(lqH3 z(V>O`8!BtF){IQW1uW*|iVW=Yo3f;ek2wdPd~Gudz!0f~nX}Bg+Nqlof`T1ao~>s2 zoU4wHIDnWHQ|blRCi4PfapCt3N&dQWLvX>4>4G9CfH? zvVtqYc=u#cH8zVSFR6K0a!MR#yEbPCICJnI`j%9!_)oNRts!*qr%dow$psiz?V)|r z*(viMXO;}k_)`jdVs5Wkq?S zhPBB-V_P7@9l2v-^IAZZ){Ne$tYZ7^>)^?+G@}wZaX!#I&BpWL(9$5%9g((FZh;(B zWM%AwM^zr)ei@^;5R)=m%s5+mq2G%l>Q>1E5T&izuB4)pzmq*(obwY~WlN~T!>rkk zQ&@^~$YRZh#+OqBjLl&4Qa)lSWJx`lMGbHOW&X-idzlVDn|zdQiOf>bqdM~LL5KtF zvIejkXXP4DB*X}q02L;Ir!ZlH`;$?}Ray+chOuixr<_K`m$N)rvY5%k=mAnW;lHK& zxhz4MBU}emcQ6RIFr*Z~d_qG2r3|F3Vl1}K6ge@O+MxrjY}iYL1g0VDi7QTY&=u6_ zYA5;pCvc@yezavaH6NfAJ``59F_XDXG!oMw`v7AkQJ&gC4Ezg+$hapK9hxBsozg=m zY`yqc*^}{AhDjhQb8=W7wloFpE#jYv8a|#d9*k7phHPpj zw7O~+?N~0rN9dX^R&3+!^4dcf#RFW&)RMDE>ynCLr%{kvvNKnHLWo+seSyd! zyEO8M1HGlH<B%ip18*!cBkHGb zI#?2_)F^Aj|A~JCqz~E9#7d|}J-cd`YrY_&>HmODAWL8e1icfvK}qM)@T$qE6877| zB%JaBJyvqo4<|sRnRBxs*B$p=EW<_{(h8_J=uD>FUAtc+jB5rR1sf z!b`3!9w^B`bi7oG#I54xHTbN@xNM}bEbnOT^Yek2m}A)fnJ$Uyz2+kTRR&ubAK-eM zs<~Z)VrbstNnl*dbZ^6(ipz-zGvzt7bLdN)KA&_hsAQSO8f(q^F z({q=kc@Zr)cXTR)%hC9GqP}w?t+lv+rA&+)i4Sy;HJ?9~Owy;MX+)Bf4>&y+^gtVLcMSDP9kMMr18G$ELndM22KMOu%7b-W?g7Q-Rdbx6)>&Y}a}uw`QVa;5T{N zp!6=}!r)65N}DTpsIsL()!+{l83lS?8WLt~3<3!JdT}DF!FDTu!}N}> zpx1@id83y)fxpu4!WQ7fo{0(yc9U*#*Ju5OoqU#Q*H>vJ43K%Js?}Yf(qzTuwAQnq zP2XVU<+ASG%3B9&vUXA3Z<^e(mdU4LBwS!K{HmjXbRg$IO|O@yjaf5K9$Uuyk9f=q;f)UMQMz!+8*ZSvWIHD3WeE0l$`6pl*iU#X%Fu0xg9GQU%~bH z(fjl=q_52m!OsSp&7unbl;6 z=7jN|@XI;x=ZQXnwyJj_)QZaElH(J`9%X8C+X?w?r43uV9{+}rl5*w1*>3AxVx}+wgS5>t!nmsdG^3*AGzU_=w9Za9HSX!&9O*YHkbF*(;w; zR@*6ZYI&ETtMD?XABvU_4)MKFS>0ioeaCzs{x~_r9^Gn^-9OD>+7*S{HRt&V82D!_ zv7_L?>NkP#9{x(^7wCNp_Uy0|u7B{8Z~WH>dIx`~po1TQ!XfyF7W*Nm6}4a04De?Q z#B4eI2f5?0tLL@>te#o}?T5!lGoPVp)%XW$tJK*!m15%|1wQN7v1JhK&kl8W4 zUoOrL_CiT`s-fOa+Uv(})QjS7g#-R}2!lSbLg&pK}7U`2OxBc(+p3D#=XC z@4&y>G zcaYMQKoo=BeMEqawyqmdeWypHmcVqvy?Ot;P_FAu^1G;|V2<`vT(vC|soc_&?| z)z%V9yr9t`5A50Co%~O4QXf^5ublWZeVx0O%fTMt-U=P=Nh^yqR=$w>Ga!y)AlVN# zT@x75=b3nBO$&|n@@AUm4b_YZsTwn*xl_g+C!(+Q(>|beXxdBQt18RuzsIacQYj5? z$Fn>btjQczK|ic8%*xkG#wZOVeeng1n(BrmGtUuNzOb%ohC8$juGUGJ7H5>9=0{wC(cPQ38AlX)_bXK%yQ@*!yt)ri3M~90iG|JDb z42Cl8dK+x?1-_IscJp~TAGJ5>b7U9Wyatm(d9@CO0bR{ zS|PFLvN{zrgAqKN%Iq3QJ;hcqgl!we>N(*Gik6VMXa-l;Wl{oaPNg|GEwp-2S^(o5 z>n2eb!~S-%pxxT^h77GhTxTi@cM0TdS%3O)`^t z>y4z_p`?>A4J_DQ-2uAHVR-eCx@DFHgy?J@B?N%0$-W+&d%UC^|*uM0sx?b{o4PcIC=c|&2cw2o^6j{pB7MZ)ThfF}AWh=-Dfz3&* z&^ZI^>S#>a{oGR{4gz6qU>jxT47t-M@d~Dl72*Zf_m!^OELCYL9I%1ryvG0#Th!V^ z$TZX`&E+t(wcc~rT89r+jyTW2m88euZnfmz{xIgsH+!36s&BQo<_^%8YA&6 z^s1vy*Cu7HM>&13)e>_axWjgG%aeyD^jX^!+9wGnhFqf(GtX7kVx`T7VCF#9ikeU@ zh9=}SHRpxrU_h`l$UE58`f>5qm=C~B+^cCNwNiDjUA&6N+_RO3GquwyYQ?-n+I69J zLc{=k35y$;xFfcF?;9%RClmTy2de<*GD*v72Ykl>^ZKWI8vA~z^>=kW&Ms#G>r)%n zZM`8VOfo%i={tR6O>2@Rqm~vT;YY>5G}N44TF5Yr$&8^hT`ze{f=X{Y$qx?H>FL|qZ$d;Of2DGtHl_`jYty~T?2C~ zbnJ|&gUi4V$YoY^D1qgU+RMo*Z$&oSYO!qzcY6Ir7C4CrH7MY1`{+a1P?tL{vXE*N zpxy~=^_U8*IhZrk{lXa#JEL}i*K&FApbCa8E3gn)^esUcO z7D&(LgvkAq*7L)ecxFf^{75{E_CKh@AHt=D{cju*a@Yftq57i;g- zBnr@NTkf)L+qQSvwr$(CZQHhO+jiA1+f}!|i|)ARsUuGRfPBr!m1~YMjRNf6eReN} zaZ$~WUyfB2P&q2&KllD)FLNI#ik2mdBy%i{nSHo%>nhKxh=r&yPsw}&}zhe^NEIf zI0(R%jfT3;+Of&Tf)~f*c7Vm>a^C*gXyq17129u{-RLx%-x*}R^1dvrNzG{*ZFGYL zcbzr#>riS#lb*(BIj;*Kr~!-HkDe$kY6y1{z7AQXlvXNlf*ZJLy<@nJ3?+a-VOKG5{qHSnZolv=8djxt#w`4ZKsH)`|~v^9euH_jJ)s}ALxi zUgaI(J~6pOXOSCB(>2Bj7o4kK(2Y0x3TBvA-|>dF4|0v{bDRu1+2s2hx;g1VddE9M z^(CYjvZePm%_G_$1J)_=0;y%KZxhzea@Yg2;w|tEgi9ZVar!f9;#$9_|&^@oC z?b8V8oSM=5%;EV4D1Ie*x!40~iF*i-Zc|(VfNfk%xE0N6iK|D(b6FUyV(1nf|2%); zd|hBUv1G?R#TxTXpF3jfPmX{219Y#ZOLmZcwFK(;|37F66pZbx%nkqFAFTiL zdj;jCxa$7n+oRf{dOwW*<`2Ox9|qA7g>VCp3)=e!fj7(;A2y#qh4vmqUEwhph&2>r>3^Ekr`^NiBhs$;ct9EC#`J(7TNo>^x=SrOSsm^#x^u!wW z>-n!j^M!r)!)tU_%i~?~kIMWe5B)6$9qfMX@ITw3TXhC68R%TJL9{MzFZrq-;*j6H zfynS~#cM=F??VBiuJRoVif`@Sh0Z6?_dFC{4*~p-IP@;^V5<^0Rhm~P;!o5~*nVfg zt!|gto^JOmo0sgcBV|wR0T^Y@%R%UC{NBAG+@SA4Ka|^iVD5pbPFGNFnj}yTDMyC59;7emm5ebaDOGPSKQvQzZztP9=W(d zoI0)p#nE#?G;*>MgQwDcMEmdlDT8RPqRY+yq(MiidX78UOXo5VlWti7N0R>ukWn`u zl0BeZM)6l(u=qqtqjCw5 zAx$C>Uu9l|hy~%uxky2UC2jm7l*o}S#}(-0TIB87Dsch+5R!PlwhzFQ$lCZd82YG| zBDc-Zj5aRPh{_LDs?f2X9;J~oll#SE&V&$QQc#b;!;BbRx|lvE_L+y$;Pen?6QVFL z&yyT;k>AtPkHC~I8D-?K4$Fgrg%O<*nrU)x8s4mA(?m5v$b^E&r@ykQ16R`dsOI6c zR7XveZJ<0vyGRL6Qsmsl$sOKm>r?XA}v6r zNZ;52O~skDbV%KQ1?=iFRF|OwzhP2LS9!W)R1{@}wZGDLsm8H0V;pT%Hd@z!mH7gH zBr`%bb;Y3Ip=;x$_Djnl60$DTn>olXF%P-wE22u&6G&L8+1*ojb0!j0(uht6v0Iib zVdoEy3jjB5lCykF4BLM>fs8N;lVq6KZ8>o`V=a0TiV&hqpGc9aW42*p>dVRs%s!jG zt7*cv@;P$!S1`&iE~r0ZX9}&=n2@?=B4JbkMaHo{ZBr=9iZpt3@fwO^X8Khlb8TTw zBRf?{oMjnCAQPED*g^iQOibdhGEVdNq=d-HXHHL57q*h-qM;j<%+Z^nr9ICAMUG(2Bf<*eVaY z&=kyxDiztrQG!wx@r2Q8a=6K!$2_WG_KHz?40+_K{#6ENqc{`cIcRV6@oifDGzzy8DY+rq&Y@YOpoz1jj z`n0uVoiv$*4JdLBlP)A)B=b(5)Cz|dQb(vFW5dDd%3Hb?B6x#&LqJnqaI2aCNOCYu z?z~N|Xd$bD7qeM0R3IDES-w?d)2vg3i@a)HCQIQAHQJ*r)v&br5=L=V<2zzrqjZ}= z!*bjo@>lsM+sWJocC&n@f+1F#-26k5FG>6tuqUx6U&B7(jsd{w==q3lFs^OvT0eO2;s}%nhJ$8g6t6} zVq3&!{%Ep)*l8b7XQ*;#0;Zno4IZjEo+@ICAQ9lmi~rae8hOab>&xOuVrFgqWa-9+ zYlPXWO+(FlQ(xG&d^W2F^sdb@xODhEEtM~A68|OssmZ=A@qLaSJuK@h-t?A8NND}4 z#YOrhvvU_CVvAD1I;F=6VJd5q^<0{i4^*Dpk~lBjTRh5I=YVz#k^kI{xgFXVB;8ow zAYi+A=EKRbc_3HfosQD`9o6O;xy4zKa+W(`t)Yce%3-*xWc~EE1UDGedhg=vm#Rq`>&rVT?&Cc0?EsZy!tF1JzlD%eAm4;0mad#l~2|8F&of7qLMia0AMt)lRYR`|W<~*=t7F%~6nNy8!#Wqby z_DGRbZa?7^%{q>~jaFvat$a$qaT%AS!4^j9nJzX^eRiz_a@u8vW5AWEkSv-Zo{iGoLho%daS(g7igqYF*v2YDWNsuqHOA&2FOf)z?kV%19^HJLhRe78 zR&w2DgWb=GlJ*^ZBlmXiF_;uwTBymMH`3-ON@oJOb>wr-BwG?bC8pFow7?lEsaL%| z_NhY|VVzbD;wV;*F-xt3a6qAdlnMYsPJ6xzVAH4_HFlJok6tX+)u;xCV|P<9AHuS-2oNmcmUL^ zwEF+O0&hK+0jD14g9e(qJEP_x;A#=kGK?RvC1m-vYJ3q>h7#wZVkCGw5(?7lDjSW_ z^qn%WF&4d65D8jPfN_`uRc!aTb5jaW_3VMXhG=Na7M@^RkjbGXk;>79yp^i!K)l?x z0VsEUQfn=o?j`??ZC^l>qw+?8Dx%xxJfBn}-4;Nh_O}cq-)p?%1_d&>!|;|tz`6!HFaK!ZS&bX^o2Y6UPAayAv{Aq{G5-w? zMtOy%^j3DK_Q1=)ItGG${IbgxHLN?<2`7!8In;PwXV;<5@4Wtv@*J`&3Y_+8aK5m| zq|RykHaktQb4r|{>Y{AJAl*g{cAgc%7_Yq++lJ}IS$p2_<7B>i+DXp#lX>GwFTmAl zc;Ips;~l`Bi?UOHp}&an_75&Vz4|>8=A`&U)Qa&Ax)!D0Hat2e6zj@GKT1MM^cEa1 zOg1Ta#MmVGSbxxsnU*0B;Mq%v4`>R@-b(~QtIBHxhjPqQmI#c5bSJ9%PH{P>JwP_* z>2>$s?s~^N+EQlh1io+*`0w886Oz3+{1%QVF=zKDG`8JQr<@>=tFy%pE_-U=XNyjn zlvmr&Q!GWyiiF>*xn$DMRnmdX<}VW%#Bs$Qm#PWxOXQ>iGa{NTUaor&x$xn|N5s+7=*aD&O1Z zjCuh_f6@R_!)-HTD2R)ds_gl&=7gI`muG#3-SXOUGOy#;`oZZoR`@{Sq`aq-4)fvj zw=)wabF`&AU};2ye?^XBmcLpnSj3%HvksHr9d~8?uT`QYJ^AW^pH^s~0}t-r7uYc< zH#J?K_#5VCfpyh2tJ6NvEBs~)3Io?aAwF(}Ix`Zq9QzN4vSaWM`tJnk=Aha@QR_*l z%^A_*N~wPex2ll1s<*)Q+&V*c;nDuFdxgR8%`vBt2;t0yUgJKRMIKOuh=d=@7y-+;x2>?u{q8*ch%soQ?-tb zbZ*??m?i(T)y7_XxZf|5J=A~3ioDSTjq@|+@agn7X@&V}9XNie|Py2%l-QOf^-zQ=xX zC+u-W-zgVxf#noXS4u4A3iZzY41T+lfKJ2TKFu+3VV47e|M zMaiAzWYV%uNhdPUXv+_766=n|9Z4sFO|f`OWcnV}BDr;e#(@jN z0c@MjRVJld0=6+x#$q8{piJBeZ!)EcF39s1xt6l+-)?kiX{pJvlEvTaq7xU9En?|I0@v>pGD|De`Nl<8Iu1Q9TCzuwzjqT-{ZH+rXrFl z@{f0Bke1dlVFaW~M43JU>Wxad@+~SRcuJ&jrL*|ogkdALYa4ja-dC{4d?xRkNII92 z8T6tnsgIq~Z=P(KO-EJ&q4BlzKBIf>*<;t4x2yH9Up=ZXh#hup;n@H?91?et!CI`i z&i39u4{nJ8v(y7U(jc|X$nD<~1NHz-FV9T6zuhAFr1K>GS6vznhx`7jE`OV z#!nQp4AqzJ{@Lza)<9|PXojLpMTw!bD-5F27^vPvvrqU=PEnXxq&`B`IBt?lHQ1Sh9S zaix_+l^wY8nt_oqU0GA=u@8?5jfzE@yT?Xo4CGUX$(`z!4hK+G~k|S+ZiRo z`eXa&X@zqUap61;bB%-uW?5mDlZS-Jag+=e?8KMlLHtu;y-eG~23ZLI`e}g5M&UO| zbyx&pzWPW&fKs7nAbZe?F=Kyil#uk695HQmnMp!0A&t#(vG?yb`A2)i)$sZp?fpDH z&#qborsX#lXo^Tf!-IG>Cczj3mWv=^mhB*x^EGwRj+)rh6uzZInf@l|SS3RdPHENd z(U364!%V72$+xpYQ)zWvjTbwwNuD_(w9E!c84Vql_Ms2Vf6xx!N{H8Ic*}brfx3=s-$h%UkQuo#{avMS37~k^OWdxg_3x0J-eu?(eTQCe z6X6^VYS!ZdDSU^&_)!$r13NZqI$~eASL53=B3i3`nM}8wm8iY9DM*x*X%VV-&pHzt z9H~z!Czw%^{VY~nbn$23|L4w?Nn*}p-YAkNPc0GY#xPgrf)!KYL^fO_0>4u0$tohr za8&8Q)KuiNeDcoaxG#Ujfpk_0Hh|(amfZ+|dVfE1aadSFgEQ))qiN<2T-NFE7xFpbVwg?I?xSu0H6}%b2tGJry9;6w|tB7|$TYmV5hGr|;3@`uZ z4=BG{-zR-hwb#Ij4Gax^WTu6cNB)o{)#wiX8KyA?S=@>WyLP2t!!WAsn*<)L};~rh^*1 zMH_(?*$&%%>~(^u<+B;p3PIhVK}>DA(ppf*aAdVQLztZ&XE)&UQ4N($H7WESwB`bZ zN$hT9v50AJQRl;|99U@AgyfPNhPD*=9a~-gQxfZIj-)-F8T4wQR(^9&>Y+s6?>$Tv zgB{UteB$9QKbiPpg7`q04@HA{(K%^{Y_m~egG7N|B;+vwyyf$butK@-0K)I0LWB(m zj7)Rf;bV(O)ynx+MAqT}Hf*l|y*+anagu8R?X7BOTmiWZy8HcPOr9AfYmszF$UCR( zbcU1YTX=+GPS5#>?iBF;b`_R_#VJ>Umb=GfLaiD_*nJOW4*&X$1_eb_-p^LX?cR%6 z@yGcskxHVWEOwNJ$P*;FZ;=1{{+ArG$3gqW?*q~P{E_|d-v3JGHts_DPWm>sM*mNG z(9;X~H$7-#(%7g@N^FCuhXe=(EY2Dme9H{{+kOf`z{jdUL@4D#mKi)Pm6a`2R^XlI z&Fl4OTq$gk54RDJ3=@Yrr?OeFyz;kd!(h3>ThF)m`#n~Jn&;)(q|u#U0CGG#-SdXy zh3nMkH%sXF+*|q%ptNTV_V;+G^bP}JKpQMeEnv3c#F6puO&?lT-JuP}3wwNwr@CV< zkgm}z9Y;Oj%fxE~(&QZq8Kb=`XScWV$k*i?%ZgXFGjCiB*c}WR>>k02tK0}1j@w!| zw^t+#p2Gos&vZy{qKKQGE>KISScc{=E5Puq6nl}8L%@=y>P>mg?)HwBo?>Oc zIeh%WmAS%{3Qf&ru~t&P5{%Wi)fIcU%iKSmxYethFaVR7Fib~^olAV7Cl_*oA@j!< z;4Pxwzxw-mDcw|aHIcrs*Ni0@8i_?_(pH7OrM#W0-~stbrRutTC^Z%xX=h4(rT~o! zc8aD};i$grGQR?ALvx9WGJQqyk^D>+2#Wk1Erf+C(uJuy$T6AI@>@uSOI35Jpnb)n3Cc)DhE8)G^7EApPq&_%^@m@q`o91)poh| zu-~gzou{j!%jU~O3bAMpb+Y{!_;nQ(B}2`fLODA+sxhVEoSZ67t_PI1p)KWV;jRg) zw$7WStk*UqmGp6sNKcTX|8a+oyGk>GhzUb`i6|`wUa%}TZ7?TSr2=O215lAlglH5t zDlP|Fc`7YZBil`2mY~iJ@MzT4gd>6s zvvJ7pTUpCX8&L4SNW;TZKqwO5n42Qx&ehu$sEoIHukBb{Y!-u1+tjp~?#~^?p%-Sq zgbH?8IA=CBD-)3wJuW#!)Gf)gB;Z$yCokGMWdc}hrxllW$q#mCK`1bTHM=x(8H~FL z^vm8Vg2)!=^ef`)nmBIj532T3q-T-;(}W%rR9e4)NSHUC`e)W2fch!b_qcCn(J>gG zXVS2b1L+f^8y850k~QoCKt*PcPOdhqx00vQ_i1mh$d9u^sTOL9vK4m4n4@wF?emM? zgUs%$LayX#@C_F;fFQ}SllB^?S%hIjo9xu0aL4YBy;cY8?!Q3V3_wA;9Q^VTLy~|d zaO3{CDSYi0+|(g2Djr5%ReP~@X^G#&hgkutx26E9s}&tKYPb>-xHFd$vwuKk@#7PC zD!HNiDj_@U8vTY<;h+A)SwMaVupw^+@G$Nu-J-Toy;2E2vVCgvt=v{C-@;{~$^H0p zIfhgrknz-8Gp|6|#cC<9QtN6b=H8s}VA)dstvR&_;evv?r}}HWNT{Jua|c1%yBVJjl!g zZ_juyM2?x>nBLadS{_!_pwZzvG0%)E3anq8^A4{&R4BX|S}HRso1r0G z;Ab2~cn|HV9|?=Bxl>Tj!%`6Dl%UrjQ;t6lk;+w!lrDR$Y)0So@1T`}6~1>_D!jyJ zJ>qqm#K+rAM#%!uCL23-L_0ht1#>Sy@(!|NQ%8{Pn_J0%q+4~~TD2&iyGr6sN18?% z_>)#j8Prz+pg&hhP>w6O=2j_aZVU9i0}t^FOr--j)eg|0P;z3^9k3<3n4!pc9Zy6A z@3NY<9W7?jTg>(J=~h06-v-|=RuI}Y(HHhs|n=xqA>dXgPc zdY%xB(S4JQ_qbIF*;cAvG$uoGJ#RAlNa+YV=FBNe;Zg=kFVKf!(|R>8TH`B{ z@Mgv8wRE97$gHkXj(lFQ9H;l>BJ>m16z<@Pgy`b0%3|XdEzN%Zq|}oQO3FnUJ)Ho^ z8i4{oE}D=x1}$kN_HYow=gpu&v|Qd4BVk-kelGxygUB?3o*;!gW2?MV)I03a_KXop z1}w^ru?+44k3akas(foK8vxF+032Oo>1R$2k&nJe{=i4nIZ-OJy1j(5Yx%_ z>EkaD==ce`!38r5vA6?HP$KHfEp#)uQM^jVKo`FEDojbrW~9Oq+em3CvZDzZG7AL#ZZsH1JSWbBEb0L;yGPl7wj`M}xAntw(dUf)7dE!Zi<0>Pc zVV!wK8XfwrA|+886=3lo8RYSf_rVp>+kqCvLqGNizJpSbH%Llsp$q_OWZM;pYG}(X z_`-Xb^9vVCYow%Pp0v!rJlSa4Xb2Z)ldzjy2u#=|H)!ID!B^SJbBneaKg%Nw8aPyH zw#dU;B}+h3em=GoDLWj07^-#fMsGQp^$K0_kbDL1P?lyvQ6RxmKw&H>rxCQ%YfkW| zCq-hKb7B@_fXn-mO@~W>Y&lK`d9l9P()|@uNuKw2qN-Of(dxlzjZa;OK|CZa-TUIwoUu#` ztohd8WBGmKx%;u>+FeT5^?6AKuq6h!l>dvh4y)q`vXg1%F5H=WiHzzV)Dpf{!6M~G z?mZxUHe31d5AF)x3a@`Azyj%}467R5wKlwR!RRjEvf!xhX#xAvUHHZg^G+P(I!z6x zvV1ni2)oIk&i-;PF~0q5M;$+unm;O|!|E`*OZGTD%Avow3ujN{&G`P!>OL5|W+)zN z1m5!gXu}hr4`RQp^C#E0;OR^x(=F3yDfKs1z|TrO@J}JrQ?BSO)H+A)ek!L;KL-rm z_}x$Ro+{?I?De-XPIX%!69fWbv;gPIp+JxYGa@IaaidCMU5s=?xjFKDy*ld!^MbQg z{4@q824@TE*i;sOqge~}i5WASz!Rs-LKlV;$aHEoNJAT=fa*9WWxBggVK666!7!p@ zvxsC-*6g_x%y61%M+!reQt5?Ry2vDi<9n6Xh)hP$l~L1)OBOSNnP{&jG8cIBUg3QF_@^y^GTHz{QSO# z2}c2uVfy-0x|Dr37C4hq<6=`tHg$fEcw1suOD1lu_TqMDIQ)gnR(?=AQ=&Olyi*9q z4GH7STwFGegcFzG1-OT&tLZi5|sqJzd=PW@`qKwNNE}<4) zQ5vgaOrqqNZ8$8*7#g~M2SWQ3E=eeh@=1|mpw2+!)?i9zoESyDkgPqVZ0$JQ`m(8q z3ggYjx0wN%?Cufgo0h7}oP8)6Ds1b9`lc-r^AKI^YKS)QygYlo4VUH9Q79O-YbZzD ze*C))nYoEedJWCTF#mq3_22ZC$sN_%7-lBUq?zL{7phDtxXf#Q6J;@*SN7_7Bhp-j zP?@x4?>=rTQY$io4@Bb*!BB{YXVkw&Qhz(IdL~83@J#R1$>3}l93xm-cvNg$NW5yW zL=seFY~q|rWy+*Yu#3^{+jl{HcBY?UVP(X+I`fdYX-0#-vU50w)CQ+bB|i}}=oIrn z{yy|%i#u)R)B>8F5a5+?2p65_;F)r)0gD?)N{jH6AqXc?!e$y=vLt5-HV1heW8sRMjS zOIBNFi@;zLuDM$*jrGVEqI~AcwQl21WK>~IU8VeHxRlw7rL5MP)-`FuROb!fwAm8H zCm&L(b-FX^n0M?jYAV?eNjVPXSX^}dSy;OuRgp0FgNdrgrRERMHnY1jsWuRGdMRTx4JDYcUcA=t2Ttiu<*|BH zQ`@ka@iZgVK;AEBzPQsaHc#n~D~0-x-m+s|FA1~!V>Sb_X13$Sr8i3iu5Js0T_0?Z zQYvcBEPiOz3cSvvjb_DiB6GHE8qUN0$6`hWYuO}S_&2a+@&q>81+yvAMX^k{eLO{N zS^A%IWtP^|l#xMoOm52-Iv2z@Md%jlX6L^=pj|RL5?~PRfpAgUMby%vDF`AOX*p1>EOSQQ&o0~3-GR3>GNi%@J}vVD$e1G-uL2O<2lRFYKJ- z>a9nQ3@j9II4rmXcDp)-;TUSYyuC6SEgVTT%U5=+B^ zwm0OclDIB~sXtTL&gna_4{6IJ6wM<9ikK;749Ek?9=x!0tmb{3eK+u}aM|@qG{`tf zTYem;&T*9pS6&uiq-MoPnFyQg$WGc>m>Od@H~J^(skkeQtveY9=#c8Pzs3t>cr6wq z)>rW;&|nx&D@DOSYhPF2B)shir|f6Z-9au2r39P4;kc)EhtmNBH7~1mIn_`g9nmkI zPfS3GbTI~ACxl^&z}uAFw|h)zGZEjl>frWlIGgz-mq#c|hS z-PwTg_U`u1%2iFLM&N##h>SC~Z?r)@r;gB#@=Lm!aW8SsIiK`3lxM)Ne$#H(nfQj780{?kMVZW>K=>(BWi3Ybh0&~w(+oRm0DdbGZW&GRZz4QrU3 z)RJsRg8pkSeCS^fOO~j=C6uP_V;*nKoalvZWwRe3sNWc_S~gMZ-PPZ0HUjUbL7jAi zzoijIgbtvev`K(1EYuTW$3=MaptU+Fid1v)I;x5~(uI&mt_aV4FLy|>ROJR*a7R4E zZovy{@riDRt$)30X#kC|URJp}N`D9)^(|m~f^L#Ma7jZoN`H!epf!yn_{BiY5$OJ9 zYA5_dF;%NeA42suscaaQGceF-T36IN`e+kT_5V-rhtZi)D zny%U&#yT@SdBKnPQj74cLnPgx_k$5DK%>C!!;i$D)@*UV2H+lI!h*^i$hLOX>TzGV5Rs*aUZW2WjH=Vu@MBZF@$KP z@arrDTvZ;hhTXfa>T^!D(*$hGfz+~vXl3!+L>&^gOb&y(Pr{L*(`YJl!Q6z9)z7xN z!biQEL2cQc3lhFIh>Q{$smru%nOJP20$#sK9nLvK`>QPeZ-b)f-%E-~_w{RVt?2K( z%Q#_Uuxn3kslNy=+-$$)jrl?^!nLVD27mw(wvx@$pW(pO&3C$9)DBzUGWQloV7Y=* zt~*;0p7~L)wiRs|6fVNx$3hs~JTPEw0N)zP%nF6oISf!V%-?2!4i`afT9V;gVZi(qI(PNeyn71gm1YH=}neZKPHrh>5>X0FUG&kS4Iw5m_%O}7NNOX?jAyt$&=-t7ZWLlu>Av)>pa`7XjG*!$KTjP1*F?iZf}2PUExF7G!cNO z(x`+P8?1szK{Puk=HrWRsliZjj=whEK|tXMpD$EG%wCTqRk>zcbJhE^t>$j;#?N_E z58)48OF@pCv56Bne+Oar4PV{n4P7d1r2`Ok)uhCR}Ebjd4n_xOMx`M=M*(}9rc(l3Ct@Qyfv-a_9^ zVvrQ*r?IL0p0v2MS{o9rhM%V`X8z|40`16PB|NAhh zWbEi9Xl86^X=iJ0T*d_qZl0)0^+0Y6~qAYh0{ z2pd600-$lJv~)kYRF!JY?SC;)&y_7}9ZKb(Nt6~BJ+;oO9dz1F*Qir3yf5A9Q^ZKn zYr4T*uDjkZIgZyHKaE=-0kJ;5t2{!?^45eZ9p! zsGxQ7xOUp!a(vw>ve71r7bYXyBxsiz&FayFVv<%6=~izQ0#n_~d1qPN+qYE5j>+4X zCi*xr+7=`Q-^|*v4R7m7@yMnRj}IhIm9=ag0#m=X()ugg#cBPabp|bseH!~|bT9|` z+k>EOl4qPrLt$dlu%8qdTE{D&9MGSx1;uuz-)i7t$v6=uR9Hy4%+m@;Xe0 zNlNuB9ZgF0Y#mWa?O5F>lj<7ZFAH2@Cbp(|Rgd>FzWo?I)^;;T*D}3%&}C2eGQ72t z+M;A`>D}K*eRq$ul{}F5h==^1q-h9S47$S;I?|NxnLe@>IEW?PwYkS(Y}=mPbPw%! zo%pJOj<}Uc{2>n5xe5j!6_f3oe7U7fyh(1izQ6vPc!M_JyHdgSMyK;P6OaClKM{}d zO+Wq|ArX(|jUf>4C19F?upi06ec`AS+DF64bL7ZW+Gl3()EIE@HsI_1UHT~SmxEWdOygz(?B{bLO{DUja-h$SoR?Bh z_Rs6Bs5VaK?OJNBz~JFX&iBxLaL{GPpOq=)+CUDYm#%~kRz>^J@P3m1J|NWVEpW{Ie6rLO^w)FZL~S6z4tqZZ2~sonfn>xdw6$av zDfmt~F9)N37S8;AWju-$@}!*q8m>Ujg=tIrJ@X^@3mDAE5Uuqw7lD>B=N+9jo0@4f zkYGN%1-2V2s_W>F6-!UQW4Qi_HspCaorps<-`3R_t%n#aVo^3g9Yq7Ud}MMzM8*TNrH z1r@PCMVS5!Zr1u)n9xVfWd-iG46eB;C}0>i8$tUVqVSK^Ixl}L3VkCS-SASMEV7oA zckLrs^Hb)RoSH@+NKo3yi%a~21*H*a8Lec$)kv&XXdi{aZEqZmybJngd4Fzx%v$9- z+4a*Eaf!aT?dcofbbN6>i4Q)rntpAMtf9~aK!rMvwZTL*2uOVauHqpa>zEX?)=bQ=Q8y8g*Z*H`8oG(r;#E^3QDCYcD5%E7+ z2v`24xAN*^4xlS#<_d%GJZt`l1GvQm_R zy>$8ARR<=D3#`fLR+ee|J%x8Tk@6g$QCM4UjNLbcdLH^qic$Y~zIAvYno?=F)DQT=QCR zL%(oYwDZdSO3=o@lZ^TrUAq}IVmVDmq>DyV;I)uf!>i;srct?;Gd^J62*K;IGfgZs%bEgMIlz0gJ+dse$@=R=KzE-Oi$S@u0gqc!TUVr?tuZW zZ5cxfrCe|d<|>7PgRx#YVOQzLnNMU+!G|ZsmXIV$Sk}Dg94{mUQzHH_NVq=vc7;P2HKf2PlY6 zZBTApQBO3Muy=PhSA8lF841&RlQ~|R6ky`#5|Co?J20yxB{Q;K)VkC$FMT6%Ex{57 z!u{wGi$Pc~K`jgPYFR8`9oEChF$2ua2?vEm7%%~=RoyCQ6ZKpi8np0(%15F5H6)37KJP~G5iA25X^@H>2Gdbpg9B>A$qM*yk;?F25EanajT@Dd;5asE0Bd?Ni zh=5_qs5ChQdIbA>FNCklC0XGVjRFhmW+iNhWkOxj zRoRpZ#pZ&&3v6Ob=8#yC z!^zhYaeOY9OnI%v(%9KWs>xI2v4nF#2!V-UR--~3gt{4&!>{qoG4eYa%5-cvVU+Dm zI`U)8P#2-dPM0zvr_sb=J@6?yl6XZWMWYg4A!O+l^UIy)U@yKzPSa6vhtfAkh%PAj zUquo0X8O#ZR@Bn_)uu}~bR_^M&N%8787uNXWL1PI5f!Y!sb8F)Ksu{UAVBj6BlMtF z;K8dKKwb!cs(mYv{#x^d3$8Cd@j^F%+C!*GrKfc)TnudS%QzD-?UCjaYZPblou&Sj;I4(6@j(qB` zgxR3X#uX{W&o+3{Gd7?sp@u1Dzp0j#L5nf$6tJEjLh2aKTMi%gq39q`ujFPKBnMJZ z=l{zp^oRz%25n;idH|rOCzY%XH@g+^TvOpPwFI=Iz-}$99f8xeB3V>UvjM;HC%zlY z%m2&@xaa8`SdVLio!Hpz?A=}e`}<@Dp(CvZqN#~x^L^}cBOd8a6zPNcar+HZRK>s= zT6>%=$gZ^?1J>%2DMFkA?NKn4R!3fvIzjf5Cw#_mGW~5!bfWLA9qcK7s&I_N2S84VLVB>g3eme?6&PO2iOv?L>7ZKud(r(zX$F> zQ(swEm4SJ5w%!qb%S3N~3g@wEl6QOumtknI^zPzimgnFz)RCIBt-|m!YChpAC@TV8 z!5SAqHndDsm1CyYKITsct8d*7>=EtMz)ZI)hn!t&k=J*_#Jc33ioaN~m!6GfvUUnK zxP)DKVi*ogGvQuf-M3Qk>#sF`QnB95{wbjtoUEHQswOMDY-1HdyyLw&*47hi9tnry z+;GcJC<6lQA5dME62(y*?K!=34*G)OtuE?vE(zvlMkZSd$J^Fo!^*c&8qJe&DjjU( z%g0&wD2wOiWerp~a-{fY!$kx*ALA8ZGZPN;X{lJ;&#~fV5VrvcAqxLGBhA8=Vfnbq zT;3-x8mE$vBS9Yj8cA<*?P~Kc7=)T+L8#nO3%@|Y3l(W#pcW-KB1cA_{8-nrVn>cy z0mlL~2ayS7%HNp1t!VNRv;HuFrkt9Lr>fK3gsroB2-c}Hm&y)k=wiWe9QvT6h@_j_ zcEeSHC-v8JI#dee1D_E`ifw*cC`lyn4D}u8x7?XbSciL8Wb zZwH=gz5^V_tDusG+!?JInQ9DIC*4{pOnV!z`^Gr6z3J(E?o>ikc9PC!ZrA2G<=v5o z!{SD{Y>lQ(di%A@#J?jRrNvBi zD9Fw78`y~yPZ_SK%zr!LUzV+lep&ukPJcMTnia3(0IqSI^iCli_~Of=q$ou_aZ&hm z;yoIqnP{E$wf+sXEd|FcaX8^uwZJ4Hl6Yn0*b`d~qQCt{j$|P6NBXHA50j1BS`#*d zZQ>`A@s&x6G=$WZga^wsB$G`S!zGi^QYmNS|EWg{u(Ty52D!)NxCXre=}az^`~d)? z888-Gmci7}JUg?%R!U}qMmw|MI!XF-8V= z@YE3D5o6)Q=M^#!@~b59(d$jQ^QcX^1MLpKQv*E>=oPE8!-ARRD9RSGQ{K;JMqHkD zKI(y)mXETd&*=9t3-`3D@#H$bDPm{_p+&PTtyfkv^{+CcDo!psUp=$|N(6k}!QNY} zM&n3+-`jv>t`2NNcvVaSog>8*=j|U$#9tV{-BzSORhoLI=-Ox2;48HRnF?|DHlb?*M@?qj>P?A zVfck9p${oUOsCtXnxBb-IA(?-ag%g(`F!9={(>X=qdNPui^67kQ6q=8AG6@&{~+z1 zq9l!?blXbXcBO6Gwr$(CB5hlhwr$(CZB)8$_ULoQ9o_f7oId|c#OwdCSIo6y?fLbj zG)PCkD%aFYi*V{hEyxCBT(eY?(6Za&q_iyBL{zvh;Fe4$lhfMnw*NM>DQdt|*^zs6 zoBOQBs~ry^P9(=oU?HSkwJ3%5?)s|BADUuy6>r(Xkdr1z-^rt*m(+M$iQTl#A*qte z+$^6^gKiTfbmFA3Y{tr|oL+Oqxl;hVHesSqKs3k&rN{wCI-Fwp;MNZN(zcFm_wOf- z!HM+#f}a%);YL_L1pd7*G}RLhUo;sHMh7uWT^>{eylpM;W~C*hjc8g^oZ`Z(^T@u} zn6k16Cvbb)XGyK#1wyeSg+V;47lrAA=X4<}VRb!L{FjJ|AO5c=SjLm<(E>t1_U!L* z{En~$f_8%K$>4K7e7V1mB=5}f#Sk9gyhD%YhBbxa9$35+u1}Z*;_?n4yyLP@sA`X( zVe>oTuXNvzU#cr4*#IUZh zaC~uNH)k!(zviCcT!oT%hFWMr7m_KeoREo$z8M&Cw{pP~l^jk(94Ia`p6Yeo&RpM| zY~2tXZi$z;-E?~>WuDYvktMKkOJ;dLlH`9nl3)zXQoq}kR!3QY*7%2#cZ14%VdXwi z@tm_x`GMpIoqCg_8TvFV_I_ z>p*f}1o?~nUB<<0fknCe6F;{>_5d4=FD#8aFuBsSIX{%^zx(nBaMHgOsqEW!1)EIb z5e~49f-wsPCk0uo_#x&oO^LPYv_wz*!7BBYP1)Bp9oKTs`fhOQpA#{!tiC%ri>YZ| zAi|{oVQ}!I%!JX+i2I~=iYP=-5C91h3_G@g)rWH6IMP5kmJ<*y{KB3AL5c&PH}pYF zc|fE(d!o4Sz@{VWlt?ZODD3zNcNPTvbn#M0(Ebs4&w#Pdk#kh= zz!@t2lPq@J{vh3lKXzRG=i^=6z{#tYQSzaFt^epzE+>iBO&@*m=pmPJUDL(|jGVZ3 z6dExZTaGt@n6@y zgpoL^<6DaA;P;Y0Q`>d9XoFn6z@!1}+Y}nLF^1iCyN9*p=>E=XH~B@aO0l~0_({$- z+<0Mzx&O3S&{0zfQE|(KPeLg)p!l_)w&4@34V(`e0|puc2b=>2oC60Q0|sCaiRb|( z^n&4CxP%YT6$h2)5<4=iK4^Hes|p}LeWbp8^(W5n$JV9@`#*V)vMz+XL36JV`44I# zquOU&P5!g3!*SYHb^B4Fox}IP-Hmz1wlT#QPB;>0qKMC%LVmO7@#qF`1@eNoPvr*d zBo2R!(Aa&$5}oV~yVSql*LeuW*5;_uQjL|5R#*Hk1!A|^asG6Y$I<>hs<2sBpQD!M zVIr4glOdfwXEOFpzGqd++JGbU!NAy^Va=0_Ilo~^yP1^5=xHOk--ao;sZ$J|V5SG9BL&`oGVh+SDnD_;mUnMh#{JoR;&ON0% z37r_GR>7`SAtR{d@#$h}6E$_nYIrqS4x3fc^l6+p8C8YnuYJF_uHg4C0;l+yA2Fm< znpJ=-^RQ~DmIp6kvx&SantA zW$sa_CFv?JqprHJE~}Q7w69bM>z0;b)zDrztm;-Qx#neFdnrsic9))X^!&Kegi|^p zD&KB|mw^9zG|%yhs&+^(5sk}~4FH56-OQNIov?!hI1DO_WfxP}|TCiZM zC=z^6c2Bi#of!hpIesT57z+;MpHz*OMZVx!ySKw15U$^0UcMF>RG0{mon3v-FRnSA zbd^mj@7a4>lk0}~KBN>jzv}6j!I8Gp1}VE~z_o%HEyt6=nwg5Dlz!lXuAj$qz+!fL zdY3xY$H$*M?Sy*XB~+Rz-@c2Na)HxL+u9BETHHiIk`uIWU40W*IN3SD;Q{t95M3JR zv}_Tq^%D=X2s|32tT#u%GszQP2Rp-`NJ23!*C)R!`R-6Onw2`!Ojk*dKJqzz9Pm9$ znpJCrc9NTY^W@G^jCVGh(R{z5UTXDH2{3QFEorpYRYJ^FCN?EOKBvF(ajcP>eNpf3 ze2!qJ(pD8N(US6AX5tc{EiJGDL#rsVXs9U0s-WAqUa#^fXQTF;;DfojPyD`Ni5j)) zldKFlPVS9=zvrMs?gQdr+e5}sn>x%1RW-<+8>1WJl&7~K&(YVe%b`0%RrOa;85LYQ zY?c7IhH^|W`iPeUpF*)Hb!PDA(l8G=p6>AIMI81nw);|=@Tl34#2`G@qiOCW{&jJc zEuCNA6m|QXRFH4=+VPU2_VOXZDT73cR-)$FnO8T`AIrmXSpzm&{jRdu+i)*+oJvZDOkoF=|F$=nblm-k*;elM*D!*5$Hw~siZ zkUg-_J?+H5{hPuiw8w5`mD&-nHK%5wwsvLJ+Aes$;+*RX?Oko7ELnVH11d7qcq{@Ua}9{8t3M*x6Rq&AxuQ?x(gZ{qCQeMLCC`hN(E& zGRyå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%0ADA_=0)bE1Vtk4z2Y?RV+(S&KO2p(> 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

- - + +

Task +

+
    +
  • [WHIRR-129] - Add Adrian Cole as a committer in the whirr pom.xml and site. +
  • +
  • [WHIRR-248] - Update to jclouds-1.0-beta9b +
  • +

Release Notes - Whirr - Version 0.3.0

From 511d8bfccd8c427fd6b9c4c83fdbad194cb0ab2e Mon Sep 17 00:00:00 2001 From: Andrei Savu Date: Wed, 16 Mar 2011 13:46:10 +0000 Subject: [PATCH 135/216] WHIRR-263. Default tarball not found for Cassandra (broken link in install_cassandra.sh) git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1082147 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 3 +++ .../src/main/resources/functions/install_cassandra.sh | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index b98c5c92..80f976d1 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -89,6 +89,9 @@ Release 0.4.0 - 2011-03-15 WHIRR-250. Ensure all libraries in binary distribution have associated licenses where stipulated (tomwhite via asavu) + WHIRR-263. Default tarball not found for Cassandra (broken link + in install_cassandra.sh) (asavu) + Release 0.3.0 - 2011-01-15 NEW FEATURES diff --git a/services/cassandra/src/main/resources/functions/install_cassandra.sh b/services/cassandra/src/main/resources/functions/install_cassandra.sh index bf55562d..07a12b46 100644 --- a/services/cassandra/src/main/resources/functions/install_cassandra.sh +++ b/services/cassandra/src/main/resources/functions/install_cassandra.sh @@ -17,7 +17,7 @@ function install_cassandra() { C_MAJOR_VERSION=${1:-0.7} - C_TAR_URL=${2:-http://www.apache.org/dist/cassandra/0.7.0/apache-cassandra-0.7.0-bin.tar.gz} + C_TAR_URL=${2:-http://archive.apache.org/dist/cassandra/0.7.0/apache-cassandra-0.7.0-bin.tar.gz} c_tar_file=`basename $C_TAR_URL` c_tar_dir=`echo $c_tar_file | awk -F '-bin' '{print $1}'` From b0ac2d64535aff463a5d228b3925617b321c9573 Mon Sep 17 00:00:00 2001 From: Andrei Savu Date: Wed, 16 Mar 2011 13:57:21 +0000 Subject: [PATCH 136/216] Updated release notes for 0.4.0-incubating git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1082150 13f79535-47bb-0310-9956-ffa450edef68 --- src/site/xdoc/release-notes.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/site/xdoc/release-notes.xml b/src/site/xdoc/release-notes.xml index 3370ba4c..fa4430d5 100644 --- a/src/site/xdoc/release-notes.xml +++ b/src/site/xdoc/release-notes.xml @@ -59,6 +59,8 @@
  • [WHIRR-251] - Handle Apache cryptography requirements for release
  • +
  • [WHIRR-263] - Default tarball not found for Cassandra (broken link in install_cassandra.sh) +
  • Improvement From 88052d1efd1860166bfb4b5acf4446ca0a5e4cd3 Mon Sep 17 00:00:00 2001 From: Andrei Savu Date: Thu, 17 Mar 2011 17:00:24 +0000 Subject: [PATCH 137/216] WHIRR-158. Allow users to log into clusters as themselves git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1082594 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 3 ++ .../actions/BootstrapClusterAction.java | 52 ++++++++++++++++--- .../actions/ConfigureClusterAction.java | 3 +- .../org/apache/whirr/service/ClusterSpec.java | 25 ++++++--- .../main/resources/whirr-default.properties | 2 + .../apache/whirr/service/ClusterSpecTest.java | 9 +++- .../whirr/service/hadoop/HadoopProxy.java | 2 +- 7 files changed, 79 insertions(+), 17 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 80f976d1..93e2dafa 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -15,6 +15,9 @@ Release 0.4.0 - 2011-03-15 WHIRR-198. Support user-defined images (Adrian Cole via asavu) + WHIRR-158. Allow users to log into clusters as themselves + (Adrian Cole and asavu) + IMPROVEMENTS WHIRR-139. upgrade to version 1 of the "enforcer" plugin (Jakob Homan diff --git a/core/src/main/java/org/apache/whirr/cluster/actions/BootstrapClusterAction.java b/core/src/main/java/org/apache/whirr/cluster/actions/BootstrapClusterAction.java index 7656cb39..4e731e69 100644 --- a/core/src/main/java/org/apache/whirr/cluster/actions/BootstrapClusterAction.java +++ b/core/src/main/java/org/apache/whirr/cluster/actions/BootstrapClusterAction.java @@ -19,9 +19,16 @@ package org.apache.whirr.cluster.actions; import static org.jclouds.compute.options.TemplateOptions.Builder.runScript; +import static org.jclouds.scriptbuilder.domain.Statements.appendFile; +import static org.jclouds.scriptbuilder.domain.Statements.interpret; +import static org.jclouds.scriptbuilder.domain.Statements.newStatementList; import com.google.common.base.Function; +import com.google.common.base.Splitter; import com.google.common.collect.Collections2; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; import com.google.common.collect.Maps; import com.google.common.collect.Sets; @@ -56,11 +63,9 @@ import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.Template; import org.jclouds.compute.domain.TemplateBuilder; -import org.jclouds.scriptbuilder.domain.AuthorizeRSAPublicKey; -import org.jclouds.scriptbuilder.domain.InstallRSAPrivateKey; +import org.jclouds.scriptbuilder.InitBuilder; import org.jclouds.scriptbuilder.domain.OsFamily; import org.jclouds.scriptbuilder.domain.Statement; -import org.jclouds.scriptbuilder.domain.StatementList; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -151,17 +156,50 @@ private Template buildTemplate(ClusterSpec clusterSpec, LOG.info("Configuring template"); if (LOG.isDebugEnabled()) LOG.debug("Running script:\n{}", statementBuilder.render(OsFamily.UNIX)); - Statement runScript = new StatementList( - new AuthorizeRSAPublicKey(clusterSpec.getPublicKey()), - statementBuilder, - new InstallRSAPrivateKey(clusterSpec.getPrivateKey())); + Statement runScript = addUserAndAuthorizeSudo( + clusterSpec.getClusterUser(), + clusterSpec.getPublicKey(), + clusterSpec.getPrivateKey(), + statementBuilder); TemplateBuilder templateBuilder = computeService.templateBuilder() .options(runScript(runScript)); strategy.configureTemplateBuilder(clusterSpec, templateBuilder); return templateBuilder.build(); } + + private static Statement addUserAndAuthorizeSudo(String user, + String publicKey, String privateKey, Statement statement) { + return new InitBuilder("setup-" + user,// name of the script + "/tmp",// working directory + "/tmp/logs",// location of stdout.log and stderr.log + ImmutableMap.of("newUser", user, "defaultHome", "/home/users"), // variables + ImmutableList. of( + createUserWithPublicAndPrivateKey(user, publicKey, privateKey), + makeSudoersOnlyPermitting(user), + statement)); + } + + // must be used inside InitBuilder, as this sets the shell variables used in this statement + static Statement createUserWithPublicAndPrivateKey(String username, + String publicKey, String privateKey) { + // note directory must be created first + return newStatementList(interpret("mkdir -p $DEFAULT_HOME/$NEW_USER/.ssh", + "useradd --shell /bin/bash -d $DEFAULT_HOME/$NEW_USER $NEW_USER\n"), appendFile( + "$DEFAULT_HOME/$NEW_USER/.ssh/authorized_keys", Splitter.on('\n').split(publicKey)), + appendFile( + "$DEFAULT_HOME/$NEW_USER/.ssh/id_rsa", Splitter.on('\n').split(privateKey)), + interpret("chmod 400 $DEFAULT_HOME/$NEW_USER/.ssh/*", + "chown -R $NEW_USER $DEFAULT_HOME/$NEW_USER\n")); + } + // must be used inside InitBuilder, as this sets the shell variables used in this statement + static Statement makeSudoersOnlyPermitting(String username) { + return newStatementList(interpret("rm /etc/sudoers", "touch /etc/sudoers", "chmod 0440 /etc/sudoers", + "chown root /etc/sudoers\n"), appendFile("/etc/sudoers", ImmutableSet.of("root ALL = (ALL) ALL", + "%adm ALL = (ALL) ALL", username + " ALL = (ALL) NOPASSWD: ALL"))); + } + private Set getInstances(final Set roles, Set nodes) { return Sets.newLinkedHashSet(Collections2.transform(Sets.newLinkedHashSet(nodes), diff --git a/core/src/main/java/org/apache/whirr/cluster/actions/ConfigureClusterAction.java b/core/src/main/java/org/apache/whirr/cluster/actions/ConfigureClusterAction.java index c6ff0159..fad67052 100644 --- a/core/src/main/java/org/apache/whirr/cluster/actions/ConfigureClusterAction.java +++ b/core/src/main/java/org/apache/whirr/cluster/actions/ConfigureClusterAction.java @@ -19,7 +19,6 @@ package org.apache.whirr.cluster.actions; import com.google.common.base.Predicate; -import com.google.common.collect.Iterables; import com.google.common.collect.Maps; import java.io.IOException; @@ -78,7 +77,7 @@ protected void doAction(Map eventMap) ComputeServiceContextBuilder.build(getComputeServiceContextFactory(), clusterSpec); ComputeService computeService = computeServiceContext.getComputeService(); Credentials credentials = new Credentials( - Iterables.get(cluster.getInstances(), 0).getLoginCredentials().identity, + clusterSpec.getClusterUser(), clusterSpec.getPrivateKey()); try { LOG.info("Running configuration script"); diff --git a/core/src/main/java/org/apache/whirr/service/ClusterSpec.java b/core/src/main/java/org/apache/whirr/service/ClusterSpec.java index ae2eb91e..03180d8b 100644 --- a/core/src/main/java/org/apache/whirr/service/ClusterSpec.java +++ b/core/src/main/java/org/apache/whirr/service/ClusterSpec.java @@ -135,7 +135,11 @@ public enum Property { "urls from. Change this to host your own set of launch scripts."), LOGIN_USER(String.class, false, "Override the default login user "+ - "used to bootstrap whirr. E.g. ubuntu or myuser:mypass."); + "used to bootstrap whirr. E.g. ubuntu or myuser:mypass."), + + CLUSTER_USER(String.class, false, "The name of the user that Whirr " + + "will create on all the cluster instances. You have to use " + + "this user to login to nodes."); private Class type; private boolean multipleArguments; @@ -370,6 +374,7 @@ public static ClusterSpec withNoDefaults(Configuration conf) private List clientCidrs; private String version; private String runUrlBase; + private String clusterUser; private Configuration config; @@ -454,6 +459,7 @@ public ClusterSpec(Configuration config, boolean loadDefaults) // patch until jclouds 1.0-beta-10 System.setProperty("whirr.login-user", loginUser); } + clusterUser = c.getString(Property.CLUSTER_USER.getConfigName()); this.config = c; } @@ -516,9 +522,15 @@ public List getClientCidrs() { public String getVersion() { return version; } + @Deprecated public String getRunUrlBase() { return runUrlBase; } + + public String getClusterUser() { + return clusterUser; + } + public void setInstanceTemplates(List instanceTemplates) { this.instanceTemplates = instanceTemplates; @@ -629,12 +641,15 @@ public void setVersion(String version) { this.version = version; } + @Deprecated public void setRunUrlBase(String runUrlBase) { this.runUrlBase = runUrlBase; } - - // - + + public void setClusterUser(String user) { + this.clusterUser = user; + } + public Configuration getConfiguration() { return config; } @@ -675,7 +690,6 @@ public boolean equals(Object o) { && Objects.equal(locationId, that.locationId) && Objects.equal(clientCidrs, that.clientCidrs) && Objects.equal(version, that.version) - && Objects.equal(runUrlBase, that.runUrlBase) ; } return false; @@ -704,7 +718,6 @@ public String toString() { .add("locationId", locationId) .add("clientCidrs", clientCidrs) .add("version", version) - .add("runUrlBase", runUrlBase) .toString(); } diff --git a/core/src/main/resources/whirr-default.properties b/core/src/main/resources/whirr-default.properties index 7d0398b7..270329cc 100644 --- a/core/src/main/resources/whirr-default.properties +++ b/core/src/main/resources/whirr-default.properties @@ -18,3 +18,5 @@ whirr.private-key-file=${sys:user.home}/.ssh/id_rsa whirr.version=${version} whirr.max-startup-retries=1 + +whirr.cluster-user=${sys:user.name} diff --git a/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java b/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java index 51706f1c..cbf160dd 100644 --- a/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java +++ b/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java @@ -295,5 +295,12 @@ public void testNumberOfInstancesPerTemplate() throws Exception { assertThat(t1.getMinNumberOfInstances(), is(1)); t2 = templates.get(1); assertThat(t2.getMinNumberOfInstances(), is(3)); - } + } + + @Test + public void testClusterUserShouldBeCurrentUser() throws Exception { + ClusterSpec spec = ClusterSpec.withTemporaryKeys(); + assertThat(spec.getClusterUser(), is(System.getProperty("user.name"))); + } + } diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java index 099bf7d8..32c44715 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java @@ -56,7 +56,7 @@ public String[] getProxyCommand() throws IOException { Files.write(clusterSpec.getPrivateKey(), identity, Charsets.UTF_8); } KeyPair.setPermissionsTo600(identity); - String user = Iterables.get(cluster.getInstances(), 0).getLoginCredentials().identity; + String user = clusterSpec.getClusterUser(); InetAddress namenode = HadoopCluster.getNamenodePublicAddress(cluster); String server = DnsUtil.resolveAddress(namenode.getHostAddress()); return new String[] { "ssh", From ad6a5cdac0baba385c4b7e60c1af53d42865588f Mon Sep 17 00:00:00 2001 From: Andrei Savu Date: Thu, 17 Mar 2011 22:07:51 +0000 Subject: [PATCH 138/216] WHIRR-233. Change test properties to be less provider bound and improve TemplateBuilder defaults git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1082723 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 3 ++ .../org/apache/whirr/service/ClusterSpec.java | 14 ++++++ .../jclouds/TemplateBuilderStrategy.java | 11 ++++- .../resources/whirr-cassandra-test.properties | 1 + .../HadoopDataNodeClusterActionHandler.java | 1 - .../HadoopNameNodeClusterActionHandler.java | 1 - .../hadoop/HadoopTemplateBuilderStrategy.java | 43 ------------------- .../BasicServerClusterActionHandler.java | 1 - .../HBaseMasterClusterActionHandler.java | 1 - ...HBaseRegionServerClusterActionHandler.java | 1 - .../hbase/HBaseTemplateBuilderStrategy.java | 43 ------------------- .../resources/whirr-hbase-test.properties | 6 --- .../resources/whirr-zookeeper-test.properties | 1 + 13 files changed, 29 insertions(+), 98 deletions(-) delete mode 100644 services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopTemplateBuilderStrategy.java delete mode 100644 services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseTemplateBuilderStrategy.java diff --git a/CHANGES.txt b/CHANGES.txt index 93e2dafa..ece8ed6d 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -59,6 +59,9 @@ Release 0.4.0 - 2011-03-15 WHIRR-259. Disable configuration list handling for Hadoop properties (asavu) + WHIRR-233. Change test properties to be less provider bound and + improve TemplateBuilder defaults (asavu) + BUG FIXES WHIRR-170. Instances should be started in the order specified in diff --git a/core/src/main/java/org/apache/whirr/service/ClusterSpec.java b/core/src/main/java/org/apache/whirr/service/ClusterSpec.java index 03180d8b..6a616730 100644 --- a/core/src/main/java/org/apache/whirr/service/ClusterSpec.java +++ b/core/src/main/java/org/apache/whirr/service/ClusterSpec.java @@ -121,6 +121,9 @@ public enum Property { HARDWARE_ID(String.class, false, "The type of hardware to use for" + " the instance. This must be compatible with the image ID."), + + HARDWARE_MIN_RAM(Integer.class, false, "The minimum amount of " + + "instance memory. E.g. 1024"), LOCATION_ID(String.class, false, "The location to launch " + "instances in. If not specified then an arbitrary location " + @@ -370,6 +373,7 @@ public static ClusterSpec withNoDefaults(Configuration conf) private String publicKey; private String imageId; private String hardwareId; + private int hardwareMinRam; private String locationId; private List clientCidrs; private String version; @@ -439,6 +443,7 @@ public ClusterSpec(Configuration config, boolean loadDefaults) setImageId(config.getString(Property.IMAGE_ID.getConfigName())); setHardwareId(config.getString(Property.HARDWARE_ID.getConfigName())); + setHardwareMinRam(c.getInteger(Property.HARDWARE_MIN_RAM.getConfigName(), 1024)); setLocationId(config.getString(Property.LOCATION_ID.getConfigName())); setClientCidrs(c.getList(Property.CLIENT_CIDRS.getConfigName())); setVersion(c.getString(Property.VERSION.getConfigName())); @@ -513,6 +518,9 @@ public String getImageId() { public String getHardwareId() { return hardwareId; } + public int getHardwareMinRam() { + return hardwareMinRam; + } public String getLocationId() { return locationId; } @@ -628,6 +636,10 @@ public void setImageId(String imageId) { public void setHardwareId(String hardwareId) { this.hardwareId = hardwareId; } + + public void setHardwareMinRam(int minRam) { + this.hardwareMinRam = minRam; + } public void setLocationId(String locationId) { this.locationId = locationId; @@ -687,6 +699,7 @@ public boolean equals(Object o) { && Objects.equal(clusterName, that.clusterName) && Objects.equal(imageId, that.imageId) && Objects.equal(hardwareId, that.hardwareId) + && Objects.equal(hardwareMinRam, that.hardwareMinRam) && Objects.equal(locationId, that.locationId) && Objects.equal(clientCidrs, that.clientCidrs) && Objects.equal(version, that.version) @@ -715,6 +728,7 @@ public String toString() { .add("privateKey", privateKey) .add("imageId", imageId) .add("instanceSizeId", hardwareId) + .add("instanceMinRam", hardwareMinRam) .add("locationId", locationId) .add("clientCidrs", clientCidrs) .add("version", version) diff --git a/core/src/main/java/org/apache/whirr/service/jclouds/TemplateBuilderStrategy.java b/core/src/main/java/org/apache/whirr/service/jclouds/TemplateBuilderStrategy.java index e21c806f..ed9463c5 100644 --- a/core/src/main/java/org/apache/whirr/service/jclouds/TemplateBuilderStrategy.java +++ b/core/src/main/java/org/apache/whirr/service/jclouds/TemplateBuilderStrategy.java @@ -19,6 +19,7 @@ package org.apache.whirr.service.jclouds; import org.apache.whirr.service.ClusterSpec; +import org.jclouds.compute.domain.OsFamily; import org.jclouds.compute.domain.TemplateBuilder; /** @@ -28,13 +29,21 @@ public class TemplateBuilderStrategy { public void configureTemplateBuilder(ClusterSpec clusterSpec, TemplateBuilder templateBuilder) { - + if (clusterSpec.getImageId() != null) { templateBuilder.imageId(clusterSpec.getImageId()); + } else { + templateBuilder.os64Bit(true); + templateBuilder.osFamily(OsFamily.UBUNTU); + templateBuilder.osVersionMatches("10.04"); } if (clusterSpec.getHardwareId() != null) { templateBuilder.hardwareId(clusterSpec.getHardwareId()); + } else if(clusterSpec.getHardwareMinRam() != 0) { + templateBuilder.minRam(clusterSpec.getHardwareMinRam()); + } else { + templateBuilder.minRam(1024); } if (clusterSpec.getLocationId() != null) { diff --git a/services/cassandra/src/test/resources/whirr-cassandra-test.properties b/services/cassandra/src/test/resources/whirr-cassandra-test.properties index 478d3acf..d8dccbe2 100644 --- a/services/cassandra/src/test/resources/whirr-cassandra-test.properties +++ b/services/cassandra/src/test/resources/whirr-cassandra-test.properties @@ -20,3 +20,4 @@ whirr.instance-templates=2 cassandra whirr.provider=${sys:whirr.test.provider} whirr.identity=${sys:whirr.test.identity} whirr.credential=${sys:whirr.test.credential} +whirr.hardware-min-ram=512 diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopDataNodeClusterActionHandler.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopDataNodeClusterActionHandler.java index dee7704f..3601d3c7 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopDataNodeClusterActionHandler.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopDataNodeClusterActionHandler.java @@ -52,7 +52,6 @@ protected void beforeBootstrap(ClusterActionEvent event) throws IOException { addStatement(event, call("install_java")); addStatement(event, call("install_tarball")); addStatement(event, call(hadoopInstallFunction, "-c", clusterSpec.getProvider())); - event.setTemplateBuilderStrategy(new HadoopTemplateBuilderStrategy()); } @Override diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopNameNodeClusterActionHandler.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopNameNodeClusterActionHandler.java index d1d02862..543a92c7 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopNameNodeClusterActionHandler.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopNameNodeClusterActionHandler.java @@ -73,7 +73,6 @@ protected void beforeBootstrap(ClusterActionEvent event) throws IOException { addStatement(event, call("install_java")); addStatement(event, call("install_tarball")); addStatement(event, call(hadoopInstallFunction, "-c", clusterSpec.getProvider())); - event.setTemplateBuilderStrategy(new HadoopTemplateBuilderStrategy()); } @Override diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopTemplateBuilderStrategy.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopTemplateBuilderStrategy.java deleted file mode 100644 index 667281ee..00000000 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopTemplateBuilderStrategy.java +++ /dev/null @@ -1,43 +0,0 @@ -/** - * 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 org.apache.whirr.service.hadoop; - -import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.service.jclouds.TemplateBuilderStrategy; -import org.jclouds.compute.domain.OsFamily; -import org.jclouds.compute.domain.TemplateBuilder; -import org.jclouds.ec2.domain.InstanceType; - -public class HadoopTemplateBuilderStrategy extends TemplateBuilderStrategy { - - public void configureTemplateBuilder(ClusterSpec clusterSpec, - TemplateBuilder templateBuilder) { - super.configureTemplateBuilder(clusterSpec, templateBuilder); - - if (clusterSpec.getProvider().equals("aws-ec2") - && clusterSpec.getImageId() == null) { - templateBuilder.osFamily(OsFamily.AMZN_LINUX); - } - if (clusterSpec.getProvider().endsWith("ec2") - && clusterSpec.getHardwareId() == null) { - // micro is too small for Hadoop (even for testing) - templateBuilder.hardwareId(InstanceType.M1_SMALL); - } - } -} diff --git a/services/hbase/src/main/java/org/apache/whirr/service/hbase/BasicServerClusterActionHandler.java b/services/hbase/src/main/java/org/apache/whirr/service/hbase/BasicServerClusterActionHandler.java index 1cf7193c..ecbc8258 100644 --- a/services/hbase/src/main/java/org/apache/whirr/service/hbase/BasicServerClusterActionHandler.java +++ b/services/hbase/src/main/java/org/apache/whirr/service/hbase/BasicServerClusterActionHandler.java @@ -67,7 +67,6 @@ protected void beforeBootstrap(ClusterActionEvent event) throws IOException { addStatement(event, call(hbaseInstallFunction, HBaseConstants.PARAM_PROVIDER, clusterSpec.getProvider(), HBaseConstants.PARAM_TARBALL_URL, tarurl)); - event.setTemplateBuilderStrategy(new HBaseTemplateBuilderStrategy()); } @Override diff --git a/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseMasterClusterActionHandler.java b/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseMasterClusterActionHandler.java index 83201737..5821c5a4 100644 --- a/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseMasterClusterActionHandler.java +++ b/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseMasterClusterActionHandler.java @@ -73,7 +73,6 @@ protected void beforeBootstrap(ClusterActionEvent event) throws IOException { addStatement(event, call(hbaseInstallFunction, HBaseConstants.PARAM_PROVIDER, clusterSpec.getProvider(), HBaseConstants.PARAM_TARBALL_URL, tarurl)); - event.setTemplateBuilderStrategy(new HBaseTemplateBuilderStrategy()); } @Override diff --git a/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseRegionServerClusterActionHandler.java b/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseRegionServerClusterActionHandler.java index ca9bb4cd..1a9fba6f 100644 --- a/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseRegionServerClusterActionHandler.java +++ b/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseRegionServerClusterActionHandler.java @@ -60,7 +60,6 @@ protected void beforeBootstrap(ClusterActionEvent event) throws IOException { addStatement(event, call(hbaseInstallFunction, HBaseConstants.PARAM_PROVIDER, clusterSpec.getProvider(), HBaseConstants.PARAM_TARBALL_URL, tarurl)); - event.setTemplateBuilderStrategy(new HBaseTemplateBuilderStrategy()); } @Override diff --git a/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseTemplateBuilderStrategy.java b/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseTemplateBuilderStrategy.java deleted file mode 100644 index 7925cda7..00000000 --- a/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseTemplateBuilderStrategy.java +++ /dev/null @@ -1,43 +0,0 @@ -/** - * 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 org.apache.whirr.service.hbase; - -import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.service.jclouds.TemplateBuilderStrategy; -import org.jclouds.compute.domain.OsFamily; -import org.jclouds.compute.domain.TemplateBuilder; -import org.jclouds.ec2.domain.InstanceType; - -public class HBaseTemplateBuilderStrategy extends TemplateBuilderStrategy { - - public void configureTemplateBuilder(ClusterSpec clusterSpec, - TemplateBuilder templateBuilder) { - super.configureTemplateBuilder(clusterSpec, templateBuilder); - - if (clusterSpec.getProvider().equals("aws-ec2") - && clusterSpec.getImageId() == null) { - templateBuilder.osFamily(OsFamily.AMZN_LINUX); - } - if (clusterSpec.getProvider().endsWith("ec2") - && clusterSpec.getHardwareId() == null) { - // micro is too small for Hadoop (even for testing) - templateBuilder.hardwareId(InstanceType.M1_LARGE); - } - } -} diff --git a/services/hbase/src/test/resources/whirr-hbase-test.properties b/services/hbase/src/test/resources/whirr-hbase-test.properties index d95dcaab..6f5b5efa 100644 --- a/services/hbase/src/test/resources/whirr-hbase-test.properties +++ b/services/hbase/src/test/resources/whirr-hbase-test.properties @@ -20,10 +20,4 @@ whirr.instance-templates=1 zookeeper,1 hadoop-namenode+hadoop-jobtracker+hbase-m whirr.provider=${sys:whirr.test.provider} whirr.identity=${sys:whirr.test.identity} whirr.credential=${sys:whirr.test.credential} -whirr.private-key-file=${sys:user.home}/.ssh/id_rsa -# enforce large instance during the test -whirr.hardware-id=m1.large -# Ubuntu 10.04 LTS Lucid instance-store - see http://alestic.com/ -whirr.image-id=us-east-1/ami-da0cf8b3 -whirr.location-id=us-east-1 whirr.hbase.tarball.url=http://archive.apache.org/dist/hbase/hbase-0.89.20100924/hbase-0.89.20100924-bin.tar.gz diff --git a/services/zookeeper/src/test/resources/whirr-zookeeper-test.properties b/services/zookeeper/src/test/resources/whirr-zookeeper-test.properties index fac2eca2..772718ad 100644 --- a/services/zookeeper/src/test/resources/whirr-zookeeper-test.properties +++ b/services/zookeeper/src/test/resources/whirr-zookeeper-test.properties @@ -20,3 +20,4 @@ whirr.instance-templates=2 zookeeper whirr.provider=${sys:whirr.test.provider} whirr.identity=${sys:whirr.test.identity} whirr.credential=${sys:whirr.test.credential} +whirr.hardware-min-ram=512 From ae0346fe4a5d96bdea9173949fa818c1b61e4600 Mon Sep 17 00:00:00 2001 From: Andrei Savu Date: Thu, 17 Mar 2011 22:19:19 +0000 Subject: [PATCH 139/216] Updated release notes for 0.4.0-incubating release git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1082729 13f79535-47bb-0310-9956-ffa450edef68 --- src/site/xdoc/release-notes.xml | 194 ++++++++++++++++---------------- 1 file changed, 100 insertions(+), 94 deletions(-) diff --git a/src/site/xdoc/release-notes.xml b/src/site/xdoc/release-notes.xml index fa4430d5..500c3603 100644 --- a/src/site/xdoc/release-notes.xml +++ b/src/site/xdoc/release-notes.xml @@ -23,100 +23,106 @@ -

    Release Notes - Whirr - Version 0.4.0

    - -

    Sub-task -

    -
      -
    • [WHIRR-139] - upgrade to version 1 of the "enforcer" plugin -
    • -
    - -

    Bug -

    -
      -
    • [WHIRR-170] - Instances should be started in the order specified in the template -
    • -
    • [WHIRR-201] - [HBase] Integration test fails -
    • -
    • [WHIRR-207] - Handle curl timeouts better -
    • -
    • [WHIRR-217] - Log files should not be included in tarball or checked by RAT -
    • -
    • [WHIRR-227] - CDH and Hadoop integration tests are failing -
    • -
    • [WHIRR-232] - NPE for stopped instances on EC2 -
    • -
    • [WHIRR-234] - Resource functions/install_cdh_hadoop.sh not found when running from the CLI -
    • -
    • [WHIRR-235] - fix whirr.provider in recipes/* -
    • -
    • [WHIRR-241] - Update to use CDH3B4 -
    • -
    • [WHIRR-247] - Add license headers to service install and configure scripts -
    • -
    • [WHIRR-250] - Ensure all libraries in binary distribution have associated licenses where stipulated -
    • -
    • [WHIRR-251] - Handle Apache cryptography requirements for release -
    • -
    • [WHIRR-263] - Default tarball not found for Cassandra (broken link in install_cassandra.sh) -
    • -
    - -

    Improvement -

    -
      -
    • [WHIRR-55] - Users should be able to override an arbitrary Hadoop property before launch -
    • -
    • [WHIRR-124] - Upgrade to jclouds 1.0-beta-9 -
    • -
    • [WHIRR-167] - Improve bootstrapping and configuration to be able to isolate and repair or evict failing nodes on EC2 -
    • -
    • [WHIRR-183] - ZooKeeper Data Directory Cleanup -
    • -
    • [WHIRR-186] - [HBase] Add version support configurable in properties file -
    • -
    • [WHIRR-193] - Recipe for a HBase Cluster -
    • -
    • [WHIRR-195] - Display available roles instead of service names when running ./bin/whirr -
    • -
    • [WHIRR-199] - Add aliases for short role names like nn, jt, tt, dn, zk -
    • -
    • [WHIRR-215] - Add builder pattern to addRunUrl() call -
    • -
    • [WHIRR-219] - Support dynamic addition of services to CLI -
    • -
    • [WHIRR-231] - Update documentation after upgrade to jclouds 1.0-beta-9 -
    • -
    • [WHIRR-242] - Update documentation for overriding locally supplied scripts -
    • -
    • [WHIRR-244] - Add package-level javadoc -
    • -
    • [WHIRR-254] - Document limitation that a role may only appear in one instance template group -
    • -
    • [WHIRR-259] - Disable configuration list handling for Hadoop properties -
    • -
    - -

    New Feature -

    -
      -
    • [WHIRR-198] - support user-defined images -
    • -
    • [WHIRR-225] - Support locally-supplied scripts -
    • -
    • [WHIRR-226] - Add the ability to destroy a cluster instance -
    • -
    - -

    Task -

    -
      -
    • [WHIRR-129] - Add Adrian Cole as a committer in the whirr pom.xml and site. -
    • -
    • [WHIRR-248] - Update to jclouds-1.0-beta9b -
    • -
    +

    Release Notes - Whirr - Version 0.4.0

    + +

    Sub-task +

    +
      +
    • [WHIRR-139] - upgrade to version 1 of the "enforcer" plugin +
    • +
    + +

    Bug +

    +
      +
    • [WHIRR-170] - Instances should be started in the order specified in the template +
    • +
    • [WHIRR-201] - [HBase] Integration test fails +
    • +
    • [WHIRR-207] - Handle curl timeouts better +
    • + li>[WHIRR-217] - Log files should not be included in tarball or checked by RAT + +
    • [WHIRR-227] - CDH and Hadoop integration tests are failing +
    • +
    • [WHIRR-232] - NPE for stopped instances on EC2 +
    • +
    • [WHIRR-234] - Resource functions/install_cdh_hadoop.sh not found when running from the CLI +
    • +
    • [WHIRR-235] - fix whirr.provider in recipes/* +
    • +
    • [WHIRR-241] - Update to use CDH3B4 +
    • +
    • [WHIRR-247] - Add license headers to service install and configure scripts +
    • +
    • [WHIRR-250] - Ensure all libraries in binary distribution have associated licenses where stipulated +
    • +
    • [WHIRR-251] - Handle Apache cryptography requirements for release +
    • +
    • [WHIRR-263] - Default tarball not found for Cassandra (broken link in install_cassandra.sh) +
    • +
    • [WHIRR-264] - JClouds is unable to do SSH on automatically selected images +
    • +
    + +

    Improvement +

    +
      +
    • [WHIRR-55] - Users should be able to override an arbitrary Hadoop property before launch +
    • +
    • [WHIRR-124] - Upgrade to jclouds 1.0-beta-9 +
    • +
    • [WHIRR-167] - Improve bootstrapping and configuration to be able to isolate and repair or evict failing nodes on EC2 +
    • +
    • [WHIRR-183] - ZooKeeper Data Directory Cleanup +
    • +
    • [WHIRR-186] - [HBase] Add version support configurable in properties file +
    • +
    • [WHIRR-193] - Recipe for a HBase Cluster +
    • +
    • [WHIRR-195] - Display available roles instead of service names when running ./bin/whirr +
    • +
    • [WHIRR-199] - Add aliases for short role names like nn, jt, tt, dn, zk +
    • +
    • [WHIRR-215] - Add builder pattern to addRunUrl() call +
    • +
    • [WHIRR-219] - Support dynamic addition of services to CLI +
    • +
    • [WHIRR-231] - Update documentation after upgrade to jclouds 1.0-beta-9 +
    • +
    • [WHIRR-233] - Change test properties to be less provider bound and improve TemplateBuilder defaults +
    • +
    • [WHIRR-242] - Update documentation for overriding locally supplied scripts +
    • +
    • [WHIRR-244] - Add package-level javadoc +
    • +
    • [WHIRR-254] - Document limitation that a role may only appear in one instance template group +
    • +
    • [WHIRR-259] - Disable configuration list handling for Hadoop properties +
    • +
    + +

    New Feature +

    +
      +
    • [WHIRR-158] - Allow users to log into clusters as themselves +
    • +
    • [WHIRR-198] - support user-defined images +
    • +
    • [WHIRR-225] - Support locally-supplied scripts +
    • +
    • [WHIRR-226] - Add the ability to destroy a cluster instance +
    • +
    + +

    Task +

    +
      +
    • [WHIRR-129] - Add Adrian Cole as a committer in the whirr pom.xml and site. +
    • +
    • [WHIRR-248] - Update to jclouds-1.0-beta9b +
    • +

    Release Notes - Whirr - Version 0.3.0

    From df9cbaa409a7a30d46160300316e102db006cdc7 Mon Sep 17 00:00:00 2001 From: Andrei Savu Date: Thu, 17 Mar 2011 22:24:18 +0000 Subject: [PATCH 140/216] Fixed typo in release notes git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1082734 13f79535-47bb-0310-9956-ffa450edef68 --- src/site/xdoc/release-notes.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/site/xdoc/release-notes.xml b/src/site/xdoc/release-notes.xml index 500c3603..a95e02e3 100644 --- a/src/site/xdoc/release-notes.xml +++ b/src/site/xdoc/release-notes.xml @@ -41,7 +41,7 @@
  • [WHIRR-207] - Handle curl timeouts better
  • - li>[WHIRR-217] - Log files should not be included in tarball or checked by RAT +
  • [WHIRR-217] - Log files should not be included in tarball or checked by RAT
  • [WHIRR-227] - CDH and Hadoop integration tests are failing
  • From a57ec9cf18e5fc1311ef523ca01a9757a4e71c63 Mon Sep 17 00:00:00 2001 From: Andrei Savu Date: Sun, 20 Mar 2011 19:48:35 +0000 Subject: [PATCH 141/216] WHIRR-265. Missing SVN EOL properties (Sebb via asavu) git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1083550 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index ece8ed6d..11a08394 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -62,6 +62,8 @@ Release 0.4.0 - 2011-03-15 WHIRR-233. Change test properties to be less provider bound and improve TemplateBuilder defaults (asavu) + WHIRR-265. Missing SVN EOL properties (Sebb via asavu) + BUG FIXES WHIRR-170. Instances should be started in the order specified in From bfd3169999733911d38b1824bea0add795af6020 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Mon, 21 Mar 2011 19:36:18 +0000 Subject: [PATCH 142/216] Remove empty (unused) license files. (Part of WHIRR-250.) git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1083915 13f79535-47bb-0310-9956-ffa450edef68 --- lib/bcprov-jdk15-1.44-LICENSE.html | 0 lib/guava-r06-LICENSE.txt | 0 lib/guice-2.1-r1201-LICENSE.txt | 0 lib/inject-1.0-LICENSE.txt | 0 lib/jclouds-1.0-beta-7-LICENSE.txt | 0 lib/jersey-core-1.4-ea06-LICENSE.txt | 0 lib/jsch-0.1.42-LICENSE.txt | 0 lib/slf4j-1.6.0-LICENSE.txt | 0 8 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 lib/bcprov-jdk15-1.44-LICENSE.html delete mode 100644 lib/guava-r06-LICENSE.txt delete mode 100644 lib/guice-2.1-r1201-LICENSE.txt delete mode 100644 lib/inject-1.0-LICENSE.txt delete mode 100644 lib/jclouds-1.0-beta-7-LICENSE.txt delete mode 100644 lib/jersey-core-1.4-ea06-LICENSE.txt delete mode 100644 lib/jsch-0.1.42-LICENSE.txt delete mode 100644 lib/slf4j-1.6.0-LICENSE.txt diff --git a/lib/bcprov-jdk15-1.44-LICENSE.html b/lib/bcprov-jdk15-1.44-LICENSE.html deleted file mode 100644 index e69de29b..00000000 diff --git a/lib/guava-r06-LICENSE.txt b/lib/guava-r06-LICENSE.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/lib/guice-2.1-r1201-LICENSE.txt b/lib/guice-2.1-r1201-LICENSE.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/lib/inject-1.0-LICENSE.txt b/lib/inject-1.0-LICENSE.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/lib/jclouds-1.0-beta-7-LICENSE.txt b/lib/jclouds-1.0-beta-7-LICENSE.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/lib/jersey-core-1.4-ea06-LICENSE.txt b/lib/jersey-core-1.4-ea06-LICENSE.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/lib/jsch-0.1.42-LICENSE.txt b/lib/jsch-0.1.42-LICENSE.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/lib/slf4j-1.6.0-LICENSE.txt b/lib/slf4j-1.6.0-LICENSE.txt deleted file mode 100644 index e69de29b..00000000 From cf78f51fdbef001c69cc4563618ccbdf8e056d09 Mon Sep 17 00:00:00 2001 From: Andrei Savu Date: Tue, 22 Mar 2011 15:49:31 +0000 Subject: [PATCH 143/216] WHIRR-253. ZooKeeper service should only authorize ingress to ZooKeeper instances (tomwhite via asavu) git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1084224 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 5 +++++ .../zookeeper/ZooKeeperClusterActionHandler.java | 10 +++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 11a08394..42e51583 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -2,6 +2,11 @@ Apache Whirr Change Log Trunk (unreleased changes) + BUG FIXES + + WHIRR-253. ZooKeeper service should only authorize ingress to ZooKeeper + instances (tomwhite via asavu) + Release 0.4.0 - 2011-03-15 NEW FEATURES diff --git a/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperClusterActionHandler.java b/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperClusterActionHandler.java index d297bda2..fa57b977 100644 --- a/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperClusterActionHandler.java +++ b/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperClusterActionHandler.java @@ -18,6 +18,7 @@ */ import static org.jclouds.scriptbuilder.domain.Statements.call; +import static org.apache.whirr.service.RolePredicates.role; import com.google.common.base.Function; import com.google.common.base.Joiner; @@ -33,7 +34,6 @@ import org.apache.whirr.service.ClusterActionHandlerSupport; import org.apache.whirr.service.ClusterSpec; import org.apache.whirr.service.ComputeServiceContextBuilder; -import org.apache.whirr.service.RolePredicates; import org.apache.whirr.service.jclouds.FirewallSettings; import org.jclouds.compute.ComputeServiceContext; import org.slf4j.Logger; @@ -63,16 +63,16 @@ protected void beforeBootstrap(ClusterActionEvent event) throws IOException { protected void beforeConfigure(ClusterActionEvent event) throws IOException, InterruptedException { ClusterSpec clusterSpec = event.getClusterSpec(); Cluster cluster = event.getCluster(); + Set ensemble = cluster.getInstancesMatching(role(ZOOKEEPER_ROLE)); LOG.info("Authorizing firewall"); ComputeServiceContext computeServiceContext = ComputeServiceContextBuilder.build(clusterSpec); FirewallSettings.authorizeIngress(computeServiceContext, - cluster.getInstances(), clusterSpec, CLIENT_PORT); + ensemble, clusterSpec, CLIENT_PORT); // Pass list of all servers in ensemble to configure script. // Position is significant: i-th server has id i. - String servers = Joiner.on(' ').join(getPrivateIps(cluster.getInstancesMatching( - RolePredicates.role(ZooKeeperClusterActionHandler.ZOOKEEPER_ROLE)))); + String servers = Joiner.on(' ').join(getPrivateIps(ensemble)); addStatement(event, call("configure_zookeeper", "-c", clusterSpec.getProvider(), servers)); } @@ -83,7 +83,7 @@ protected void afterConfigure(ClusterActionEvent event) { Cluster cluster = event.getCluster(); LOG.info("Completed configuration of {}", clusterSpec.getClusterName()); String hosts = Joiner.on(',').join(getHosts(cluster.getInstancesMatching( - RolePredicates.role(ZooKeeperClusterActionHandler.ZOOKEEPER_ROLE)))); + role(ZOOKEEPER_ROLE)))); LOG.info("Hosts: {}", hosts); } From 127e3121ae281e53c49d4e9c62510b60a76e7ec6 Mon Sep 17 00:00:00 2001 From: Andrei Savu Date: Wed, 23 Mar 2011 19:06:08 +0000 Subject: [PATCH 144/216] WHIRR-267. Update NOTICE and LICENSE files to mention 3rd party products (tomwhite via asavu) git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1084676 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 3 + LICENSE.txt | 269 ++++++++++++++++++- NOTICE-src.txt | 5 + NOTICE.txt | 4 +- build-tools/src/assemble-bin.xml | 1 + build-tools/src/assemble-src.xml | 7 + lib/aws-common-1.0-beta-9b-LICENSE.txt | 224 --------------- lib/aws-ec2-1.0-beta-9b-LICENSE.txt | 224 --------------- lib/cloudservers-1.0-beta-9b-LICENSE.txt | 224 --------------- lib/cloudservers-uk-1.0-beta-9b-LICENSE.txt | 224 --------------- lib/cloudservers-us-1.0-beta-9b-LICENSE.txt | 224 --------------- lib/dnsjava-2.0.8-LICENSE.txt | 28 -- lib/ec2-1.0-beta-9b-LICENSE.txt | 224 --------------- lib/gson-1.6-LICENSE.txt | 203 -------------- lib/guava-r08-LICENSE.txt | 203 -------------- lib/guice-3.0-rc2-LICENSE.txt | 203 -------------- lib/java-xmlbuilder-0.3-LICENSE.txt | 203 -------------- lib/javax.inject-1-LICENSE.txt | 203 -------------- lib/jclouds-1.0-beta-9b-LICENSE.txt | 203 -------------- lib/jersey-core-1.4-LICENSE.txt | 263 ------------------ lib/jopt-simple-3.2-LICENSE.txt | 19 -- lib/jsch-0.1.44-1-LICENSE.txt | 30 --- lib/jsr250-api-1.0-LICENSE.txt | 93 ------- lib/jsr305-1.3.9-LICENSE.txt | 28 -- lib/not-yet-commons-ssl-0.3.11-LICENSE.txt | 224 --------------- lib/oauth-20100527-LICENSE.txt | 203 -------------- lib/openstack-common-1.0-beta-9b-LICENSE.txt | 224 --------------- lib/slf4j-api-1.6.0-LICENSE.txt | 24 -- lib/slf4j-log4j12-1.6.0-LICENSE.txt | 24 -- 29 files changed, 284 insertions(+), 3727 deletions(-) create mode 100644 NOTICE-src.txt delete mode 100644 lib/aws-common-1.0-beta-9b-LICENSE.txt delete mode 100644 lib/aws-ec2-1.0-beta-9b-LICENSE.txt delete mode 100644 lib/cloudservers-1.0-beta-9b-LICENSE.txt delete mode 100644 lib/cloudservers-uk-1.0-beta-9b-LICENSE.txt delete mode 100644 lib/cloudservers-us-1.0-beta-9b-LICENSE.txt delete mode 100644 lib/dnsjava-2.0.8-LICENSE.txt delete mode 100644 lib/ec2-1.0-beta-9b-LICENSE.txt delete mode 100644 lib/gson-1.6-LICENSE.txt delete mode 100644 lib/guava-r08-LICENSE.txt delete mode 100644 lib/guice-3.0-rc2-LICENSE.txt delete mode 100644 lib/java-xmlbuilder-0.3-LICENSE.txt delete mode 100644 lib/javax.inject-1-LICENSE.txt delete mode 100644 lib/jclouds-1.0-beta-9b-LICENSE.txt delete mode 100644 lib/jersey-core-1.4-LICENSE.txt delete mode 100644 lib/jopt-simple-3.2-LICENSE.txt delete mode 100644 lib/jsch-0.1.44-1-LICENSE.txt delete mode 100644 lib/jsr250-api-1.0-LICENSE.txt delete mode 100644 lib/jsr305-1.3.9-LICENSE.txt delete mode 100644 lib/not-yet-commons-ssl-0.3.11-LICENSE.txt delete mode 100644 lib/oauth-20100527-LICENSE.txt delete mode 100644 lib/openstack-common-1.0-beta-9b-LICENSE.txt delete mode 100644 lib/slf4j-api-1.6.0-LICENSE.txt delete mode 100644 lib/slf4j-log4j12-1.6.0-LICENSE.txt diff --git a/CHANGES.txt b/CHANGES.txt index 42e51583..337adfd4 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -105,6 +105,9 @@ Release 0.4.0 - 2011-03-15 WHIRR-263. Default tarball not found for Cassandra (broken link in install_cassandra.sh) (asavu) + WHIRR-267. Update NOTICE and LICENSE files to mention 3rd party + products (tomwhite via asavu) + Release 0.3.0 - 2011-01-15 NEW FEATURES diff --git a/LICENSE.txt b/LICENSE.txt index 5e4a8e5f..06621f38 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -201,9 +201,180 @@ See the License for the specific language governing permissions and limitations under the License. -License for the Jansson C JSON parser used in the C implementation: -Copyright (c) 2009 Petri Lehtinen +========================================================================== +The Apache License, Version 2.0 applies to the following libraries: +Gson, Guava, Guice, javax.inject, jclouds, Not-Yet-Commons-SSL, Oauth (Java), +XML Builder + +========================================================================== +The following license applies to the dnsjava library +-------------------------------------------------------------------------- + +dnsjava is placed under the BSD license. Several files are also under +additional licenses; see the individual files for details. + +Copyright (c) 1999-2005, Brian Wellington +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the dnsjava project nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +========================================================================== +The following license applies to the Jersey library and the Common Annotations +(JSR 250) library +-------------------------------------------------------------------------- + +COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0 + +1. Definitions. + + 1.1. Contributor. means each individual or entity that creates or contributes to the creation of Modifications. + + 1.2. Contributor Version. means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor. + + 1.3. Covered Software. means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof. + + 1.4. Executable. means the Covered Software in any form other than Source Code. + + 1.5. Initial Developer. means the individual or entity that first makes Original Software available under this License. + + 1.6. Larger Work. means a work which combines Covered Software or portions thereof with code not governed by the terms of this License. + + 1.7. License. means this document. + + 1.8. Licensable. means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein. + + 1.9. Modifications. means the Source Code and Executable form of any of the following: + + A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications; + + B. Any new file that contains any part of the Original Software or previous Modification; or + + C. Any new file that is contributed or otherwise made available under the terms of this License. + + 1.10. Original Software. means the Source Code and Executable form of computer software code that is originally released under this License. + + 1.11. Patent Claims. means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor. + + 1.12. Source Code. means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code. + + 1.13. You. (or .Your.) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, .You. includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, .control. means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. + +2. License Grants. + + 2.1. The Initial Developer Grant. + + Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license: + + (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof). + + (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices. + + 2.2. Contributor Grant. + + Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license: + + (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination). + + (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party. + + (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor. + +3. Distribution Obligations. + + 3.1. Availability of Source Code. + Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange. + + 3.2. Modifications. + The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License. + + 3.3. Required Notices. + You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer. + + 3.4. Application of Additional Terms. + You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients. rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer. + + 3.5. Distribution of Executable Versions. + You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient.s rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer. + + 3.6. Larger Works. + You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software. + +4. Versions of the License. + + 4.1. New Versions. + Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License. + + 4.2. Effect of New Versions. + You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward. + + 4.3. Modified Versions. + When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License. + +5. DISCLAIMER OF WARRANTY. + + COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN .AS IS. BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +6. TERMINATION. + + 6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. + + 6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as .Participant.) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant. + + 6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination. + +7. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY.S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +8. U.S. GOVERNMENT END USERS. + + The Covered Software is a .commercial item,. as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of .commercial computer software. (as that term is defined at 48 C.F.R. º 252.227-7014(a)(1)) and .commercial computer software documentation. as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License. + +9. MISCELLANEOUS. + + This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction.s conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys. fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software. + +10. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability. + + NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) + + The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California. + +========================================================================== +The following license applies to the JOpt Simple library +-------------------------------------------------------------------------- + +Copyright (C) by Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -222,3 +393,97 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +========================================================================== +The following license applies to the JSch library +-------------------------------------------------------------------------- + +JSch 0.0.* was released under the GNU LGPL license. Later, we have switched +over to a BSD-style license. + +------------------------------------------------------------------------------ +Copyright (c) 2002,2003,2004,2005,2006,2007,2008,2009 Atsuhiko Yamanaka, JCraft,Inc. +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the distribution. + + 3. The names of the authors may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, +INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND +FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, +INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, +INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, +OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +========================================================================== +The following license applies to the JSR-305 library +-------------------------------------------------------------------------- + +Copyright (c) 2007-2009, JSR305 expert group +All rights reserved. + +http://www.opensource.org/licenses/bsd-license.php + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the JSR305 expert group nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +========================================================================== +The following license applies to the SLF4J library +-------------------------------------------------------------------------- +Copyright (c) 2004-2008 QOS.ch +All rights reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/NOTICE-src.txt b/NOTICE-src.txt new file mode 100644 index 00000000..4c69b7c6 --- /dev/null +++ b/NOTICE-src.txt @@ -0,0 +1,5 @@ +Apache Whirr +Copyright 2010-2011 The Apache Software Foundation + +This product includes software developed at +The Apache Software Foundation (http://www.apache.org/). diff --git a/NOTICE.txt b/NOTICE.txt index 717e0c0b..c4ca2f66 100644 --- a/NOTICE.txt +++ b/NOTICE.txt @@ -1,14 +1,12 @@ Apache Whirr -Copyright 2010 The Apache Software Foundation +Copyright 2010-2011 The Apache Software Foundation This product includes software developed at The Apache Software Foundation (http://www.apache.org/). -------------------------------------------------------------------------------- This product includes Common Annotations (JSR 250, https://jsr250.dev.java.net/) distributed under the CDDL Version 1.0 license. -------------------------------------------------------------------------------- This product includes Jersey (https://jersey.dev.java.net/) distributed under the CDDL Version 1.0 license. diff --git a/build-tools/src/assemble-bin.xml b/build-tools/src/assemble-bin.xml index c9b99c9b..3ff4f0cf 100644 --- a/build-tools/src/assemble-bin.xml +++ b/build-tools/src/assemble-bin.xml @@ -38,6 +38,7 @@ ${project.basedir} true + NOTICE-src.txt **/.project **/.gitignore **/${project.build.directory}/** diff --git a/build-tools/src/assemble-src.xml b/build-tools/src/assemble-src.xml index f90ad914..d44ead09 100644 --- a/build-tools/src/assemble-src.xml +++ b/build-tools/src/assemble-src.xml @@ -26,6 +26,7 @@ ${project.basedir} true + NOTICE*.txt **/.project **/.gitignore **/${project.build.directory}/** @@ -34,4 +35,10 @@ + + + NOTICE-src.txt + NOTICE.txt + + diff --git a/lib/aws-common-1.0-beta-9b-LICENSE.txt b/lib/aws-common-1.0-beta-9b-LICENSE.txt deleted file mode 100644 index 5e4a8e5f..00000000 --- a/lib/aws-common-1.0-beta-9b-LICENSE.txt +++ /dev/null @@ -1,224 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed 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. - -License for the Jansson C JSON parser used in the C implementation: - -Copyright (c) 2009 Petri Lehtinen - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/lib/aws-ec2-1.0-beta-9b-LICENSE.txt b/lib/aws-ec2-1.0-beta-9b-LICENSE.txt deleted file mode 100644 index 5e4a8e5f..00000000 --- a/lib/aws-ec2-1.0-beta-9b-LICENSE.txt +++ /dev/null @@ -1,224 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed 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. - -License for the Jansson C JSON parser used in the C implementation: - -Copyright (c) 2009 Petri Lehtinen - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/lib/cloudservers-1.0-beta-9b-LICENSE.txt b/lib/cloudservers-1.0-beta-9b-LICENSE.txt deleted file mode 100644 index 5e4a8e5f..00000000 --- a/lib/cloudservers-1.0-beta-9b-LICENSE.txt +++ /dev/null @@ -1,224 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed 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. - -License for the Jansson C JSON parser used in the C implementation: - -Copyright (c) 2009 Petri Lehtinen - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/lib/cloudservers-uk-1.0-beta-9b-LICENSE.txt b/lib/cloudservers-uk-1.0-beta-9b-LICENSE.txt deleted file mode 100644 index 5e4a8e5f..00000000 --- a/lib/cloudservers-uk-1.0-beta-9b-LICENSE.txt +++ /dev/null @@ -1,224 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed 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. - -License for the Jansson C JSON parser used in the C implementation: - -Copyright (c) 2009 Petri Lehtinen - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/lib/cloudservers-us-1.0-beta-9b-LICENSE.txt b/lib/cloudservers-us-1.0-beta-9b-LICENSE.txt deleted file mode 100644 index 5e4a8e5f..00000000 --- a/lib/cloudservers-us-1.0-beta-9b-LICENSE.txt +++ /dev/null @@ -1,224 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed 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. - -License for the Jansson C JSON parser used in the C implementation: - -Copyright (c) 2009 Petri Lehtinen - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/lib/dnsjava-2.0.8-LICENSE.txt b/lib/dnsjava-2.0.8-LICENSE.txt deleted file mode 100644 index 11098005..00000000 --- a/lib/dnsjava-2.0.8-LICENSE.txt +++ /dev/null @@ -1,28 +0,0 @@ -dnsjava is placed under the BSD license. Several files are also under -additional licenses; see the individual files for details. - -Copyright (c) 1999-2005, Brian Wellington -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the name of the dnsjava project nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/lib/ec2-1.0-beta-9b-LICENSE.txt b/lib/ec2-1.0-beta-9b-LICENSE.txt deleted file mode 100644 index 5e4a8e5f..00000000 --- a/lib/ec2-1.0-beta-9b-LICENSE.txt +++ /dev/null @@ -1,224 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed 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. - -License for the Jansson C JSON parser used in the C implementation: - -Copyright (c) 2009 Petri Lehtinen - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/lib/gson-1.6-LICENSE.txt b/lib/gson-1.6-LICENSE.txt deleted file mode 100644 index 6b0b1270..00000000 --- a/lib/gson-1.6-LICENSE.txt +++ /dev/null @@ -1,203 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed 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. - diff --git a/lib/guava-r08-LICENSE.txt b/lib/guava-r08-LICENSE.txt deleted file mode 100644 index 6b0b1270..00000000 --- a/lib/guava-r08-LICENSE.txt +++ /dev/null @@ -1,203 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed 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. - diff --git a/lib/guice-3.0-rc2-LICENSE.txt b/lib/guice-3.0-rc2-LICENSE.txt deleted file mode 100644 index 6b0b1270..00000000 --- a/lib/guice-3.0-rc2-LICENSE.txt +++ /dev/null @@ -1,203 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed 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. - diff --git a/lib/java-xmlbuilder-0.3-LICENSE.txt b/lib/java-xmlbuilder-0.3-LICENSE.txt deleted file mode 100644 index 6b0b1270..00000000 --- a/lib/java-xmlbuilder-0.3-LICENSE.txt +++ /dev/null @@ -1,203 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed 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. - diff --git a/lib/javax.inject-1-LICENSE.txt b/lib/javax.inject-1-LICENSE.txt deleted file mode 100644 index 6b0b1270..00000000 --- a/lib/javax.inject-1-LICENSE.txt +++ /dev/null @@ -1,203 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed 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. - diff --git a/lib/jclouds-1.0-beta-9b-LICENSE.txt b/lib/jclouds-1.0-beta-9b-LICENSE.txt deleted file mode 100644 index 6b0b1270..00000000 --- a/lib/jclouds-1.0-beta-9b-LICENSE.txt +++ /dev/null @@ -1,203 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed 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. - diff --git a/lib/jersey-core-1.4-LICENSE.txt b/lib/jersey-core-1.4-LICENSE.txt deleted file mode 100644 index 4aea5374..00000000 --- a/lib/jersey-core-1.4-LICENSE.txt +++ /dev/null @@ -1,263 +0,0 @@ -COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0 - -1. Definitions. - - 1.1. Contributor. means each individual or entity that creates or contributes to the creation of Modifications. - - 1.2. Contributor Version. means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor. - - 1.3. Covered Software. means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof. - - 1.4. Executable. means the Covered Software in any form other than Source Code. - - 1.5. Initial Developer. means the individual or entity that first makes Original Software available under this License. - - 1.6. Larger Work. means a work which combines Covered Software or portions thereof with code not governed by the terms of this License. - - 1.7. License. means this document. - - 1.8. Licensable. means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein. - - 1.9. Modifications. means the Source Code and Executable form of any of the following: - - A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications; - - B. Any new file that contains any part of the Original Software or previous Modification; or - - C. Any new file that is contributed or otherwise made available under the terms of this License. - - 1.10. Original Software. means the Source Code and Executable form of computer software code that is originally released under this License. - - 1.11. Patent Claims. means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor. - - 1.12. Source Code. means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code. - - 1.13. You. (or .Your.) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, .You. includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, .control. means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. - -2. License Grants. - - 2.1. The Initial Developer Grant. - - Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license: - - (a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and - - (b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof). - - (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License. - - (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices. - - 2.2. Contributor Grant. - - Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license: - - (a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and - - (b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination). - - (c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party. - - (d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor. - -3. Distribution Obligations. - - 3.1. Availability of Source Code. - Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange. - - 3.2. Modifications. - The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License. - - 3.3. Required Notices. - You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer. - - 3.4. Application of Additional Terms. - You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients. rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer. - - 3.5. Distribution of Executable Versions. - You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipient.s rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer. - - 3.6. Larger Works. - You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software. - -4. Versions of the License. - - 4.1. New Versions. - Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License. - - 4.2. Effect of New Versions. - You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward. - - 4.3. Modified Versions. - When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License. - -5. DISCLAIMER OF WARRANTY. - - COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN .AS IS. BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. - -6. TERMINATION. - - 6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. - - 6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as .Participant.) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant. - - 6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination. - -7. LIMITATION OF LIABILITY. - - UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY.S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. - -8. U.S. GOVERNMENT END USERS. - - The Covered Software is a .commercial item,. as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of .commercial computer software. (as that term is defined at 48 C.F.R. º 252.227-7014(a)(1)) and .commercial computer software documentation. as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License. - -9. MISCELLANEOUS. - - This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdiction.s conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys. fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software. - -10. RESPONSIBILITY FOR CLAIMS. - - As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability. - - NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) - - The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California. - - -The GNU General Public License (GPL) Version 2, June 1991 - - -Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. - -Preamble - -The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. - -When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. - -To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. - -For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. - -We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. - -Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. - -Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. - -The precise terms and conditions for copying, distribution and modification follow. - - -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. - -1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. - -You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. - - c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. - -3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. - -If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. - -4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. - -5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. - -6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. - -7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. - -This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. - -8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. - -9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. - -10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. - -NO WARRANTY - -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -END OF TERMS AND CONDITIONS - - -How to Apply These Terms to Your New Programs - -If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. - -To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. - - One line to give the program's name and a brief idea of what it does. - - Copyright (C) - - This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. - - This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. - - signature of Ty Coon, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. - - -"CLASSPATH" EXCEPTION TO THE GPL VERSION 2 - -Certain source files distributed by Sun Microsystems, Inc. are subject to the following clarification and special exception to the GPL Version 2, but only where Sun has expressly included in the particular source file's header the words - -"Sun designates this particular file as subject to the "Classpath" exception as provided by Sun in the License file that accompanied this code." - -Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License Version 2 cover the whole combination. - -As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module.? An independent module is a module which is not derived from or based on this library.? If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so.? If you do not wish to do so, delete this exception statement from your version. diff --git a/lib/jopt-simple-3.2-LICENSE.txt b/lib/jopt-simple-3.2-LICENSE.txt deleted file mode 100644 index 48114d6a..00000000 --- a/lib/jopt-simple-3.2-LICENSE.txt +++ /dev/null @@ -1,19 +0,0 @@ -Copyright (C) by - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/lib/jsch-0.1.44-1-LICENSE.txt b/lib/jsch-0.1.44-1-LICENSE.txt deleted file mode 100644 index fedc2081..00000000 --- a/lib/jsch-0.1.44-1-LICENSE.txt +++ /dev/null @@ -1,30 +0,0 @@ -JSch 0.0.* was released under the GNU LGPL license. Later, we have switched -over to a BSD-style license. - ------------------------------------------------------------------------------- -Copyright (c) 2002,2003,2004,2005,2006,2007,2008,2009 Atsuhiko Yamanaka, JCraft,Inc. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the distribution. - - 3. The names of the authors may not be used to endorse or promote products - derived from this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, -INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, -INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, -OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/lib/jsr250-api-1.0-LICENSE.txt b/lib/jsr250-api-1.0-LICENSE.txt deleted file mode 100644 index e910a937..00000000 --- a/lib/jsr250-api-1.0-LICENSE.txt +++ /dev/null @@ -1,93 +0,0 @@ -COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0 1. - -Definitions. - -1.1. Contributor means each individual or entity that creates or contributes to the creation of Modifications. - -1.2. Contributor Version means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor. - -1.3. Covered Software means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof. - -1.4. Executable means the Covered Software in any form other than Source Code. - -1.5. Initial Developer means the individual or entity that first makes Original Software available under this License. - -1.6. Larger Work means a work which combines Covered Software or portions thereof with code not governed by the terms of this License. - -1.7. License means this document. - -1.8. Licensable means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein. - -1.9. Modifications means the Source Code and Executable form of any of the following: A. Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications; B. Any new file that contains any part of the Original Software or previous Modification; or C. Any new file that is contributed or otherwise made available under the terms of this License. - -1.10. Original Software means the Source Code and Executable form of computer software code that is originally released under this License. - -1.11. Patent Claims means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor. - -1.12. Source Code means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code. - -1.13. You (or Your) means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, You includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, control means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. - -2. License Grants. - - 2.1. The Initial Developer Grant. Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and - -(b) under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof); - - (c) The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License; - - (d) Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices. - -2.2. Contributor Grant. Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license: - -(a) under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and - -(b) under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination). - -(c) The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party. - -(d) Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor. - -3. Distribution Obligations. - -3.1. Availability of Source Code. Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange. - -3.2. Modifications. The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License. - -3.3. Required Notices. You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer. - -3.4. Application of Additional Terms. You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer. - -3.5. Distribution of Executable Versions. You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipients rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer. - -3.6. Larger Works. You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software. - -4. Versions of the License. - -4.1. New Versions. Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License. - -4.2. Effect of New Versions. You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward. - -4.3. Modified Versions. When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License. - -5. DISCLAIMER OF WARRANTY. COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN AS IS BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. - -6. TERMINATION. - -6.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. - -6.2. If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as Participant) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant. - -6.3. In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination. - -7. LIMITATION OF LIABILITY. UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTYS NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. - -8. U.S. GOVERNMENT END USERS. The Covered Software is a commercial item, as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of commercial computer software (as that term is defined at 48 C.F.R.  252.227-7014(a)(1)) and commercial computer software documentation as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License. - -9. MISCELLANEOUS. This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdictions conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software. - -10. RESPONSIBILITY FOR CLAIMS. As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability. - -NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) The code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California. diff --git a/lib/jsr305-1.3.9-LICENSE.txt b/lib/jsr305-1.3.9-LICENSE.txt deleted file mode 100644 index 67366813..00000000 --- a/lib/jsr305-1.3.9-LICENSE.txt +++ /dev/null @@ -1,28 +0,0 @@ -Copyright (c) 2007-2009, JSR305 expert group -All rights reserved. - -http://www.opensource.org/licenses/bsd-license.php - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - * Neither the name of the JSR305 expert group nor the names of its - contributors may be used to endorse or promote products derived from - this software without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. diff --git a/lib/not-yet-commons-ssl-0.3.11-LICENSE.txt b/lib/not-yet-commons-ssl-0.3.11-LICENSE.txt deleted file mode 100644 index 5e4a8e5f..00000000 --- a/lib/not-yet-commons-ssl-0.3.11-LICENSE.txt +++ /dev/null @@ -1,224 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed 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. - -License for the Jansson C JSON parser used in the C implementation: - -Copyright (c) 2009 Petri Lehtinen - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/lib/oauth-20100527-LICENSE.txt b/lib/oauth-20100527-LICENSE.txt deleted file mode 100644 index 6b0b1270..00000000 --- a/lib/oauth-20100527-LICENSE.txt +++ /dev/null @@ -1,203 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed 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. - diff --git a/lib/openstack-common-1.0-beta-9b-LICENSE.txt b/lib/openstack-common-1.0-beta-9b-LICENSE.txt deleted file mode 100644 index 5e4a8e5f..00000000 --- a/lib/openstack-common-1.0-beta-9b-LICENSE.txt +++ /dev/null @@ -1,224 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed 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. - -License for the Jansson C JSON parser used in the C implementation: - -Copyright (c) 2009 Petri Lehtinen - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/lib/slf4j-api-1.6.0-LICENSE.txt b/lib/slf4j-api-1.6.0-LICENSE.txt deleted file mode 100644 index 48b18e39..00000000 --- a/lib/slf4j-api-1.6.0-LICENSE.txt +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2004-2008 QOS.ch -All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - diff --git a/lib/slf4j-log4j12-1.6.0-LICENSE.txt b/lib/slf4j-log4j12-1.6.0-LICENSE.txt deleted file mode 100644 index 48b18e39..00000000 --- a/lib/slf4j-log4j12-1.6.0-LICENSE.txt +++ /dev/null @@ -1,24 +0,0 @@ -Copyright (c) 2004-2008 QOS.ch -All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - - From d0df542ace217ab100865ce12478de3516688bd6 Mon Sep 17 00:00:00 2001 From: Andrei Savu Date: Wed, 23 Mar 2011 19:22:58 +0000 Subject: [PATCH 145/216] Updated release notes for 0.4.0-incubating git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1084684 13f79535-47bb-0310-9956-ffa450edef68 --- src/site/xdoc/release-notes.xml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/site/xdoc/release-notes.xml b/src/site/xdoc/release-notes.xml index a95e02e3..179bb014 100644 --- a/src/site/xdoc/release-notes.xml +++ b/src/site/xdoc/release-notes.xml @@ -23,7 +23,7 @@ -

    Release Notes - Whirr - Version 0.4.0

    +

    Release Notes - Whirr - Version 0.4.0

    Sub-task

    @@ -63,6 +63,8 @@
  • [WHIRR-264] - JClouds is unable to do SSH on automatically selected images
  • +
  • [WHIRR-267] - Update NOTICE and LICENSE files to mention 3rd party products +
  • Improvement @@ -100,6 +102,8 @@
  • [WHIRR-259] - Disable configuration list handling for Hadoop properties
  • +
  • [WHIRR-265] - Missing SVN EOL properties +
  • New Feature From 1d555ceae6688fd24913deaf558bf167fcd19f3e Mon Sep 17 00:00:00 2001 From: Andrei Savu Date: Tue, 29 Mar 2011 12:13:27 +0000 Subject: [PATCH 146/216] WHIRR-261. Add ElasticSearch as a service git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1086564 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 4 + cli/pom.xml | 5 + pom.xml | 1 + recipes/elasticsearch-ec2.properties | 88 +++++++++ recipes/elasticsearch-rackspace.properties | 91 ++++++++++ services/elasticsearch/pom.xml | 95 ++++++++++ .../ElasticSearchConfigurationBuilder.java | 170 ++++++++++++++++++ .../elasticsearch/ElasticSearchHandler.java | 79 ++++++++ ....apache.whirr.service.ClusterActionHandler | 1 + .../functions/configure_elasticsearch.sh | 32 ++++ .../functions/install_elasticsearch.sh | 42 +++++ .../whirr-elasticsearch-default.properties | 21 +++ ...ElasticSearchConfigurationBuilderTest.java | 121 +++++++++++++ .../integration/ElasticSearchTest.java | 121 +++++++++++++ .../whirr-elasticsearch-test.properties | 23 +++ src/site/confluence/index.confluence | 6 +- 16 files changed, 897 insertions(+), 3 deletions(-) create mode 100644 recipes/elasticsearch-ec2.properties create mode 100644 recipes/elasticsearch-rackspace.properties create mode 100644 services/elasticsearch/pom.xml create mode 100644 services/elasticsearch/src/main/java/org/apache/whirr/service/elasticsearch/ElasticSearchConfigurationBuilder.java create mode 100644 services/elasticsearch/src/main/java/org/apache/whirr/service/elasticsearch/ElasticSearchHandler.java create mode 100644 services/elasticsearch/src/main/resources/META-INF/services/org.apache.whirr.service.ClusterActionHandler create mode 100644 services/elasticsearch/src/main/resources/functions/configure_elasticsearch.sh create mode 100644 services/elasticsearch/src/main/resources/functions/install_elasticsearch.sh create mode 100644 services/elasticsearch/src/main/resources/whirr-elasticsearch-default.properties create mode 100644 services/elasticsearch/src/test/java/org/apache/whirr/service/elasticsearch/ElasticSearchConfigurationBuilderTest.java create mode 100644 services/elasticsearch/src/test/java/org/apache/whirr/service/elasticsearch/integration/ElasticSearchTest.java create mode 100644 services/elasticsearch/src/test/resources/whirr-elasticsearch-test.properties diff --git a/CHANGES.txt b/CHANGES.txt index 337adfd4..c3bf6eec 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -2,6 +2,10 @@ Apache Whirr Change Log Trunk (unreleased changes) + NEW FEATURES + + WHIRR-261. Add ElasticSearch as a service (asavu) + BUG FIXES WHIRR-253. ZooKeeper service should only authorize ingress to ZooKeeper diff --git a/cli/pom.xml b/cli/pom.xml index 237d4cc1..4383bbf4 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -54,6 +54,11 @@ whirr-zookeeper ${project.version} + + ${project.groupId} + whirr-elasticsearch + ${project.version} + ${project.groupId} whirr-hbase diff --git a/pom.xml b/pom.xml index 3e3e0d97..a1bc0653 100644 --- a/pom.xml +++ b/pom.xml @@ -44,6 +44,7 @@ services/hadoop services/zookeeper services/hbase + services/elasticsearch diff --git a/recipes/elasticsearch-ec2.properties b/recipes/elasticsearch-ec2.properties new file mode 100644 index 00000000..e4bb4f67 --- /dev/null +++ b/recipes/elasticsearch-ec2.properties @@ -0,0 +1,88 @@ +# +# 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. +# + +# +# ElasticSearch Cluster on AWS EC2 +# + +# Read the Configuration Guide for more info: +# http://incubator.apache.org/whirr/configuration-guide.html + +# Change the cluster name here +whirr.cluster-name=elasticsearch + +# Change the number of machines in the cluster here +whirr.instance-templates=2 elasticsearch +whirr.hardware-min-ram=2048 + +# For EC2 set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables. +whirr.provider=aws-ec2 +whirr.identity=${env:AWS_ACCESS_KEY_ID} +whirr.credential=${env:AWS_SECRET_ACCESS_KEY} + +# By default use the user system SSH keys. Override them here. +# whirr.private-key-file=${sys:user.home}/.ssh/id_rsa +# whirr.public-key-file=${whirr.private-key-file}.pub + +# You can specify the version by setting the tarball url +# whirr.elasticsearch.tarball.url=http://github.com/downloads/elasticsearch/elasticsearch/elasticsearch-0.15.2.tar.gz + +# +# elasticsearch specific settings (Expert) +# + +# 1. Gateway Persistence settings +# See: http://www.elasticsearch.org/guide/reference/modules/gateway/ +# Defaults: the index is only stored in memory and all data is lost on shutdown + +# 1.1 Enable persistence on S3 +# See: http://www.elasticsearch.org/guide/reference/modules/gateway/s3.html + +# es.gateway.type=s3 +# es.gateway.s3.bucket: elasticsearch + +# 1.2 Enable persistence on the local filesystem +# See: http://www.elasticsearch.org/guide/reference/modules/gateway/local.html + +# es.gateway.type=fs +# es.gateway.recovery_after_nodes=1 +# es.gateway.recovery_after_time=5m +# es.expected_nodes=2 + +# 1.3 Enable persistence on HDFS +# See: http://www.elasticsearch.org/guide/reference/modules/gateway/hadoop.html + +# es.gateway.type=hdfs +# es.gateway.hdfs.uri=hdfs://myhost:8022 +# es.gateway.hdfs.path=/some/path + +# 2. Scripting Support +# See: http://www.elasticsearch.org/guide/reference/modules/scripting.html +# The scripting module uses by default mvel + +# Just add them to the list of installed plugins +# es.plugins=lang-javascript, lang-groovy, lang-python, + +# 3. Memcached protocol support +# See: http://www.elasticsearch.org/guide/reference/modules/memcached.html + +# es.plugins=transport-memcached + +# 4. Thrift protocol support +# See: http://www.elasticsearch.org/guide/reference/modules/thrift.html + +# es.plugins=transport-thrift diff --git a/recipes/elasticsearch-rackspace.properties b/recipes/elasticsearch-rackspace.properties new file mode 100644 index 00000000..cba57cc9 --- /dev/null +++ b/recipes/elasticsearch-rackspace.properties @@ -0,0 +1,91 @@ +# +# 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. +# + +# +# ElasticSearch Cluster on Rackspace Cloud +# + +# Read the Configuration Guide for more info: +# http://incubator.apache.org/whirr/configuration-guide.html + +# Change the cluster name here +whirr.cluster-name=elasticsearch + +# Change the number of machines in the cluster here +whirr.instance-templates=2 elasticsearch + +# For Rackspace set RACKSPACE_USERNAME and RACKSPACE_API_KEY environment variables. +whirr.provider=cloudservers-us +whirr.identity=${env:RACKSPACE_USERNAME} +whirr.credential=${env:RACKSPACE_API_KEY} + +# The size of the instance to use. See http://www.rackspacecloud.com/cloud_hosting_products/servers/faq/ +# id 3: 1GB, 1 virtual core +# id 4: 2GB, 2 virtual cores +# id 5: 4GB, 2 virtual cores +# id 6: 8GB, 4 virtual cores +# id 7: 15.5GB, 4 virtual cores +whirr.hardware-id=6 +# Ubuntu 10.04 LTS Lucid +whirr.image-id=49 + +# By default use the user system SSH keys. Override them here. +# whirr.private-key-file=${sys:user.home}/.ssh/id_rsa +# whirr.public-key-file=${whirr.private-key-file}.pub + +# You can specify the version by setting the tarball url +# whirr.elasticsearch.tarball.url=http://github.com/downloads/elasticsearch/elasticsearch/elasticsearch-0.15.2.tar.gz + +# +# elasticsearch specific settings (Expert) +# + +# 1. Gateway Persistence settings +# See: http://www.elasticsearch.org/guide/reference/modules/gateway/ +# Defaults: the index is only stored in memory and all data is lost on shutdown + +# 1.1 Enable persistence on the local filesystem +# See: http://www.elasticsearch.org/guide/reference/modules/gateway/local.html + +# es.gateway.type=fs +# es.gateway.recovery_after_nodes=1 +# es.gateway.recovery_after_time=5m +# es.expected_nodes=2 + +# 1.2 Enable persistence on HDFS +# See: http://www.elasticsearch.org/guide/reference/modules/gateway/hadoop.html + +# es.gateway.type=hdfs +# es.gateway.hdfs.uri=hdfs://myhost:8022 +# es.gateway.hdfs.path=/some/path + +# 2. Scripting Support +# See: http://www.elasticsearch.org/guide/reference/modules/scripting.html +# The scripting module uses by default mvel + +# Just add them to the list of installed plugins +# es.plugins=lang-javascript, lang-groovy, lang-python, + +# 3. Memcached protocol support +# See: http://www.elasticsearch.org/guide/reference/modules/memcached.html + +# es.plugins=transport-memcached + +# 4. Thrift protocol support +# See: http://www.elasticsearch.org/guide/reference/modules/thrift.html + +# es.plugins=transport-thrift diff --git a/services/elasticsearch/pom.xml b/services/elasticsearch/pom.xml new file mode 100644 index 00000000..137df8e7 --- /dev/null +++ b/services/elasticsearch/pom.xml @@ -0,0 +1,95 @@ + + + 4.0.0 + + org.apache.whirr + whirr + 0.5.0-incubating-SNAPSHOT + ../../pom.xml + + org.apache.whirr + whirr-elasticsearch + jar + 0.5.0-incubating-SNAPSHOT + Apache Whirr ElasticSearch + + + ${project.groupId} + whirr-core + ${project.version} + + + ${project.groupId} + whirr-core + ${project.version} + test-jar + test + + + org.jclouds + jclouds-compute + + + org.jclouds + jclouds-core + + + org.jclouds.driver + jclouds-jsch + + + org.jclouds.driver + jclouds-log4j + + + junit + junit + + + org.mockito + mockito-all + + + org.hamcrest + hamcrest-all + + + commons-configuration + commons-configuration + + + org.slf4j + slf4j-api + + + org.slf4j + slf4j-log4j12 + test + + + com.jcraft + jsch + + + log4j + log4j + test + + + diff --git a/services/elasticsearch/src/main/java/org/apache/whirr/service/elasticsearch/ElasticSearchConfigurationBuilder.java b/services/elasticsearch/src/main/java/org/apache/whirr/service/elasticsearch/ElasticSearchConfigurationBuilder.java new file mode 100644 index 00000000..8c6cca31 --- /dev/null +++ b/services/elasticsearch/src/main/java/org/apache/whirr/service/elasticsearch/ElasticSearchConfigurationBuilder.java @@ -0,0 +1,170 @@ +/** + * 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 org.apache.whirr.service.elasticsearch; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import org.apache.commons.configuration.CompositeConfiguration; +import org.apache.commons.configuration.Configuration; +import org.apache.commons.configuration.ConfigurationException; +import org.apache.commons.configuration.PropertiesConfiguration; +import org.apache.commons.lang.StringUtils; +import org.apache.whirr.service.Cluster; +import org.apache.whirr.service.ClusterSpec; +import org.jclouds.scriptbuilder.domain.Statement; +import org.jclouds.scriptbuilder.domain.Statements; +import org.slf4j.LoggerFactory; + +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +import static org.apache.whirr.service.RolePredicates.role; + +public class ElasticSearchConfigurationBuilder { + + private static final org.slf4j.Logger LOG = + LoggerFactory.getLogger(ElasticSearchConfigurationBuilder.class); + + public static final String ES_PREFIX = "es"; + + /** + * Generate an appendFile statement for jclouds + */ + public static Statement build(String path, Configuration config) { + return asFileStatement(path, config); + } + + public static Statement build(String path, ClusterSpec spec, Cluster cluster) { + return build(path, buildConfig(spec, cluster)); + } + + /** + * Build a configuration by adding the expected defaults + */ + public static Configuration buildConfig(ClusterSpec spec, Cluster cluster) { + CompositeConfiguration config = new CompositeConfiguration(); + + config.addConfiguration(spec.getConfiguration()); + try { + config.addConfiguration( + new PropertiesConfiguration("whirr-elasticsearch-default.properties")); + } catch (ConfigurationException e) { + LOG.error("Configuration error", e); // this should never happen + } + + if ("aws-ec2".equals(spec.getProvider()) || "ec2".equals(spec.getProvider())) { + addDefaultsForEC2(spec, config); + } else { + addDefaultsForUnicast(cluster, config); + } + if (!config.containsKey("es.cluster.name")) { + config.addProperty("es.cluster.name", spec.getClusterName()); + } + + return config; + } + + /** + * Use the native EC2 discovery module on AWS + */ + private static void addDefaultsForEC2(ClusterSpec spec, CompositeConfiguration config) { + config.addProperty("es.discovery.type", "ec2"); + if (!config.containsKey("es.cloud.aws.access_key")) { + config.addProperty("es.cloud.aws.access_key", spec.getIdentity()); + } + if (!config.containsKey("es.cloud.aws.secret_key")) { + config.addProperty("es.cloud.aws.secret_key", spec.getCredential()); + } + if (!config.getList("es.plugins", Lists.newLinkedList()).contains("cloud-aws")) { + config.addProperty("es.plugins", "cloud-aws"); + } + } + + /** + * Use unicast if not on AWS (most of the cloud providers deny multicast traffic). + */ + private static void addDefaultsForUnicast(Cluster cluster, CompositeConfiguration config) { + List hosts = Lists.newLinkedList(); + for(Cluster.Instance instance : cluster.getInstancesMatching(role(ElasticSearchHandler.ROLE))) { + hosts.add(String.format("\"%s:9300\"", instance.getPrivateAddress().getHostAddress())); + } + config.addProperty("es.discovery.zen.ping.multicast.enabled", "false"); + config.addProperty("es.discovery.zen.ping.unicast.hosts", StringUtils.join(hosts, ",")); + } + + private static Statement asFileStatement(String path, Configuration configuration) { + return Statements.appendFile(path, asYamlLines(configuration.subset(ES_PREFIX))); + } + + /** + * Create the YAML configuration file lines from the configuration. + * + * This functions transforms cloud.aws.id=1 to + * + * cloud: + * aws: + * id: 1 + */ + @VisibleForTesting + public static List asYamlLines(Configuration config) { + return asYamlLines(config, 0); + } + + private static List asYamlLines(Configuration config, int depth) { + List lines = Lists.newArrayList(); + Set prefixes = Sets.newHashSet(); + + Iterator keys = config.getKeys(); + while(keys.hasNext()) { + String key = keys.next(); + + String[] parts = key.split("\\."); + String prefix = parts[0]; + + if (prefixes.contains(prefix)) { + continue; // skip parsed set of keys + } + + if (parts.length == 1) { + lines.add(spaces(depth * 2) + key + ": " + config.getProperty(key)); + + } else if (parts.length > 1) { + lines.add(spaces(depth * 2) + prefix + ":"); + lines.addAll(asYamlLines(config.subset(prefix), depth + 1)); + } + + prefixes.add(prefix); + } + + return lines; + } + + /** + * Generate a string with spaces having the requested length + */ + private static String spaces(int length) { + StringBuilder builder = new StringBuilder(); + for(int i=0; i&2 + exit 1 + fi +} + diff --git a/services/elasticsearch/src/main/resources/whirr-elasticsearch-default.properties b/services/elasticsearch/src/main/resources/whirr-elasticsearch-default.properties new file mode 100644 index 00000000..bbd79dfc --- /dev/null +++ b/services/elasticsearch/src/main/resources/whirr-elasticsearch-default.properties @@ -0,0 +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. +# +# ElasticSearch defaults. The es. prefix is removed by Whirr. + +es.index.store.type=memory +es.gateway.type=none diff --git a/services/elasticsearch/src/test/java/org/apache/whirr/service/elasticsearch/ElasticSearchConfigurationBuilderTest.java b/services/elasticsearch/src/test/java/org/apache/whirr/service/elasticsearch/ElasticSearchConfigurationBuilderTest.java new file mode 100644 index 00000000..af2dc78e --- /dev/null +++ b/services/elasticsearch/src/test/java/org/apache/whirr/service/elasticsearch/ElasticSearchConfigurationBuilderTest.java @@ -0,0 +1,121 @@ +/** + * 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 org.apache.whirr.service.elasticsearch; + +import com.google.common.base.Predicate; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import org.apache.commons.configuration.Configuration; +import org.apache.commons.configuration.PropertiesConfiguration; +import org.apache.commons.lang.StringUtils; +import org.apache.whirr.service.Cluster; +import org.apache.whirr.service.ClusterSpec; +import org.junit.Test; + +import java.net.InetAddress; +import java.util.Set; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class ElasticSearchConfigurationBuilderTest { + + @Test + public void testGenerateYamlConfig() { + Configuration defaults = new PropertiesConfiguration(); + + defaults.addProperty("cloud.aws.id", "a"); + defaults.addProperty("cloud.aws.key", "b"); + defaults.addProperty("index.store.type", "memory"); + + String content = StringUtils.join( + ElasticSearchConfigurationBuilder.asYamlLines(defaults), "\n"); + + assertThat(content, is("cloud:\n" + + " aws:\n" + + " id: a\n" + + " key: b\n" + + "index:\n" + + " store:\n" + + " type: memory")); + } + + @Test + public void testDefaultConfigAwsEC2() throws Exception { + Configuration baseConfig = new PropertiesConfiguration(); + baseConfig.addProperty("whirr.provider", "aws-ec2"); + baseConfig.addProperty("es.plugins", "lang-javascript, lang-python"); + + ClusterSpec spec = ClusterSpec.withTemporaryKeys(baseConfig); + Configuration config = ElasticSearchConfigurationBuilder.buildConfig(spec, null); + + assertThat(config.getStringArray("es.plugins"), + is(new String[]{"lang-javascript", "lang-python", "cloud-aws"})); + assertThat(config.getString("es.discovery.type"), is("ec2")); + } + + @Test + public void testDefaultUnicastConfig() throws Exception { + Configuration baseConfig = new PropertiesConfiguration(); + baseConfig.addProperty("whirr.provider", "cloudservers-us"); + + ClusterSpec spec = ClusterSpec.withTemporaryKeys(baseConfig); + Cluster cluster = mock(Cluster.class); + + Set instances = Sets.newLinkedHashSet(); + for(String host : Lists.newArrayList("10.0.0.1", "10.0.0.2")) { + Cluster.Instance instance = mock(Cluster.Instance.class); + when(instance.getPrivateAddress()).thenReturn(InetAddress.getByName(host)); + instances.add(instance); + } + when(cluster.getInstancesMatching((Predicate)any())) + .thenReturn(instances); + + Configuration config = ElasticSearchConfigurationBuilder.buildConfig(spec, cluster); + String content = StringUtils.join( + ElasticSearchConfigurationBuilder.asYamlLines( + config.subset(ElasticSearchConfigurationBuilder.ES_PREFIX)), "\n"); + + assertThat(content, is("index:\n" + + " store:\n" + + " type: memory\n" + + "gateway:\n" + + " type: none\n" + + "discovery:\n" + + " zen:\n" + + " ping:\n" + + " multicast:\n" + + " enabled: false\n" + + " unicast:\n" + + " hosts: [\"10.0.0.1:9300\", \"10.0.0.2:9300\"]")); + } + + @Test + public void testOverrideDefaults() throws Exception { + Configuration baseConfig = new PropertiesConfiguration(); + baseConfig.addProperty("whirr.provider", "aws-ec2"); + baseConfig.addProperty("es.index.store.type", "fs"); + + ClusterSpec spec = ClusterSpec.withTemporaryKeys(baseConfig); + Configuration config = ElasticSearchConfigurationBuilder.buildConfig(spec, null); + + assertThat(config.getString("es.index.store.type"), is("fs")); + } +} diff --git a/services/elasticsearch/src/test/java/org/apache/whirr/service/elasticsearch/integration/ElasticSearchTest.java b/services/elasticsearch/src/test/java/org/apache/whirr/service/elasticsearch/integration/ElasticSearchTest.java new file mode 100644 index 00000000..9506c189 --- /dev/null +++ b/services/elasticsearch/src/test/java/org/apache/whirr/service/elasticsearch/integration/ElasticSearchTest.java @@ -0,0 +1,121 @@ +/** + * 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 org.apache.whirr.service.elasticsearch.integration; + +import com.google.common.collect.Iterables; +import org.apache.commons.configuration.CompositeConfiguration; +import org.apache.commons.configuration.PropertiesConfiguration; +import org.apache.whirr.service.Cluster; +import org.apache.whirr.service.ClusterSpec; +import org.apache.whirr.service.Service; +import org.apache.whirr.service.elasticsearch.ElasticSearchHandler; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URL; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static org.apache.whirr.service.RolePredicates.role; + +public class ElasticSearchTest { + + private static final Logger LOG = + LoggerFactory.getLogger(ElasticSearchHandler.class); + + private ClusterSpec clusterSpec; + private Service service; + private Cluster cluster; + + @Before + public void setUp() throws Exception { + CompositeConfiguration config = new CompositeConfiguration(); + config.addConfiguration(new PropertiesConfiguration("whirr-elasticsearch-test.properties")); + if (System.getProperty("config") != null) { + config.addConfiguration(new PropertiesConfiguration(System.getProperty("config"))); + } + clusterSpec = ClusterSpec.withTemporaryKeys(config); + service = new Service(); + cluster = service.launchCluster(clusterSpec); + } + + @Test + public void testCheckNumberOfNodes() throws Exception { + for(int i = 0; i<20; i++) { + int nodes = getNumberOfNodes(); + LOG.info("{}/{} nodes joined the elasticsearch cluster", + nodes, cluster.getInstances().size()); + if (nodes == cluster.getInstances().size()) { + return; + } + try { + Thread.sleep(5000); + } catch (InterruptedException e) {} + } + throw new Exception("All nodes did not joined the cluster as expected"); + } + + private int getNumberOfNodes() throws Exception { + String healthInfo = getHealthInfo(); + Pattern nodesPattern = Pattern.compile("\".*number_of_nodes\":(\\d+).*"); + Matcher matcher = nodesPattern.matcher(healthInfo); + if (matcher.find()) { + return Integer.parseInt(matcher.group(1)); + } + return 0; + } + + private String getHealthInfo() throws Exception { + for(int i=0; i<20; i++) { + try { + Cluster.Instance instance = Iterables.get( + cluster.getInstancesMatching(role(ElasticSearchHandler.ROLE)), 0); + String address = instance.getPublicAddress().getHostAddress(); + + URL url = new URL(String.format("http://%s:9200/_cluster/health", address)); + BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); + + StringBuilder builder = new StringBuilder(); + String line; + while((line = in.readLine()) != null) { + builder.append(line); + } + in.close(); + return builder.toString(); + + } catch(IOException e) { + try { + Thread.sleep(5000); + } catch (InterruptedException e1) {} + } + } + throw new Exception("Unable to get cluster health info."); + } + + @After + public void tearDown() throws IOException, InterruptedException { + service.destroyCluster(clusterSpec); + } + +} diff --git a/services/elasticsearch/src/test/resources/whirr-elasticsearch-test.properties b/services/elasticsearch/src/test/resources/whirr-elasticsearch-test.properties new file mode 100644 index 00000000..8b017c2d --- /dev/null +++ b/services/elasticsearch/src/test/resources/whirr-elasticsearch-test.properties @@ -0,0 +1,23 @@ +# +# 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. +# +whirr.cluster-name=elasticsearchtest +whirr.instance-templates=2 elasticsearch +whirr.provider=${sys:whirr.test.provider} +whirr.identity=${sys:whirr.test.identity} +whirr.credential=${sys:whirr.test.credential} +whirr.hardware-min-ram=512 \ No newline at end of file diff --git a/src/site/confluence/index.confluence b/src/site/confluence/index.confluence index fc53d30c..fcb87706 100644 --- a/src/site/confluence/index.confluence +++ b/src/site/confluence/index.confluence @@ -14,9 +14,9 @@ h2. Which services and cloud providers are supported? Whirr uses [jclouds|http://code.google.com/p/jclouds/] for provisioning, so in principle it should support all the cloud providers that jclouds supports. The following table shows the cloud provider and service combinations that have been tested. -||Cloud provider||Cassandra||Hadoop||ZooKeeper||HBase|| -|Amazon EC2|Yes|Yes|Yes|Yes| -|Rackspace Cloud Servers|Yes|Yes|Yes|Yes| +||Cloud provider||Cassandra||Hadoop||ZooKeeper||HBase||elasticsearch|| +|Amazon EC2|Yes|Yes|Yes|Yes|Yes| +|Rackspace Cloud Servers|Yes|Yes|Yes|Yes|Yes| h2. Download From 8eef9dc139187adc024f5c50540f5fd06ea8c7b2 Mon Sep 17 00:00:00 2001 From: Andrei Savu Date: Thu, 31 Mar 2011 12:01:29 +0000 Subject: [PATCH 147/216] WHIRR-268. whirr hangs when the file '/home/andrei/.ssh/known_hosts' includes an obsolete identifier for a certain ip address host. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1087264 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 4 ++++ .../java/org/apache/whirr/service/hadoop/HadoopProxy.java | 2 ++ 2 files changed, 6 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index c3bf6eec..c557b1cb 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -11,6 +11,10 @@ Trunk (unreleased changes) WHIRR-253. ZooKeeper service should only authorize ingress to ZooKeeper instances (tomwhite via asavu) + WHIRR-268. whirr hangs when the file '$HOME/.ssh/known_hosts' includes + an obsolete identifier for a certain ip address host. + (Hyunsik Choi via asavu) + Release 0.4.0 - 2011-03-15 NEW FEATURES diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java index 32c44715..6c6ad151 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java @@ -64,6 +64,8 @@ public String[] getProxyCommand() throws IOException { "-o", "ConnectTimeout=10", "-o", "ServerAliveInterval=60", "-o", "StrictHostKeyChecking=no", + "-o", "UserKnownHostsFile=/dev/null", + "-o", "StrictHostKeyChecking=no", "-N", "-D 6666", String.format("%s@%s", user, server)}; From b218ec48469d9af90c30aca9f42450bc87cf3eb7 Mon Sep 17 00:00:00 2001 From: Andrei Savu Date: Thu, 31 Mar 2011 12:15:28 +0000 Subject: [PATCH 148/216] WHIRR-271. Classpath needs to be quoted in whirr script git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1087270 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 ++ bin/whirr | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index c557b1cb..53dd6dbb 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -15,6 +15,8 @@ Trunk (unreleased changes) an obsolete identifier for a certain ip address host. (Hyunsik Choi via asavu) + WHIRR-271. Classpath needs to be quoted in whirr script + Release 0.4.0 - 2011-03-15 NEW FEATURES diff --git a/bin/whirr b/bin/whirr index 81131083..2df3bced 100755 --- a/bin/whirr +++ b/bin/whirr @@ -18,10 +18,11 @@ bin=`dirname "$0"` bin=`cd "$bin"; pwd` -if [ -d $bin/../cli/target/lib ]; then +if [ -d "$bin/../cli/target/lib" ]; then classpath="$bin/..:$bin/../cli/target/lib/*:$bin/../cli/target/*" else classpath="$bin/..:$bin/../lib/*" fi -java -cp $classpath org.apache.whirr.cli.Main "$@" \ No newline at end of file +java -cp "$classpath" org.apache.whirr.cli.Main "$@" + From f75725359e5f49c71b637d319fed93a993a43a80 Mon Sep 17 00:00:00 2001 From: Andrei Savu Date: Mon, 4 Apr 2011 20:53:54 +0000 Subject: [PATCH 149/216] WHIRR-274. Add wagon-ssh-external as a maven build extension git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1088788 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 ++ pom.xml | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 53dd6dbb..9a9e0b0b 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -17,6 +17,8 @@ Trunk (unreleased changes) WHIRR-271. Classpath needs to be quoted in whirr script + WHIRR-274. Add wagon-ssh-external as a maven build extension + Release 0.4.0 - 2011-03-15 NEW FEATURES diff --git a/pom.xml b/pom.xml index a1bc0653..e9330c67 100644 --- a/pom.xml +++ b/pom.xml @@ -176,6 +176,13 @@ + + + org.apache.maven.wagon + wagon-ssh-external + 1.0-beta-6 + + From 86c47f22ddc6234e75bb9d31bcea09b1a5fd43fc Mon Sep 17 00:00:00 2001 From: Thomas White Date: Tue, 5 Apr 2011 16:11:04 +0000 Subject: [PATCH 150/216] WHIRR-222. Support multiple versions of Hadoop. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1089103 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 6 +- .../service/ClusterActionHandlerSupport.java | 18 +++++ .../resources/functions/install_tarball.sh | 5 +- ...ginCredentialsFromWhirrPropertiesTest.java | 1 - pom.xml | 1 + recipes/hadoop-ec2.properties | 4 ++ .../hadoop/HadoopClusterActionHandler.java | 66 +++++++++++++++++++ .../HadoopDataNodeClusterActionHandler.java | 22 +------ .../HadoopNameNodeClusterActionHandler.java | 14 +--- .../whirr/service/hadoop/HadoopProxy.java | 1 - .../resources/functions/configure_hadoop.sh | 3 +- .../resources/functions/install_hadoop.sh | 12 ++-- .../resources/whirr-hadoop-default.properties | 4 ++ .../hbase/HBaseClusterActionHandler.java | 30 +++------ 14 files changed, 121 insertions(+), 66 deletions(-) create mode 100644 services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopClusterActionHandler.java diff --git a/CHANGES.txt b/CHANGES.txt index 9a9e0b0b..de386469 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -6,6 +6,8 @@ Trunk (unreleased changes) WHIRR-261. Add ElasticSearch as a service (asavu) + WHIRR-222. Support multiple versions of Hadoop. (tomwhite) + BUG FIXES WHIRR-253. ZooKeeper service should only authorize ingress to ZooKeeper @@ -15,9 +17,9 @@ Trunk (unreleased changes) an obsolete identifier for a certain ip address host. (Hyunsik Choi via asavu) - WHIRR-271. Classpath needs to be quoted in whirr script + WHIRR-271. Classpath needs to be quoted in whirr script. (asavu) - WHIRR-274. Add wagon-ssh-external as a maven build extension + WHIRR-274. Add wagon-ssh-external as a maven build extension. (asavu) Release 0.4.0 - 2011-03-15 diff --git a/core/src/main/java/org/apache/whirr/service/ClusterActionHandlerSupport.java b/core/src/main/java/org/apache/whirr/service/ClusterActionHandlerSupport.java index 7352a713..7372d2b5 100644 --- a/core/src/main/java/org/apache/whirr/service/ClusterActionHandlerSupport.java +++ b/core/src/main/java/org/apache/whirr/service/ClusterActionHandlerSupport.java @@ -20,6 +20,8 @@ import java.io.IOException; +import org.apache.commons.configuration.CompositeConfiguration; +import org.apache.commons.configuration.Configuration; import org.apache.whirr.service.jclouds.RunUrlStatement; import org.jclouds.scriptbuilder.domain.Statement; @@ -82,6 +84,22 @@ protected void afterDestroy(ClusterActionEvent event) protected void afterOtherAction(ClusterActionEvent event) throws IOException, InterruptedException { } + /** + * Returns a composite configuration that is made up from the global + * configuration coming from the Whirr core with the service default + * properties. + * + * @param clusterSpec The cluster specification instance. + * @return The composite configuration. + */ + protected synchronized Configuration getConfiguration( + ClusterSpec clusterSpec, Configuration defaults) { + CompositeConfiguration cc = new CompositeConfiguration(); + cc.addConfiguration(clusterSpec.getConfiguration()); + cc.addConfiguration(defaults); + return cc; + } + /** * A convenience method for adding a {@link RunUrlStatement} to a * {@link ClusterActionEvent}. diff --git a/core/src/main/resources/functions/install_tarball.sh b/core/src/main/resources/functions/install_tarball.sh index adb737ae..81e8f435 100644 --- a/core/src/main/resources/functions/install_tarball.sh +++ b/core/src/main/resources/functions/install_tarball.sh @@ -30,7 +30,10 @@ function install_tarball() { $curl -O $tar_url || true $curl -O $tar_url.md5 || true - if md5sum -c $tar_file_md5; then + if [ ! -e $tar_file_md5 ]; then + echo "Could not download $tar_url.md5. Continuing." + break; + elif md5sum -c $tar_file_md5; then break; else # workaround for cassandra broken .md5 files diff --git a/core/src/test/java/org/apache/whirr/service/jclouds/TakeLoginCredentialsFromWhirrPropertiesTest.java b/core/src/test/java/org/apache/whirr/service/jclouds/TakeLoginCredentialsFromWhirrPropertiesTest.java index 2cf26eea..16ef1971 100644 --- a/core/src/test/java/org/apache/whirr/service/jclouds/TakeLoginCredentialsFromWhirrPropertiesTest.java +++ b/core/src/test/java/org/apache/whirr/service/jclouds/TakeLoginCredentialsFromWhirrPropertiesTest.java @@ -23,7 +23,6 @@ import java.io.IOException; -import org.apache.whirr.service.jclouds.TakeLoginCredentialsFromWhirrProperties; import org.jclouds.domain.Credentials; import org.junit.Test; diff --git a/pom.xml b/pom.xml index e9330c67..459f02ad 100644 --- a/pom.xml +++ b/pom.xml @@ -327,6 +327,7 @@ **/BUILD.txt **/CHANGES.txt **/DISCLAIMER.txt + **/NOTICE-src.txt **/.svn/** .git/** .gitignore diff --git a/recipes/hadoop-ec2.properties b/recipes/hadoop-ec2.properties index 1a82a534..e8910bb1 100644 --- a/recipes/hadoop-ec2.properties +++ b/recipes/hadoop-ec2.properties @@ -54,3 +54,7 @@ whirr.location-id=us-east-1 # example, setting # hadoop-common.fs.trash.interval=1440 # will result in fs.trash.interval being set to 1440 in core-site.xml. + +# Expert: specify the version of Hadoop to install. +#whirr.hadoop.version=0.20.2 +#whirr.hadoop.tarball.url=http://archive.apache.org/dist/hadoop/core/hadoop-${whirr.hadoop.version}/hadoop-${whirr.hadoop.version}.tar.gz \ No newline at end of file diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopClusterActionHandler.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopClusterActionHandler.java new file mode 100644 index 00000000..14c90cc1 --- /dev/null +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopClusterActionHandler.java @@ -0,0 +1,66 @@ +/** + * 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 org.apache.whirr.service.hadoop; + +import static org.jclouds.scriptbuilder.domain.Statements.call; + +import java.io.IOException; + +import org.apache.commons.configuration.Configuration; +import org.apache.commons.configuration.ConfigurationException; +import org.apache.commons.configuration.PropertiesConfiguration; +import org.apache.whirr.service.ClusterActionEvent; +import org.apache.whirr.service.ClusterActionHandlerSupport; +import org.apache.whirr.service.ClusterSpec; + +public abstract class HadoopClusterActionHandler extends ClusterActionHandlerSupport { + + /** + * Returns a composite configuration that is made up from the global + * configuration coming from the Whirr core with a hadoop defaults + * properties. + * + * @param clusterSpec The cluster specification instance. + * @return The composite configuration. + */ + protected synchronized Configuration getConfiguration( + ClusterSpec clusterSpec) throws IOException { + try { + Configuration defaults = new PropertiesConfiguration( + "whirr-hadoop-default.properties"); + return super.getConfiguration(clusterSpec, defaults); + } catch (ConfigurationException e) { + throw new IOException("Error loading Hadoop default properties.", e); + } + } + + @Override + protected void beforeBootstrap(ClusterActionEvent event) throws IOException { + ClusterSpec clusterSpec = event.getClusterSpec(); + Configuration conf = getConfiguration(clusterSpec); + addStatement(event, call("configure_hostnames", "-c", clusterSpec.getProvider())); + String hadoopInstallFunction = conf.getString( + "whirr.hadoop-install-function", "install_hadoop"); + addStatement(event, call("install_java")); + addStatement(event, call("install_tarball")); + String tarball = conf.getString("whirr.hadoop.tarball.url"); + addStatement(event, call(hadoopInstallFunction, "-c", clusterSpec.getProvider(), + "-u", tarball)); + } +} diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopDataNodeClusterActionHandler.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopDataNodeClusterActionHandler.java index 3601d3c7..0d6b9f25 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopDataNodeClusterActionHandler.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopDataNodeClusterActionHandler.java @@ -18,23 +18,19 @@ package org.apache.whirr.service.hadoop; -import static org.apache.whirr.service.RolePredicates.role; import static org.apache.whirr.service.hadoop.HadoopConfigurationBuilder.buildCommon; import static org.apache.whirr.service.hadoop.HadoopConfigurationBuilder.buildHdfs; import static org.apache.whirr.service.hadoop.HadoopConfigurationBuilder.buildMapReduce; import static org.jclouds.scriptbuilder.domain.Statements.call; import java.io.IOException; -import java.net.InetAddress; import org.apache.commons.configuration.ConfigurationException; import org.apache.whirr.service.Cluster; -import org.apache.whirr.service.Cluster.Instance; import org.apache.whirr.service.ClusterActionEvent; -import org.apache.whirr.service.ClusterActionHandlerSupport; import org.apache.whirr.service.ClusterSpec; -public class HadoopDataNodeClusterActionHandler extends ClusterActionHandlerSupport { +public class HadoopDataNodeClusterActionHandler extends HadoopClusterActionHandler { public static final String ROLE = "hadoop-datanode"; @@ -42,17 +38,6 @@ public class HadoopDataNodeClusterActionHandler extends ClusterActionHandlerSupp public String getRole() { return ROLE; } - - @Override - protected void beforeBootstrap(ClusterActionEvent event) throws IOException { - ClusterSpec clusterSpec = event.getClusterSpec(); - addStatement(event, call("configure_hostnames", "-c", clusterSpec.getProvider())); - String hadoopInstallFunction = clusterSpec.getConfiguration().getString( - "whirr.hadoop-install-function", "install_hadoop"); - addStatement(event, call("install_java")); - addStatement(event, call("install_tarball")); - addStatement(event, call(hadoopInstallFunction, "-c", clusterSpec.getProvider())); - } @Override protected void beforeConfigure(ClusterActionEvent event) @@ -60,11 +45,6 @@ protected void beforeConfigure(ClusterActionEvent event) ClusterSpec clusterSpec = event.getClusterSpec(); Cluster cluster = event.getCluster(); - Instance instance = cluster.getInstanceMatching( - role(HadoopNameNodeClusterActionHandler.ROLE)); - InetAddress namenodePublicAddress = instance.getPublicAddress(); - InetAddress jobtrackerPublicAddress = namenodePublicAddress; - try { event.getStatementBuilder().addStatements( buildCommon("/tmp/core-site.xml", clusterSpec, cluster), diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopNameNodeClusterActionHandler.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopNameNodeClusterActionHandler.java index 543a92c7..78605804 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopNameNodeClusterActionHandler.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopNameNodeClusterActionHandler.java @@ -39,7 +39,6 @@ import org.apache.whirr.service.Cluster; import org.apache.whirr.service.Cluster.Instance; import org.apache.whirr.service.ClusterActionEvent; -import org.apache.whirr.service.ClusterActionHandlerSupport; import org.apache.whirr.service.ClusterSpec; import org.apache.whirr.service.ComputeServiceContextBuilder; import org.apache.whirr.service.jclouds.FirewallSettings; @@ -47,7 +46,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class HadoopNameNodeClusterActionHandler extends ClusterActionHandlerSupport { +public class HadoopNameNodeClusterActionHandler extends HadoopClusterActionHandler { private static final Logger LOG = LoggerFactory.getLogger(HadoopNameNodeClusterActionHandler.class); @@ -64,17 +63,6 @@ public String getRole() { return ROLE; } - @Override - protected void beforeBootstrap(ClusterActionEvent event) throws IOException { - ClusterSpec clusterSpec = event.getClusterSpec(); - addStatement(event, call("configure_hostnames", "-c", clusterSpec.getProvider())); - String hadoopInstallFunction = clusterSpec.getConfiguration().getString( - "whirr.hadoop-install-function", "install_hadoop"); - addStatement(event, call("install_java")); - addStatement(event, call("install_tarball")); - addStatement(event, call(hadoopInstallFunction, "-c", clusterSpec.getProvider())); - } - @Override protected void beforeConfigure(ClusterActionEvent event) throws IOException, InterruptedException { ClusterSpec clusterSpec = event.getClusterSpec(); diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java index 6c6ad151..5c70bc5b 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java @@ -21,7 +21,6 @@ import static com.google.common.base.Preconditions.checkState; import com.google.common.base.Charsets; -import com.google.common.collect.Iterables; import com.google.common.io.Files; import java.io.BufferedReader; diff --git a/services/hadoop/src/main/resources/functions/configure_hadoop.sh b/services/hadoop/src/main/resources/functions/configure_hadoop.sh index ec16f387..44f16bc9 100644 --- a/services/hadoop/src/main/resources/functions/configure_hadoop.sh +++ b/services/hadoop/src/main/resources/functions/configure_hadoop.sh @@ -39,8 +39,7 @@ function configure_hadoop() { ;; esac - HADOOP_VERSION=${HADOOP_VERSION:-0.20.2} - HADOOP_HOME=/usr/local/hadoop-$HADOOP_VERSION + HADOOP_HOME=/usr/local/hadoop HADOOP_CONF_DIR=$HADOOP_HOME/conf mkdir -p /data/hadoop diff --git a/services/hadoop/src/main/resources/functions/install_hadoop.sh b/services/hadoop/src/main/resources/functions/install_hadoop.sh index 6484ac94..76eaba72 100644 --- a/services/hadoop/src/main/resources/functions/install_hadoop.sh +++ b/services/hadoop/src/main/resources/functions/install_hadoop.sh @@ -27,16 +27,19 @@ function install_hadoop() { local OPTARG CLOUD_PROVIDER= - while getopts "c:" OPTION; do + HADOOP_TAR_URL= + while getopts "c:u:" OPTION; do case $OPTION in c) CLOUD_PROVIDER="$OPTARG" ;; + u) + HADOOP_TAR_URL="$OPTARG" + ;; esac done - HADOOP_VERSION=${HADOOP_VERSION:-0.20.2} - HADOOP_HOME=/usr/local/hadoop-$HADOOP_VERSION + HADOOP_HOME=/usr/local/$(basename $HADOOP_TAR_URL .tar.gz) update_repo @@ -44,7 +47,8 @@ function install_hadoop() { useradd hadoop fi - install_tarball http://archive.apache.org/dist/hadoop/core/hadoop-$HADOOP_VERSION/hadoop-$HADOOP_VERSION.tar.gz + install_tarball $HADOOP_TAR_URL + ln -s $HADOOP_HOME /usr/local/hadoop echo "export HADOOP_HOME=$HADOOP_HOME" >> ~root/.bashrc echo 'export PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH' >> ~root/.bashrc diff --git a/services/hadoop/src/main/resources/whirr-hadoop-default.properties b/services/hadoop/src/main/resources/whirr-hadoop-default.properties index b28c4695..ac66098d 100644 --- a/services/hadoop/src/main/resources/whirr-hadoop-default.properties +++ b/services/hadoop/src/main/resources/whirr-hadoop-default.properties @@ -15,6 +15,10 @@ # See the License for the specific language governing permissions and # limitations under the License. # + +whirr.hadoop.version=0.20.2 +whirr.hadoop.tarball.url=http://archive.apache.org/dist/hadoop/core/hadoop-${whirr.hadoop.version}/hadoop-${whirr.hadoop.version}.tar.gz + # Hadoop defaults. The first part of the key is removed by whirr. # Common diff --git a/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseClusterActionHandler.java b/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseClusterActionHandler.java index 703edf6b..7a1be897 100644 --- a/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseClusterActionHandler.java +++ b/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseClusterActionHandler.java @@ -18,14 +18,13 @@ package org.apache.whirr.service.hbase; -import org.apache.commons.configuration.CompositeConfiguration; +import java.io.IOException; + import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.whirr.service.ClusterActionHandlerSupport; import org.apache.whirr.service.ClusterSpec; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; /** * Base class for HBase service handlers. @@ -33,11 +32,6 @@ public abstract class HBaseClusterActionHandler extends ClusterActionHandlerSupport { - private static final Logger LOG = - LoggerFactory.getLogger(HBaseClusterActionHandler.class); - - private Configuration config = null; - /** * Returns a composite configuration that is made up from the global * configuration coming from the Whirr core with a hbase defaults @@ -47,19 +41,13 @@ public abstract class HBaseClusterActionHandler * @return The composite configuration. */ protected synchronized Configuration getConfiguration( - ClusterSpec clusterSpec) { - if (config == null) { - CompositeConfiguration cc = new CompositeConfiguration( - clusterSpec.getConfiguration()); - try { - Configuration defaults = new PropertiesConfiguration( - HBaseConstants.FILE_HBASE_DEFAULT_PROPERTIES); - cc.addConfiguration(defaults); - } catch (ConfigurationException e) { - LOG.warn("Error loading HBase default properties.", e); - } - config = cc; + ClusterSpec clusterSpec) throws IOException { + try { + Configuration defaults = new PropertiesConfiguration( + HBaseConstants.FILE_HBASE_DEFAULT_PROPERTIES); + return super.getConfiguration(clusterSpec, defaults); + } catch (ConfigurationException e) { + throw new IOException("Error loading HBase default properties.", e); } - return config; } } From b26185508080012875cfb17dbc7d9f44e221ba5a Mon Sep 17 00:00:00 2001 From: Thomas White Date: Tue, 5 Apr 2011 16:35:00 +0000 Subject: [PATCH 151/216] Update svn:ignore properties for elastic search with hidden Eclipse files. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1089123 13f79535-47bb-0310-9956-ffa450edef68 From de588cfb0b6d793b380edce02af018a5511b5cea Mon Sep 17 00:00:00 2001 From: Thomas White Date: Wed, 6 Apr 2011 16:33:53 +0000 Subject: [PATCH 152/216] WHIRR-262. Services should not have to do reverse DNS lookups. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1089527 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 4 ++ .../actions/BootstrapClusterAction.java | 12 +--- .../org/apache/whirr/service/Cluster.java | 62 +++++++++++++++---- .../org/apache/whirr/service/Service.java | 10 ++- .../CassandraClusterActionHandler.java | 2 +- .../CassandraClusterActionHandlerTest.java | 3 +- .../integration/CassandraServiceTest.java | 2 +- .../ElasticSearchConfigurationBuilder.java | 2 +- ...ElasticSearchConfigurationBuilderTest.java | 3 +- .../whirr/service/hadoop/HadoopCluster.java | 3 +- .../hadoop/HadoopConfigurationBuilder.java | 5 +- .../HadoopNameNodeClusterActionHandler.java | 14 ++--- .../whirr/service/hadoop/HadoopProxy.java | 3 +- .../HadoopConfigurationBuilderTest.java | 6 +- .../BasicServerClusterActionHandler.java | 3 +- .../whirr/service/hbase/HBaseCluster.java | 3 +- .../HBaseMasterClusterActionHandler.java | 9 +-- ...HBaseRegionServerClusterActionHandler.java | 3 +- .../ZooKeeperClusterActionHandler.java | 10 ++- 19 files changed, 90 insertions(+), 69 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index de386469..8a4d4bea 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -8,6 +8,10 @@ Trunk (unreleased changes) WHIRR-222. Support multiple versions of Hadoop. (tomwhite) + IMPROVEMENTS + + WHIRR-262. Services should not have to do reverse DNS lookups. (tomwhite) + BUG FIXES WHIRR-253. ZooKeeper service should only authorize ingress to ZooKeeper diff --git a/core/src/main/java/org/apache/whirr/cluster/actions/BootstrapClusterAction.java b/core/src/main/java/org/apache/whirr/cluster/actions/BootstrapClusterAction.java index 4e731e69..b049151f 100644 --- a/core/src/main/java/org/apache/whirr/cluster/actions/BootstrapClusterAction.java +++ b/core/src/main/java/org/apache/whirr/cluster/actions/BootstrapClusterAction.java @@ -34,9 +34,7 @@ import com.google.common.collect.Sets; import java.io.IOException; -import java.net.InetAddress; import java.net.MalformedURLException; -import java.net.UnknownHostException; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; @@ -206,18 +204,14 @@ private Set getInstances(final Set roles, new Function() { @Override public Instance apply(NodeMetadata node) { - try { return new Instance(node.getCredentials(), roles, - InetAddress.getByName(Iterables.get(node.getPublicAddresses(), 0)), - InetAddress.getByName(Iterables.get(node.getPrivateAddresses(), 0)), + Iterables.get(node.getPublicAddresses(), 0), + Iterables.get(node.getPrivateAddresses(), 0), node.getId()); - } catch (UnknownHostException e) { - throw new RuntimeException(e); - } } })); } - + class StartupProcess implements Callable> { final private String clusterName; diff --git a/core/src/main/java/org/apache/whirr/service/Cluster.java b/core/src/main/java/org/apache/whirr/service/Cluster.java index 65eea4f1..05218d6d 100644 --- a/core/src/main/java/org/apache/whirr/service/Cluster.java +++ b/core/src/main/java/org/apache/whirr/service/Cluster.java @@ -17,18 +17,21 @@ */ package org.apache.whirr.service; -import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.base.Preconditions.*; +import java.io.IOException; import java.net.InetAddress; import java.util.Properties; import java.util.Set; +import org.apache.whirr.net.DnsUtil; import org.jclouds.domain.Credentials; import com.google.common.base.Objects; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; import com.google.common.collect.Sets; +import com.google.common.net.InetAddresses; /** * This class represents a real cluster of {@link Instance}s. @@ -44,16 +47,22 @@ public class Cluster { public static class Instance { private final Credentials loginCredentials; private final Set roles; - private final InetAddress publicAddress; - private final InetAddress privateAddress; + private final String publicIp; + private String publicHostName; + private final String privateIp; + private String privateHostName; private final String id; - public Instance(Credentials loginCredentials, Set roles, InetAddress publicAddress, - InetAddress privateAddress, String id) { + public Instance(Credentials loginCredentials, Set roles, String publicIp, + String privateIp, String id) { this.loginCredentials = checkNotNull(loginCredentials, "loginCredentials"); this.roles = checkNotNull(roles, "roles"); - this.publicAddress = checkNotNull(publicAddress, "publicAddress"); - this.privateAddress = checkNotNull(privateAddress, "privateAddress"); + this.publicIp = checkNotNull(publicIp, "publicIp"); + checkArgument(InetAddresses.isInetAddress(publicIp), + "invalid IP address: %s", publicIp); + this.privateIp = checkNotNull(privateIp, "privateIp"); + checkArgument(InetAddresses.isInetAddress(privateIp), + "invalid IP address: %s", privateIp); this.id = checkNotNull(id, "id"); } @@ -65,12 +74,39 @@ public Set getRoles() { return roles; } - public InetAddress getPublicAddress() { - return publicAddress; + public InetAddress getPublicAddress() throws IOException { + return resolveIpAddress(getPublicIp(), getPublicHostName()); } - public InetAddress getPrivateAddress() { - return privateAddress; + public InetAddress getPrivateAddress() throws IOException { + return resolveIpAddress(getPrivateIp(), getPrivateHostName()); + } + + private InetAddress resolveIpAddress(String ip, String host) throws IOException { + byte[] addr = InetAddresses.forString(ip).getAddress(); + return InetAddress.getByAddress(host, addr); + } + + public String getPublicIp() { + return publicIp; + } + + public synchronized String getPublicHostName() throws IOException { + if (publicHostName == null) { + publicHostName = DnsUtil.resolveAddress(publicIp); + } + return publicHostName; + } + + public String getPrivateIp() { + return privateIp; + } + + public synchronized String getPrivateHostName() throws IOException { + if (privateHostName == null) { + privateHostName = DnsUtil.resolveAddress(privateIp); + } + return privateHostName; } public String getId() { @@ -80,8 +116,8 @@ public String getId() { public String toString() { return Objects.toStringHelper(this) .add("roles", roles) - .add("publicAddress", publicAddress) - .add("privateAddress", privateAddress) + .add("publicIp", publicIp) + .add("privateIp", privateIp) .add("id", id) .toString(); } diff --git a/core/src/main/java/org/apache/whirr/service/Service.java b/core/src/main/java/org/apache/whirr/service/Service.java index 3a56db40..25f3b426 100644 --- a/core/src/main/java/org/apache/whirr/service/Service.java +++ b/core/src/main/java/org/apache/whirr/service/Service.java @@ -31,7 +31,6 @@ import org.apache.whirr.cluster.actions.BootstrapClusterAction; import org.apache.whirr.cluster.actions.ConfigureClusterAction; import org.apache.whirr.cluster.actions.DestroyClusterAction; -import org.apache.whirr.net.DnsUtil; import org.apache.whirr.service.Cluster.Instance; import org.jclouds.compute.ComputeService; import org.jclouds.compute.ComputeServiceContextFactory; @@ -92,13 +91,12 @@ private void createInstancesFile(ClusterSpec clusterSpec, Cluster cluster) for (Instance instance : cluster.getInstances()) { String id = instance.getId(); String roles = Joiner.on(',').join(instance.getRoles()); - String publicAddress = DnsUtil.resolveAddress(instance.getPublicAddress() - .getHostAddress()); - String privateAddress = instance.getPrivateAddress().getHostAddress(); + String publicIp = instance.getPublicIp(); + String privateIp = instance.getPrivateIp(); sb.append(id).append("\t"); sb.append(roles).append("\t"); - sb.append(publicAddress).append("\t"); - sb.append(privateAddress).append("\n"); + sb.append(publicIp).append("\t"); + sb.append(privateIp).append("\n"); } try { Files.write(sb.toString(), instancesFile, Charsets.UTF_8); diff --git a/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraClusterActionHandler.java b/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraClusterActionHandler.java index 3a6b0101..e6915d1b 100644 --- a/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraClusterActionHandler.java +++ b/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraClusterActionHandler.java @@ -95,7 +95,7 @@ private List getPrivateIps(List instances) { new Function() { @Override public String apply(Instance instance) { - return instance.getPrivateAddress().getHostAddress(); + return instance.getPrivateIp(); } }); } diff --git a/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/CassandraClusterActionHandlerTest.java b/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/CassandraClusterActionHandlerTest.java index 0750c715..85506833 100644 --- a/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/CassandraClusterActionHandlerTest.java +++ b/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/CassandraClusterActionHandlerTest.java @@ -22,7 +22,6 @@ import com.google.common.collect.Sets; -import java.net.InetAddress; import java.net.UnknownHostException; import java.util.List; import java.util.Set; @@ -35,7 +34,7 @@ public class CassandraClusterActionHandlerTest { private Instance getInstance(String id) throws UnknownHostException { return new Instance(new Credentials("", ""), Sets.newHashSet(""), - InetAddress.getLocalHost(), InetAddress.getLocalHost(), id); + "127.0.0.1", "127.0.0.1", id); } @Test() diff --git a/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java b/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java index 7273d459..da0dfad1 100644 --- a/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java +++ b/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java @@ -71,7 +71,7 @@ public void setUp() throws Exception { private Cassandra.Client client(Instance instance) throws TException { TTransport trans = new TFramedTransport(new TSocket( - instance.getPublicAddress().getHostAddress(), + instance.getPublicIp(), CassandraClusterActionHandler.CLIENT_PORT)); trans.open(); TBinaryProtocol protocol = new TBinaryProtocol(trans); diff --git a/services/elasticsearch/src/main/java/org/apache/whirr/service/elasticsearch/ElasticSearchConfigurationBuilder.java b/services/elasticsearch/src/main/java/org/apache/whirr/service/elasticsearch/ElasticSearchConfigurationBuilder.java index 8c6cca31..8382f99d 100644 --- a/services/elasticsearch/src/main/java/org/apache/whirr/service/elasticsearch/ElasticSearchConfigurationBuilder.java +++ b/services/elasticsearch/src/main/java/org/apache/whirr/service/elasticsearch/ElasticSearchConfigurationBuilder.java @@ -104,7 +104,7 @@ private static void addDefaultsForEC2(ClusterSpec spec, CompositeConfiguration c private static void addDefaultsForUnicast(Cluster cluster, CompositeConfiguration config) { List hosts = Lists.newLinkedList(); for(Cluster.Instance instance : cluster.getInstancesMatching(role(ElasticSearchHandler.ROLE))) { - hosts.add(String.format("\"%s:9300\"", instance.getPrivateAddress().getHostAddress())); + hosts.add(String.format("\"%s:9300\"", instance.getPrivateIp())); } config.addProperty("es.discovery.zen.ping.multicast.enabled", "false"); config.addProperty("es.discovery.zen.ping.unicast.hosts", StringUtils.join(hosts, ",")); diff --git a/services/elasticsearch/src/test/java/org/apache/whirr/service/elasticsearch/ElasticSearchConfigurationBuilderTest.java b/services/elasticsearch/src/test/java/org/apache/whirr/service/elasticsearch/ElasticSearchConfigurationBuilderTest.java index af2dc78e..cdf2146d 100644 --- a/services/elasticsearch/src/test/java/org/apache/whirr/service/elasticsearch/ElasticSearchConfigurationBuilderTest.java +++ b/services/elasticsearch/src/test/java/org/apache/whirr/service/elasticsearch/ElasticSearchConfigurationBuilderTest.java @@ -27,7 +27,6 @@ import org.apache.whirr.service.ClusterSpec; import org.junit.Test; -import java.net.InetAddress; import java.util.Set; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; @@ -82,7 +81,7 @@ public void testDefaultUnicastConfig() throws Exception { Set instances = Sets.newLinkedHashSet(); for(String host : Lists.newArrayList("10.0.0.1", "10.0.0.2")) { Cluster.Instance instance = mock(Cluster.Instance.class); - when(instance.getPrivateAddress()).thenReturn(InetAddress.getByName(host)); + when(instance.getPrivateIp()).thenReturn(host); instances.add(instance); } when(cluster.getInstancesMatching((Predicate)any())) diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopCluster.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopCluster.java index 071cdd49..8af889a0 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopCluster.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopCluster.java @@ -18,13 +18,14 @@ package org.apache.whirr.service.hadoop; +import java.io.IOException; import java.net.InetAddress; import org.apache.whirr.service.Cluster; import org.apache.whirr.service.RolePredicates; public class HadoopCluster { - public static InetAddress getNamenodePublicAddress(Cluster cluster) { + public static InetAddress getNamenodePublicAddress(Cluster cluster) throws IOException { return cluster.getInstanceMatching( RolePredicates.role(HadoopNameNodeClusterActionHandler.ROLE)) .getPublicAddress(); diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopConfigurationBuilder.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopConfigurationBuilder.java index b226134f..175ab4d7 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopConfigurationBuilder.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopConfigurationBuilder.java @@ -28,7 +28,6 @@ import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; -import org.apache.whirr.net.DnsUtil; import org.apache.whirr.service.Cluster; import org.apache.whirr.service.Cluster.Instance; import org.apache.whirr.service.ClusterSpec; @@ -79,7 +78,7 @@ static Configuration buildCommonConfiguration(ClusterSpec clusterSpec, Instance namenode = cluster .getInstanceMatching(role(HadoopNameNodeClusterActionHandler.ROLE)); config.setProperty("fs.default.name", String.format("hdfs://%s:8020/", - DnsUtil.resolveAddress(namenode.getPublicAddress().getHostAddress()))); + namenode.getPublicAddress().getHostName())); return config; } @@ -98,7 +97,7 @@ static Configuration buildMapReduceConfiguration(ClusterSpec clusterSpec, Instance jobtracker = cluster .getInstanceMatching(role(HadoopJobTrackerClusterActionHandler.ROLE)); config.setProperty("mapred.job.tracker", String.format("%s:8021", - DnsUtil.resolveAddress(jobtracker.getPublicAddress().getHostAddress()))); + jobtracker.getPublicAddress().getHostName())); return config; } diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopNameNodeClusterActionHandler.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopNameNodeClusterActionHandler.java index 78605804..07341077 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopNameNodeClusterActionHandler.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopNameNodeClusterActionHandler.java @@ -35,7 +35,6 @@ import java.util.Properties; import org.apache.commons.configuration.ConfigurationException; -import org.apache.whirr.net.DnsUtil; import org.apache.whirr.service.Cluster; import org.apache.whirr.service.Cluster.Instance; import org.apache.whirr.service.ClusterActionEvent; @@ -121,11 +120,9 @@ protected void afterConfigure(ClusterActionEvent event) throws IOException { InetAddress jobtrackerPublicAddress = namenodePublicAddress; LOG.info("Namenode web UI available at http://{}:{}", - DnsUtil.resolveAddress(namenodePublicAddress.getHostAddress()), - NAMENODE_WEB_UI_PORT); + namenodePublicAddress.getHostName(), NAMENODE_WEB_UI_PORT); LOG.info("Jobtracker web UI available at http://{}:{}", - DnsUtil.resolveAddress(jobtrackerPublicAddress.getHostAddress()), - JOBTRACKER_WEB_UI_PORT); + jobtrackerPublicAddress.getHostName(), JOBTRACKER_WEB_UI_PORT); Properties config = createClientSideProperties(clusterSpec, namenodePublicAddress, jobtrackerPublicAddress); createClientSideHadoopSiteFile(clusterSpec, config); createProxyScript(clusterSpec, cluster); @@ -136,8 +133,8 @@ private Properties createClientSideProperties(ClusterSpec clusterSpec, InetAddress namenode, InetAddress jobtracker) throws IOException { Properties config = new Properties(); config.setProperty("hadoop.job.ugi", "root,root"); - config.setProperty("fs.default.name", String.format("hdfs://%s:8020/", DnsUtil.resolveAddress(namenode.getHostAddress()))); - config.setProperty("mapred.job.tracker", String.format("%s:8021", DnsUtil.resolveAddress(jobtracker.getHostAddress()))); + config.setProperty("fs.default.name", String.format("hdfs://%s:8020/", namenode.getHostName())); + config.setProperty("mapred.job.tracker", String.format("%s:8021", jobtracker.getHostName())); config.setProperty("hadoop.socks.server", "localhost:6666"); config.setProperty("hadoop.rpc.socket.factory.class.default", "org.apache.hadoop.net.SocksSocketFactory"); if (clusterSpec.getProvider().endsWith("ec2")) { @@ -191,8 +188,7 @@ private void createProxyScript(ClusterSpec clusterSpec, Cluster cluster) { HadoopProxy proxy = new HadoopProxy(clusterSpec, cluster); InetAddress namenode = HadoopCluster.getNamenodePublicAddress(cluster); String script = String.format("echo 'Running proxy to Hadoop cluster at %s. " + - "Use Ctrl-c to quit.'\n", - DnsUtil.resolveAddress(namenode.getHostAddress())) + "Use Ctrl-c to quit.'\n", namenode.getHostName()) + Joiner.on(" ").join(proxy.getProxyCommand()); Files.write(script, hadoopProxyFile, Charsets.UTF_8); LOG.info("Wrote Hadoop proxy script {}", hadoopProxyFile); diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java index 5c70bc5b..bd95d2c5 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java @@ -29,7 +29,6 @@ import java.io.InputStreamReader; import java.net.InetAddress; -import org.apache.whirr.net.DnsUtil; import org.apache.whirr.service.Cluster; import org.apache.whirr.service.ClusterSpec; import org.apache.whirr.ssh.KeyPair; @@ -57,7 +56,7 @@ public String[] getProxyCommand() throws IOException { KeyPair.setPermissionsTo600(identity); String user = clusterSpec.getClusterUser(); InetAddress namenode = HadoopCluster.getNamenodePublicAddress(cluster); - String server = DnsUtil.resolveAddress(namenode.getHostAddress()); + String server = namenode.getHostName(); return new String[] { "ssh", "-i", identity.getAbsolutePath(), "-o", "ConnectTimeout=10", diff --git a/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/HadoopConfigurationBuilderTest.java b/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/HadoopConfigurationBuilderTest.java index af838354..83c06c74 100644 --- a/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/HadoopConfigurationBuilderTest.java +++ b/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/HadoopConfigurationBuilderTest.java @@ -24,8 +24,6 @@ import com.google.common.collect.Iterators; import com.google.common.collect.Sets; -import java.net.InetAddress; - import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.whirr.service.Cluster; @@ -73,12 +71,10 @@ public void setUp() throws Exception { defaults.addProperty("hadoop-mapreduce.p1", "mapred1"); clusterSpec = ClusterSpec.withTemporaryKeys(); - InetAddress publicAddress = InetAddress.getLocalHost(); - InetAddress privateAddress = publicAddress; Instance master = new Instance(new Credentials("", ""), Sets.newHashSet(HadoopNameNodeClusterActionHandler.ROLE, HadoopJobTrackerClusterActionHandler.ROLE), - publicAddress, privateAddress, "id"); + "10.0.0.1", "10.0.0.1", "id"); cluster = new Cluster(Sets.newHashSet(master)); } diff --git a/services/hbase/src/main/java/org/apache/whirr/service/hbase/BasicServerClusterActionHandler.java b/services/hbase/src/main/java/org/apache/whirr/service/hbase/BasicServerClusterActionHandler.java index ecbc8258..e6f227ef 100644 --- a/services/hbase/src/main/java/org/apache/whirr/service/hbase/BasicServerClusterActionHandler.java +++ b/services/hbase/src/main/java/org/apache/whirr/service/hbase/BasicServerClusterActionHandler.java @@ -24,7 +24,6 @@ import java.io.IOException; import java.net.InetAddress; -import org.apache.whirr.net.DnsUtil; import org.apache.whirr.service.Cluster; import org.apache.whirr.service.ClusterActionEvent; import org.apache.whirr.service.ClusterSpec; @@ -91,7 +90,7 @@ protected void beforeConfigure(ClusterActionEvent event) String hbaseConfigureFunction = getConfiguration(clusterSpec).getString( HBaseConstants.KEY_CONFIGURE_FUNCTION, HBaseConstants.FUNCTION_POST_CONFIGURE); - String master = DnsUtil.resolveAddress(masterPublicAddress.getHostAddress()); + String master = masterPublicAddress.getHostName(); String quorum = ZooKeeperCluster.getHosts(cluster); String tarurl = getConfiguration(clusterSpec).getString( HBaseConstants.KEY_TARBALL_URL); diff --git a/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseCluster.java b/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseCluster.java index ac00194d..d830aa64 100644 --- a/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseCluster.java +++ b/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseCluster.java @@ -21,10 +21,11 @@ import org.apache.whirr.service.Cluster; import org.apache.whirr.service.RolePredicates; +import java.io.IOException; import java.net.InetAddress; public class HBaseCluster { - public static InetAddress getMasterPublicAddress(Cluster cluster) { + public static InetAddress getMasterPublicAddress(Cluster cluster) throws IOException { return cluster.getInstanceMatching( RolePredicates.role(HBaseMasterClusterActionHandler.ROLE)) .getPublicAddress(); diff --git a/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseMasterClusterActionHandler.java b/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseMasterClusterActionHandler.java index 5821c5a4..4a8bd54f 100644 --- a/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseMasterClusterActionHandler.java +++ b/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseMasterClusterActionHandler.java @@ -31,7 +31,6 @@ import java.util.Map.Entry; import java.util.Properties; -import org.apache.whirr.net.DnsUtil; import org.apache.whirr.service.Cluster; import org.apache.whirr.service.Cluster.Instance; import org.apache.whirr.service.ClusterActionEvent; @@ -93,7 +92,7 @@ protected void beforeConfigure(ClusterActionEvent event) throws IOException, Int String hbaseConfigureFunction = getConfiguration(clusterSpec).getString( HBaseConstants.KEY_CONFIGURE_FUNCTION, HBaseConstants.FUNCTION_POST_CONFIGURE); - String master = DnsUtil.resolveAddress(masterPublicAddress.getHostAddress()); + String master = masterPublicAddress.getHostName(); String quorum = ZooKeeperCluster.getHosts(cluster); String tarurl = getConfiguration(clusterSpec).getString( HBaseConstants.KEY_TARBALL_URL); @@ -115,8 +114,7 @@ protected void afterConfigure(ClusterActionEvent event) throws IOException { Instance instance = cluster.getInstanceMatching(role(ROLE)); InetAddress masterPublicAddress = instance.getPublicAddress(); - LOG.info("Web UI available at http://{}", - DnsUtil.resolveAddress(masterPublicAddress.getHostAddress())); + LOG.info("Web UI available at http://{}", masterPublicAddress.getHostName()); String quorum = ZooKeeperCluster.getHosts(cluster); Properties config = createClientSideProperties(masterPublicAddress, quorum); createClientSideHadoopSiteFile(clusterSpec, config); @@ -173,8 +171,7 @@ private void createProxyScript(ClusterSpec clusterSpec, Cluster cluster) { HadoopProxy proxy = new HadoopProxy(clusterSpec, cluster); InetAddress master = HBaseCluster.getMasterPublicAddress(cluster); String script = String.format("echo 'Running proxy to HBase cluster at %s. " + - "Use Ctrl-c to quit.'\n", - DnsUtil.resolveAddress(master.getHostAddress())) + "Use Ctrl-c to quit.'\n", master.getHostName()) + Joiner.on(" ").join(proxy.getProxyCommand()); Files.write(script, hbaseProxyFile, Charsets.UTF_8); LOG.info("Wrote HBase proxy script {}", hbaseProxyFile); diff --git a/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseRegionServerClusterActionHandler.java b/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseRegionServerClusterActionHandler.java index 1a9fba6f..4adcf503 100644 --- a/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseRegionServerClusterActionHandler.java +++ b/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseRegionServerClusterActionHandler.java @@ -24,7 +24,6 @@ import java.io.IOException; import java.net.InetAddress; -import org.apache.whirr.net.DnsUtil; import org.apache.whirr.service.Cluster; import org.apache.whirr.service.Cluster.Instance; import org.apache.whirr.service.ClusterActionEvent; @@ -82,7 +81,7 @@ protected void beforeConfigure(ClusterActionEvent event) String hbaseConfigureFunction = getConfiguration(clusterSpec).getString( HBaseConstants.KEY_CONFIGURE_FUNCTION, HBaseConstants.FUNCTION_POST_CONFIGURE); - String master = DnsUtil.resolveAddress(masterPublicAddress.getHostAddress()); + String master = masterPublicAddress.getHostName(); String quorum = ZooKeeperCluster.getHosts(cluster); String tarurl = getConfiguration(clusterSpec).getString( HBaseConstants.KEY_TARBALL_URL); diff --git a/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperClusterActionHandler.java b/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperClusterActionHandler.java index fa57b977..10eb3d8e 100644 --- a/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperClusterActionHandler.java +++ b/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperClusterActionHandler.java @@ -92,7 +92,7 @@ private List getPrivateIps(Set instances) { new Function() { @Override public String apply(Instance instance) { - return instance.getPrivateAddress().getHostAddress(); + return instance.getPrivateIp(); } }); } @@ -102,8 +102,12 @@ static List getHosts(Set instances) { new Function() { @Override public String apply(Instance instance) { - String publicIp = instance.getPublicAddress().getHostName(); - return String.format("%s:%d", publicIp, CLIENT_PORT); + try { + String publicIp = instance.getPublicHostName(); + return String.format("%s:%d", publicIp, CLIENT_PORT); + } catch (IOException e) { + throw new IllegalArgumentException(e); + } } }); } From 0a02db124d0a4d0ac8d19e6987842a0817e4a790 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Mon, 11 Apr 2011 21:40:55 +0000 Subject: [PATCH 153/216] WHIRR-275. Improve firewall API for services. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1091222 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 + .../actions/ScriptBasedClusterAction.java | 9 +- .../whirr/service/ClusterActionEvent.java | 13 +- .../apache/whirr/service/FirewallManager.java | 164 ++++++++++++++++++ .../service/jclouds/FirewallSettings.java | 5 +- .../HadoopNameNodeClusterActionHandler.java | 35 ++-- .../ZooKeeperClusterActionHandler.java | 14 +- .../confluence/configuration-guide.confluence | 2 +- 8 files changed, 205 insertions(+), 39 deletions(-) create mode 100644 core/src/main/java/org/apache/whirr/service/FirewallManager.java diff --git a/CHANGES.txt b/CHANGES.txt index 8a4d4bea..50e9367d 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -12,6 +12,8 @@ Trunk (unreleased changes) WHIRR-262. Services should not have to do reverse DNS lookups. (tomwhite) + WHIRR-275. Improve firewall API for services. (tomwhite) + BUG FIXES WHIRR-253. ZooKeeper service should only authorize ingress to ZooKeeper diff --git a/core/src/main/java/org/apache/whirr/cluster/actions/ScriptBasedClusterAction.java b/core/src/main/java/org/apache/whirr/cluster/actions/ScriptBasedClusterAction.java index 84bd1588..8285106f 100644 --- a/core/src/main/java/org/apache/whirr/cluster/actions/ScriptBasedClusterAction.java +++ b/core/src/main/java/org/apache/whirr/cluster/actions/ScriptBasedClusterAction.java @@ -29,8 +29,11 @@ import org.apache.whirr.service.ClusterActionEvent; import org.apache.whirr.service.ClusterActionHandler; import org.apache.whirr.service.ClusterSpec; +import org.apache.whirr.service.ComputeServiceContextBuilder; +import org.apache.whirr.service.FirewallManager; import org.apache.whirr.service.ClusterSpec.InstanceTemplate; import org.apache.whirr.service.jclouds.StatementBuilder; +import org.jclouds.compute.ComputeServiceContext; import org.jclouds.compute.ComputeServiceContextFactory; import org.jclouds.scriptbuilder.domain.Statements; @@ -58,8 +61,12 @@ public Cluster execute(ClusterSpec clusterSpec, Cluster cluster) throws IOExcept for (InstanceTemplate instanceTemplate : clusterSpec.getInstanceTemplates()) { StatementBuilder statementBuilder = new StatementBuilder(); statementBuilder.addStatement(Statements.call("install_runurl")); + ComputeServiceContext computServiceContext = // TODO: shouldn't create lots of these + ComputeServiceContextBuilder.build(getComputeServiceContextFactory(), clusterSpec); + FirewallManager firewallManager = new FirewallManager(computServiceContext, + clusterSpec, newCluster); ClusterActionEvent event = new ClusterActionEvent(getAction(), - clusterSpec, newCluster, statementBuilder); + clusterSpec, newCluster, statementBuilder, firewallManager); eventMap.put(instanceTemplate, event); for (String role : instanceTemplate.getRoles()) { ClusterActionHandler handler = handlerMap.get(role); diff --git a/core/src/main/java/org/apache/whirr/service/ClusterActionEvent.java b/core/src/main/java/org/apache/whirr/service/ClusterActionEvent.java index 2bf6649d..f5bfe725 100644 --- a/core/src/main/java/org/apache/whirr/service/ClusterActionEvent.java +++ b/core/src/main/java/org/apache/whirr/service/ClusterActionEvent.java @@ -32,18 +32,21 @@ public class ClusterActionEvent { private StatementBuilder statementBuilder; private TemplateBuilderStrategy templateBuilderStrategy = new TemplateBuilderStrategy(); + private FirewallManager firewallManager; public ClusterActionEvent(String action, ClusterSpec clusterSpec, - Cluster cluster) { - this(action, clusterSpec, cluster, null); + Cluster cluster, FirewallManager firewallManager) { + this(action, clusterSpec, cluster, null, firewallManager); } public ClusterActionEvent(String action, ClusterSpec clusterSpec, - Cluster cluster, StatementBuilder statementBuilder) { + Cluster cluster, StatementBuilder statementBuilder, + FirewallManager firewallManager) { this.action = action; this.clusterSpec = clusterSpec; this.cluster = cluster; this.statementBuilder = statementBuilder; + this.firewallManager = firewallManager; } public Cluster getCluster() { @@ -74,5 +77,9 @@ public void setTemplateBuilderStrategy( TemplateBuilderStrategy templateBuilderStrategy) { this.templateBuilderStrategy = templateBuilderStrategy; } + + public FirewallManager getFirewallManager() { + return firewallManager; + } } diff --git a/core/src/main/java/org/apache/whirr/service/FirewallManager.java b/core/src/main/java/org/apache/whirr/service/FirewallManager.java new file mode 100644 index 00000000..a9640733 --- /dev/null +++ b/core/src/main/java/org/apache/whirr/service/FirewallManager.java @@ -0,0 +1,164 @@ +/** + * 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 org.apache.whirr.service; + +import com.google.common.base.Predicate; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; + +import java.io.IOException; +import java.util.Collections; +import java.util.List; +import java.util.Set; + +import org.apache.whirr.service.Cluster.Instance; +import org.apache.whirr.service.jclouds.FirewallSettings; +import org.jclouds.compute.ComputeServiceContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class FirewallManager { + + public static class Rule { + + public static Rule create() { + return new Rule(); + } + + private String source; + private Set destinations; + private Predicate destinationPredicate; + private int[] ports; + + private Rule() { + } + + /** + * @param source The allowed source IP for traffic. If not set, this will + * default to {@link ClusterSpec#getClientCidrs()}, or, if that is not set, + * to the client's originating IP. + */ + public Rule source(String source) { + this.source = source; + return this; + } + + /** + * @param destination The allowed destination instance. + */ + public Rule destination(Instance destination) { + this.destinations = Collections.singleton(destination); + return this; + } + + /** + * @param destinations The allowed destination instances. + */ + public Rule destination(Set destinations) { + this.destinations = destinations; + return this; + } + + /** + * @param destinationPredicate A predicate which is used to evaluate the + * allowed destination instances. + */ + public Rule destination(Predicate destinationPredicate) { + this.destinationPredicate = destinationPredicate; + return this; + } + + /** + * @param port The port on the destination which is to be opened. Overrides + * any previous calls to {@link #port(int)} or {@link #ports(int...)}. + */ + public Rule port(int port) { + this.ports = new int[] { port }; + return this; + } + + /** + * @param ports The ports on the destination which are to be opened. + * Overrides + * any previous calls to {@link #port(int)} or {@link #ports(int...)}. + */ + public Rule ports(int... ports) { + this.ports = ports; + return this; + } + } + + private static final Logger LOG = LoggerFactory + .getLogger(FirewallManager.class); + + private ComputeServiceContext computeServiceContext; + private ClusterSpec clusterSpec; + private Cluster cluster; + + public FirewallManager(ComputeServiceContext computeServiceContext, + ClusterSpec clusterSpec, Cluster cluster) { + this.computeServiceContext = computeServiceContext; + this.clusterSpec = clusterSpec; + this.cluster = cluster; + } + + public void addRules(Rule... rules) throws IOException { + for (Rule rule : rules) { + addRule(rule); + } + } + + public void addRules(Set rules) throws IOException { + for (Rule rule : rules) { + addRule(rule); + } + } + + /** + * Rules are additive. If no + * source is set then it will default to {@link ClusterSpec#getClientCidrs()}, + * or, if that is not set, to the client's originating IP. + * If no destinations or ports are set then the rule has not effect. + * @param rule The rule to add to the firewall. + * @throws IOException + */ + public void addRule(Rule rule) throws IOException { + Set instances = Sets.newHashSet(); + if (rule.destinations != null) { + instances.addAll(rule.destinations); + } + if (rule.destinationPredicate != null) { + instances.addAll(cluster.getInstancesMatching(rule.destinationPredicate)); + } + List cidrs; + if (rule.source == null) { + cidrs = clusterSpec.getClientCidrs(); + if (cidrs == null || cidrs.isEmpty()) { + cidrs = Lists.newArrayList(FirewallSettings.getOriginatingIp()); + } + } else { + cidrs = Lists.newArrayList(rule.source + "/32"); + } + LOG.info("Authorizing firewall ingress to {} on ports {} for {}", + new Object[] { instances, rule.ports, cidrs }); + FirewallSettings.authorizeIngress(computeServiceContext, instances, + clusterSpec, cidrs, rule.ports); + } + +} diff --git a/core/src/main/java/org/apache/whirr/service/jclouds/FirewallSettings.java b/core/src/main/java/org/apache/whirr/service/jclouds/FirewallSettings.java index 926f3861..4a6c2b3f 100644 --- a/core/src/main/java/org/apache/whirr/service/jclouds/FirewallSettings.java +++ b/core/src/main/java/org/apache/whirr/service/jclouds/FirewallSettings.java @@ -28,6 +28,7 @@ import org.apache.commons.io.IOUtils; import org.apache.whirr.service.Cluster.Instance; import org.apache.whirr.service.ClusterSpec; +import org.apache.whirr.service.FirewallManager; import org.jclouds.aws.util.AWSUtils; import org.jclouds.compute.ComputeServiceContext; import org.jclouds.ec2.EC2Client; @@ -38,7 +39,9 @@ /** * Utility functions for controlling firewall settings for a cluster. + * @deprecated Use {@link FirewallManager} instead. */ +@Deprecated public class FirewallSettings { /** @@ -75,7 +78,7 @@ public static void authorizeIngress(ComputeServiceContext computeServiceContext, authorizeIngress(computeServiceContext, instances, clusterSpec, cidrs, ports); } - private static void authorizeIngress(ComputeServiceContext computeServiceContext, + public static void authorizeIngress(ComputeServiceContext computeServiceContext, Set instances, ClusterSpec clusterSpec, List cidrs, int... ports) { if (computeServiceContext.getProviderSpecificContext().getApi() instanceof diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopNameNodeClusterActionHandler.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopNameNodeClusterActionHandler.java index 07341077..4d7523a6 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopNameNodeClusterActionHandler.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopNameNodeClusterActionHandler.java @@ -39,9 +39,7 @@ import org.apache.whirr.service.Cluster.Instance; import org.apache.whirr.service.ClusterActionEvent; import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.service.ComputeServiceContextBuilder; -import org.apache.whirr.service.jclouds.FirewallSettings; -import org.jclouds.compute.ComputeServiceContext; +import org.apache.whirr.service.FirewallManager.Rule; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -67,27 +65,16 @@ protected void beforeConfigure(ClusterActionEvent event) throws IOException, Int ClusterSpec clusterSpec = event.getClusterSpec(); Cluster cluster = event.getCluster(); - LOG.info("Authorizing firewall"); - Instance instance = cluster.getInstanceMatching(role(ROLE)); - InetAddress namenodePublicAddress = instance.getPublicAddress(); - InetAddress jobtrackerPublicAddress = namenodePublicAddress; - - ComputeServiceContext computeServiceContext = - ComputeServiceContextBuilder.build(clusterSpec); - FirewallSettings.authorizeIngress(computeServiceContext, instance, clusterSpec, - NAMENODE_WEB_UI_PORT); - FirewallSettings.authorizeIngress(computeServiceContext, instance, clusterSpec, - JOBTRACKER_WEB_UI_PORT); - FirewallSettings.authorizeIngress(computeServiceContext, instance, clusterSpec, - namenodePublicAddress.getHostAddress(), NAMENODE_PORT); - FirewallSettings.authorizeIngress(computeServiceContext, instance, clusterSpec, - namenodePublicAddress.getHostAddress(), JOBTRACKER_PORT); - if (!namenodePublicAddress.equals(jobtrackerPublicAddress)) { - FirewallSettings.authorizeIngress(computeServiceContext, instance, clusterSpec, - jobtrackerPublicAddress.getHostAddress(), NAMENODE_PORT); - FirewallSettings.authorizeIngress(computeServiceContext, instance, clusterSpec, - jobtrackerPublicAddress.getHostAddress(), JOBTRACKER_PORT); - } + Instance namenode = cluster.getInstanceMatching(role(ROLE)); + event.getFirewallManager().addRules( + Rule.create() + .destination(namenode) + .ports(NAMENODE_WEB_UI_PORT, JOBTRACKER_WEB_UI_PORT), + Rule.create() + .source(namenode.getPublicAddress().getHostAddress()) + .destination(namenode) + .ports(NAMENODE_PORT, JOBTRACKER_PORT) + ); try { event.getStatementBuilder().addStatements( diff --git a/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperClusterActionHandler.java b/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperClusterActionHandler.java index 10eb3d8e..8320e57a 100644 --- a/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperClusterActionHandler.java +++ b/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperClusterActionHandler.java @@ -17,8 +17,8 @@ * limitations under the License. */ -import static org.jclouds.scriptbuilder.domain.Statements.call; import static org.apache.whirr.service.RolePredicates.role; +import static org.jclouds.scriptbuilder.domain.Statements.call; import com.google.common.base.Function; import com.google.common.base.Joiner; @@ -33,9 +33,7 @@ import org.apache.whirr.service.ClusterActionEvent; import org.apache.whirr.service.ClusterActionHandlerSupport; import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.service.ComputeServiceContextBuilder; -import org.apache.whirr.service.jclouds.FirewallSettings; -import org.jclouds.compute.ComputeServiceContext; +import org.apache.whirr.service.FirewallManager.Rule; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -64,11 +62,9 @@ protected void beforeConfigure(ClusterActionEvent event) throws IOException, Int ClusterSpec clusterSpec = event.getClusterSpec(); Cluster cluster = event.getCluster(); Set ensemble = cluster.getInstancesMatching(role(ZOOKEEPER_ROLE)); - LOG.info("Authorizing firewall"); - ComputeServiceContext computeServiceContext = - ComputeServiceContextBuilder.build(clusterSpec); - FirewallSettings.authorizeIngress(computeServiceContext, - ensemble, clusterSpec, CLIENT_PORT); + event.getFirewallManager().addRule( + Rule.create().destination(role(ZOOKEEPER_ROLE)).port(CLIENT_PORT) + ); // Pass list of all servers in ensemble to configure script. // Position is significant: i-th server has id i. diff --git a/src/site/confluence/configuration-guide.confluence b/src/site/confluence/configuration-guide.confluence index 8475e633..c2ce61b7 100644 --- a/src/site/confluence/configuration-guide.confluence +++ b/src/site/confluence/configuration-guide.confluence @@ -27,7 +27,7 @@ h2. Cloud provider specific configuration || Compute Service Provider || {{whirr.provider}} || {{whirr.identity}} || {{whirr.credential}} || Notes || | Amazon EC2 | {{aws-ec2}} | Access Key ID | Secret Access Key | Used to form security Group (via jclouds tag) | -| Rackspace Cloud Servers | {{cloudservers-us}} | Username | API Key | | +| Rackspace Cloud Servers | {{cloudservers-us}} | Username | API Key | Warning: clusters do not run behind a firewall. | {anchor:comparison-with-python} h1. Comparison with Python From d4187561fc662fd20c25bea15f5a63f59a1f9b8f Mon Sep 17 00:00:00 2001 From: Andrei Savu Date: Tue, 12 Apr 2011 08:16:58 +0000 Subject: [PATCH 154/216] Ignoring log files generated by running whirr git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1091321 13f79535-47bb-0310-9956-ffa450edef68 From 3f8a9cdfc48bceddf1ac752a59bbd5fcc79b143a Mon Sep 17 00:00:00 2001 From: Andrei Savu Date: Tue, 12 Apr 2011 10:37:24 +0000 Subject: [PATCH 155/216] WHIRR-237. Add Voldemort as a service. (Kirk True via asavu) git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1091362 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 + cli/pom.xml | 5 + pom.xml | 1 + recipes/voldemort-ec2.properties | 46 ++++ .../lib/linkedin-voldemort-0.90.RC3.jar | Bin 0 -> 1375194 bytes services/voldemort/pom.xml | 109 ++++++++++ .../VoldemortClusterActionHandler.java | 144 +++++++++++++ .../service/voldemort/VoldemortConstants.java | 54 +++++ ....apache.whirr.service.ClusterActionHandler | 1 + .../functions/configure_voldemort.sh | 91 ++++++++ .../resources/functions/install_voldemort.sh | 85 ++++++++ .../integration/VoldemortServiceTest.java | 117 +++++++++++ .../voldemort/src/test/resources/log4j.xml | 196 ++++++++++++++++++ .../resources/whirr-voldemort-test.properties | 22 ++ src/site/confluence/index.confluence | 6 +- 15 files changed, 876 insertions(+), 3 deletions(-) create mode 100644 recipes/voldemort-ec2.properties create mode 100644 services/voldemort/lib/linkedin-voldemort-0.90.RC3.jar create mode 100644 services/voldemort/pom.xml create mode 100644 services/voldemort/src/main/java/org/apache/whirr/service/voldemort/VoldemortClusterActionHandler.java create mode 100644 services/voldemort/src/main/java/org/apache/whirr/service/voldemort/VoldemortConstants.java create mode 100644 services/voldemort/src/main/resources/META-INF/services/org.apache.whirr.service.ClusterActionHandler create mode 100644 services/voldemort/src/main/resources/functions/configure_voldemort.sh create mode 100644 services/voldemort/src/main/resources/functions/install_voldemort.sh create mode 100644 services/voldemort/src/test/java/org/apache/whirr/service/voldemort/integration/VoldemortServiceTest.java create mode 100644 services/voldemort/src/test/resources/log4j.xml create mode 100644 services/voldemort/src/test/resources/whirr-voldemort-test.properties diff --git a/CHANGES.txt b/CHANGES.txt index 50e9367d..ba87e5cb 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -8,6 +8,8 @@ Trunk (unreleased changes) WHIRR-222. Support multiple versions of Hadoop. (tomwhite) + WHIRR-237. Add Voldemort as a service. (Kirk True via asavu) + IMPROVEMENTS WHIRR-262. Services should not have to do reverse DNS lookups. (tomwhite) diff --git a/cli/pom.xml b/cli/pom.xml index 4383bbf4..2c4d35fb 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -29,6 +29,11 @@ 0.5.0-incubating-SNAPSHOT Apache Whirr CLI + + ${project.groupId} + whirr-voldemort + ${project.version} + ${project.groupId} whirr-core diff --git a/pom.xml b/pom.xml index 459f02ad..410630d9 100644 --- a/pom.xml +++ b/pom.xml @@ -44,6 +44,7 @@ services/hadoop services/zookeeper services/hbase + services/voldemort services/elasticsearch diff --git a/recipes/voldemort-ec2.properties b/recipes/voldemort-ec2.properties new file mode 100644 index 00000000..c54d7d72 --- /dev/null +++ b/recipes/voldemort-ec2.properties @@ -0,0 +1,46 @@ +# +# 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. +# + +# +# Voldemort Cluster on AWS EC2 +# + +# Read the Configuration Guide for more info: +# http://incubator.apache.org/whirr/configuration-guide.html + +# Change the cluster name here +whirr.cluster-name=voldemort + +# Change the number of machines in the cluster here +whirr.instance-templates=2 voldemort + +# For EC2 set AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables. +whirr.provider=aws-ec2 +whirr.identity=${env:AWS_ACCESS_KEY_ID} +whirr.credential=${env:AWS_SECRET_ACCESS_KEY} + +# By default use the user system SSH keys. Override them here. +whirr.private-key-file=${sys:user.home}/.ssh/id_rsa +whirr.public-key-file=${whirr.private-key-file}.pub + +# By default we use a stock build and configuration, but these can be overridden +# by providing URLs for the build and configuration. Note: the configuration is +# a flat hierarchy, there are no expected sub-directories in whirr.voldemort.conf.url, +# just the two files server.properties and stores.xml. +#whirr.voldemort.tarball.url=http://www.example.com/my/custom/build/of/voldemort.tar.gz +#whirr.voldemort.conf.url=http://www.example.com/my/custom/voldemort/config.tar.gz + diff --git a/services/voldemort/lib/linkedin-voldemort-0.90.RC3.jar b/services/voldemort/lib/linkedin-voldemort-0.90.RC3.jar new file mode 100644 index 0000000000000000000000000000000000000000..06e7e50de6c3c6927254e2ed57c24fd501129a63 GIT binary patch literal 1375194 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

    R(m7_r?2~t9r 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

    fce6EN5 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

    s1ctPtt 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%0A!p3}Gat4v=tU zVb;+b^2IM-kzGt7dHMjZWr7n1!yAoO26rN+Cz@^8$) zxonmT2o{uqDxz@;&9+{MuI08BY^Y-OvYNe z$O7zk@C4D^z#Q=Ie{L=L`H+7>-xIj@kP$tUe0A@)q42x+`=I-`7hd?hH8R77JE zmmZtg*y*#mcN62;-yD(s)zGV?_O`1}6!w~E%vou&!`50@tKtkbZQ)Y-Qd5u7aFcAk zhCJa>WUxPCaGa~79oU2lRg6%~YyF%`si zx&klP87$8@gd8X5zOMYH;W9zZR;EbCv#~yPWfQw43^iNVsvRK=S{h4I@CpjkanZoc zL!%XyB~Ru+uYnCQbyL#A52}=t-7W^b&6tz5Nbkv}c*}3}d=k2)(9gTg5N}^CO~ct{ zS|$#P^6*ZlRl)iuA4Wfeqbj?Hdgho>DYBArTJE9&m{?zdN=#})i}5vzp>SAhYojJh zWEQao@)L18Bg^2RM5FiRRxe&Sg9bG_wcd4l{v@}%BKaXXu(liJi}Xq(gIxW#ww+m| z_}k(*wviV-a``Z=I8A30(cYRn!Plsszs*lrPveYw3lR8&qC4iFy}IN7)<=Ay>aF%X}Lz^TF7oXmG~ z#@B^91b4Z8hyRWjWLIxGmB%dFSV~+O%=;mnnt%{r0u*k7N=D z^zsO82Ek2}=yFqty-}?T8fB}2@5czfg87-9f5#y|$>m}U>EFsB_@mw(ucx4`eab$f z7so7VDA~J}ebE`+R`f)WIKOuy|cjrePP|Nupk)md{n!tdei8uTh(O+leH+@a}G#RU>hA9>Po! zMzh#GK3$&gsZmUQ=R6CscG;om7VGyUt$Mgae+4V$yEaP!t&ppt*PNtkYGB;PIiNi! z(TP$r@9cv8ZPb+R`nA!}6;J%sIx-BWymQ!nC=-lQS)js6r#J{U4gBJ_Zo0Vvs@toF zrd?M)e_+_x37T?SI+_?tOt;XIfRtt=4#;^_6Bf|9mu-k)9I4Kmv1)AMQ&LK?(haub zVlvWd*`ckH66HX;I>+DB9B8N1qgm*zFyEGQN2!R4!Im>>Qpc{E?3B_?s9I`2U&&cg zooInst-mB3p$sc<_ZQpEHBfAPU{zj+QMF7JdKrL6k!s3LBl(p& zX69##P*Ab4%o?oEzj@0mhg`K`zt^j@!0)@P;|(~i;|bCNZ3wZtJAk#Nztao;u;%cm zRJ%jn4P?_9QTM^f2|j~X3MoL|Kq+v2J?hQ+aeY|j&rfvJg9rijL@4wLD#$04o<}%E zpWsB@{(^jfa_#^J?s4v?Vubyck|g$6YkC8<-Wl6%ZekDN%>v|h5cKQPav>S07M@6O z5zdiq4AVXB=bbw61BJSU$W;8!WQ!r1Il>gPH+EL3qZ-T72e4YQA(E&(3cH|-|HCJlR>TB-V#%_I#&f=KH*leM#^&p3*8J?v|x^P56s@z zM|c0YNbF85*?_h$Gmt>!PWXpurtSUd!;kqU3(dP4ww7r^Z9&CBZ<2CRq)vx3B1Ex3 z7@*LvDsTB<@_D9OU|17&z5?Y+Z}A}I+HG_b@uxYLl4^fcNM#X3Z61E3yxwAUky>Ok z55k-m?V&TNll2;(Xqdnp2~;>tin_Xxs|IvWiE3W#2Nz_&7gcY7)U$Fo$MR-C6X>0m zmQO=dhwL>j(#!?qCHVSgza9@vLw$K_md zd>nCdMb9YpjE~*TX?qi4UXs9;_EO8AzA~4yckw|{R+*$_rn0}^4BuF^jFJ?#Bh=b^ zipP`iCtN-Elx3BZSDU3#q+fB#m5^O_yUPb+n#RNC#?mH3+9DkNh>hP5HKMZa{CpB2 zx1>z?MWeRGXzWi;e~LZjcqDg|JEk?wf;(0AgB`V{`MhHS+r?r0wsqvd&eP+{!p`I4 z83ELm>Zp3eBat+=I2b=Wtf1k2N2({3ftoJJ6(~%HENb}v=pk;ipi*&mv~z%hxS51o zkzw4#Q{IYM@pUQsbQ$xuxc9Dj^<{Ymiv0SeGUOVhpm&PEM-;+Grba=Jh7YIN@bey2 z5S=qnS~M|l#FSQkVlAu~F`_cHHzm*yEe(F|(pDK@fu8fzZ6#9fB-tf`I#~KBM2}3- zC;jXQkp=mI)gwFOSs|c4p{pKI>*|=ukhr#fSvR^wyK&&zgs~bSTC9;`W%`>?Xg5o*2G|p2+^Ep9>l} zyEqvdyL__?ZkEQT|E!B+)U@4^RZ+e|i*s0T?e_KJFKR1CkYzldY)r zN|S`ST$zx~<*Ynk)Nc=p==pw0O(ZrCk=lPzr0r(NY_2)o5t@H*ob>p-yOH_-eR#+J zF=I>{@sCCACh&hpw_8vm9gx|9VFj4cA)I){GHex#hX53AUEHs z$#epc*k^YA;E4jGq1r*m+){p=gzZs!v^KrM#%)Q|SlB-;w>o_e)RGOxicJZsH(Q6> z)I>weKv%DJ@?kA47>%J?_*s%a;NUr|*IZNT!aE7&Q-&Ejkd{gt)N!GK%-D_vnp^K{ zRr)(9bk3o%3(G@Q5njkrlt>4)K$XxDmvPj4!Zoh5hnn6RW2{%Ni9x<7Niaq1B~@2{ zitR$0C>xN*GF@hSM+NF!c`?g&UFOl-4QOp=ICJW1DUAztQ)QEsoPhCfq_&DkNRNEox@{C%b z*=e|SE!9%L?Gr~C)^s0&m@6d6i{hfgfh#Mc1C}`p%9nc()!`&KxZ}hxn8`lqp5;0G z3-1X%V0$01^4cnJ3Dl*(vt8PtG3m*K* z(^OItiKywmJi%tZIL*c@Kd8{trE6PVpES%iNndFv=g7l)=?2_lFs4|gw$x7D+g46? zr%=}HHgI@SxM`;5)ADyc4eHW>RJ3rF*M(o)$uvpn?0ZL$a9UW~Z| zzi(UXnR`tbqgzZKc`+9`DBo})Uz|&z>l0cVvc%PqC*VKzu1hh*wx9!}6SWp)h%*Z5 z-nZWZ=Op&aqs-^7LXkGdqw#=wPW1!sOgxLM)3_8hi*W-u0#o*hvn2UGM1)h=v^!*K zcJq46)By#5e$n*0)`i59 zM=;G)246vIbI3E|C72`h4vCf3%5Lu?fn!-&`@GNj$kYRE!au?Nk zf`gQ>se!UzyeiJwm`U8GJdnTRe>EbSf8F~gS}|{AV1|F44$e&NcwckAw)ZOs^ zs5at_0A=z$61kjM){g{NRCfOssjqm4#7MkvB!Tdvvh$pRo`A}+rv0d|Ee9hWc z=>>)>r8>?02sJzj*RaS_kSH9wL#`zG8Ewc5@Wx@GDwMRz-A61?w^&5w$BFoOHfY)Su;x6Ex@KhE& zhh<)MAB``E_BF@}H*Y)|KDtO4N+jv7P|5!u!6ABkgE8sKx;>vpj?4BWY(guT zS6dnTiVXiyz{5ls6l);UIc&$Kc=46}!>X=ayq!!;5q4Z?4%+ul2Wz&hw#jWc znUO}vUbHg`T9I#?2U~Hq&COaz6^qD8m}+?dE>>i%mZesN3zE{Erd@lB>$U}6O$lSb z3ffnqbS_Q>8U#aTPZ2t3_ie*LC9g@f&#Ndvjs~;>Qol|EX+H zGIew{b#_s*cXhF}GyjLv^S>$wRb6E)a}+;4%{8#qIHV=W(t?Nxfz0^gxAJ8zxI_uz zVz82a9gd5}Wm(5Gx~N6H$FN6w7cWDZsvIs`=N$Z$Gfo&q5hf7kT=!Y;8P6GKJ~!X@ z>l=Tdt^Ozi5+BR~;GRTB%@HF=WDTRca9T{XNt#9)yh#rtV^UC5PB8t4w`9@WVE_Vn zL*<@PI1dbTA+!-w4hf>oH7+_@H#$%^(rjSlI^u8+zJNZ|h1$9C-Z`KlLhzlwR(Y%% znDJlc4@rMnYMVcAjQcuqyM9nUp?}yDIQI2r{JJ1nPQ^BhzrAGPPlRm%#!n!NTZ*Y5 z231P?3jR0;HBPU_!Rq z`0B0#TEvCBZIxsmhPc|(r=Z6xIc)a&zLcTiAFg3N$$yPqh!jw~I(r zhj`z_D0$zMUl#NJnOh3_MYt^fD1{mUnM&nXsNn^7cW&Z1u;T;5!kh6*!Q#o^U?Y10 zGv#^m@%O)iLZP-~=IJ*m=zN0$(fBjkP&0u%R{@iI`+1n3O&u{(K)x~kLsI=^FqG3qWDGHK0dBwd8Uf+F?U zw-HyXov)<#^+=j5MqJIJU2VGF^zpV5cL|lI)Yx`YR&aI;P)R%L zBo9J~hjIH+YQ0pg`~vG8X}-9@@FxG=4vU^9gx92QQ`B zJ{1OoKn9Wx?ZDNi@{1X$6eJtYfv(RpcJ7rD_?)5_WQaI?U)cv7Di66+axBjSd*SBP zGiTdV7ES{#p`9` zJitz4x{QH@8)sjlz*#`~t`!43WOjVZU!j6tGin#;S!#0)t}oUQUibcOx?wdA5r+I5 zC+5G4Y?A*GCtM6&T%BbN?F`NTW8^1B`9kiyxc&-t)9j?tu&M}WS4e0fQdLxpq97{Q zP*5Ji_yjZwV{TucyR{(tzm2}!g2}Ml3CTPHMZ+H`W6Z)@1KAt;Px(00?Q(keWYqEV z`2sm0J)n6xFa_vkH!?&nLgzF%pcz|nnhW?h+@P(`*5$3`peM9bV*)*X0UshV=w0=J zA&bHswpkbgr^)D;)gMXq<(%8@x??((h|4Wf1}n9NMBb5^=G{qAeCChM zT|pF*@r=?+lgGmp&S0+52*0=824@>!%-ChowvHj>-B*b;07!WF@K@42>i1~cO(au3 zA`j`f0u)ZhFw&?C`{(qn{@A6gehQ#r@mSpF3tWxWGoE+C!Pjq)gvP9AWY zjy7_hH-+&ep;Bi0Z11Mu3(GT+jQPDpEcquB@f8J8n9P8?O;Vix?hmmVdKTpRI|*;otWLsqwuF`OIG zyJU7;9$_)F(NUg60GDj+x9X+h*pe4WTcV(0!Dt>s<3<|9Ayb&L2{xv zFB3!J^^Y2eGZzTPNT7}f{QmpVog&)a&^7O&-SZ>A9E`H%!e$VtHHpHc(|{>2qM!Tq ze%;$02;B@g{RSfZQjF2hB44;0e0?5o9ip4HxRSD_br7N|u;PD3=e{5W|I~pB(*`o0 zYrk=wwT2VVEV^v_lb>yiEUXia6QL*g6t(@_z(3|EaC|esQu~Ciaq}gJq3a)o9(mr0Zjs$iDhGxnOeMprjl((cGl;{emN5guBhTeu!oH58G+VBH70DafS^~1 z1}2DrP_g&^Iq;%=%gvm$zP`O~BCY+&?0wVzlKZgj+~a-S{(c+fz6)UxqNEsv+`t@; zZLJWHvsjPBK7O)z{}%1zHhuzVe#POV&&vvG6ZPv=h|=1ks@V+uN8E%J12VVpYvIQZ z=78>fXD2u_1JY3W)TVM!I|j_bwH8fZ4Pmsjzd7x7e|K{m{LADCkl+L98;?d5{UJ5$ zE7kLg0VW>wzIEZ<1tAa31YX53yMsMK+%i$5J@{RljF%ACE>f2~_?-%*{Hj4n`d>GM zS&H;j$zpKtX%#K?xi!{gsmHTTWlI1jaiJNe&9$qU1&EipQ=h~+EwmMKMO$k9iYW@s zHJ3W}LMEUz!6LRS@y>>;hJ5;X+0HqKZA^60D<+`W%xw7kJfyX*IH71c=eDd%V~zx* z5rtrcs>Erqn5VA>OM9qtRzkIB?D#voYf55{FPL^@5uRg%!uyxC@z7XvCNjNtgF&nl zEBJg1oozMip=)gBqMPv7vWuB5&q2I0pW%n1oEN?F5>^h$nqNu}PR@=&uLY_SSf<#( zQevdpDa*B{c`4K9Max{wTkV$@v72k4qy}^ca%8nO;(LgznOZTI9Fx&AbMY1y*;?>? z8B!S6u*ibXHk)M9Ci%hOVus)KywF_9ny*s33l+~X=49()%kzHv^Ft-o*tM4QRDGl< zdu#Mhv5bbf(6^jv>F2ff=D+4|^bK7tV|p)aCGJ(dE3cd61#-SQV&G+m4@=VH`$|Ju zDA%E00x*(QBSg~JTZ6IFyk>;c5*W3IPC^D&K=vPHkf?4DlvxarH;K6lE(N@qe~*0X ztD?z{MF9JVzrFK8i0R{khy-bG}sC|w*!z4wHuF!3^kS$M?Z`I{&vuq&$V4Y7ICEHn`W0G@$*{06p8Tr9g zNb>RG+1QKomkRh|keQ+J2}!H*Z_hvVTRwiv$gVkF0;VZ}D@r4i(k{%lSZ>~t{Z=d9 zmO{1H_5RBN8%c|1wH>&2EftK3P#Vj~7I?Nk{u8JU*Fi6m!E@ZhxU@!s!4 zVOi{U(id9#Vi&90Dow`CfyQMXBsKF)n-ZR=8d<&Cn`ShyXto!9}4}2TTQaaHLK*fk&WL}(UcKav zj2UVfegjwnso;mwaNX?%fnU)hvabH?-zQiugKntSMINV z^1q1^{#3XLQM5#zuVsOQWgA1iw>Jb|$U{+{oesjB>9X)g^nU?AfD=iJ8uDE(j^Wnbn?i?iuGwp{|hs`5?!qbx< zagz;)Ym+emsq0i;ZQ_ps2IFLG644<;t3z} ziR5D!+Eegz+-PTI<2A((IFIXenNm?9^(%O_Z?oTmk9F{fCC-8C|~ zUwLr^{W=vxp3(#0G=4EV!g@L2ctzL{&+L_3Z4Op7g!V#n-C;pYS}rN|?{1WKDxl&H zHbHM4RQ}YM)HAP0Hcuz~ngPl79hkezXj%DnEnk#+3%SbwA2n zx~(oc)0Er@LZ%T#zA%mJjktKUgISS|7FyK%=!CR~69!zVfpY2KyAVizF~ z{2Ch9tI$qJ*0gk28;J>#)LcnB2lB7CGZi&m@P(X4-&KeLJlPbHcEnZECQn!T%< z#xuCYOTIEh+(S~{Q%JsINWQ-QjSt2ruenUGaa20PxxQ@+WAMeHZV8UVABK8~A~;#+ zl73I}f#eyM`O`#RH{&S%W$jQ?)I2?27EpR>hm+j$Mx@?)0e} zc7dzwhM!LN>zPQS8AdfFB-m>Q#G<397AddZZ2Oly*8?9|yE_V>V z!&j6~b^!hOVes97viwior>dQyk&UUUgNdPwsjR7s;rF|tsE4ts!#@-)|16PH5_kX6 zjgIu5O|sJ3n>BV1P#_ZB^Aq{qcgNa~vCOah(Y z%^;J}$UF^xKSYbmQT;>nfKH-${rS;AKbOw%v|1%MFH5Pw%T{qU@BQ1p*|YAg^aSei zsBkQUVmf#}hAC0fEF#meXfI>bKX9B9;PMgMT!b;|LXV$~22 zX8pY~KQv6{u4x$2Hjh;gl_g#EBS+O-Jj=LxFBR1w!kg3DbBN2tTvTsxGNP zTW1ab+I+=HBEK2P@B4WQX&Y91H53M+ctxnPSz--;u|bUCtFnqW8K@P}5Q(7Tfm0%X zx{>sHi^9iKV?Ar|T3vg!(tN`3r>nNR&$(d~O0XYK*BgsVuP9|CD$PB4I=qV zaaHfPl91PE!5*vbJ922<#RfJ;PldI;;j6i>H};^r%N0Gwm+I=y@GY;dw?2wMuV_C+ zM+^EOyz3P)?B7yr{P$*grzZL4+1oc~-FKnYo}trS*DGq>cdVknbItze8|)aLX|=vp z)_+G%-8-J~VS87b|DJEaV|*&E`VHLrcRV}CKEn)#GF39e370bChiY<7wiK+?>4pIJ z&bYw7pV5RNa)rUXUrhBm{F-rM#3={xz&^OD5o9(+qU)Cfh+v~!*&qjza#D`#`>SF7 zClr}P%!L_w1k48+s^``NFn+GC3u53^1B4lH3IGWhYUeg6p{iWiG5Z)fF~bb`04vzh zGaH`Ju=7g>Soqa-L=3zN02BsZ3809PN6Z|Vkw?vZ)X<}AhRo0-aK?%uyBa`=A-BBF z0$X-r10Krksus0RlQTV1FK7OQ!FF1WI7pT=-CwV1PK(iUZc}TEw43>&$RKb2z{sO$ z4#S{R4oGrwV-iC@yF`ISzp#M{70hWiT&o5A2YK_z38f0IC?f#LTVh zyR7f_xpHbkDrQ#p2fcE1cSa)5WOP{IzNgt1^l+iGb(xZoxgwK+6pa;W;QUaRLE9<{I8kz9 zqGyb&a@jIFTPt1ex(2`PU03GuFdXaCA_Zl+HkJ-v^-qW*-DTPc4~h-egv7>VFX6)_ z%P8xz4kuViQn?(qZZkXGi-XLHr)IdQECEoQ=42CbV_Y*^h#$0ZA>30EG`Z=RQR%l^ zh%%sMp$BH(L}>bwl72%nprje|EAwomYdf|r!E#|VqPHCUcv9&#cLqz)E#&$AXexj? zxlFw4=8nZAXu&OD)l6JvZ|{MEXM+JyOFW4(spg<^zP3WT6;@spwB_G{Hcmu#nTtX5 z8uq}j!5rIW?~S<{6q)H=iRf$$vKsd5rmSMqmh-=5&APxQ!Wu*K)z)CeragQqB3-9s zg9i#0gCM0OEw!Aq5~J*W5KvD|A@w}TyvC1k*yAI zq&0^Uku`xaLWrnom4%)R+(v+VhTWc&=9}iAMHw@GU|ubuHBEunF2+rojZ}*;?SQU; z5gV|^%->Fo_dlC<^D1}=Dg}Z=x@8zxOM!C=F=N=@gbIS=E`S~1?EX}9GH@p9N1YiI zfT^DjhT)k_mASsU1bug+hAdexT~|i_Nh>Z%&k$zB08`i%M@bpmfu}vi0AJ9?6u;^s zBBZE#(D&>x7EPv;DA-brXy|iGHzhbQcWruXgUZqRjgkmE@YZ5Z#Ln`z>z1>rDb*#x~I#y<5ON%6AuPca_?jBFXqZ7l)o z$U}5D=KM3Ka6l!vc^MLqP3d>P$w<({nLJ)dL*82A-KCVsCNfYpfm)glWef0_aUwI< zP|d>9Ekxb0Xu@n6CxhR%z`Bzw$$?}e1~GmQn1Fbo777;x*;;mM#J+AFLk*9oy571D zjw@JAVo!m}WSc4vFa(_&5D_&qj6|oKhInNcW=*#cR5xCA9V>L6HF<#3=;7w{i?AQl zwp?a_e1q%KGB$i9EA6aaX~DgNtL~VTK?$R_)gp&Lt{1o+*NvQoF;-m6#Nwv?)-Dbs!c7k^(_6^vtR67NM{PM* zq)X>tnK2ybu|V6jdwT*^=37%r$SN1_ftCM);Fip&nYudg)yI|<(1#dIhP{Ff9hg&A zo(9!dvLfa+WCmuYZ{LwVOA4B&hz6#hM+s7GSCJY~)7qZ%pL@`gR5t3aw+b#SkgyL< zgr;vsDbi7jX=d8kv1u7K$gP&Cz$L1X4LAcX4S#Y8+bA18WaLw*mf>w^T*{cQ6>04R za#RQ}#C*M|YBl$wup>2?8S(tPBxXM1WoU#$RMi|lTsO$3q*TWd=xZv^it)@E5sY~j zkV_L+7F_6UZJ1*jC+gUg+@Uo5A+zBJiL!P+>DY`muffCjeQ3TSSn$tj2=fd+rhWH+p2Z z;8;k&{~_!xgX)TcHPM5+d$5DMySux)dvJF>H~|js?(Xhx!69g{9D)RbCP1*qeRpQ6 z?tSxSe(b8QT6_Iidv~v{>hACRup(?$rG;d|qIE3Ko=j*r`Js$Ttzk+68M*W-HJYu2 zmuNa!to05Wx9waFHgAFVo&qj`l~Yz&^rE;Q$KkA~73lU@d(&^?H<<3fcRo*HoPA|n zS|Etm+2HM6_6*Dy9dQP-)+P<}uAw?i0B|Ap+nkbV&G_Jqw&rb%(t*+D{+&w0$1Au@`B zsl&i$l0Q?B#fr{^q;rY+#*p5XA=hw>) z1Ln5BDg68yS}lBcs!SfJIX-LblK3QCBngB`_+mk*NCxqsm@<*^WnD70VkdrNhS^RG zdH&fIwd3y2+0t^|^ZMWR71A;a4fi-f9|t2=aDH}j)jvyCO?+v;D&J1_AAM;ANfu^M zj1sLu1Vs-}J;bsSG}nkdO%h)$>Rp%1yV$t2=Z?7dt%wOZ7e`o95QmD=-zE5B}7R^LmGM)je zl{vR~`Bb)VF01&?;u?MS&*^j8GSjlXq;dz;L)ahlWh}$mqRl#?x%|$pa+pm- z(rW#XkY?AM_Az>;6@RIGx4^%pXo8mc!Z%@A1q}2_VCm==|E9(YLnKLJ#zIsmKw_4& zViDxu^1ZB^x9X*GhK0^$_HTp60VCCMTnDaXAbG)|vf3}D4Cv5zl?AWbszeDH!Tcm= zf~+=%3=v3F|1N4xn{A&6UsR@IuHn8($idp}1@`A4DztM?8#<0!JH$3;Gfq@WVf&ha zY5qas)adOV;oz@Q4Z&4ev=0e6Dy$v-X^*zbXA;cvWYFJ5$FYbcF%~Uqjt$%_DvVhR z1K=wHc@Lb~`iZG*yloQor9-*He>9Wi`;@Es8sOh77apFH={<$sdU>j;M4YsnJrlv{ zR&iV;Uy)=vcU2j5I8_Cf-c+vw18*9X4d6~y_Pg|2M*rz#Smad54^CO+M9F_T&avr! z2|UhuGO3|@Na6bq67V2DE_WnrPv+EeNeBJaFjZ6i02gP@5zXl93UAwL#g~R%GSAdJ5n?G}vlY7GP~=l5rQE=I@o-vXQGTc(l|x@=EGpPL=?fT3}uPX1LH zG4)@QjTsihwUW=3^!)?sXchxLYh^t-qw;#2DvUWXU5(L+ef`IS_NuSn?>rQ&ih^3? zv+6U4ufX~pkV_n(@N@*_ow548*tbpZAjV~^h&28227ry|O?ZKEF9A|5Nn@zl4y_Vm zeka=CK&|4+Q-lDc$2fcgvV|asTkR_y(09YH6=J?EI92_(JN_V$73^xg`5*1q8Y|`|6lq-%Q9DfRpNpM zt5k;*@IwE!#Zx{NpS)N*ff$bQBgokHZ5Sl*CXrDYf*uKMEK3)VZO(6h6yTgS3bY#v zN#fyutQbP#o(0xBUwaGjpAIFa=pFi*+NakDRRnhMT zKQL?p4!)c$9x(pS%KJLe4)vUB)~zwWSa)$2Q`1j3JZVnbd{fbFxP?@pP{hY}UqV36q;fy7C) z(dV$K$NPl8ve5V>F)bo~WW4qmvk39Ow4efgp^e&?Z<*lt%+^oqH2Jv>!q^<|YzA^e zAJk9ynW+#&>+2g6zumg_dGXMU z71VM6H7zC({DkqDpYBn$l^}ZE*?s|rlPB=;X8}|AvTIcuS^&oYtZA4f8j_dCLrhVy zL-UZvvzk2##zPBn@;f0e9sH!?<2u~5?_w#f6=9$xPbN|-Kd1|%!3|eajgo!Q48ygDRYCpa=w7zBhz zcgGGs*Ye`-_vbzG3O&JhC8x6gG&jTlX{P`xRB}Yyjyb70tVvU5xp&cHH^#X-pAhvd z$cgUblgDe;l(veC=WU~OGSrnR6(VdPOrC1XGG`62_X!7}S}^tPwLq~K2L&kQdAcC$ ziSkGT3P^4Zf7J+bTJ>pTopp2{b;s-XLxaD@BT|x4yQ-5++$hM@3wnAU>Ksf5r28Ud z<>8IMnvYsa{moc^%sLUt1B z=V__1jru-`{LEsU5~~9{ri&UUT^LsMYTo>j8rY)@`!p_g0d@MUBnx=gNyDF);*ZSH zwn8{J->-LtFZ5XR!Yw|Ry=WRm4dh!K=%~$PBYVnV{5~qSSyJNkF7~i)PvPBTC(TLg^+{r8xU#GxlgU`-Nl|KuCd6Y_`q(QB^7S1+USPO1%Jlj*To>Y^xk&cNACK-NXjy85i%=_y6k>} zm=OHtFUcdilJ0uwX+du4uN{3p=_Ez|G_@aq%sn>*^bB5o$t9m3#d3m-NrZYDTlh*| zQv2;Ofh_!7U!YN}UnU}%LboC0ax;&?uM*KrMO-|GK<=e(RwhX68=2@*JV$hbFG#v{+BbF~o1F;gX6SZSQ*` zFev6kZD4q+)8UT|>N>KF&qdcp8uquG#awuEKuEGR4^%aTRCcpfD%Qt-7GlG*A?tH9 zIr>vP)mXdZjsEl?i(hr|LgwIZ#Wn4!!bB3;M%_$A;Y0*QUI(cZ~gW z^EgG8)Vs-@j-8E8Z)3?z`}rng)V(6L2%O#XYt^U;m2GC7xuT%)RA2MktIN;7^3E&Q z)g0{`92%UR^o1)LD=TDPyiG&(LvTja*K(a3(|_O5_5q^VK$8kun`gj@ehZPurxHqo z*Ypp9(#&r^Co6M0wD8p&U0j?@cYBK+3{mp`FgZT(l$rd}m{YX(A2&5RaL(ra>3GRU zuTS=K$mX`9>hpe^sQ1< ze^Ow&(hf02rjy7}m!&k}GRl!Z9WvTe+w0(`X!I8^U$fJiQ3YFH_+W>{oKtc(CX@6Q zkicWa5TsB&j=}oz&rUH3d@7yV{G$?i+9J3ZKq8&ID3m@$C-DMHp8QSR%OfPp0aZzO!f8M>LnyB3n+0Z|Tb^HYH>&Xoc z#bB{HMRF1BP1;@JqCZc-_p`ViMD#DMi z(zjwo3TR{~of$5`wyjEejXN)tSv3ya({f`>o}zHsGTc#sCJRWzm^(ade+ln$>%hBi zZjH@%A@HFUF0k1-b&4&tlGBs8-xUs~6KG1#FDmZ_L=w!7t^;2Zi{#iMPA7cyOrV#Q z?#^^x4mth0g@>*w-`wDYjTw~P@y44}X^mkp9B;R(UJecYx);b$94UGik{V-9|M+;p zNV_(d@k!p(3iV=@^6h-^MFrH6eurJ&Nv-TACHvicoJSE*MLK{|>btYdg8AA&I)G66 zu)X{Y{3o=-Yeexc(5M%!^kHWi0oeOp_Y`!R^s?vPPa||ZORg*`42#j{_H7v8Pk5A! zn3(s*`o4yZXZVILCXtA$rTY zW@N@=OXu$@ld^`H0U;8+l_kG;ik^lP7-J8H$Alj9+(-^aJr3P@_`L|lzE{NtEoOv-#gM0A zh<#{^ccv8iw}sSvGC?%@DyqmfE?s-b^`k&KSVzbnzp-C5Rq0kiEO4MQPXST)xB>Vb z{`L~=A;tj208=#ge*p@auZM!iXT~5Tw}?HF!itSl$tflfq+1gI)PB`M%D|abh~q8l zQ@F5F+q6rrTw$5i^qm*Ae>j=y-=$BtoDEc=#dkC04g~&*rmB188);pqq>#mHGQT`g z#k~?X@X!k1bl<(_E!1n$#k$9Ij3L8Qo)7zzKCztWdJa4=ci*Y52`{_E>=#_-zlT zz`t-T7W=E3X85ERb5%BjCGER<3NioCtHy#pW^e~9ywaPpl5Pr=rk-?HrGgz#4+n`) zVfSqV(p`x~wjbz4CLe@FzCFMfTs)_%{&~$?m|n4W)@3ay(2@PsCc83OKX#U1|7kmw zCuU*MP@2FR&Y~#hYK8H%0yNi3~H-|wHhD*9~=RpLGrXtx(awy0SC9h=Ivqp_{6PWe;VCD)$ z98IGn_)RCw-q^=8hGrTg<>(cf@>KX4{%u*>6(7zFAF%A_RR8ugSPRT(dp?CFOaTxp zP2Cx%2OL`3vqQSDgcU?)v$V7ZZO43c_>-v?_D*quxiWcVLz(Z&(Lav9848C>LfF%? zLo*5%1s=<bEz1v6k9lPL;uNQ$C|9J42Q? zQJ5UV=NF)!OaqzA3r8B!ubexz8=kQWL%_`T&tpOI_hre$UTsDk2<xPFqk7`m?OcPkCEEA)3RkdDHd!Bu20%$p zTM|sarf>;$y7%@J;IA72AU%=Jgd|gTc;05C5(cE!==zE>=`xI{pIF)2Aps0TGEJ~d zrf5{BpRlVoMotanSSx%@77(r%(1?1=5Ah#`v1YuYRy5O%NS_AwWdNJ1B^0f}BH$Al46p+<1Va(bNd)1c znI>Nc+Hg+iflpX4z-Q19oqxG7r2@dQ-x=b2IuS23L{w?!rsjBWwYMmTYcy#WQJ=)T zQXWaM#R@3kXMQ!CO>@tT+}ghyE8NlsEAbd&WJ(N12%80FLl)aJLH!LEc_|+IK~=E+ za^Lx=Y``D9ZOLRn?^4&d(u=%h&3*e^Y)I3+2}0zJ4pZM}!h9Z zz}YAWe~n|iC7iry@IDbWU7UobX$Z`jUZHPwn*`AqAN`WqRK@8diXySHM?0rxeMTCm zb8JHEZV7W0c`Q`Bo`M0DR+6S>$f^1QUi!o_AI;Mw?bB!L!ItqVxM}f*TwI4A#z7P4 zW*okc6#H_DgAAPe7K(#I43GKFX22OfnV)%pAUUZ0A-h&qw#c!MgW*eL_8BQ z;YAB+g%(t=6A@Gf?~o?J3z$YD14=;MveC%P!*5l?KIx)ir%LcbO*;=+ri3y{^jd@G z6~R|)Koibse8AIXlRiXjcBEGqzDEt|b|9d+F+-vgYWkH7SQR(&&+G$aMpXW>0QzJ- zfO?A=c5w?Zpb!tyj&K4?kbU?}x$#$=Tg$g{&b#-uz?jJ0c)Jq3J`uwf)A}tjCW*{B zARE0zhz5u`OTrW$tS2nq*dvL+0y@%$QdwQj?~&PApA0qJIdHUQ1vP#&oO25lD@d<9Sj zX)!E=rYj8o3~&qz@{z^UE}a4S6gv3+`knF_*w)}}N{l%m6rkoWphsK3TpFp>2wp%F zNwXGyiv>gi1H=&#XT<@6GEDCJcX@a|!r6O6m<^;113n`IZp1b+=tT&#fYul!qN^ne zGbM5X)=3D{>(JKK*w#^~E48o!;!l5rjRT%raWZmZYW4?{=NkBl3|pql@UjxRT%)id z3PjT0*%jO2pFJDF5`uv7dw>JZPm)IN6PZ?lkNX6nMuIg}VibUV131G6A}~pOycLiR zjH&()0~@eX2fr+f2u@K1D_Mi_6v2u-(=?pZIRKALglT#x%?j8aWq5-MSfU2_52FVl z&Uz0Zq7t8kM*Lxuhy&sw79X4;q|WM-mliMtB&^grlRA^w5o0(h9}2w5MjI)$ZV7gr z=nLTgAXqgyc4W_Kn5!)f)T7S zk2Oq$B+zcdP@(0#e|l>ViHEJxOYqJC&&&Q<^Gw?k!6u!5{Z$=O3CJmh?NNf)AYZSl zmH3@1aZtU`pLA}A1a?pa2U>#%6v1bo|HDXzg5Y3)JwIfOX{LiYV{e%Xc(u?xicoLy z!u*0OjA+C^XY5psK`vMM6u}1P!Mhfm)4qUPatyF+OLATVYz`3gQVd(81yTk}gusK% zgvE1VD4?|vRLyy(aL(aTxf@Saf`=n)xXd~^Ju|DD{}BUaum$_S$xK!mdMl-n zS`FbHbR)7qgV#Byg#kHNP%AXzf*C+8BI^?DawRnE6bV%*@Wc?OeqRSBBt>Emob}kL zjQPx_-(I0U&B?-y?BK!n#}$a_3FQr~o`rz<{)>!7QZr@&1R%PW29DN0fw$=ks;%pC+9-Y|M6#;7MTEeJq7vuSeERh0}*{8JKIW?+e>U zJ^(;8F~G#*tUr{G;jf7uU{3o!0wFU1hW=S1Xag|)>0@yM{@TfABZ$d2@zw|Alho@t znDLP&VmB_M^Q1TGH6w!PK=iJB_9wLxgCF?=>OU3|p&`OH8!y2B+%nkf7y_2){Ld{i z8^*=3PYUoFdoD|?+MpL|kP{4M(+*k}B6xi^>Y2d*8@&r(H~#PaYJ%Tpkf>)0z-{lb zo8#nYa9z8bS$Qkbx^*7Im6$yNld~+(maQ7}krr8OUgSKh2Kq@C0EgEkp_4 zA4>eMU)U~f^qq|&xXT8dl>yAEli16YFogqe2#dQA0QKl4jyR`@6~RpFK=+T#0q~!K zv2FnLC?a8}Nu+ONb=0i`If$&;!u-C6>eGogYGifjvHr56pPQTVh@p2(Y}E)nmaPe9 z-eBYkrMA=E5A9a{9-j=+4T5R7?tU+hYb^0~{3UIWFrK*N@uoK^bXo$pbu4sd5qy6Q zZKX^uLV1^*7`>S#;@F)7&PAm!2@hIJ~L-#>cL0)U-?DoUv2yGh*Dd_hF@kMDqsr zm@nYum7&dwD3rDL+SZt`^Ho1kCt}O%^3KfOdWimm9)hNss8^MW=_;G(fiOs`Az_hQwbvv zP1(_*p)Q3fn^FobLldS5)0wzL+2NJ?Wo*ehnun|8Qq7_0-_N!VwEA9rvEtB*_maA2 z)j?x!Acnxhp6BA0Z&C2#?uQhLnH<1nM3W=3hSlp(3vacXYTg9yLEFomF`h_ZfiYX_ zhUjNmH`@k=w(xjFM7y$)c1z?jJz34^$cNg7_IL~B{K<-Sxj_bpBXS|K7rx0Hr$~6o zmtO|GEp`xJ<${G86A>JjdCqCRfnXvpnzk!^6x*3U&;#eIeCJ6{-I>dtomL2U(3dmI zXyNkPEZNWlL^~WCvlaPgB3vFa0hUC3uDE=tixTBVhf>Dc*9FneL2T^(5dX%kNB0;R+W1Bd;G(q7 zw^qC9NFq*dNJ`wppA2ovDvIQYXr!7r*2K6h=#yOK!k<3#L2iu3y*>>DG$l5REGz=g zohO1HaR2iG`H9pryPm({g7Q|sKE^<^RXa~7+Wcmwlb)M8p|x?`*Z&>O4jy z#+_7vdD~Z};^v(dGNPeEDqcQbWFJU6X__gTH0&)69>rT||4bdtF`5!}_=$>oR_sfh zo7cqo=5mud#`54la0Y^oIJ&6fkb^f?$agDf;^aInE z`q!kr8{~!c55V?}cRf~GK*HnCM40;+Z8)T_ckd-tvi_;m;qHxI^xX>YEcdH{NLpX| zrluX356}ynuSskV%~_dQWd5Nr9}A}1XGN{Wr?+YRp7m5D979X`aW8v%cIaA40il#* zP-Fgsu+2zVjJ&?}R9P%S@i$oU5fBVn!R7gesUwDUlO=d`;65%hJ=8DC+$G(=B~F5} z@xlWoC^a=J6jz!_SmE_&yzUTviBztivgu)z_ag+npGpEznmeka;+P^R`o)dY^Ur8_*yGaNH!438vc_S9N3M(2 zP`*#+uH-tO4LuUknqrf`0K{hbjW|A;*{^Kntmbgp**@Pq{Y5v&=wPO8HXj=;O%z}z zYRjKg{8WePL%sVM=uOQtCd+hdB8MJC$~)9zdxBs;bpr+Rt`^24<5)ZYvDzhwT4S}J zg1X9bJTrG#%=9PYv^NshC`7HBv?L==&Ybb0E({9w<%0!B)JFzWUb5DzPv=42R1-s_ z)q8cz)}v_z^K^DLG}b1}&$ zOe6~M1PK^zIgD48H_h7I*REg-(DK~`*}G97aT|u??XdkPd|nB0{8m{ANC%c$=)I12vFu&WJEAm!$Z>DByS?{ zsD653@39BrW5RxFVGlBofH$TH0J+B%6;|cQRR3S3hoo43+N4hW%Su#!MyYX|yRmBr%;KVV7JxY?6aXc74}B6HmIhl92e=n_X}^ns(y`IHCl zlwU_`pz-6`F%l*%IaIB(&!86wL0rpIAOlLWWV%@O=r(_Tx#1p41-@hin*OmMw#<0_ z=woPI_6um!8_%|-goMYyQpCAyYBpAUH>BjO0QVfks>2y!{-``fsH_Ba5L36ndID3< zl0$!Md>$iP<6p}UkpMTXv3WzNjksnkM>y12%<(^zg-PDf-x8LfV+Jsf z2=X3@aa)M^ZoKC7g<%#Ul{&-oRwbleemBg~0y_yscb3GCZzMmZ@molxP?sr+M@M}E zS`r+*xab)9j0U<@hMQxtz65AkeaQ|x3D6+0K=`E0w4j2)XC%FwBm}$5FdFsfPnN&9 z#)f%F+OIy$cKtxf7NQYp0wH^(*_}|mNr@%+;o>5g9is%>k4wQ<@9oVXC}~kp>HBn? zO>(aL!rkLnH?&}En8a?QGQVA`;yv$7%nRq}n7hr({cXKt9bsnb8`YP(Z>6%vNs~qp zx8ziqpP{b#AodQ%&29DX-?ZD@wN#pW8hUGcJ1bcTH;twI!kwTEqkuJ}irkHpfyC|T zQR?TNj)&+prDyJ;^t)E$c;6S9#z7nE_m`jLIWTG0oHM%S-U_=v{oSaM&DWiRU2m)= zxmu2!PHjKNQ;^OOv7G9%?KDkoU*fo*Rmj-52ujvsx@h} zXQ^RlR+EmKBlR$rrB{fy`}a1UJGA#Zdj~s{ns{ItJkK-Q`nABa7k@+2aFfkfdaZgW z{*c%zo^?uxB^NX6Vo)-%_9g?-Q!#1b@&zAOt;3V^uk%06%q% zrM2;Pv+#brPshqy1$LgJ4ZHPE=V#pdZhrZWKRi9S7YdO_SU@aV8g7zUS-b(-Z5d4p zZCk=o%Z90y!XZKbaoUtVT$C*Nq$|y%%FeuiY}!! zVnh2pY*)>NON}pn4J4O{O#ci8to^S_v3z`GDB^LvD@@SmmcgY$s-3{JBp8{0P$^4PF=228+-m*MQ z&GSl0^5*$GQ5I2t1_>5v-IEbg^^ho2w>pa&B_#bOu6WL%DA3?AW5*nhQ6S@PAE|zc z-F_j%`{Y58?A{Vjr`lX&=v^XX5!R`S5{KCK9a_b9(qh*|{H8jo z?u>QK6uA1*tw>wxipr&$jgmQUdq>ZCdsH-?SR75)aD*XIEFo2`f^eM2+4I9V=*R)0NAkZvU&$PmM#UPl04S#=JCvS|eO(i&+N zo<-9QGsHMD?}id_W&e%B+)qD(_>h(nL%B$gN6eM-zy{kiNsqmQiKZX9Df8OVFA=tD z)EWB?BgACbk>&;7ly1cPS_SEM3<&!od;pOybemg#it`W}4_`G(ABmSIU$7sW?* z6mlWe2iAvQE|ofWZRtgZD?XwCNXlDZ1qjIUrnq7JwrSl^@`KrnW%uKdZxx&0wMS3_i z!44t5lFiPLs1YJdesZj7X@Px7ihMZmrFkK1dksdqqNxIEKGO&fQ_Gs$MpDn={!Y6N z={JgCI#BfZtpcC3vVm!TpVB0a7i|bUkU)CA4&XzR)0tk0Lmr1jTx5hcK^W zTD{AUlK)VfmNIESDgz#Ifie~+^?`?K2Af6hckFjmIU(vP@+O`p(q1%oh+2;Ve94^q zIfADvs8Wef8#zVP(d1IuIZ#ehW7N%4a4%7jY6omsNlJ?yb%ENW8&8&#G;mzZhiQ*Y zNJW;>h2vEWWdE@B1TFs(^-B)h(FCD~vK-z$Muf2`K4LSy@;w^y?W?MlVhf{VXuWVe z{EB;$G^EDYJyMKGP9GI|OTtcMvjp=&RwcenWLLq$WMKCrvMD?UisG{=JtDl6MK-Yy zI8fm+V!y?``pfF@Ux07jOK{7ax2TOpwG|&3-wZ}K!tCGR-WB1$w&!nSBo##?G6a2;)ZvZ#pBd4u+^-_y(B{ zL$6tHt0{g%r|b0KJy(3M$uNu=4Iwc#ndw1E@w{m^6>mgRGEj^%Q2l8%5v+MQs?Ds zvo&aVPYg~dt7^a1*f>bU1ttnbS2v@;34Z-7X1=!wL1!&ajV-ja+HnZ=KOj8kWVNZo z(ffJUNOQeZ(c`u$QzvPwtM|a!HbE1PReR>odeqA#zFku1KCv}!#<}w6y*k&~XjN!{3wQz7Naw*zKeETuqglt2w_&Vr5O)+$l- zwkoFBG+tLXk=irj69#5|qX|a^c*gk-j?5RV);=!>%yE1#kb9_ZpN<;9ip`xRDGJD- zHku_R9n%lsIy2?L#={i5zed{?RLRpqPPuoCG&!wbzmFy98jXZR#&u@OP?#CRnGq%1r|Ez(7Db3lwS=TLV6|gs-;1m^kTiv zUbn%Gkz4yocVDA9ZRH{P-}1}*GLNOoRT%ohA0E8 zm+LX3#j;Q*lzCrWM(>E54*+ z59!`2AqU(FYKj)~ zbV4$l`wK~}!|cnGx6k0Sl1Io-<_PhMU{GsXIwUT)Xw73&b^GhXzm&%Xj(rz~t8zV& zyl$E|uP7!ypN$_%E1}%(Pk0k!e7ux(*D`UD)VIc}u*UvOKbdd|4tSO?Ya3;#kl(Kz zL~d|&E!W-W3=`{mDjMNQCi0y3FmwI;C~0nQGIQ)z< zQNA2K3)k>WU34fJU5STcy<|cYD6Vuwgc|h$NAxQ+3@btyhx)jh*BVn~-NEPH-q6H< z25xBcp`?x8llx&oA-I(xqGCv^FMoc%pm7gkxp1DiMjL&-YH-Wz@%czPgZ{9A2)hcG zqMyDak{Lp6>IVRt$y*iY&?SA&fPRM06emE4rk*{^0D0^4@D7GmeIY-<3L`>Wk*Wq` zaw{#E{S64o$oxAN31W92>Nz%9TL6S_2YebL0l6A;q%Q_VxaXjeVOj2%(S5aEzNBHM5e zA?j5y{($0$8Rp51SX*X)-@W98h9R31!?UYXWXyB(QOl^06ITbjn`s9_FaA+6t)2mXxh!l#CqIzC0}ysCR( z+NSG}L_8U|$r|*$+UV9d%G7ybq^F}v8aOgIGCu$|;SV%S$(c_PLOCBtMch__%$)0v zzvot!)0q7%E2f|Y9Wd(o0SR|m_amC61N9wCRvJQEhGG-{w12X72{QdV)OJh@ZjQ&& zGmNdOplbYdlsE&?6L_pk%cz%o0 z)Gdug9G4^O{zA;Ox*=%(wqaDXdiN_Dt9}oQ8LwsJANRI(>a`Z^PBTJ0Vz8BC>O@{D zlD5SwK04nI&2BigaHEz_E@QggI6D^PwQhXB zqhI~-NQQqMhz8-34Of}7Ga-;I%!1@ve~wxipd8-RuO1@Zk#J)XJPgZ750MK?+d!iZ zQ%qCzstv=4YlKysz>0;DuNahYSriet>Nb$FB(!E?n_(<(-Pp}XkdGuQOcrgP%tiE$ z#MOvZ{CMH=+Z43BMlRrdqpBsfE|Rb>Df5wi%LyK4Ec8RV?w^XWm5 z9c13Vk|WwwXe%~E0Q)ar3_yT78r6WiIk<#C&~nsjPNSV-q`%OSdJY@r>)@5Wdm=)J zaW!WB7)Ej`Whf*GCLj6yNC&1-ghUqa!c>&VM!7 zcMHj#cp`;BKHMNF)n{pl;E*OOGCM01)4fzlQuY2&_8V3zjn_i!^EIl(7G2$-C_`2Yhv#kwWKsQYJyM z5X6^Yzz3063DoAP(l!gLMhYZNtqbYMh`f-Q^4h$>ye!LDY@KmF8{_>&ewl$2;3M_# zWV)@pwj;1+Anh5)d*XRaaIST<&+O=5S}4tri}&n3dxz?7AKcA-@^B{)iVAwDdlq*( zaD^j%WTr1}){*R{Vc&l-e8zWYi9{&|s6`lb!~Rr%WGrbS&&uh4{5saPr14V{8P(W? zK;7a&5H6Y-85LmV@KfdAgD>a^MDV82vXttR#DF}^|4SKt*yds6=(SQ?3U7z8^fq&5 zdB=||SSEL1N&4>XzZJzoXht}jKMI_GKOVaOYoYUh37gm?4WLJeV@BHHNxUQ^4)`qj zwRCoIwhXIpQaB;PMv>6PHQ64*JgQF$MI^ekv~9g|wlzKcKr#pAfZ{+5BMJtjS9my? zg+s2hl!r02MF*xpC(sjz z5A&VDJqY4)fQgKYTr)<+&l{&0-nk}x-V6SeFaG0z=&e6Lit14W= zzRbHFH+X}c7Kg-RJ$BWu&baRT>KIPK<1i@6%t2G^#Qr;_%QrImI2L*V5f(k$XfM(B za3w#nIAo?DGW?vS2d3RhiKJ7U62OPEkKYQxO|*jLVn28dH8X-4(#d4+EXiDB!qNMO zPg*G1{;WIr{u|WR6tng#B8FX+p!ZXhXP)kGsb-<&WNZ)e;yI7N?e-rz*GN7Yd&GVgb$T7J*xgPxG@XcY!@U(@$8vBnamT36N1X1$$vM(d8HX>9{+|JoZ33|q z4`}WA5Yj)H*4k$Fe~Soo$1Pyz&C6i?Wh*j-*bbL|<6gZH{sw=+qM_{X$bCP{uCvjuyW(`MSitMO7er z&9Du-OM4(>eeQyKdf!PC#$de9XHdE|%_$;8r^4UI&-3|rp?_{1D|+@E^-tPn!el;h znSZpk()|e)?i_}x*em-_Y5-NF2b=KpPX=YPcie@60u>F&6!esp(!8Rx@h zRUYFjGC2I=MdGWIABI6hqD0W?j!TbJtX4}JQ0(*=SQkWpfgKuVS`3TClzat zgvg!eUJlD&SA^(sxuhv_GBh7PbgKC`=`+`U+>76Z*D(-{mUN_SNk_4k4mBfOS!Y;C zl8$*GU4c@yr?<(oI*Aw|MfubMAxJQ#B+eP9Gm7-Wu=*e(3O*O#uzSAw?-eKh@6+Z! zdrqhM9Utt*YEQfTb+5O~&IiI_^UEm?y~}Ae>_T>Jf{TG=4vb3FKX=*H4>Hr1lM6wU z6FKA+xxsB)g12u3N+3qzE7b3zW0U^jmD(k-uk_Dc|Hh9{x>kSnt!egcI1l}P`2Kq- zP^)3JH{BsvzoSyFhUHdYpE5XQDG)LZO%@6x^sMm&{i98^r)l~mkUS+cV}x>K6gn3+ zf#^m0%*MF#n5j70`6AWj0E#S?w^@07;>#OME%h&46RLp-oz%phKlU!iZgJ%jU-aZp z+%q7w-xdElNv^NB{#S?Lw)kU2`JwzpiSz%{I{I%8^FP?n^pN~;?TA9?w%F6=VI`4E z#E0QlecBZCtHTh}@mFxQBqfoG{~yBMF*>s-+7eAtNvdMow#|xd+qUz?wr$(CZQHi( zq^s|H-DBL_@AeyGkMry7zjLoO*PLtSk;}M*7@b~Eb8?CIE;p-KF1a^9_0H$ZMK-Ua zu2ah)Yc^>_EW2BF-IOa|R4GT?uyJK4{VKnukfciPqo&-=tt3o<^=Ih=d7vIVJLx zqQJQGF!w(D_xWlJ+chMng=%9-krTACwPZXLq(mL#Ynu|-POE`%C4Y7(7@_tOT{MF!Rb2Lfqol*sEQ*Q6ocFQo*R=dtT9a6G| zSI_HIs`5arS@M#9S=26EI~p7tCx=!{8tTW@o~`=hK%VQ~hM@+FI(H&+(<&FhHAYX= z@rz=yp05T{IW-mtj+i*j?_{pWhVU{~??-TU2aY&-V#J`{te-VvtlY87RJ?{q*X%=p z*f@xtzhY)D-Z@{+&Ou2Iu{n7n?I_$?6IA9} z)6cuFq7Zi+Z4&f`1^@&q8QrL|hi#QVWkzo9BBTHA#&CWInks*)kLVg5)c{P`J@@_X zE?%*|s}JyAOTvB5UfHr0@9=PbhJKW|YYrl7m29LNc#k-Qc4$Xrf}K==gPL|WSPs5T z#w1wJP2i68!RFrOCdJb8Y#h-lGz~|^h%bQ=j-J!S?}Y43<91xbk|>Of1;C8r7I5gN zlt#Hg2{;0fHI?xQ!v)$FkQuekm0BwoFC-vv56U<-ofnc6NazWXaJD+s>C_@1B{STj zj$oJj8^$U$`}2{vX-z$sL0^C&Di>)p+@M>cR4!0L<|8SFnnxy+Hm`^#H|8%=MYJp& z`k5EPUIgfN`6T4*;w~>;FP|4Ts=~z{sI}hj3be>j~aT|1q z7HqEVk9Z&3|J~9)cz740JssUpM8avpdK$F9{AJ{(c4l)Myj7Ti^MwX$14m( zDu~(PZIXf@^N5GqyQ-w-v}k2K;Z`Dh23i$DYg0b@jkvQ8wBp7BRQl@eE&%ZC7hmrD z+GJ2>m97PG)mWs}RPZa#gMe{RD-zZDlD7n?$t*0NaS7z?O@C#g@$XeHx180nMuOiC z(f|i}B(wXe9Jz&BkMgU*s>Dt^(?>U9FQ>qi7__|xFtu5w;eDdeB;?}?eM1K9F5BOn z^mCe+P_KClld@5g3}8$5#k*`8O`Qat*)xA?PKf$1-tzVSif$uaD&Jf8sWfk}cVGa2 z`v#9PkjEvEpFv^^p234)r#RybBodUy1rwOXxe1cTFvAi60uM<5C>w9c;OU5b$jWMw zZE7L#FkCUg!mrv-7S|#U`*T58zHEpO$hO4b$p9jTy2J`qgAiLaCf7iVcX=hH3w0$C zTp|3}p+*1qG9zHGW%BxP0pYA{!}}!)z|<>9$s35|2*RqkpC-B8MJtGI23o08Y#qr@`oLl=n)(4$Rj`KM)W}@wTV!D>e}!T{*MMKi~3~#H}&*Zhz6{T0c!wviMtJI z6O8)ggn>6I9Y^>q1hrgk-5n?@<>zEqYCsAl0Nwd2F1VO_8cXPFoDbm#?C`|h+PM|q zj5VqpkK57WHqt&27CbC4?UO8y|L^pRc6Vg8pFE@i*-N|l9p_>%AB};KdS=*G5Xz~( zJGFz3@HTQA((1sPcQhP+Q~;n0t(-;35ax%ALXbchM-+S^r!diGoXYr*Ciz0)HCStM zyhrCQ?tK7OtZHda6_yxHZ`iB7Wr1Q`1SY$pWy5Y^UDh}2kqa6Q`-9WM*MNED-Mj< z?nmpHc!Rk%j4EOSs!W&IQG6W{(>ss&q#p^O4pFbxerj`L#(e|~jr-@s9TzAhVv+h` zNr{e5MAEnpGThs3yFVjbP4!S+H||$BTqD2JNm)mDsp`AXQblkU=3qF8ADKA|)}4XQ zlW;f3lI6W8+Q}O&$Nn3Uy81Nwua zJ&sJJe8Awu`n=ZVgK!`b9v3!5y#)Nx!A5bV!nkKLK#EB>Iwa^*#{@t(zyot_XRLNA zjPoZuplPJ;8dwSYj*&n`_U<`ZULq%?#=8&(ZE++XP&{A zAwdBl1Og!`ufYP_F~Df#YQn@ck=M28u2f~pvi(#oS}si^sbF=X&a$mhW6@QkOqqCq z09}bI^>hgCu~WGqF>XVDIs#W&{hpGp;WKy^|wQ7yuQ(m3m&qxQ!}6BcmiZ zw1LqnILswjIuM4xJ#^85(J4CYA-L*`#CU!9QxNh_3nKR zpO^IDfRPtL;FnCWTuev6D{%oY$w4;!nlojnhp{JT;1)Z^pcf;lKx<};`m$AgpLw#k z$nY0|))=Pr-8%+296ca5>n=8OX8cv_kM%2ef{)+LYknl1c&XHSSm2&m=|y8!U~$RQ zYHZ%z-nD*}Vs1JK=zQ~mcq}I|bsb|F@W2`FC5{6$&viWLik*mBfAKT|7Y3VxP{o_6 z#?B+Zl4nBc5Ru4yblNr`BZ;0yP@pi?a`a(dgV4~ztHCU7gCW`!dc|_33J`xo-IwKJ zH50uiUS*0(V;`bs$6RuSsZYlQdwQ^5yXSVGp(Dv*qM6Mg!fH#)Ka55KBWw8-7TSFe zxxm=vg?J5}vjH)LTy4tb-aniFJ?>;ONzOkCDiRadtexO;5QJP;Xs)Ic_w->+R^-uj zU|!HxU?_?=RKFCRu#w^vFWMnQ?eXMCoVDn*&cL%)!bR$H0{d$__N*RF;&&O(iQIB> z{=xLTZh!OxYZ9`9>4pkp&ha{39%l-IRbJpQltXABzNWnzvFqrQ)5t|FwM_IqeMfnC zeJ`VdQ$pYq$$hRf=2Y8Jm^-`GKL@y`DZ&T(mDuno`rS4+27`E^gY`)*Z@#7YmV}wL zAp_A>TC;E~<-I6piHvmrZTs;u&Y9Sg+DbwlHBdlQ@YK2*IPP;MJoVWLG;4Z9ADgWe{{BE1~i z@Vvb}z*XihroB^!)&TF#t+b&a8Zx;WJC3XB7;S8=w8fyrGaQU%Z=fSG$>UhwNuWiT zfLi)cnq_Y=?47^_Fz1iHHd2*bZLZaYJwr7%$pqD2&JV9tdI;kqy~w6ywo?uf0t6z5 z9hVaoUwiNk4?uQD){vi$sFGN5n_i8wSL|B8w)+PFqWxvC6=sKWu|h}!XI}gYIkR#W znH0_nuQ6yXpJ2d5XNmUa-?}iH3`dSd40@({(NpfE!FKvvP&|L{DBtpM=kI>J0z-Z0 z`P+Yr@gsL3H}A*SNoDA)5x>CT{$O|H(9_gw+m-y$@ zTgNc`oWE_mLRg}e8iV~Em_hjj=~23+;;!CZ0c08grfK<>D(hf+;&LO24=8R*Z{)#x zhLDtwzt@~zxGW9{o4x+2Z+)yye~F)2Ka4b!WHVM_b6nhVf%lX&7oJ7R-~RrL+g_Ll z8O+e={Uk=I1r)=$3p`Kyn8OX_Zb(E!dH0woDE;OTf6TSSE)vNQYg8f>CfhhcLoLFb zY<1fn;_w$y&7=a*W|!=0JW{+O1rt}MyD=4H8)}4AFcsevJ!$#n^OaRA-4!nc2-m~_ zf{;HkeDrTs!F&c3A-|)2#ME^5!IEojL^eF5kLE5*eJBCxiqE>0aT-RN6TTN5O7w3w zt<|krZ{$6$U}}yKSQ1WM7>w?TtjXvMkQA+sRq3Y51*6DhuGFZ`OR7^a{HZz#ztj2Dr2gfL z@4*0`(DWV=c6j&s#T+rp>Qk*F)3Q9HKzmL$`lsdxqr6ZR%-Ct& zt%CNiFu170dcd%pyBHiKT0*AG5}yEF^Kd>PyerBprT4o8fi?r2=wt6%HxkMB{1dMI z^ciJO*S;dZM<-uqqDZRmZg4X;c0d^mM-JXrd~_)yBwdCOO&S`95yxjz1f+Bc-a(%v zd9p}vpn!+`BcdIoL+b5tjMqUzM2x4}NSb{tRuCd%@dCkPRM&>`aviOSx}M5VU$&+`eK*m@X<2{m4Bzt5|@+Z&W_}N z2ftIJF4#hRCC}Sph?kZ@8P$1$P|1XG<;dD0nZsxazG(Ryn+;H2j<{pzKDd|}Eg{T* zf(gxCTl%BzljFNs#Sy#E`OC}$*nH97{9WzQ|AgXr~n+{IN!<%M$SVLB@Q?7zs%* z%N(4>q=|?qiR(abGeDd%7$gA;-2&4}VZ5&gIXnUz<%!&s92LV6uA!J`_cQ5dHnj(% zK~Zdtw^~zmR7RaKX=pGT+drq)xarTIrf7Uxku~@cELq){mne(QKN_(?xBT<009sSD z`lL@|JZCaqfRiZLK_2lOAF~m9k1t%CLAWAWw?LsG?q7gh#zijTs;D&GKZwLG;;4ft zOAz$a8?Um@zGWn78Jo;HfWT23laH2&iu6Q(R-Z=NW;iG>^1@Ae-pJuK&n(*|pUV`^zpT4DsQ-qR{f}DiKeD*~XEA4G?DYTe zY*8xet_vdQT?y>+gixabYV(QU?_7~-&bAKg7q zWRH0>v#4SmB_S=@3x5||vbW<@19N8 zTb@jktUx&#&}3xmJZ|<*wKwy2^`*?E&!|VEWTKf#JxxIo2XAFk)KVF891EG7_dS|K zfn_8|M`n;v1T4PdU?B1L-Gjl}!l?c6&*w#I&E^mcum*>A=5F#bh>uWE%a9jvC?vSx z^lR&1_M6PFv#Jav2VE(^A2{;nsABBy&8uQKS%GHSW9v$Yul}sB&s=I?DQ0TF9%MK_ zN~%(PP|CiaI!#Zg9$JXE#_2PnW977g#KqoTtb1JwH_F|NZK{Z7lPv3 zU1cSLY6Kv(^Le!+z=46ma;G#EpcG8ElF(V|)Ez3A#gKgj3N6|p|6>w|5n$S_)YXt@ zldm=v>>4U7{9jmB)f9Hk?BtP8t5RsdT9^U1ETH5N*p(TSFcYmbwQP&i4o?U~^uw73 z6sZv03woz0Fs`?LMjv^--K`r&6rpckg?omcgkQYMw`svMcR_rnNr`3v%-^k4$C;J# z<7oamj#VWq4(?uMinheh>R`GSuaLTyui!ftudq9gW6L|znBKiHo8Yq3o2Vh9I{NLy zIS)7)k?I={CbjmG3`}L+?itl5;$Koc@^s*SrZkBl)u{z#tM0|4$q9Iu5ox4os8f}J zR~jn?$ZE|sGh<{cT?gPuBpchHC{Y!VOAW&7W=WIV6yxr!oLpQa6%z@Yhubla5EDao zN%g3%Hx-J0<3~agyj^9naE0ZORode*R+bMBy?Ujqu)7jfN$aU-cQ3+}6HAB}u}5d8 z&k}#&P=}*!sp_jyxUYv#KUNBCPviC!HlKao=p{VMH#_vl12l#wsyM=W=f{A+kEsQl9hKYd2hBM@l)Axa!8rj^-wTW zcER$~fM^^x!k^Y#W%bNqs&ba^z9%*Q^wZ7^EtuyA~9AR0Ylym&)PR6F;GN2#7I znTL#nXFA)IBJnmlq+GFk`VVN=^zGX}<#Fk^fc(ECL-7X$m(5e%AsN5lt51Kd*}zri zX#aAm%&mo9^yGW&25nPJt`*^oD6y5`W8`4q-dxe-LE9!)Ut> zTvnUvn!G8HpWXiaXNZ+z;aUaz2eAo|KtNpoZHxWCEs*~&%>E1Ya54rsNtru38Qc7? zq|q!D&HrhK{0`m-q(_DUv>*;i_NF$XHlY+5pfj_8!kBAVu;9cSqI0G}B!~-n+~nM? zxzNnEt6VAKy%)5*N^!R*2>qSrU{^is4{qs$$<6T*)zqBF$CkFJ&&?;oBInYXKFL(5V%Gi_Y|R>|wZ#*(!3urLHvPsLC_&>=3McaJ}1^J$9D%iQ~oJ_f49RDmg=J%VHG3 z!NZawW`cI_{;tAU#a76ZtVju=+8392ki0K4L{1&X9&|8qm)Iku%d;Z2@kol|BqHJn z*^Vd^hx=Qhm}b7|KHsikIG==Au0&6bV}ONZ2ie6<(nPs0NolJtJpZy)r;~EC-R?j# zTQ%&2weSI1qu)?1TkT1~WC^MH#!EMkARSeC#yLAQ-@gIjFG)o=iA}iePUT9_m9$vt zmOwnD$TokDJ*zJTdlS+nYbI~C9Fl5$8w1RQCuJN(B>Q}Q$8nkpi_G7cNrfpE?uELi zCI3<}e^%JW#AapOR+ZXx4!CJ9mKJ;yskF%jk3uTaDRcIi(qQ?>f9V|Ps5D9aB1Hyi zV0e73?Me^f(}rBA5oLhFyg(9^;$UOX3cd=>q52ftz^eXvx!@}NPE`?R_R#v6bYu4c zGHvrxJ>v!MK3NE+S-p#X2gu?VV!BJj4T-+IK&n>95EPV0r696^O7qf#x?ttn!MNuy zVsgK5%O_g z)|Mcw?V52&?js261t`q!0mZN*53rQ)6$pj9fMC44gy5VzDA|SNgtj4LdA(zq8y8mA z$y!2N40!JS;;&JC3ZgQ$sE?4_!)((SqzdBg-kIcx$ZK~iH<{?0=4qXRC5jj#$A9@z zQ+0LL@zK|VlfLEIihF^MX)En!b#}Q~L7UYjL~~Y;hV`FJ)r!kk?Pr`W>Z5C0=t-5p zhFcThepz9cRU~(2OV)llmcKf@sstuiVNbU{=USys)G|O?#OfuhAJl>uu)FHdP_UyL zv+Na&^(+bWF_gbal-gynj0JGRBbz_2o)q*8u4o%+PBy#^KNoU#2lk?Eu>1bVB=8Pc z^8F4T&9UC|7|pTVW4Vt*?Zy*5aw6Fh#t5O=K^q-t|M^OtNUkCCo4g7; zKgpDxh3bq588@nXyD+Awe=q2ibKB=Dlh2p=`i_&N2M%3{XjL5g)+?z`=9bbW%1@`n zGoGyqE42^V+17DI+9PAIviP73IrxIzZOA%HIWF2C?%p zZW6ANP60W)AwrdTcLDtfw?Bv(tc(B2#hLvX%auMrj($;~LDLjY0I6tQWkw$E zD}t2^7Ui`;&;}z&#$(7yR2t$DRipwW4WmZ}EdZsPR%i+ZgS$>uOX41-XBgRvwBLhrvQ(K2 znH(F@u6^5yJ8CH@d=C|Fb}K{S<(6gNJFPftF6__Y@v>!ok=p5OZw!c+^G{x(XPKOO z!^X4wWr7}Ji7_ojJINbid>&<&Dvi~gE8^xKL?S;bZFjU$@Uq|9t+a*=Q^`21Q*w$0 z)|Fx$)hxCxuTJF&=~2t5JZxObWC<0P9x#^bV9_h&SMk)VZ8+dJ{LF1l{mjCv42^TdWTr%n)e6HQ2$!H7ZiQ#3l2lo ziN(h0D;t{?0#f0!yjUFBkp49;6xbY=qK1ZkR($~WZ-eeFZ;(>=)*uL(K{WP`dt79e)cF#qgNodDxPxa;jvQ(X5 zbT1vs4jU?uw9oT8u_f(F^SmV~mDlaQZ=Gn-7%SM zRiR1g?7pS6WfPX?%&|pRBB-s4X=d};9*t&PvGdg(S=pSB>h}BcEc07{eYyOaAu$FV z1*)s!-lHGO+${_DYOwi=i}fvzT>j_C_VH!5ynzw3q=9{CpN2lX-Gz z*k58heZ%UiiKEboi1DhK>p5VY8SORIsxgFT3%!3>{j%F9bgq%btO=D>4QmZCmEpe@ zAKiYPG7u|J+Z1B;IizvmS%tub`t1_aHOQe$x`&p+Ivb zQ+4}Y+OC}eb19@bFN4fJ!O7v%aPiG6!X))UEQWo?iC3^Y<5D*y-T9p=<_sZ5{xP*l zGq{E}>9?#_)T00DkWW^C$LR+L0@{cD|HCYKXJZGq|BP9xZ<_x~N1k8eCg{ca_EZ`) z%5kwkWlhSGl~o#O@O}QX>q9Px+2U65VF?fdFJ3$Uj;a-v+1vW}e9pV*(}f$;F9-o( z-c+}n?vHDSYquAepU;nv9H3@>2~q4ZPAB{#1GS)81U`i!3LJBzLt-kt66eKzowDQv ztb0z#T4v-6d+_FHL~IILOZ2i4^+*f!S^8pqxq;Ye>6fxrT~VU=Cjbzf#8L<|cO_Av zs1tYi2s3x}0R(s19tDo<0S3&>IRJLX62LzcL8&v3z^^bcasL(WN#BUtS-#JLQbVPt zgXpq62?NoQ*aR7%%|<2Hj-u7PLz#%(unV2mR{y8}LmoL$h#-sR57=Bb0u>weee%_y zxuMYNUE~4s!I=XqFR_CPYcyce!!PD1ctWue0^rTVTLf+gb5whA6U(hz=GVr`_+-{ z$7f3oKB;hjBfag5sU>6#DVv*b+Ix-a3#*X(z zrwEHIO$K;XGK0U{*UCG(%%`af)lIoH#mLHuy~Y*@kBFaVbG`MLNy1^%)D-T5!`a0B z^ec+BsSUv4{6hF!_PW-~K0QZnyx~&%Dm?A;bi7d` zf0vP&^K#5pt;|4hl28d4la2tZGFnfX2y0B+uq>HyGhh&u0<)wGGSuae{Itpr=@Tf^ zqDB;B*c=o}HzLfE2B+Q47dmwX(@a^86zdL}ImQOl)j>ItV4JQ)xjC#1E8La7F z_Z!(-JxfoQi8f(s3njbv#3nYAw^p8i?zk{4gnJZA@=Rn26}ySMf|&OuMvsA$W1l%* zaPyuRj~tU|9d^Q+cS%(5rn_Cy&D#hg|e$HrQOorxSZMf(%YBMv1CKfi~EsmHyj-P6;e)-1-yrVbIB=jVEf zgFSF5?<4*xc?z*Z`O9(eIbSivsWla&r4rtNX?22Ui{d&-I^!B@*=hAEWrupAxyOZ` z73eUnym3Y4hh@9FaEn~~n{8ZH+@^bMhZ`~q)(^Ig1CuKz{S?_kR*JyR0I{zZ?@v~# zb%rk|JunTuU%U9}iM;L|;;|_!x{9yg(wq%fl|+nmw(?E^_82mcpXSXgZx89}%PC^jQFgR+Ee!7g1**=bE& zZ7NY^gnuzU9c*h1E>Tcu&pZRFL716Sn&#Df<8>_V9tKZtb`r&lv!HE5rS%RvX4h$V z$M60P`(2g*07c_wH}1|NMoU~c+b5I0<~xeU*jEJ9G8XJCzDTG~2V`=%BPJJqyanyV;BQLGElmGQCtk)vg z&i=PqB$NUOi1+_mzbhE)8_C*Ox%~%;Ev;{(Z)$99Y~%EwUdJpA2v4k~v>)Dy=g30w zP~-hU4q@1lIJ#V51v1cm?7=>lP4?deLG;bT^@!?3BJnW}isYamz!GrPsN_{1{Ng}( zpkle$M;06sP}XRx*U8r|Ewvji9@qWfI~j9o$=D-u-f0+J{|1`hJqJ-A{UI^D{6b`R zn!N4)+s|{xkI`r;u3nEbkCs8-!k@3Ib)Q)Lx7j(~l0U`sJs)STk9d$@C4dJHdpF%8 zIM2d4pSRPVGdRkxIZ^)igqZJ;Z)#c}1kZ0uS|7#J8{Twr+logx`yXBVx4(E^Vt8+6 zyb1l4c7FZ1cxVoB{X>vckQJ03UX7{$nz9CPes1BtGG5;3k~i`}63E}4TH_-hZk#D^ zZs0S>DGouVVM%Me*#nNs>lY_(+`31(IkLN8yp;PvlssThZU~8oLzJqaABc4dW%mm9 zaAjH~*GrHqrCJv!oV;_QmT$yKvcb!r6iF#>W(YZifb8=51xg;OQ&~ko+jx#j+qUSx zVbSLpm6A@`{TXlhp0fWtbkfY@orR6u8A+XSRKMlWgflNE92bBmr|2Hs-WE9}ikCMd z1C+mEoW>5zR-sM#Xyy+KYsF^qJ?b8jS+jDi4U$zeRNqNy=RgGB$-6nhjnZ2KWlqWc z8|96{8wh_9RP`05YbiErOmKgezopO~ZLzudK=^r`b#PK-`dw9&Wg38JA(6#|J8k}; z%-WsW8aeLkuL)&zT3o0;LlRq>N}-JGDUP-X4rbS|q>@dc7DPlD zTifrcz^T7KX%4{L6h5Zd=7goVhsgvzHp1d(F4^9(Roi@e#ZU>FJ_!p@4T-tiP^Xr1 z7T(Kzhj^T1T`^lepl{mR}Osu<1;L0_~DxkDm#E4o2;XGto*n|*I^SpTHj1+X(BBo=pCMg?r9ht&=rpmIp2c?GFhc(H(j3-)@~4lYCPIttjVW0C!$0_ zO-&33cl?cmc)M$hR|y7nkt7tckSfhvtRGuV%~5@L$mL>HPKC^m&=NkJ9!}Ih!|&%J zF-KyenM%3toS;YM6ygFEjb_N=sN1|uL={MIhWVl}Y%)IkqHx2-N$2=d6X zhsWSIaA+YReZQof)M_ zR=YsrYSQ@D5MKmYn;t)Dh1&EwJafzw`~01EO`wM5 zOf>&iE5$_0EIL3*=x=>&`D<_!sUd=XcZ!g&RN1tqucpa?+Yy6<>1-@IX>Q)l%4F?~ z-ft`gMRqOJB+x9vwm^fqB@1WPm{P3>Xc_hpvM$ZE`Za$F-Y#G8ajFw_UD$zqz05vM znmdOC5q>*`91JQoVvTFJGz`mN&9Ep!SDz(;riJ zIK|QvOtESd`c&%X6{vEd!o^dkqAohjGZRR zeEQU6B|yDKR?Sqs7$wpe8bok~@~i;gU?%kS3G?Ovi@7`Qr2t%}K7iaaVVLcK2Gb|b z*0}r&kgNPEiRqKplYgtq(j8^1`U)F$bJ)TBjp>6UI2>p#e$erT8+5buishNpzq9zN z$?fY-D75@1jb$tDTFF|rrGIDnmFrVGs%KNw-ZHgJq-zH~0t11kc|E*Pn9$hG<9hiuyLAlpt~9;}?9$sp|K_1K zDUyf0^h|`a@C?NhEDv=-zNGI!k{kT9LiyP`EW69{mAK89HA?%4iHBO|B6L9ZMggr< zWro;?+hHRZtt}BSX4X02Yxg2u0u-49jp;=%e1Lbqfca0XL;0CG{CEF^#oJHUDE*4r zH+KyKd5bJn3LR%|nw(uFT*wE4XmMVzenM)bzt4pT-A~_6ihikRBml>JLSRxmPU>Ri z8NQ(G~0$~`n1Po|eWSozbdJ6^*ygmyQ|YB16JS2iVjOr7BXZt4x`L+>M;5j+lmT=-ui(ir6cM ziAJ(P6C-op@s6vFn=JPJE%{sQQp(XCdF;UmL`x)pVVU<+>2ay@AtN?S(V9{K1zf#72^yQn@q}8h>ooZ^uTf`R zb_^1zMH3=@(t>;rT#^EZ(&4F6ZW$(==WC}#t5etGxuCZ?oRf`##X2fJo5i=rUM1Gy z@=94)zfa{r=&l-J6}-dgwtZ+~pGawDG-_NPY+lI6I@j&FU%o{3uZ^HTwzCP^Q~SAG zUXj_;j7Cxzjb6VtP$Ng?5bq1}+n z{#vlM?Z9pl-J|0Yc6?Gaj9s!+vb4_@qw}bsf$7~9!nV15m`yz%7`DK*xXa+hz@H;? zGzgd(ti)8o6V_xz87X+L-;?eoJF}+Lj}PAsNrjQJaXrLyAH-BlxA|j$D=;9FT!}Pn zg-dX4Q3p$E@?UkT#jy|@(F|1T-06vSOufO*mq%R7+fP2kD#n+D2VZz6_x68|*WvLd zAA8ADTtyBKn3gc^$VApQI`bRD>Kht(5Y^WZt1b^q@x(|(Xxmj{kcIq&;ZPRrhxMuK(bpJR|Z<6K_n@FoS zBztAf87#&S?pAChm_RQi;oNeohJV9QcKATW8mD_d0gT_wd}8vDP8r+%L&MEbwZ(JD ziYsm_e5;3VEKfDK*+Oqv)p~TQZw7j>PDS22b8Py(Ft@j)T6W)sKg$QQzm5gBRhpU-4#lf86!gt@+nCfC;F283X z&#zlhBj|v!N%}~U+fkaH2N8 zkCZY{v$V&?bhzr0**N8FMf>8C&c8=}&7^(JgaZXRh{ln@m68C075dySxBy;848O}y zX_}hG#Aid2nbo^HXxH;<|6S(L(&AhD z^qv7li9S~DtlEKtT5GIgFj2ESBP1&hp$Jzabmd6Ka*TYE5IDX%;YDE&yC<;*0s2UC z0Y!7RskjS!&MYYnQHa?mJrc0jBEMH&^Jm6DCmfnW+xeDWf?%FskJcEIUDZ_2oYC15 zXmhTo9d=_c*nkbL9=a^=zdXCXmoS@PTIm&qJ52#f9Ac6&a;0vm7sR27v$b@U6m^^eEksTg!5Y1G3tB93K?P-1Sha*moFJr2B+W^* zWlV|6f;cMh0VGNt0p396kh>53ocM;zm+1?asfr-u0gv#BSuzu6`ouk=n540K4**c^ zOV^LvXD9-xU)A5h zZGxAZP&n0s=IuJ?xb+-u?zFiG?n);2Ae=%m{00OL@AmHfbBdt7IvkNn9mY=-eBju9 z?+F+%ertqdu0Exda({)Wz|D;%cb!^&maGed%43gBp=X18)7GdeexEM#1$6DBg|(UZ zqT=N@(Za3(2k5a0Tm%V%Vuzeo4*XKu0$Kdcs%L8WZ~qmAU^fD@8rKFXP97;7PHb>f z0&w6ugd3#7wrU>U#$IRAZOgYm29~44u-nyY27crC-`<7s|SXmW0M5 z8UZU`aS=Py+juXa1(Lz^ZN{a=B&BIn613)|X)QYmYlTHZMb|&>0(6AESb-DZbZr(_ z-|)t(5NAwMTZXMNB?y}h3{)w)?M!%L;OkDOm+jX>evgsyp_TE0ouRzwS5lNBAxDzk zr%2Fxoo{-^@k)OXM|3Oh_Zn{LF{l`=45RmszeA+#mnHbP_D(p$GITVQU>{|-8!YIw z9euyg&*>BD0k*kxvHV9`FkW%6P{RuSAx z*=>$KNLFzixo@oXiMD(ibsHkicpP6CL|Xuc-ybg;QR_xHIhlvd(ixvqtYa%QDtVJ9 zEp&)+-4)LTWd?qzC{>@4i8;)@245gNsnlLayc*yb8!uo2 zyMrL%R=TZu?GgeGwpiBziU>5jDaP)|3)Y=e$5J)7p6?Kqx5tH(6}3~<9ZcEYxp?l+Hgiwx(MVw@c#LM9hwJrkSgAl}8aX?eTgzZCab2PX}+VV~_eCszZ z2kKBh2wxa?pHNBjJMc3-1ExPfOCe6cTFClvS0=^iXtPgRi$I{uA zRrAl2Ig`9eNl?WC*GRr3N@Q0!xiu{uw0!J`pHhsLZsf=6O&jpU<_3S*V#?htRA#E3 zn@a!ZX_T8A+)i8_Z+@nE4=PyWi8h&fKJ^VNZCg(ZIac91kdub0|Cpy-i;1wn#eO~A z(ppqH$|V)O1DZNgC_g+X3ohvhpAiNL;{(LvLmlNR#WInH&DtmLQ-00!0Mo>p7{t;R zO$49ahnNMQYGyh^YeZbs6q5ct{ue!wpu(_u;lByc7%mVH&Ht78QgqUHa(4XBM3)+r zr_w*7%O@diGb3Zd68}`LHx}d=Odh!wLXRL9lz<;`8($}0l94_wjL8+`PT8`qN<-7a z5@lmurQ&W5tr0q`G5iX(rMYQixe0Eg>En{uIj6c~W9ci$k!(zgG4M0_v-KqN#`DC( zXXkCY^KrUi2Dnu#yV(xil%~`72J=-1!u?JZyt`)DkpzI?W0m*kFa2%2|L1If%&p;* zn>vk;!LF>-rxLz?&kbJbmd-`q!XMaGrq_A6VTVDVDQN#MpkMk)C^%KZO-5KV?dPj#U zaa&XL%J$h2_EUR{`n@nXfVw^GllE%seC$IVc>DX;kL5lN)WmHy#V)ylSg%09yn7mQ z8X_}^kp#mL(g32O1o9?h(ITQIX&R$?lp?ZSImLn$M8%VnqDi7e+9Y*S#G%1c7&>Ew z#h3?m8jYh=S_NuKs)CMxi%~WON^xh3!MLX)YHEFK{6tZ(lEx~Pah zf#UfhAdMm=qh4sPvp-mNZLAb&w9c@VN6 zHgNY8me_JF*0FIg$A!#x>MX42Uv5uq{)A1JrGPl1C2M|aVvVPi4jE3FWVcMelt^F+ znioCTMC;n3WPuTFR!_XUpgkj-ypQ@)+?a8XNgJAcPGG%*n3tF$rr;mpFrT_pa(H!tnnB-|lBFu9PFT9x;5*Dx#?IhD&zlRFa4$ z^32M?1C#E%EM#{Es*IXCR;fYxhs+EJJP);YP2KBx7&*4;_WDm3jA&O5{{Fw%EjXfKA7UV=yygE24P~ z*_E}KwK?jd)T#od(x9R_y@pjXA)WHdF!bL;mr`cC_^~(t`z^HL$ToWei3EK3tQxO9 zK$SPUO4do^IKH%>1T2`Dm~GrFe_tf_1hbpXJVA7L)4*71iNt}G&)@V?%Q=_aHmwqm zj%{UQnh~3}I~=hqG@;>CH)&1@f+hYi$mXc$@mFy685h=kETps6c=5Ik3+cjyt7{f{ z?Y#T&QG=oRVQqGkQ4P)IF&5^ppzxxo4Lhy{qkNKu;oo*41S{+HI_Xy1{3{TsGL_RC zulU!@Mg=q(g=@*EYgPw>?3AfYHXOzfVjp@~IlT;;)hRR}9c;^US62^j81ojA8CFFL zp0~4J%`QZ}R8?jlZj{pv-qdAG@^wwu^HBF!ZuSTa-2=AEgQ)jhc24D_^!2$Ib{EX zvUd!!ELzuev#QdzjY`|LZJR4?+qP}nwr$&}G%I;?@7??K>F(R-p1W48i1laAh&dxZ zjBmWpJ1jAlThtu4aI=N6=bZW~GVFlG$U$dPin=FAks%{Sj{Ix@7+ z;dr()L2Hv%CgTnhvecz;Z>T`vA$W!n&#S@sX+s}4cPHMq6DzxR2XO06o*50G5P?+I z)WnTH2)#JSo_w@fdV`pa zw4mT6f3*7^M%+TJtAGh?F0OAcoG+S0>2zVi5MzEs(OGRoxV1K(wZ`=;FWn?NI?+9{|-NAbHI_ylMH*9or+`(I?drz zq{M$8Nc}OdKaoIzRg6ZKk!U;!K7e9Id?S8P_TGq9qlq|)^Hq)+5F2zd%IGClP@Ify zwswl;Qt?{ z$tl5>;B{bK1_wrw`a>EZ8YHWpm;3#mN~j7Y`cYd*1VB;5_7 zK$CL9zFc_4!n$2YlO_evt+rN3URE1AB(hl4xtG^E>1Cc6#fOPhms;@#L?|l}$I&D< zh>~wV;D*GVvbp&rB`41YZEx#pt)P=KCQ1~+nDZM%C`WH8ozXgHJoZYNm#MJP747PrG{$x{RSrY{ z^ne;n&4-fp5Hhz}d2$Z6O%;0K$rFSKP1@;EJUFmk)5|XvmwZ%N~9Dt~@wi*=`YWk;7rVYE2OQduVWRoHu& zHWi2=THkg6mZjVHKD^|>*?j)J^`KeWT$7K2n zHldUkn>Lnoo&JRd))mrUIh-Fg#f)bHj~!Bqo(a=?P)4}~89$LtcKsqSVS+KsTb5VoM{x478b9TIB_d`ng7*8yFXvAk4&(xh5 z+ec+&grAj_JTPU|7<{`_;W7kj+7%^vie%N*><~o1?!QGMedV}(0MI9Lsq>H}Eu8HB zH3-CtK}4z{qx!#OW7I+rJ(A+?7{z+*L7m~~kAv#sX20?%Us@ntkSa6`Q4Vl7CH2W5 zd4k^_uB$1VDDqA5N*I1j|1~%&6>UpAm$2KZU#SgJ(InpipW_T==Jcpdu*YpI{7?4{eT;hTWYVt1GR_N>b` zfoG2{7e1-Yebodvp|g+&y)J_j@js#CM)dsA5L3W}$Q7}MFgL-r$^$jU_}9rD#Lrj<83y z09}4Q3D8l3BalGp9J`s<-GNgu#OL_{IZ=C^yZ-YR{a}Yjd2;Y+z|M?DwC2b5>_P zI91l(z9_a{8@Q(g1u%e9eELK#cW)@0*bH9&t>FveKARtLTJa4bSEs>$UjUu>nLd|LCOm!g9vf00{uXgw&XF}J)(yL-&QRs3+=JZ{ zcz3RVUjuEthwq!sfqXV~KI|{o$OimwsYQDM&*~VY{RJDE-ZOFvlfYL)NR zhiki}f-W5$kwM5RN{8#p5O+J031GH27E__(I2f^mVh z@Zwe;%bhqudX$GN&-=rm|yv2)P zGrb!a5ZNNHZoe(`#PvM%&=kc;E2K;=e_0z-ci=3z8cyn;Pnqs7-ZZzy|Jd%$Fn|$! zbT_!xW4JVw7)~Pu1plp~8h&QTx;ojhTOKA=$LX0KoS<6*1$WCDd-Nz?!jdXzN#ncT zmnR=SV1SSv6+TUAbCo#W!%+9D8Q1WXt{#E_^og$pE7qf7oDBlP4CUrsRj!6H*n_V} z16*aY`|j-#X-Dz9DS3yV4^cdIbq3hokZ8v>3!lL{k;(euel6S<^ip+Vr-tMJA0L?d zVZL+K0@r|^-$w8ud1I{l>w+{Nur?0Y{PMWb*ah;gh!_=26-dh-Vtj$LR1Z~klk|om zQ3%LU=&|XIA977AI>n-5u^B~S3$tNp+exPIj9ABHh+#fJc9HI+v2Y}Z+ykr6AY}lL zzc+F>_if;AeC0-0YLUxzDE(tw91gR??$?#L2OTl&>xr}TyNgiU(gbn;{uMSNb!N}b z9-gbjrupRSKLp`h`-fEf ziyJ&mKQf+KB>NM@H5guAtPSNV`c%SIS=08s?F zaW`GhdbE}NAbD5RI8wZ|N)Ow`sIyq_r;BlC^)Bvq>}_#mi_vCE-b8AmTr53F0A*@0 zK>=BxQY{!GA}-k~l%#-opSQjXuO&wGi%U>k%TP0EUkW_gD1IUxrG9jtmBRC1blSFL z+?$Bvk=W^((}s4Fv*x@g&};zK2eh~~R`C=DgWCur)7BD{aP^e^1bJ%T&)aGi9eo<% z^!-U+Kt`WiaP*}6=#^ct&~zH%XfxLtTu71lRn%DmDjE$N$QI@bx8egLp{w7qgH5uB20gge6!;Vejq7IiKC+T74%&D;9Ub*$`<05?!kkEdFU&86eRuM^ zgt*7(^81uys7)BDk>61Ea$`7x4&pAtOii_ifq4A%j?1il_$b(%yZ1i^;@Z!m4#ty~ zfR8gxK?!TQo#?NHIzIZ1q<^DrvSpN*Z(*AyW{WW}un$1-f4Tj%#9@ZfgcFFNyZW+G zU3eQEGS;IWK9_JL|qa=cf;Hxy2pmM)7MGQIB#)w||s!&%;S2sU9+Iyu+YIE7&TxJS1uh zd{%q`ipjQ;O^vSMT@@ypEYe421K~rL?zM3PG*B+@;+VK?I4PluL&VT48MvB6cGxHp(HMEk44gMWP zxBiK_GwV91@PZnn@Xbz^-26H&o4Ii-#KgDHvr)ELvnf4;|S|D1T@5?;_X^Y#~V#-K)$6yxzr{D4u=kZGY2 z2pg5Y6r(n9n6w6Xhc~CLNlZ4UikEB{+I!?nloh0(S&l@fZl_(jhilWfaHx%3;W^Z)ygRFp^+8pLjwGnO2qdMkf&Z3n4qS2O*2U#X4PSnoMnC? zkSGW;{-TXjNe~17%)90c`?R4koEf|&;aW*i8{Q7vCi!z=f#6MT$V+kz6c;9pErpj~ z6yhDhmT7%0;n+mAKZ;X_`+;KRHD+w|yFFg=^z)uRZB52nXOMop4g3V(NCPZ)7yGhP zYLT)rhbRgPy&vBio@BFI02U^0SzUrpp|u&YSNcKp2e`SfTsq-7mp*gC=Mgw9|LO@i zwWyzV;m2b5C&@fsc)UlNkt*T&`F{}QKtR{dTK~}E{l|y+`=7IorP23+j`ohU4*xv1 zjrN~J`9FXhM`J5nOMORUhyR4;{NoOZ@MWoU-!`Fo-yTE%HJbB3@1Xw=NQcJRDoJ@G zdV>YtE4jx&?>YcxwSL7*9B0M%VvA6q#ktlQ@h~oV7_knyEdHS?;@u;poo&3jQ`)a9 zmTO>u(KJ}8WZ~RVFR#Ag*v>$o3$qJrHb-~QZ-O-P=eId{FwN)(&kcN0ANUi401OL% zswq{W56OJUOeu^i;_xSUJ58>(z~#0FTLpLFA7}-2(H2%Q?9JY2C}6IjRP|j%f$tFo zBL*RMoAjN71S(#4GPbz|#t=jJv{|!5U=yESvqF|yhIH`2!R={-R#lB77qW0B1`lw= z+tI5xUw8#hP9dKm-@%SYHTl*hhMGvcKr>06KMp@YuTG@D(mp;WU6ba32fe95w0Le# zXj5&f#p5l&Fo|!x1D7wG9^&#ZroR)GcTP=!6J9rP23&KQ;4R;XqE0LifIQfxR(|pX#k| zjliUC)MR`U)faap+HYm&qkO`xEAkn+Y}8+nErg??1xOOJ`34`5m}N1J@L1gLxk{u) zGTBzQ%ORo8r1C8d*ne;C3kQM`t0bHyS~%yMAZ4~I&Q`mNIRT&XcIn`OZ_3ZN6qqQX zWq0~Bq6#mQo$?#wIMGZ?~$SgF>1lle-R$Y;>M;52p+?!)cbj?-j-555? zh_;B92&oF9(lq=d(6#Z$OOMP!W)T+0v_Tpw^wvgEoOYz8l{i^=NeDuS; ztl!=FuXMQ{ey-1P7P5?*EZj&;Ul|eAKzyUXrq2BZ&Yi|H^n4%wijU7BFqcZ=olX=S16(o zx1{&=7X2F6>c_C+``vO~-Co^hi4;W4fmbWZTV$J{qBg7@1$ujjV9{LD!ycgvV6ex& zZQp7ro_pe+VdLPVTFd)ookK)LmF2WTY4HeeRkM^`g_rv|=$ zke|3jR8+PQapO>ZX_4?0)(yv*(Z-NF9I#Hck+qStAeV@uu0MfI-pUy*B8sk6m6?sD zn-q%_bsO0Zb^=vbHntuEDXtiKB>jechkYcf%eDkzDs$rropS|1D)<0;Wg_9~M-tUc zEn3BfbQE-LDHEHXT)ZwKYOBD)C@1YVPdED=;h~SC>&X|`~BFq`O!ek z41#?|NIKI{o`?-@%}AwglxY0M8%n<}+0l5X+FsPB1Hvs_xoS^&mcj?qge1ti0#naC z?&RSzc>Z7!aUV;SWU8qFmK5po1Hzm_OU7G=5+v3cnYDj1>tK(0`X^|DkaY7slFCz# z^vw$C2@p=2*8Fs&T!7Elvy;-X;}8Exl}b}DxhaygdV_v1fr5SCCiGjFq1F(a#KT9N zOifw=>^}yB*Z&QR;YljBcoFL+sdkGw%QL#eRy(9>z7xScG-E`m=@dva6?paR#kADk zy-(=P?H%sQhxiUC0D2f*k2`E}&ZIy>1@Br@1_G8-2fYo6Hz;o7~u$)snO0?}tZeg*O8D|;K9`brvHmNTjV z9xx3nxmf?=a?!~@#ep9Ey-=+mV+?4!`dc9mV?tLI1x?(nrilBELu=`Ec=>~MV+A=M znl-NrbJ{bpUU_}s{Tsan|7WF_E}YBN`VL03x-Pn)0Nv!O?FWU0FQRrY9I6u%B5Wf@S)+d4aVZt0;G~Jw z&TYZ9bl}?Yynhvn5-}}6&?4(%C7i&SG;MG}dVNK*4)o;1ouD6Nc*Or|Lm-!kz@`|R z^PNCYNiTX>a2vjXh(eL*_v8pz!G(9M-ktJTt$>th1}n=fsh~m(sjWo;`FW+V2pbrv zl++F{RSe!_>y}VrnAV>XEog;JL`Bs2+u{NOj8Ct+hQmdMw!gOeg507!iy|RNIHF-s z+S9H{ruw&%9p0@xsu?x&H?JTr37!Sg#RM?7So+?-rmGv&%d)xvivEch(28-nw|EfY~tnSRdz@ z3%XRC8|$D8Pva#cWR5d>P!}X2Z@%@A7MFkqoyAOmH9mjO4OtFt&0G} zV(vB8ncBg!Mw{~MGGQ67U_Exa{Mw-`v5)6n3XC5U zOP1tgHuPVp_ch24E^P~!TRNAQQ8MmNHt#DV5Z+V%D8if}xy#V1Wk`=P95=)~*`=m+iFRJ-lATqhE;lKPEo-1!c zVh(&9TwK)5r$H%-bvVZe)SDN|{0tz^%$_tmAnh#4E_GBdk<*hl!!u}`%RUnENScV! z8uCY?Us|F7AvIrdFnc_NwwK>bUY@jAqm(kXgj877j9@5!Mq?$cfnQeCmz)|J%9O&Q zY^8AMdv!}Hn*Tlv196wUQV2G4`l>HYLUNRHdOfHSnQQgK!KbDlqJo~wjomyzZKj`* zpr~3BZ?9Jd^Q5%&1}*2oNH2bbkK$z+Oni}Hl5TTSZ{ppI2@_ZFZGoFpY(H6}twxF( z(g8Zf#F}}X8o$zx?ZKBS3(uH}rse`2jRJ7IY`7YQwT@BY*L$r4aQ^&xfsMnyd5m#SlJ`?ZT%P?V(-BW6y^Tp11n=Eea z6JF6`cZcIFp_aWi^Edf0*Q(tKpVyV`-wD4)a0+|68iH$Pj^3Bl0`Hpp5FVNios zVS!7nw6LUni>K6Z3+)uWp3`jXW(hL~wt^hHoHFiey?*CJYW5opnDly93sxx(8(xq?TGT|2^ETyJGMCn8)9 zxGA(2~_o7n%>Nt^xR3680F2}FCNQw)(Ee^zAh)Cislt&#Y(K7SH@5*rVHQ4z z?qM)hUmIz9D?ss;nHwqc0)pFMFe(rS`+Vj)p^N3n{tBlvIZ_()w$K=?p>fwWI`%|m zpw4j|^(hPF4-GwA>_>c!3~{PHQITGRAwQi}M%`|1T78=)uZalaH%|i%;!?B5qtXWr z34>D-DKZh7nm?6_>{D9$%>|?qxWl3-MpupOZw@9RG>1I4QZgBnQX4L&$`ngYn@Hv} zs7w-}<1!)@duj0x>tYNtv??zv@6PfupcY)3Fd%TSRrfN+W-)cKR}g$8Xi z!|`K1quyzPCqYaMRp~9Luzjw2cX|W9Aa{JTB)6zHnz2!<#BQ^~PC%~jNkCj+{FOi2 zL*g3Q9bZ7P?^Au_w1LWt#j)s1qDN0t_7kw;DC;j@qo=x7D3^P5Csi-SAH!?mEF~+X zH7utN;U6QwT?KL?W70p|h$SqcAmErKwa@iE9n(KZBqvyE#f%RLOd+vl%Br1erME7Y z64BNrjB9j?8>_t{^A*tD8XbCyH9Rd`92X}-X_gv6rC`Tn_B0K_y=hx1+o#0r4zB^U z!s)8oiUw)P-@?G$zZ3_n?uQ1e9^k@=&Q;{PJ?3X!#4?aF^b`>U8d7vu?Qytcw z+fy%)TCgQ*X;j`;mHc{qrEO|x2A)S>s)cO9cBR{Cs2#waw1r<@5*!tI=@>GhV3s8; zDI;c=wo#ufGBr3xpT4K=NOmD!=8C2HW(~-T>{hEJgCMUd8%26%Z&tq&hU1kQrt*Aa z^{=6ObggYNA|m{WoSLNc$MJL5*N5AQyJ$Yiio$)X&btJuEfOc)wtdOY=WlEIYMXgK zz2He!a|+VHZ$Pog{fvCr$(=t2a?|TWV;sJX3k2D+;qh|YET%VW`1tM0+89-sA6tPY za8XlY;H@Vv%qyKM&I>Q`>**%LMx@*lPOi zs@K}?FL~8TC4Y-w|f=klI2j$L>?Kqph_VeX>wU+n}C>Yk(^T2 zxg<+;9%Cti$@U=JIQ=-`oD3*eBajGYz5uy43) zZImA}r#1BDc z1TtxzJt4EbxBOS#2-L2j7Fhr^6FQkYtw2(k?OEl*(7y$AI8;9e%@WDq@V9q!nN#5Y zuuHg&@*7VJmxtd8tpFSQwlNBQ_Wa))2CVTeCOaj-G8Fn0Xk+6D%POraVW zARsJ!ARwmy`a*sOH)}%$isxB^(luCm|5;=V}b^+>WgI7kd)!{ITMXmm5IV zV;T_dFp)P``Bu*3K^+jM;t#2PJF8-)6NpRBn)w6@uWE4FJwQ^ne3I$Miz4%#8{Q|C zuhWY^oUYQ=$xpQy+On&ZkC*UrA7)=xdAnU&ONmXF+PubMFQ_wIw~z++`if`WfEU|13sX$(O(KpIc1k$%WGc;BVV954)27% zsy7pa?|9xt>ou<+-U!YTxIH90w7BJADGr6bq}>A1FCPl0DZaAdo(A9&Ru{{5lyRF@ z!=MGpTjsFD2T$aE$4}pb{9IEG*OphCb04jY_tL#Hiv|@T+@I1;=&`G^k-KFp;TssVLHmmo53p?w!;t zYM#5PNtX7!E!qsgR#@&J*~KrpBx>upVd_~21)@|PBV35avf>_|y^&Ap&O$v4S=onT z#BmNOj#PWCiYu{fC|Id2l0Jl82>e3^8_39{^(`c7E`3>0G!7?B(Qq*8PoJY1XXTA^ z+CO>7)OzS@<6JFkoXj%_^@;1$}(@n>6K+x zkhjo--`lF<}D+lqDZxs`DY&kteIwT=dCK7S6mq+y_TpR z|InYOM6Rj0-=>jtg%zeXde#S897)W5a7ekXhx%^ zr_2Jlxp>CI)-=h&$)2oHOjydRS+gZHtXZ2Ntt=J~O$-Mr(M;8GOk|F5%#CI~Us}2K znnV(9#vNkEM4HU;2_<2m^=5se0tr&a7;+NP>$Ox~3Kx6rzLC&uSRYAMi(y&*HLXO< z5h9@hl>%cbQ}dAEedp0wdkD;W2^!V1{@A5@5vOHL#CRv3w*J^h1@V^-amMJUq{91I zgsmt7)iI5n&gouFV#{xTGzLBW(O&J=jb1tt=*?gxo-&p~5p$R|GN)k6cnbHC%KC%{ z3Ztw>(BY+{M%Ij@bHK^TNjpb#P$+fcZLk)Rrt+DFV0FR;pfrhIEK)7tez}bwr-Ice zLkZKh;-~uT2%S2?U1~>1y4>&JM}l9^5~*Zt4Q2c1!~50d>&H>y{mzkCV)b!2ckY7D z5&;BJ3P%aQ1=EX`NIRg{ss?eSLb#B{12+RyZsjC-)(l5=0IarP+csig+au)bj`Qkg z3IIH;eD4H;t@{4hk9k2Bn?|;cafamT@K{OiW`BFW+GhRG#)ewVmXrc_uXzixoX);j zZ+5d$g5t1EDw{+37IZu_I&1pF+D`E-D#pP?qQF}|S&Pd@9t=7oIk5@BVCacZS;AoK zB*S1K=7aI)q6%i@hTwxSaDW*dj1TTF!h&;tsRa_+X?8md#zU37XH~7%Xc+NbT*5gF zIB5reNUnoPGcz{(&F~^sigJisI&>F3M9a=bO26IlGzh8gN>08I48{=Z4q9uxj31d8 zTgyqx10A}Quc%D#?$0zQm`4md4+NRgHCNjv;I(syhka`&u8$<83A`ay&?Ct~tW>@A z7PPyp31pcL=b+2F-fFDMdeKqp^g6lb1NU&rF!$~AROPA~tXGlR!`vo*9q-NT$L-PB zB(o9e_oN5bXc*jFx^b9AZP<%ALI(o_;fl4~)^ICnhR403$|KVj(aTMof|**)z3@5U zaY8XxuxixwU7xTVtv9Vz;4Re0)&PZ*#wqNeGcL{SUsfZ9+e#t%adnoRN){Z6dl6l0 z_q8#^>H7tS@{|B$>olmLG){5{KovC$ol89FpF<}U2ZmX;g;0_(eonV!+1LG`7$begAIilOT4Q&Avk{m}GxbLd})9%SP{kH1rYI_RuJ8nTz|~ z5G~X{-}YyOo051fi^fuA3-oA`*>mGP$WwWU2lfP`&>Zw;y4|#Ha7Kl&>kkU9cq1|G zbs%UimDOFszUuaGhqb4Ria&2is5{h#rwjh>i{(?ZAkSoeNn&G4MG8+TW*wIn%LEPp zi_{oh5wT?cO2w8tQ)JCa%N^Os8xAttI=wWvu|7LJzhd9)fVj}x2lw?%Je^2U$nGZ3 z((NYus|mypEV_pK4c2qr+_{J=J4u(BA}T1qq2J*;KNPIXO7aoCn+edT(~s9!Y+{5G zz_QJwTNiOBz04j#XYV3tPkrN=V%pInuVX=fJU%HcWA?l{#0*T_*n)0hcQH|TsLRxn?;E_U_ zv(CA?fjqE$anr5xVr4C%b)RdwLXAC)vcy)I2X~;nt>UEiy@SIJhVQZ>} zTP>`s6&A;gk90fKODa4g6%`D<+dI=}#;O&h<$!K`fNpE-;RQb7U_dHdR_=fR^hpu= z0D0iaP2=N-jKmMTi6PIElwB6}XqR#G&IsDajiNYICX(_^TbUBzq6D^~#L)!M&NSz{ z(nqV#AO#-p2uR%M50;G<6NP=9XgY17xEd*aK}h8iJGv|!YthFiXco@;y0SD_uPUhc ziY|GNbNgNvzx7RYoADsKWLBB;H-hAikgzZAKOcgg zz<9=QK!$FhvU>+F4Ac7{nFF#nvB>)i_0TaA7>crnXoOcNX5u4Z2%|!ETsT8%p+{#v zh4ToU6FhjLI+GGt(UpI$GReCvxC>L(#VsqILAzphha0A^(9k_^mhfcsBEmOj^4*uw zIm5LBT{68NN7nCO!S-Cv@lU;?f6P~Bnbwg^xbth!7%$AGV3_@>pr9sugs!h9tzD*f zLN&&$TqkEb%9CiMGgV!M_qQz3+l5Fx04VLNFYZIFhS${3cMp$xW-&j(EU&PZy;0{s z<8;Ez9B9AbZik@RfmxgdxI#Sdl|&BB(1qn3V7&V`=;l4q-g2=&fQ&ih*JrG5i*op2 z6)5DAnVvokIVwR{-#Nd-dQpy~+`x7w*i{ZDXi1+nqsHuSX)SS5y1UTXY@S{gHj7+a zmpvQV*VmR8rVW;nEy4#Udrsn79_<3du6Q)vBm9xcyJSi}6OE0%nlrJPeWO~JEg(Df z0=-0{n=a_$JTEGsNKjN3)eII|5p!-%>$Hl;Z}1=AShX-op!@Hjgbf19S_#=5K*rykU0ydAoFBy{1rUIr4q zE#R;Rjty*m3nTDahNv<=qE>>Y|L>xz7I%YfSH!`zABAFLQEPYRbR%s2!Z1z+)O7C! zyXsA04{uMfa(7M1j^crxcNeqHN7XYhHwi0uwDr`(NL`NEoIrN|Qo@J?wabC+E)$C} zlIS(nKH1rUX)S&bs}!F92S9*=y>u9^$krj}m(ypPd+|FpTHE;ET16*dnT2$hnKE`@9TJaL3&J6ib_vG)*-e5j?2$i`)_-J zl3(W|F*jgr(r^*CUfCD!*jB&!y#tNT^shy;6u!{6Cw34eS{ht;8W=;b>zOp2LBIaf z#^^uh#_}$v>S5n=;{`Y%AjbcC0Vo5oQ8czRHgvSH|CcqH{l9dpS*mZk$SWvcI%=uL zjOKicV#p(A2lcsFSm`W7>pu+y8glDJ!lm&B{upDRn=GfPBOB^i8Jg#df?L%B~V+<*B z9RomS24j0;TJH@(c*FMB&`EeJcH1!Dkx$tA?&&u}&{~~z`anQvA%%*v#@LH5p)AFt zP7mDYlfCORgx2XrigvQcTIcWAfzLbn=GZGYnj51JjddUwgAMPx0VKarzFC>6%BnZF zls{FHmv7Y_R?=85C8prkb#b#tls#)`Td59KZM~UG`s9^ELllP>M(JIs29@0_ zHylA0>+0t4o?KBqFANRJ7onk&7pWoLTUHdG6XO@KPx9KgW*P8&iLo3ASt0dv1m-UI zkA82hc1Fh?48|xUkDD`FY{~P^>-6qg#w-l=GceK-yY-RVMFjy+(}i{tG?2d+X_JUw zf&oOpJy8cjCoQsP`|SWx6Dd;S3cxq%n5XthC2_?}#7r*b`%* zAX}OCo0bYQb7y1;g_bzt#XphQtu*?CN-EEsHUwo-rdS1nWuLU7PbDdJsd;pG~E+^}t3TonGGhavn1n z0M*VjG2PeJu&R-v&6A&e%57wF#=fABu$!x7C(%Zz*$Q3swm|K{JhO0~jCS+&{2AIl zl;A#hUu^k#g|enFoFh{#O3YhU?q49KcVN#mVdt%;i1KU>XznRjwi%7-RJ14P4iOp8zR3k^BD!|?LSzJs5? z5b#xTbZ-;Pid;heDd5?9@XMz0cvXq7!oeZtEPG~qBzo9NP7M-cn#m=k4;lAU7c!Ac zGE3ukGPrQ3>kHR03 zM;9A1rwwc%pJR19$Sed^nl_luJ_ve#l^XO)epa4dV<-*sTGrO=>-0e)ge5P`Ao`^$ z1CJS#|F#1$$$?(jnzduNy^k=`HKy?+t~4Iq-_n~F+4?SSI~=^4E4w|HV;@MF^2 zd$$j!3_1`npW@fPfVy)R1ODT z1z(kS>l4~2dB|2$$0P9Zi`5?ZdMCTlEPZ?X9hK*zpc~Fs4_YTlcF5Hx^IX?8zK&$z za;n@iAK0)TI{qezOI#+XQ`|!o(n04?^F{g2a(yGlNl6s|{>^ z=w=UcT+QabovmCI zat1uQ{?xoBM%X9M?`>f7ZxBjwNbS9M1*P5PqR|T%(aKl7>A7Y23{bt%?WDk@Cvo0q zzQx~$&vI3K*!LQLNj@DAzD1{j2%G31+(`Vup$~Q$0(6p2$Iq~95fI~rLOr-=^o#B@ zRD%j_#+ZjU{pex~gbbhe9SAJ)AGR)5!PBpTp9wlFtjm+3Bac`_5d#b4edYc4O!!|g z3gcGEM#XnU|M>p>H!Ax-r^EkacbJ&|UzI&6k{|X5KfJIHJ+zw~Tv1K_m+WnK{4_nroR6A0R*Jn8(e&%SZ08`SU( z;-GzxwmJU4yPE&y+4&6(jcvbsoPRer8#c(w=wDgRXH*w_7Hz2TpsV{&!`6BD8pO#z z>)WYUtAzOm&;FcUC0A` zw^cbv^V=NxD~^G23Hla6I!zu@$}CQ=rM?rXyHLYKOh@4U70{F3wbW*mm%uG9?^DF5 zPF*o%!Zr{SF|jTE)`_UX1382{5aer+ZEsAY9A2!R7#)cbIz?upH5d`JbR9oq*6y$3 zqd+Tb7<)>~(_$-guvVn2#i>@#@P+W|TNQ@QQmpodFaku1vHI$ez7^}=Y=Xv8tgfcc zxha}k<~Hdj<%Y$@#U4tMX!hRoq*_KdEdb0Jw&EdtQJ4VDOTbbydsQXvkl!vF^pKpj zF^suje~Egww}%ADAEtpjwH}UA$lTiFskOZqC6xM_Mz?f}z@|(gBgjZlHiAvEY(v$@DaoS7?}Qk>$As{VAr# zN@KeLh>B?TT#G%H7NpsJ2#9BTUwt1y5*7Kyl=a>OtccJ8SCkNn8YA$&$@2UQi?*$S zPTsgVLUp7&(}8iOSpVm$*W{a~#ggO%OLeAMA_rHqbTclv%cQn)@WIbh4V zmA^tF2SA?49bhg3(TuVn$8cCjcz_Q()`}N0bQ&57c9RXdeDl}Zs z-!gPCsFayFv=o>hqnb@>^eu59;UYK?=OWnyV9e~QW6bQi1>kccU8d`dC@CWj zpHHLY&v~IbH{R$w2G0t+B+<#IUyul1iYza3WwZLN`8q()c&1GTMbjXpnrST>#p6(c zrPJT_@-!=4tuPORm?2Qtf54BWeLUDG16nHrEO$-`Z>)wGt^=`sow|)YusK^4UbweF zj@b_N?I4S?*kxIq*tT&*ZjA4PJ8~4^*R{6nng5%N8{EFs1ye(Q#ouOR&mc zqMKle;rGH4;k@#GfkI2mAzCBDSQZNr0y9$toSdDufoP4lC)CcB-f8(7a$|bc##VCq zZI~g`00LoZZnV#`0+Cm)J`vTG#-WDZm^rb=5R)h(2c@2%@oWkBAj=#*Cf zoMv~atm0eq2Gn1q z@|alRYvWEh=0$Hm^%q10&mfo=Osf~rte0deZ$8MAxZxN!|D4fJ)A~;k(pyUXcfr!0 zJ?-~sd9B`&mjJo1LH75cnOoNGlE-`W0gzXrO8v>I)8FMb;psj}6^SZ8^(mx(76$!qnkRe{& zjnmyWBM=z2P-eYAztX0^-mc(UU;-jG)7D_)+`o8Hxo-Igq;C@a^e`n~h0}!DT)RIz zTyvZpyA3Ab`j(?O&LH+pePr8$%To#=n|{#rN|R&7E)sWX$I-@BY^o}(*-VdR#<@+mB6-DVu9zW-qZ|7g~- z6p6ET*!OOuvisfr;}_Gz7SV`Zbx?I{EfQioLL|LM1+9wsGy4`&V>S{nGRu zw7$CbhS0i+n~r*7-?nWP%z z@KmPn>W-8~Vmopwzg+C@UnUdr4;yUH?wT82DlXTSG0>2_ed92OqJZ!`8^!^sCS3_K zIlLCSF^q=S3qk9+?D^#pNTp{;W^h){eVr!VsFAM*CQjwp_o8`nYtUT!n{7IjvPPL8 zaNN1K6K-QB{=`AxQHWMdO*s6k4xYL5n&X(`5TspW4IU&>#zWv`a}p+NhleqKRu|`y zX|-5HroizUs=rOxO*5uq=6*r9b!6mIDSda1+H!WZFr_L{`LnHD7C4=j_`ynq$tXXN zoBO(A41-Z-O3a76Dpw~I{IHb1(-=`Jq6M>{rn4)OoC?JU6(#P5YNVC@q0p||GJ{e| zH7~$Vi4)AB1qxU#dv(oY=Z5vkW#?&N+vR!jlNbcBr}Gog|J{Ktp@DWPGuFOF2eIs! zd&u3qBm{C`MQgd}%>}K{`}$!NCzmBc(5_m^-#t!iiODY~_;C}FtQm{YwaOF1e2gk5 z9J%<2pSqN0?k^`)|LFRg*L_0an5-4K-1z=@hzoKVnlS4&#P zah4VsGJwU!#Q{@0w3`NFFUjmVc3;I63(2Mo<&cSQ@d5iJ4c%k|Y!|(Zvgjm9(Bl@5 z7{5gG_S=*i9U^dtnhon1kNlt`l>Y!L^^1b?h^d-18I}_;Wa|2a_ITA@Tr8FS!Kre-=K7$u$tD0NrXyJ+j-)Cr* z`@`1F$rDn_rfJm0UCRjZ_?>CpWU8YOtskdo=b-$2#)(Md)iRYTu?w2q zfRS3&yc)n+0Cvp|H%<# zRFprzPt__^V=n+?-LVHA^@2-cbQBgqbD5@4QL%v9-dW}Bu}n?zV-P{Hg$O_BDu6wO zGb!UxIy~j7&e+CY1Z@7iqY^vkD$h*t%-yS(q~o@VpZHIf1!#42u1s=C^umsbI-a)@ z%A=!Z5%e)fU4?rB>9h`ugfPQ}c)Wvw@h5H;BQ5QTnQWcH6Ha87xtbfkvI>seFrfE-5TVr5Jm#YT-(>@8#PKFb51=ATNoEpnXpP+ z7|&9eI15-9cafVotC=4cOLJs0f6!+UheaC8=>^V}pFHH%w0!}A&5%T$oh8j)w{U(6 zuIGJ6TUvnY0W>4BK*V(87LGL%B{->D_@_L(ts_abmqRjHeiNTh#N-XC`@XlZz!%X0 zDx9(oU^hkDf3@5DMh(T)oQ{bupW}dZ3!wmvKe-^9cUlS+9B1IMK+5_~>lPA6_XjgP zNBNTO29Yymq&EE3MP(Xdp`i!l~*DV>P+j9{SFc!WRW08Wfw!Q%X4k5JaJHX#Eiy?~+gYBeP55Iin+4ii57dvISIn_ND44)ew}F zS(7oV5{qnu?{6&~o)##c=T8fr2wXepYkHD{!WLA*e!dnE#GTzyIRcyyH11m=^cPoV zjsB;Qy7esmRX{>5V8i?3h_d#!rb(MU_MG$=3dN-#y}EHR>2+5^+t@xUq^x8{61PSz zY$6pwF%1D#085enk|FH~hhDEK)u(RW$ao_-Vg}N&2DIJ4F1MKQ`o4R&@=e;Nn^I21 zzh${g;e{8Al4POFy2ZxvQOFJ5692&*Xm!)H8W5Cv4ujfOMeeoSA@1PM5TF+`=0+ow zslK7yo^{IU>bL5Q*QXyQffpZ5RW-v(&P{{a)r{K_cifBiyM8u&PI4gTA5DKf!_j*+f!W zmqQgq`zWGow+0mK=z*g(z*@iO3gzjV$w<)6)>y|kIrImnUdSEA=@(C4sChwU_gk_t z4Pp`W1T$w<7U+aPld~LpZl-bxa2>wA-M?e?KoIQN;{);PT4G5WVx~n=rJ-9>L$t}0 zWY_dHnmugahw+=9h6!knLrDrrc+h^+HmsxD8X$`S(8ay&rhNoZ;7Z@gg&$IB-g~06 zSPEzs_=02r?suGrPrhbD;-I;&ojKpR9WqPPWCL5qKfM+ZzSGVl z{R#nafpb=wy}5QILBXH6skwK_W19Xg^ml^$mX;w}=)i05laOHTV$9;k*nh-w{S*Qoo?gnLecBG|4S*hj8G2i^kq#-U#u?n z{|k%yS3Op#YORdQgygM6y|jp0)0N`~qtt+A1-?n=hZdeE8Y_hU`ogYg+0li z^cM6U>$TXODzrz|0k#MTq@EhYM`HnUU<(=|$d#dxuuy+NP%uv17gVm;Iz3!+j1t2= zcAFBj51BUG;qL!ywgY z<9EpI&h-FJHisLhz!z^|or;Y!pYfW*%uRAYs~bZ)%8if(K1YH?bG(#bg|1uTT2foU z4=`H<7#|75KtuSfjIRc1$7OZBPh~|d%EZ^HMv$@V@Dl~pBJ0V~QVbg9&B{p{Jtt7H zY%K6*D;_6C(aRhk4PfJ&+RF`*@Gde|?m}l-NF1m1vfxh@rT}4sE(Drb+Vl5bX&G9I z3|X8OFIg3tCBqTKAN@MZ&JKQCJS^X?Q2lN7;68{+GSD3YVV*5bhFe1L5W?pESoZ0< z2{Hu)U2V|bAI0|Lz`?UL1Q^4M2_L%_r2`5L3CijMMrm^g*O=Xsic1X;?BK9i#rI@Z zYZB;$?$6Yz_E!?{c-5(rd&z_CE~Pld?3`UyrtuToSZ;XD50BIITfBeuQA_B0-(b`@ z!l|eCJ#zA0bH6)Se3o81X5OInkJ#lCn`c-Y2oA1FU&_Q}1*2Xm$U6%nDk>yF-0Qxy zP0N-a9^1yUYL(bVpZyVqXx<8iv(DW|m36lh?Cl_xkL8tRP@q@|IU}C9OVFQx1hF8U zU}S3(3E~Yn5-u?y7wgpFL3sw5GD+-Em35&K>a0*8y2~R>PXD8Q(u<rO`fvFx zk9{i3NpM}KPczdks?g^F+pdy>X*n2ZpQbLLHIJ3Ho%V2*mi@QfW?~MrUyM)Z}b;0Ut=Ne-SsJkDv|tQhfeS z_v`&aLhP0qr#~V7d20L4#ZM()rw0FZYX2<-{r}_C#J(b{?UyQqp_RU)V`Kyqg5OUx zkwY3kE%Q_8275zUd0H8n`9TMOHkf`s4kFQi#n~9v<4GNcDffh`G%8`&O*ltuoP038H!@z1W^$ag*=U9!R3f;2CFsi zxv!@&jC^S;)KN+k0YF!L$^8iHrBo|Y!ME3yDX4lI$_84L+HRwY4EY~$)1kb5NV>_4 zzhA$7!2a{6D;N%n$$!y#mA{r)^Zg$kzw-YY#r)H3{`~;{BcI5O-~6|HVzAp>x|yzA zMMOkIRI@Oo;Vt%eE|H*_q2X9u(?bw!#)aH3`@g-%O{1vpmE?n1{h&|mU4O3OesN&2 z^%~t~-lk_d9_(eL+6r{xeb@NOTd%zfsV4tYwVX`dfVYV%XogRTEhYY<2I#m5lha7D$PS+92kk{#En_Umnx5=| zRma+CO~nv4kZrqjEI9!;$Zy}oC>vSjuY^-C?0?5l&pMa`rnrqUDz5MH>0Y_lC@;rE zR@G}i1Y9O1#GNn+7ZJ6OA{)y?%CHyQN(B_}^X~ed!m1v~Q7-7~7U$+m`|gfKVV=#4 zw9o)RSs*UbQ-GkTn07M*csJxQDW+JTuOsAaiA{7CnzJ_wW6U>j(Jx-qP5~#-s!t2W zeFCHP7+5{O)ck&yuw}b)=k>=#QrE0{^g&}MebVstTcNo!cTrv-?n*zjY%ZXWADT3k z9YPhxrqH#w>6ZPyKX3_e<8+<06Q*8*ZSnCmr8b?T%K!rFTSVYjD^_JaCaP=%ycFq^ zPvC=Q7Vfo-4PPG#|4RObC+|c^!k_z+Gf=`3N;)IUy9|kk44L{RuE#=%{F>AKL_v!3 zz(blvXc%YrL&%>ITR&_%gi$snj8Qm+@9#T-WC4?3IaUu=kzMo|E1=rAPPD=x(+WD> zEXI0=46lv}PT75Am-x0trcH=d%mqwcqWD#}_A>EBxBjx#iy=yJ7E3j^p49G~RXS)A zYd%5t9qgZ$`Vtuq!SiLM!Cwk~JpZ?r`md|Hucqyas*3g@XA_TLsI8R)VTWw-hqV)q zQbCqlN?N%57+54iy+Iy7#~3p{kSZy?>G?P#uze$`S)>WOIP1FkOvB%{W{NV)F1b3r zpN{B}9nZJfmF49!srT9O1lj{{hm9F?*6&^bmX3Tz(t82*Q2Q(UZX16sktv)D`jK>e zj5DwR4%;01(fH0#urDt{(35(b1sWT>Um~cMbkVq14NNQL1t~W(w?!T^D>0y=9WtK?$W=5X=J6jw`l%Ww_*EOq#OEJ z=PGD0o|S<_k#?!=T7r&jK~LTt-^!}HOQk0wi{-UI>Gm>=ZE%29lMawf1x03)QKcOH z#wi!`rOQc{$7+%bFvk5VmoRTqfvahj8VA0-w_1`c&NeJMr>t`?6;+LY3NX@`WcoY% zuUtD0^9b|?bjMsg1LZWL32q6;n7|GyKvcbd7^Zl(YE3$N0LGFfm=kK9Dih|cgx_pn zKramYxn45rl0FjJE#F?LUDv=TXcJm87w=45?|C4@M(o;_5lohseXxFyY!$Vec0uHu-obpVzl+neOSg+OrXXwq* zPY{r&)!{f0AC*SR%MApy*VlN>07u>vF}zLa;I>(o#eue1^cR|Dg)E;khv+kHa3pyS z)Qu*w^a<7}z`tdJl%p5pptq&wUp;i|{(~9WOPxHJE}*NQV&m;}U^Ga7B`O7w)5_CA``2uXXboA)=EV{nShzVl!Vf=$hlm z?1iWH%unBfY>LBt^AhjDns2^;OB+qI;1gEbC?qmtVEWU*ELh}$yz$kDch1|=43EGe zR>}HFET1qGv0Y7AB$;sonsnf=4f38{YL+F)4u?QoGaI=ET2g z;6-fx4&gq!#M=|v zeV0tmdOnxbJ9txXNV~gf1O#BzOJAoTyx6U$HuNnN;xW`yNCxc(3`$@~0k<5gRmiV? zFdh~s7tBM-$XGxJKzwhiiCA8dsCt(G{fa0tCt&sIJK+`u>9ya+VBYW{4$ut!8C}1q z6p6nNTAOe-_Rq#d1i}2FZ|_z2KYbEu6&tj|SM*f)0yIefpM8?kmu8LiKcgq9^8fow z5p#zx0H?XF&A-=DD%Q3rf=J#N2vNy2`-O{2<&9x5D!xrO(6iGG%LY)gIR+8}_%%Ch zLzx7S-D9%@IFUu!?}~$eX_$~gL!muJWK0hC-A!B`y+2-FKzk5wyd~UldRRz}2aF0p z6>8`P90`*^_B@G*nfXNmCckit!}mA6iiIxYH7hlARS&0cyD^AoBojOM+AQ!8g$7t_ z-17^)e-N>v%1M+jzYvmt|9)>4TO0MRky$-U`R!6P5NhG%Y(sXiM2GaS`g?!8HwksZ z|0LbPe|yhUf4`GNl@MmII=&RBnust#Z>mvc0Z|SAYHgEQYMtp~1bK0X-|t@cJ2z^+ zq6&vk5y0|0aJ~;pq})V&A-${+dJVe8sKkrj)93pfURYZ0-&dzTM>ka^+0mv=OI8XW z;Zy7~zJ`)G9xA*p1MzIq<|2o&!5Tds1>x5L#%ac2wczeq5t?iFzu4caeo$XH%jAxA z(HKVOb|4|ZEPko7dGV%%kOiQNAelf-uup6q9~BAGs>hX<`ermSl%P4sJqrlIJs-2! zZ)oUm?57qgQl3wPsvRw~OWXHi{J=-%?w}76A%OO-*g`m39{DYzRndcW#-hVv=R+L6 zO)pu!JEr)CvlIWst21fC2toA@o`owx+{+gKCF9r%-_K{o>77P6qIwv-SA-Zdw~D)T zrTakw7%bX~3YHtk@EmZp>?;t<3`u;3C`C_PU%CSHUSfS8Ve-qmG-@4k^3k5f>K#O1 z-p{@eLI?$<%@PnD47Z88M+D?&|I!=}%p)s6q6Yea{?l*;bL0|YzYKTf%W&oXhlcy_ zjMINx6Z7wKxs@uG@?Uu%pK$ZKwI=110dg;-6s&}3uR0A?FZBXQP-Ti(zUF9%bW?lV z`a`^cloYX8{&u~xun zME}{_{+-B+Z%aex`<|y{km4 z+la%{@BF5T&bn6Xxe#g|n+_AVRO<6oSr)_e$tts7TInQ?tmlAm7o4 zD(sP8^Epam>+#0)3?v$I)nsfH8$Sn$8}ou1PgA`6^HYVWkf$9~c__W@^P09;Em|il z%|j&y;hMKqpFyQ7iq5MtQQw_2kcWs%cM&eW=>H3HGt*2_8Bx+Ha5;p++(F=^U=hDU zavvL@;I_-oxkcP56Zwgz2OkKkUj}S0K9`wjv);sStV~wVi|1JDp53|Myqx?4ZY6th zfAHWfi~JG~ILAeYQ7ZDI6tl;GGu#7^(qw7Co{_XgA-()0=;!JSiI7$N;3W5Z6LlJy zxe%nB%SPh&BZg^{L(ia?kDjyh)e7OHlIA35Xh-V&!_CLy5;FWDFsiD9v1TuNAR{Oo zc9k;Xp%v;js+XezF+WYz04h?5s$4KfhtEfwNpO58R)DJB9fxT#Gg(bZ=Y*SR2g@f$ zHY>Eo`EB*HQV>MHkM%dBY}tguqb4m<5Qv;P4yFr)zmRB|QcUkp{%6#G8h>EwpqTJi zsVDo@@cM6=)&E)U{lh{3gIQgvI3@?egvN*It4I)*b40t=+5?ZeWF-OCPfAJ}S5qzQ zFFcCIgTFKR>97s?q&PVF14=|9!fEF9jPLNy+q0_^v?b7bd%UkTkUDo|DXe}3)F;ZV zM7wJz>%sUZWs6|XLgp6tYZ<6p;6u%^o{A>SA1lQ}q|Q>6Q5vW9TZywR=513~tn7Tl|}&>$)^ zt4y^84-_2Kb8B3ak`giwPn-HO0>%akYpN>N^#X&l<)?BB9{Sknn1uV=2Bznj$qAFa z(7SC&fD*Ar&9A*Xf+2{Q=?z#*Ayd6qG8GIcdiNBUnPt^cJXjz)jR z%<;vQKt}rZP3Zr}(}Mpd^!o3R%Ks9S{~cgiss8GUD~|qQ@~+`tFKb06w?kSWZKtd` zn1nBsTZ=y=X_clDrOd-5dt}*(GnQWA+T2dFRMe46cgc}})|byKr0w$b<|?QV?E2kmjE1cxeq=!?qNNdaEl+%HhVsG>m*;^|mA! zbN~)98tWMlgoD7=huT*(sWG8vh;8=qj@=U^+bVZop6UJ=j6c4|6!l35BwKz9mO4vv zOA~(GElSjr$(MntiJ|-{EUX&lsGhm*KyJ0yoh1!b!lXI{)?|=r-P42`#)?DWCogQ# z9QG{$4$l{ZASf17!nf9$s{fWnz+bpWqeGL!?r!H;C$=c znJKN4-BQ}L;{h+UP1M0zO}+fD8a01745OH9P=*`Ysgaac_tl9AJ04N# zCNhfscyMen#1xy!*ze|+1PuTlZhAWsX9~Ybs|V@KRM(^M`gBnzSy}=O<@u4zbEc@ z=^u6?Nk5ywPQnD64a+FhH6(?D4dAfl#3L|FA}x6;jmq8@MHg7QhJ91o`pJehhi)+; z4&uRX(l_EKtMh%gXf8LBi8vpLGbl=LJLqS*ezJmnls);;6PvEVgC$zI7Df3}WYp#k zSy;c&@xXn_6MlX7_*wVTHRPM(ufwCf1{ma3*iqTDmG-oI;@LY*Xn2o z6Z#?p%N7(xiw>e`HT-0b61R91m(G*Y;Ru-R0ywWJ_~QtEWojCA; z!pPDw-qO@0GU2wnmy(Nvi=(!aws+Nm;;M`(P}R)$3P+zZnp5!Sh~xBz4Ev6^8Jg6J zQ&HknvfFTFM{ z->lzo=|!W7@t2vyG_ufVQr0GT8a^LQc81EDBaU{Vj_1IJPHOhk+OmiFzin+7mHr>> zh=1H|eXD!tU&b8XDNP#IHKRwpdZ%UzRV3RcD+jW6B)K#M{4Y0!E*5y0;X>;+In0wR z?UZ%aj(=EB+(gQQMtbtejYwWFaCsY%-(?7qN=Ge0`^XY)rkB0G9HpsUFF8BkW@6Cz z&U{MOqDWY)BEbD#Cd}=|pHO(30BLBt$tS-!2B1FPHH5wz?z{hfo{kcG39`$`^6wV` zh=OXBTuQkz2p90+BuKxX)m%_8C?W~d{Tt1wvAhEmI=xTGFzOHe&? z`yOnYdp}Fp0MHU-ZmkaibO-_JGSi4%s(($TH`hF($a0{~C~mK*?^x*oKVUX}ty1MR zdp+9J?XMs{Bu}V$E~-Y!ABZEIZaPKrsD%yvZQ}?P@oDxmjVBr|Rh^jYWZP_avLKA+ z&}D-;%(&;@F{0+v+-)OMOHtMboYWVL9+cC5ZuI0{uT)-AV7&Y;%Q(Iu{=Hj))Itvd zWPFdL4YWdOr!+zoQXI^sL0vB74e%c&6-zK*9_@G2atE8DiQZ|u;nY>j>gh(4h7t`U zH&(+_#bYXYGSILGLIY8wsd7_P^Q4kOQ8`0s2f3O>y6`+jB{KTKwvjlylZ^WlI5UW? z&kWefQi+yD@2q8ZMH{H4*|-+eFjjwtj%LKCgiTF?>kOFZJ_DvKL6LOs49pP%c=k{jb=piC&UvB26Q z)>I@2q+W7XHfTXeVF~B}5P(~1YbtMsyRF+TIZ9b2!1`Ru606M(dir0xj?3HKcbr)7pFl`9Pbk7g zMnc!Jr;s2VPnCYa6BY-dsbqG^0L3+x4S(g%pCGcQh_ERKpXRVB)t%cXzc7Znd4KP< z{B2!NNnxm9xBW5N$1VpqALHt>7Cm7Sf~^A@Z_mWn{x#3YMlS%cCd?M9L~gN8hK6W* zx^)PPl~{90M$DiIeT+M*VJ&2Pg^C5k{JxESRZgnk0waaRjMS2)>U@}ZNhs%oiRx$xlt=qX?XJIh+6*0 zS6!lCHKO)_Bs-@iosAZ~eCd}SN&lX#GZd>^vXjZe#PEWP{RVbdVk}wAXKutCr=~@} zBWgA%|CFTywgVzNaG?9xG`fX&UqZl{kFR z1qaNb@wk=7e>Gs9@GL0KK(Y@4!;slAx?+yC={LGeTqid7*p4`FB2sVSj$#@Rq8zR( z;8)S{60D3sEoD4zj{RoRSu`#J_#j9>%N7`ML@oC;d+Nc0{;N+mOa`JZE0%;PUSP`n z-5zZ1yWfhe!$7df@;Z}5TC@M780padNIG^il|EBK7F6W9=y!lR z$k6SdW*c>FX-C-7icI+2pJh;4EDL%#`5K$>h4{)+BUMcuBU;g!&IWN&Bs?!`6h>S= z*g%C~bm5(RzAu`l zHYQjzwGfuhp6TM7y}R6EvC8%$Ls(H|ZbCy$cuUu$S+n*ayCBke3AaZ%gTn8#k?>CP zM#oW}%cpKQQ%I`EM=IA9QI|VhOBt^(KF-(z{uK6;Q?6rolJ@tkV zuY~ah`fjOpr>}{#mab8}WrnIWM2?=IFTtmdnehdT{m2UQg@IE}Z+HxIwQV^a1-oAy z(x1wsGIn)5u(}~~O&x4b^i9UOW_@+f1R7O4>fGLun@3M{-o?9*PySH?JLtY?$LeC* zi=<FlmO{=!Q z=2^tQq>h`0hr6tvaJ1H?PrK5co_0IEbg0C{RSEvWiIolXRp*RbEUeEby+xU|mN#M1 zEo^DADdXtam(Xu-mDpJ!euWd_A#c7`$>A0o8A;SOre5cM_HGRGd~_<2GK&(E7L}}p z{S9)z@QKObv1}b{-WF&!&^XQOS8Hl9Qdb$WcpM?RbKemdm32QU&;JH})3zf>$W6HA zG{~1fVpu9W*mWLtEH!zTYIA%yoTBbwv)5lA3j|Es$92<}UYxP7eV1ZHqZi#^hR58Z z{{1Y|N!1FIQ{C3JteK^_hxu-|j;hgO558AHI`Pq3Q{UwV)Jobq6H1v$ue2ZsN52LY zE0Vq-A^FKBUA?`tlQz@CAv$Y>-`7v=!Yrm$!p}hAzdYg&| zw>to>H9}!Vlxo2f8WPKH0LmQKfLi`2!hJ5%Ck@MXxSU5Jr1M~mI_KvU7Z+C0fPyC# zfXinMx)Gi?v?jmlD7*fAW)j6kWmqCFmmr5%sVH9+D<>^xjVyWz_lQaFQ`b?uyiFx| z>3aSa7v=+H)xxTt^K*!-6$Jdmga(qRV$k`Uii&+G?0EW6V*Qfx_1V3OfCpdVw645r z!;*69#3x7Y=5MEI5;xGuhu+|C_m+L|`AFM2wrElXUboaQ9>GrC`}}_SHp@XN+K7Rl3#r5-F+uQcPK@YR zY4Hb*ao^s$&r=z;cq+G)Q3umR>3>9lcp)r^*W`qo7(?3M*V)hSUA2+xfzmytgnI7_ z>LK*%<7L%Jbi**ejFRj9qLXjH!yp*I7u-~&Md1t)B%s5<8j2%lD><-R;1rVeCIIk7 zEpdP+fxq|u;S96%#2U;Xw}!JV(Ms#b#r6NdJMr^nn!lVR>d5ir$9aIb=z@eDfsW*f z`t`MW7LQn!#z7;spZX;Od_S$W$@6KmnQhPRobj$miU5p8J_2cngj23MQ)?b7yM#1{ z8i;pc9_)J|9`lno0%u>4R+XTSd0)SQGCD`t9St!0MNNz#F50WntA78QE{%l{@QORg8LXfxY~pMVK@jz71HG z6`b{pXPh3grznHnR`g#&63ze-nWdGvbBBK~AY$MUbhw>`n3Q6X)WUvnBXWa{n}3b* z3rsh6B0H~``~*co+*ak4De($_5l4DM{AV8J`d(b3_%-{)|Jr5qKg^?8{*^}+CSA&F zt6~jx2V+P{LxRI3FyXgRZ$&%f!ma<@oAvM=Ev$UhT_(3^wXUAtpVhX7J>fxpgiL8^ zmX^`k(RL1J8l)w^NUWAwvozfK_=ftp^2A%X79Nky694e(DR8)U$ooZ~`8`Yc`SyVD zr@lnw3NH)M5R4&Uq;uGfI{>X8JE@-bP=j2vNMo{IroLm~hItG;DV&ytww|`SX1umz zlzED{mbRuqa}Oy2DG7Y9;6t}iaYdKSa)fV)UYjRsRU+vuOx2pyvTDvwDk`%AJ^ob5 zy;y0&QM%5Y?Q|VbzQM>}q6uP+i|sq9Ia;oU;|St=9qR1+YlTYLG+L`v>+gDI-ad}W zOi>d50#)im+p$`TcBJ*fn79+lJSjm8@UW4|s#)^o6 z@zh$VOb)hwZN8VhKt|X4WX4iX4(8{Nv{E%X4(s&$HdV}!=dn@rYOTVc9^glEJf;xy)I*63)bK83xH`(4$3%vbGIgUx?&=LX`l@X@ z8tSZ>mZR7oz((#_%QP|3&ke4tD_ouN65dke?xYP*VRO~k2R+Dz6WdMzU}FD0Frq;# znN><7A;MUcry+9p^FCof?6`|x@Uc0B?CIfGuw2FfC9wF^!&76Dqfy_(d=IIA? z9}qnftZ}cXEh$tUs8ugG1BV0$ z^x1~virF5i(a&o`Yv+yvj?q*02PspasYJCx}k%5*^SlJ34QS#T= z!1O1OX3CAh$0y$%z*|5z)kc5yQ{;}xNjxSOZ|kC|<86)&W$D zl0M?P{@em@nE!NG>@Fg(o`T=L%};*&_Va(#kNuasn(%^jLtA)wYIVFEw_+EThN_W( z<_ie;!wTPt3iTZ|>^rP<9kg#u_Kpyd7w#KLW4iM4cW+97*o-kNU~t;F0{7*{ z9*rl0KKPV(b7JTg+9~xY2#r6qj$+Oj22j*?%{(zte2Y!bKL_viM9X2dUw_Ojeh6-J zG&t1yqyuv}Q#d_wcuUN2cL3|urEn;I)UiAv{Y0F}u=tFU$>4lVvd;J?x$UpKXKFg2 zKY5Nsy!C13?v07wo3>E>Xzeser)zd%%&j&3z0Zs4j7e9pR*FLpSWelL)}y_9u;58Y zW=VNmtU(8i%GbaLf}oWbYk&e56|MMy>D^2Bs4Wut# zMyK~C(>KD^hn=a()Z16%>|Uv4^p>UWPSQ&rtv=+K-WSWUcElsaOnEcZ^ucrvVe zP6G*vtpv{0xNp7ayR!dKIbC<7jvy$Eh?g{pJAYuIdt`+12_{plOSyg|XkT9yJAc3l zURU4}?0wqZ9zNaLG^KyW8!$}oi#9XIbc-Y>1K!YoSH+-Iwuf{s`2PdO)Z>Wg?gfLKFlfkD2z)bN6n}u@mpUpmm6{louNA{4GfS0LD5=Y2GYqPChfA#k-wLX* zB)I%z91Lot;d(zpY0t8;q>`dCJ(T#^ zWrHw!1<}G#a}~EX>G2$j+9*q;SGQJp1_N?{3G!aOGtUy8_-e3Qz@d(Iq`}7p0BXAslD`4M>{ZmuO4K3kfr(uf+>jdIs!J zHrFYmZGj8+1VtC^$+V42p$~-^mae0>T@km3B-*g+CMdeNmtE!l+}#%g!*`vnA^KODf8aG?t#(DDDP124q{5IMYB5*lYNg!{dU2E^tocb?D!_Q47oIAbp|MIPmfaMMd-m7!)QZ1zR%%cL`cz)PwyfyXxc zZ1zFg?tv#OWRoJfnA&Tjt2?yGoU3G$xks(^_5?{ekQ*3>?TLs3;5Pewia+gikJR{) zwE;WCr$z$vY^?E%TM04D|V9`!@TIA0!AuJ21^HN>+}c=V-e780z7cB@33$ z_L=FKeM84Pzw@@?omyk*huQ{Y+gkpT*$|~|oS0}oNhL1}q8k`?hpnzIGEm?46fDhqh%!|i<`afl(#+5Xl-@CJb`$Lg%fzTg9@Sd{;@UjaxW&`k zDo%#Bxuvf>CDU)r0NdgI_$n$W@0O?Qp2LHAeuvO%?5>+tAL>y)sxBYDUHm|^rlfrq7KX_0r} z>D$77SK~+9OUKX7?#W~hmJTTX1^vqE4eg7{$0UXC5Sofp0WfZgb*`c@?VA2agF0m;2XvlgEBr|-^|q$@D* z8xALjKZoMs?^PFkJMv1D<_iE8ZQVtAWy~h=(tTrFhCv)PwMF9>do4$%7N>9bAIv_^ zSHco3wg-b)ftl zoMHUV{I;##MZXO@(b|FVC(JLYE+Bch!d{*Zt|<7li#4$ld7w~5sMay44PiaijXS7*bYM%Y`=zY}{jOL$ z1n}^mePKOb4tSVY10zN1CD3-1%F`^#$*`*x(KNdAsUY}v{d<2_v#iblJwk+W&*K7s zx!RY8t>*Bm3rc^-?f>Yi0rtyFZ6P{cj5ko8kAz0CvFh7=)np4MKvjoG@-)ALsy;;d z)_LMk!=(R_xauPB!d%Kbdoo$l&+F5UUPDEp0C@KNV7ahvMh}GAR);bh@+{KMJU51u`Ri3-UF5fI$Rp zPY7GdR7L54Z?sCAad;s2a-*9sUP1b*AdheF-l8yWIfwz_-xw||vRrXg66E_rfb~zz zY-Y~9&gqk_H($jHJhmhh$Ok*SEze5`ibt=Yd^M-83HR(>3G`E!5XwXHG3VMe$+TSq z5Mjd#5v~I|kwo9BKYW96$Wmp$zgBaVmCKEhTv}S5sBiN@u&m^(w>|mwzC9eJ`R@?K zC(LTptD^Wu%RG>w&q`g+-m@WX( zPD&t3Kq9>nIrc8O(3L|76bJSrS9Y-Ec^OuAjC@Bsf*V(h3B%fldD}Fq@OZdh~5F$99dG2nUb^7Ky@<0@tYZ4Hj8p z+UD2sPB&cGDm?q)xbhE`gx;8n#fW=W(<~)j)k7MVrDSf=7){Ji!|A_rD+O<$)^y@F zA#Nin53z|&p*jd4kpdw_*jEl|-cKx4qFCU8{%D!_a&e)O=t!m$=BqsdB$}=zl@gY{ zat_svUS31<;E{3Lr(BZ$!#!kPc|hldk_LP?K^OK;2!L^kzR<(3Cq7(x%*Nh^2u)R< z9a?DcbSzQ`oQYM;1QL7;>vGiphp}@Et}Occba%(ejdf$AV;ddYwr$($*yfFG+qRvK zZFJPho2hxHrv6n^GxP0yJ*R5zv)5j~{X9<8<>luVA|~pADHoiN8ubjcc`6WD_i2>r zK`7Ew=!=VQ=BHVJPdWszk&EhTs+0Q>(O{7bIK=)W2j#_>;L`)do*{kfda0s2&hqj4 zmrR>}jmrfsFIWB0*t6&iJb6x7kqa*(-bz?p*L`%031#p8qXdwgVV*e^er_>xiPmCw zaL6{*oA88%P)1gZ+4B&AINRFI3+avTa%zUC|U-YM%?hIolX4vNR^IEk?K{E5DJncPDA*gav?0i*%GHS4J zR)w{U^L_Ba9-v)KWwlG^eH^ydbGr2Ljnk zE;KZyg)~5kdM4qbikf1It2G1O=H`&DrRA_6ESEtH0O!T_fpy?cD2@MTn@Um8FR!R0 ziSShp_NuyYD2SNqVsh5tA^)*}KXow0G^mnpp%UpLF7T`-;zC}t%<|yGOg6AC`m?-e zy1ymIR_E$)#6uMwdV6DJc+DA{n@ED%px~t%foVbhhcV8AjP}N>;#X0INGUrQjK8Zn zJobs^`<&AG!fS|^i>FY|@h^{=*^{07Q9#;Cwp>fk%VEc)L=udig%vsp35CEd$60gb z9}*E;VkiYMDP6j{w(+d+Z&;FREHYwYjhxKFv&IEykNUjTI+{C~UO`u6gF|ElMtT2Wz z9-6ih0@R*8qur}orN!m7N_~GKQ!Dj=%ttsM&J(p|Jd4Wy{ms`QYO2}hI~7W(i=RkW zl>->l*ZysMdGg*S>!{*sMHv#~g=CWmGR%ZF7o!bw3pOl{G<7LI+*EEo4NMBEF#?n8 z$bsu+h2)sS=}3$n=p|d6EZ^ESKZMI+I0y}S$jE@lxq<8l=KA9ac89OV8aTIkBX0Q| zR|$fVH4ToymlRQJB#63|B@1515xG=pWR~5-e}Qh|dZj-#d2m2n0auQ{1A^VqWX!sy zKI5E?dka%T`s}OmXRS`@)7Pg0o^ZXk^=s-^08gY|pSvLrC@V=v5U}8bobMXl%~d-=zolY7W+cEgfD9~h4to+vZW&5uD9_yqH zT#H1NvscN&Qsf3s!JruBFOrnP*)Jiysu+VfCHX`w*JVPAg^cP+z~bw8IaRs$VR~Z_ z-+~^|95cpLpcuCJ+M7+P$=D!1>W$Xi9Aa=M3B>0VJzh0z6Z8X|JAU zSWE}+rEzHnbyjwQDx3gKzp|}L?-vDyJS07)<&P^wLLFlrdq8yZnAqdSCK(`n5C+b; zHN-@6X(Zs#@{mhNr;?5_32*!|v|X8ZUOt7gC{(kYjycIF*-=QR8sCIcMKT(MUxjZ( zc}+!tbyjxai`9(v;-L>TQY(5)l7Pl>om_E(zItqV;0G$+m#;6-)Yl?CGpS5MQstE6? zJ{szD4a(E2&@(SiEWycRQ)m9|B`HCu={F6XNMFwqzqL=Abh^k&jZ9rcNH~{t!Kq@E zm}280v@6|MngANF2_{%W>hyNwC1==zq4Q)@XWmoKC zm-a~;AOEA{0lBqVRPh(?{l^ zY`SV7^p&BhHWqDgb%>Q^D_!GS>`?HF(e*oC+G{9v@rOwq)dZPN%1?{bvWhqO$Lq82 zLO#Mii}C~ouTQ11s9AChKx`*4Hy&WFFhyGtBZFtAO(kCVAgdf>+NPq-En5v&xyQPE zF40e)6uQs638&!dPl3@JEKU)pDxY#_0R^&E;JxM*~9Ll8>?q zdf-{)nUq0XlYw16s9T!n5f*-_CV|*Jn&ZVq$R}tt&W4)h=ZATlv1b>f9J6INB) z5zblW*)JWR3Hcq>Pm|K?(rfH9FRE-&p?~sfa`UeNuiYTuQeWZCH%2aZ#wWJn{Vh4@ zayj@%=DoO?CC2tw2zYrt>@&5qp0e&5h1;Qx2F#jyyV7|(_(%T2)E=dt5>MaXN{BWQ z5o$BBp|6Rr%qmZCngJ=r<3-=k)C!XwQ$QcZAF|1xEo}?aHhi~d{|HoG!ayJ4mNH<` zrx}7cDl1>D?HC6mi)`r9R0cy5?YIVj$59D(%aX6t%EC-W1V?d!WouTuzCaT;C?4i7 z%20r$)466j2ul-c-IKV_ZrM;s-V70@?zfsHbJ^ns$^d*-K}5kn@v20SOEGe>*Y6K- zb_A-?&SYpwfBg%=%OXY~(sy&|*+%DjMWrI#jP-@tcH$0mth1RDq>v;MD$Vu$Lxu_a z3oI@c=GyTcd7YfL`PA?!qrc~0qX{dfDy%x`$ntc6D1G6GkcA~ax7aYAghcdCw~~ON z2IlC4%`Xg=Mq5ocNYwSKAOLQ7XW=6QOYAbL&7V;l+ByYC=*OPa<&8hK+eDyphD>%h z&V#8N6?dHSbCP0bKvnEIL6|D)z^bol(4t1@vf2b`W@FE0niaf$=(60opFJ-hOC_U{ z0166Zo(_uDo1`@^U=b2)U0-IUi6}HBWLy^K>vT+Tih(waYSM&((y~Xy`h%bhp1n2f z?;>kb39|B>_~k5v6xlLtBPd!BB7ioUt&wqET?c0*&#DqaPKaB2D=Gokjc#ZbL5&@! z6Hbn~(L3QFv*{M{ddLfB9o#1W3$sp+vyNs{4w6|Y##slTd7%}4eGSs}eI&VMGleiS zoORr)-q|C|dthlK=G3^z_p1tY>~-&|(OHaAOyIiUCA1LrvLwJJzB!Gn9ef1E=4X>n zp-k0{O24~JielzOsnG=d6L;AWcT)k9&XW_z=oeQrl5$)DyCbYIdQI5lNL0_~=w^4I z?6AP5o@;q}kJSsn>QxD+&DRb-_S+N`N%WWIC;LxiX>ttg?&VAlHDT+3x(ZWX>@CC)X~5EihD zv#iPt#J?Bt>dg$vuKf4c6;dmUNI7Sv|?$q$*roj z7ry8a9K|IlN;ugS+cWI{j`SrXd&@b}Dm(N<8H2RR234)F0oO&*FfQFMgY8ecmI{m6 zGJ2ti^UP-Xy=f_$JLY+((|sWa3}I^8Oc~(Ay!F}&Si;A{ojJn=Oa)|27d1s>P0e|U z3EFshDHgO7N0aVlf5*N{>u|5lvVpS9GaHp==YH$JS#BjeQl_95js^z@Nc*MZ?u_5h zrL9(?GXQy-y0=@Jo3|g7YJ~@Z`m%usIO}D`__B?rIg=6;hR!>Xq_Rtzi$1I17B*Ju zWU76jCL;aJsPj2A4){yVOXo{~5O-qZ_N;1++{rqIcbsX`ooV_YOrMmE>QY|tk~pR= zmkK(~_ z^cUKiSXJ=xu{6a{z)DjC{3Y(Cwh*@*x892Uif*aRQd1=0(vSr%-ieN}QHqtNuw7V2 z6KDN!5JSyejcL^Gjlg;EH7Fg0(pf&$;seIDR7eW zIYY2ZYgJc;_3!=7K}Dli%1(-zkdH+dV34;b2>{M0%hHsirpa-~yifS3JAXsE>68n& zZgwUwczhB$XS<>x*=20e4XY||v{-RrI+5tK%j|n@zLahDWCGd9g|*LlR!h~ga$$K7 zZ$siXdoMQQ^^Tp4Vz41o2qm6W)sM}R9&PV0FOc?;Ye9xJxfq!D>YK^oTJKs*Prdv)PpYSFoma$q7lh_p!R9ZEZ=Sc@m-kI=hW`)+QnU_qaS0~ z$T&&|4sJIM5u$HoX?|rKM?fitwo9M}b;t93kB5WWWjwc-M@PAU_@;Qu+H1?D?hHv! zAIzD2-dt=Muw}wwMDQH}H}!Uugxealdi;Y9hUs#g*hQ{2;xiO<@tIhsQt`x>MawYg$$sO|w{C zE-|Ry=?Z(tGjrqEl&r3gXV*C53%l4MLT*L zm&|Wn^&n!qv+-{MfkCo_f2y2q*>VGhwUal~=ne3=aj0Z^-j*=;bTbTcel4=Wpks=E`B;5D$y<2r@slgAoXyq6TedrgD4?|Q26Kw z8pSOuYbuEMMdrWB9NxISg?4eXlcQHrkexgC#RTIBnfFpGq^=&H#8K4ktri<4^d~<9 z%iCc1j+|kG0*%)#cAG5maTK7|a#OaIMB#^Ar4p=5i@-j&EV3eZoAc&UlA_3X47La6 zGHc=KB@|0ST0TvMABVI_vzDH6IP@OSD!yk>aF#-5(bE~miAvIMf}1k%rmyeg9yI{4 zC#r>nI5;7&eR;+fy%A8^C8jXE%L%c8D}GownGxw@<;4+5{!woUb7?;lzX zH3NpdCz^inkW0q(6C{GhzIoXft6_7z6E87hZ;+}@h1u;WF7@$f>w>}C;Doe*Zxxp@ zyPTs121U5nvEq@_B2sqA?DD~~6xoW204i3?*(ivwPopTLXfrdSkdIv2#wTmR+au2jWme%nF zC^}$a^QX(2cxCKhqQx;rug%>jCib5}C-m?!n}$elG)bJA$>RJwis*PYdQ;;ZJQYn8 z6_BC)lGoZc3qc%z&}k`i_`g7h3F$*prWj)0RpdXRS(2RSU%*f2=xfPn#%EL-Z^+rg z{BjvP+%4y#G?Xx>(lxZ@SvDXUmb~4nc}NPaR`SIxMQV)Xa~D&sF7R3Wd_iPn24_$j zCHJh1-}SmCjqF{eD58v(ZZONpm(2Q;@PeH7r+MrT6d{cg(*+#Q+M{mPz(!h%NtZ5+ zNZMU_UtePm-~p0adl_W?p?V3FbgbE^elqycgSTwPmQmeYZ7D_FM#y^GyETO+y9Fm(A zk9^>YV#f$Crog<3$t(4WLOGr1* zP2$xt(nOX{MJ|)#YG6!7&r;-NlY1CJoNXsWU+34h{#)z_&9QFXP^-nMaX2+x1r%10u6w9ossW zTw|g8VBbu%n4dFlBx z;cseRKf3(|{x)VIa9Yvgr1oiN{8^uv%Ciw$Wpg?(#;MP7z;d7M5+@-s7Mwg zxe?AF+#ssbo#dWuQk{(K7S7Sk)x!f1fxV(;=#2pHRdoYjhOkXjD?6Kre^kq)Ev~Bw z+5ff`)ke)6+vOhkHW+Dv`;0R?i5@Z|L0ye0K(UnBj@I28ik2(Q2w}M0Ob!mq z#KqlRUwOsc2YYq`WifJdDKbzr2SV!DX0-J-OPmm{9RnewBWXt%ttmHu@b-X2(TzxX zAqJ!7zoxM5y4Fz#wydYX41AvqTy>J}bjE6k>8MYc8A?g3NMYM%G}lw~P^!DdTC1Y!&4((mx~^_0n^jo!r#Vw_4{hJsn^L7@S{N z)~|F#7sKQFW|Ksuq}(PZhrG1LOhX@uU$Hb5*!Y3{`pWh28Fuk0y3SyiF1ksJ!U7eX zqO?LuuOF{VF{)rmiXsPvdF}!VY=Kvo4j!r=waJbEto# z7|0lP_0moNQ!%_I-1vjLhv&gSQY|8h7W?$2_9mYMch-r`Bz`jL@2*;wo0WS9pNY}P zFst-s|0*2#UlJBw4+iz%#-xIkxgL>NIU7$u^>+jf)8wAdF_%#q`3?!=b1VNY-?a#9 zKdQ#7qLxgRT41GNUCy=`Yw+Bf@qAdiN^E*6UZA`&Q_qP#5UZxxcmBFpt+r9W8ZTAl zrktMn4hXlT)K7s-vW&K=HqPNeUePB>qI@4RoX>Zq7wOoNq z0<0L%HS0F7a`CO{SynSzVqoy}GClwsgfOO7Cnz}8Z?UTv`UElv!z`m=l0-TO(H*xp;0v@Y-Y`b3`glMPF0eUefi-R(}oOh5hEDD^778{ED!UEwB!U z%h;=NYnE}N;5t-Ry%3pehZ@I&pyum7um6(zBer;eV36K6ZqYQ0pkb5 z_cH@*mRiJG=QTegLZd|;a-&5Bk>Sz`?O|vb!Qs-5@+gHcR;&WLbLgp&3)F@J zYhZENd&mHOSVJfTNJrc+GZP$)a)~ljh3KC+-+mZn>+`-P_>jfBgQEA~$j*Ro?8ETE z1KxL5G&8I07h1vu#4+>&;z(uVH{?L=;A~tbRYKRmxF+~l?pcU2y%CpFbdn3`^QLiA>2pDZqJWT z_-B5+&(uGkmhU@(pKrIH&>wn({JXbW@1NnZE`xq{@5g`qcs`EzdeA;AZv1dR zIM-IUPY9zd0_(U}0qMAy!2`yQQPTMM!QSb((q*>-X|;*Os6h-CB{U42&`QSNRme*q z4Y0{}Dblm>gRz)i%A}_O{WR&`I^+2lluILS8VTGAu4h1X82zs3GnQ@W&L7p{J{uYcTQduLOm1-3dZOA$lYxKM zG~jEyvxBDnVAcpcqZoYy);}-IOziztdJ8HM@Xg?FNH+j-bql*#&FDEMsl84YT<$qr z(Dbz(yCSaios;;1YHPmk*}QOe`H~(u=p)=0c_uGvw>nVlUW}D87Py|E518IXEDb*FIMX@(i>6 zEpUr}fv)@1EzdlXgey~T$tiPp!1)qdBY5S<2=&|t@zsZrOd@}(4(an(POCXR^=Bxe zWLmaY7D>VDygQc_O*pJMS6K!7M=cr!_lJtAw?HjZ*E)~na@Su&kwN3Q_6-x__P|5R zb6o~^*&ABOl4PL;Cz=cw>)68%yZwS9_FFe4enbFf(mUQZUm?rbTO!G7oyo(MkXY$s zPWKXCN-G`lmVRqaTLMAyMP3IqpkIu0s>3bW+agVCMQl2M$O^~6eL%YPf0JUB6%>KI z;myAk>%3DDkiIB&9%s!R z|3s323{`BKh(Y=^3@i>-M?W;=)?^AOb`}CzRQ3Dz13DJ=mKk*;|n71 z6?BVV5KFJI>VsfK+_7(SakTV%%PPOl%k{^_Rfv@oOv4Im|Kkgn!DHy<>`K{@t#Bjq zcb=4l`x6;^rS6HKo-mQNPL{r@m!E9eiX7#GS~QYvPQ2#4TMya1C&+)t%2yhO&s60 zdn5jsvLPm05mC**++b@Fmbvj5y3thDm$HMU{A?SyFU%phOX4vBzq|T5D~1(bho-zu zZnGu6@yKS=qS@HBB(Tw9v)&!u$g4bm&6?RvPh=w&Huv=P^fj)cVQ%`iOSDgBM8B!P zHJOh~amL!8J!KRv`kIVCuJB&E;7S%mqqQZ@uS)i!%)UQ*oxm9_0HAX@=uGsDI2hJA{DbZAibkmF7^B-b0W;~y`xc= z_P3W$HfUXobFuO#xrJg~Zov4f^vOhXFQsd<4ddSsI!WYurm|R?u`db(Bb&NW62xdF z3v`q+29+40{%3PQiPz9m7Yeu!vWtpF)U!r@l4iLD!m@O>do9e<48)dh zl>GdZz%z1VEG@i{5I2(~>&MDo59Fus`wBvVfKM80F(Px=gTc{n-QZ+rL6zGR^?0G; zCnKOA542n%FII3#?N&+ZmA`@rr*MIGnOBa(S&o^^);(g_Ro`(--tpb0?ApY_+&=J+ z^Zn|}?*%vz$-0_{xn6Rel|JpddP##;yqRra!|IehRtE(3noaYPGUUG`lX1tvJI#}7 zT(Zmjh8qh-VDJl+%_RSCz;41N8z_TA)N!j$vTewvMzb;i`OGiF@G+29b#Wr5 zE9k}$Nmr99*)~S#wEN=Xnc8$jFIu^M^?s%Fn0FRxqTXveH`KwE;_00(smMzose_lv_B0_XcV;;Vjyyc~C6dz}vhQq}(2 zg+d4a7Vf{Fjc-c7|J_b}O!j@?QmDK+OK6?RW!G;f1b>M8F$Ktq{Mjx-=n9jaf13(& zkbPFiJ)4GF4e=FtmLDGyuR<)4DE>Sc9xNwA>U|{qW4S#<^mqma zF54bF4YhAZZcqLdt#xf-HvAu$X9K1_iWiJ&ehE)l7r<$aT7FzN1ay*gmVnEIj?2eRIYLb#PQdG*#tn1L_-a}hPJgIA zNO^jBD02g`&f+yj@XRz{iKU;(ig;8pAL9F)u9?^y?D0Si@YLJ0zmb8^=yO@?6nF#A z1+RXL|D00!P!)Yc(8yZnyzb^KXIXhIalATy9%f@Nram0Yt?$KA@o`W%KSQ4E8*aRW zv7UyvHoW@9fD~&F=HHup0&%>zqbl$q)A{?1LIdl+iaNRhtyHSU3|r{!$2$;An}i8JV*|xik+&p%EnJN zt%0_*+nyuNUfaUv*_TWIXGMH;SO)o4F$JI27| zX{HtE8W+XQDzk;p(TubB#iQRf7KJB%O5V$&OhQCP%u68xrZP8o=>{S=3GF@+ ziV;CI3`~GrNU~)>?HXP?p`a5$ymc??;ANN=Z3sS*fc-?n;VvQMZILW;2y~1uVp*1m zil65|u<#ClV5V28u1yLJWr+J+M%`UT=AIN$6&N9u!iv0W(aV4^hAm`v8)Y(I?rl>9 z+ZQU^&}V`i=IFw)Tp>KSKV`Mg3WA&05EB+-UmPGPZjdcxE|nLTNW7iDkdH4&I+O6h zRpco{v7VC8wj}NwoF)t9>5RarS&tEwo>m z4Cj;;5HYvH1H+pJm!wb&-<6V?TzBK2fcQ2Ca@Se|zow$-e=F_pQIR#(NuFw!W5p?x zlhh4^`lVDos1AFUDU@t;B2gsBw`mSf@HXefHqmA0@IwaTv5~BU!m;0V4?G2=ZQ}Uj z+}c5qYk^jY3aUG07zLhGje11`r2%i(-iU05ShihmPzn)OGR+LfSbuhbX@#4mPRP~Y zi~d|?ebn<9u5(GuG4ud0+Fh){qoihvTbKgkcAP1wQjhDLz!>aHld-CvS_o=Rg%`%Q zJhhG!o3ei#fBY@VwwiAkA(pBv9WF3LM2_B&r7TTEb%ud%g`9}Fwq2XWqc;7EDkofd zGZ2jj^VXX$N{!B6gp#6ZJXySJWtaF6y;ax)o$(W!r@Hg!PZgpP3YpFlq+)9rZ;V^t zuB2XyBpjp>(g3I=9EE&N!#B@E@_de4@iRH(}CWLJTgz5z~$dt!&SFmr9qdiGzTpQ4YPUhm*&89T#*BWA<< zxrF2qaaB|EpxQdcfoSHo&)U^ZJIAKxFuZBP(Yt#cueE2z)6P1WXlvqn+U?BXD@ua% z>8%0sLKbm1j*RHW_fNHgjLj z+SNdYc{&yeFX6%v5!MITrMR4(`1zlv>kG&>B&wZCbRV5ydPHlC#skPNdUevUYxZn{ z#WG{u_^*U#Jz}oU-(5E4^eOp;GVb8&2kjU%UcfL2Az}{!RBb;h+Wfz%?HX4PXlz1Y z-lMg~cNp-q|AE;4u6vaIhjklkdw1)P&^BK8p3Wbu9LUeZQ<_9Kqab%THrxS5pzIzm z8MRJ0DL+=aHG9lw*@-L$RkS4P_}UQ1-c{diGuW_R(%nx&_?+bV3gUu)Iv&5)B7HIe zD-xW`2H&+yc}jVLL;uy)N_eQRh0(NQpC$hrEwp`JXSx_Ws#l|Cd@8tevv86T4fO`c zQZzzM7E2zX$&AFMKy4pE=0Yt71djzDsNy70{A$SYRy+$SNjj$KibJn=&rpXs4H1#C zc2J;WlH<~vA51xl)VUCEJk}@+jADX@qp>oam{Rbe&y3;vmBL*fk9Vms$IWXB73F&J z!_^u%P|1Kbj8g=?Dyf7#DN4;!=v1^Z_?Gw8j6q%_@;-k94np5?;EoFOq$E}V3ippB8W&$*M6DDYtD$9T8bI)Q-c3;%tbT3H61FE+Ko za$NM%@EGV{KU}_h3X-Xes#VQ_wkotp))tOIgco!{tkAc&F$XR%HCm0`Sm{>HI+=g` z-6X8gZU=)5TN9}m1qyz@FKj3`1>^j&UopVYJv`{{!ZN&)0py3DZe-+x=OP(K6lonM z93CMa9w8b=3_^alPa7W@pyB&2`7F$lAs3474VyJ=)|c+hWxdP%N0AQ|`vrGng|g2f zL6y-N7{K;7Q<17zkiJb@#Pz^4lgWx^+}c5&+`IgU)~ozTFGhl?Aq3D7;zk<1J!H_I zwfDT4u}5iP$SO?Y7jF@opFpmcyp-SyE41ZcP+GyPfcaZgrz^ZYhfylFCEW10Q%cR6Y?~C-;DDH%ti#>Er@LT(!z>AV}~O0#d8s2qfCm1IJBAbAX~Ai94CqmpIvkzo_cQBcgN z{Lg0ozhunJ5}INjoySvu-<%Xf?5|BU6RJ)#vFjWVFJx_vPOlv!f7u_DaTA9~a+1Uq zvdv{}847xPPAHr^}5i-Lb(nl~9p*<>tY3p82j87uHozd>*>SmK` z{H?oD?%W}wjwLRM$K(@xz1aUumn(yK4y7)4A53=|9 zJ)16v!~P3&u}N&CW3@2b_3y(=~+=?#y+99qNenBr8b5i0hm zb_&l`8&CEj%m&6#Q8^0tL%?@+~b`*XbZXM3%w9*jmtIR34Vl!|9c zWvQ16x?obA9z8t!zF?k+`}L#ckf}!`r*C-<#)v0F>>((5=2cf#9Gh{nf7y?gh;#7y8eYU?#GFTu@fbK$BEi+ z8Nl_WSl90O1N7xz*Y?WGxgKKtBhVVm5AJsFV^6<>DB%0erdn)Q;{%*$hCpcJ+`&DP zKiqXi=?2a(#o|4eCgd}y?Zv5*+b`$v9+PZ;Y45im3~v5A<_J9ICcO4bu5lG6&9IXI z5~PO5qkP$W03+UT-~D**s1>f*XBekYG5X}Ce%}}yoUAE-ezG_Xhwf=`bN*N$il^L-f)6v3N-C}DB z7u#PEc{s`0)3z+9&WUa0sKHs=CotuE(*{XvI5N+fsS(_fg2@lAs*aIu)TTu*xCugi z2446{#2RqB;#ge8QO{7b>3#sLcO~2~zM%AXDVD76K*0}Mn!_D|pP%?Cw|aR|pRg3S zJC|$EfV4iBQ(oF2fn{6zi*jBnn>{*~YOLmq)HfwGdk6N6FS>(d9VDJq_Haaf(1j{X z%q)u_Kl7+7hgtB#n$50K|LRMRO;DdYarPFzvD-l&6p1_rK0-aWL|ouS^}mZN;>G2o z6oCw!R*DNzY?-@6rq$CqbAD|)_$7~0!?TNM`}saJSW3ZPVjw{^kU)-jKwZE8SU$-l zrbVrAp-|ZgEIKjRdq0>-%4=+r#*pIKyVce5ubM@2PZGMi#0n<4Y&o2IQFL)s6#URJtIX}HQ%nKoy+ zVT@TVxm!5K9jd?4-PZY%v~kdV$PPkZf**8x*~lid0Lsmd>G1{cx79oY^@Xw`C%@lO z>z%Tk7*7y`(@XwpG_;&ve3+g)t0Q1*zpY&zC2MAEePe`f|J}zRX)IC7H1#_7*HhQf z`iG}Jy+kYd4Zfr3_z-Vr$C0~u(en8vv2 zDf2nAT;IJ2N1xd0p~fgi*9P$WZv%#5>a*fNv=d(?RCpLnTx(Z(rNI0^-t33?#?6UA z)x%6dLwmJ(d%WM7elt&n9uh}pF1#c)jJL zeB{D~L_I8(i|X7?@nl(#R|%&%_t0yb3%naGJ6u(SpBdx{sKW1ii+3TMGa*hM-=R{w zE?um0{pqYgi}rMVu?IHW#jHUW+sv;o9#f26H;x#In^k!y0FKMYlZIG_e?@k!Kcf&o z+c5b;lQJnd!`P0s-ELYxw-x29Zm~7M$-_Q8P>GIM@C|V6u{=ORdi1@$xB*P&BK}Rh z;7MeA<;rMe$I5M$R*F_2iy-_NkEo6(fj2-vE^Qj$2nw3?3AHEu9{~Re?k)UZ#5CPL z`%ld~N>(`ne$za2*HP@(t$uf2azj2Dro0TE)`GyMh*>&S>3hj~7Zo1<&M%S}fOR&m3A}=pI_Hag-Z*de6W^FaXEUsm`f)q!)TR!Pp5o zV8z%8KhR^)iaOxMxEZqR1H_ki9lMh=dc^|d4&4v{yGwbf@Adi~DuCUgyXU~}s!sCz zoq>lpps)XK7|=K0oA9202%2~ z|HW-z2Y&GXC)ojI;rssoFog+!(RTmu@Z|r==@oGDur-piH*qxh-)#GAWgVvlQ8eCj z%J@rY=obbgbN?j7k$_Tp*v8@{BxoSO!r@GC2h9ryjb@CbiurWrR7r0_`h2pH`QP_{ z3fVb2)Xg|Nlf6N%e|5LKo;ICo9%g#{KH&dg>mDimS{u&hVS45Y-v3qcw8Mee{ z8`s!edDG0PAvpOuv8=SZkJrWDC_M?L(BN5eRlzxD%UN@`H4@S%R>(Oc{lQ+*p-}NN zh*H&-cwYyrjrE1o+Pcx?;wL|>6?u(xFt_hXMaPd2!=m>6OHbPg zxR$Mqh=2ASoywTC%lXA<9IB5(FP*5?W9|zZmUGNH(b&2bS3}*+N+m_QZwL2lPV@!%3{Afa^MO=)4* zY0G}Isj}4UAwVEC9)~&-T(KH+FVR%w<0tjfm;gaZceIrkhlN>ikxDrD55IWS(Zb)zVz~koi^I(hy`!Szt zy~nfwd?o_jUIL%b^&h8A``SvP?pbS7(UYUR7y=FVT~{T_HVVKV#8&NH+|ne19YoAd6J?#=t@4~nivM>}+7cuf^%~I|L|GiQqByZ88{a9S&{-XrB^2+za%+vsf}v*$%I5etow!rN`UwtZ65J?EZsIuNmGi za@6Bh1;5`5d@q#!d!(B`gQ$H84rU#i0E!#Baldmb#i%3jdu8w~%oX)$sDv|Xu-s4v zsxfWwBNAKiff=%Q3_bDaegI*nU>#DwDzqN#SYTinY%^9;`4dZx-vpL=3TS7yxf%R0@zxHVHtS9$|idREz}V#$?ol31+yPB!cWnZG!#!vZ07J% z9|hWT)uhTyRc(MbE-*f|1d*bgL{gM`2v#S%*=*4;1BOv)hk5B<7K>u%bRy|B)PVKY z?MhE)Tml;a%njvhPc_oVR+03K3;)zBE7=f1Pb~|$(T6U1UBeWgL7G*=Qz!$*on7Y}P`kOd-NH3TpW0A}B8mqa$>yhTQ6|77jB5w1i@}nl zv#GKCSIg#~{VR1fj{4FqwUva(H{88unHMV=cq`Xx6fRF_i^$AZHjph9RUlZf{{?i z#=*LN!vE)D1hwS`IrK%g)5rLKnZ5o`TZ;dt`2V*xN8Q64X9@XZc}4P$3kHFl1Ey?m zmXMo`2}za$6odM^&vl)W!$nhkWnOff@G@d6*$4`ovS{|0cGSj$| zD_HXaE+48U{&pP+yOut9W%p6=4)WIB2zslv4Y}oyDpt#wyAt%hz1KH8jO&))BU)gq z^xIH^=KULkf&;5qOKG?-U=RS%1EZe1}iq$eHy{!Q}l za>IhDjFT};*yw>4E!m#>NWDG2FlX>^Lb4f$E{aWduqn!{Q?w+gN~=D!prpxQYdPGi z#vn~LV86($6oVqaV;*%*Y96&HhK-zs+x9fwyRb@&#WO$J%7Fj9R>wa5>Tj{)AxP2J zu+Wl}maJd#7>8zRx)@g=hDtNi8){LRN;{+F>dC|l@q}%PCd%55evFK$FngW4N#grr z*+Y$S^A2)*vA%aAujv(C7V>S9yCD2xgoUg}e4hV=iR>Y}wtU-$#34`aBwDMlWm~r8 zp>R^z@eGqkr%U{}dTdK$x;?tn2zUQI#Q9O0Yjrt;Ik#!Cx2(Uo!B~s_tG)021R#5? zu_#TUDc+U*>)ua&mhS)(dN^^sYyWQwn9A^yPD!+gbPeiiokBQ5Of_1_lE_uEN^j40 z#PZOLMU*I_3r(yB>4C|0GPD))Mt9XHV{gg6lH1lmndhkBCo}DWkbZoK^Ery$$~K}+ zit_ZR8LDSoz8ZZzI_28$|3%qb1;rJ1-MWMT!M!24ySoN=cXw~x9fCWJyF+kycNz=s zZjFZE9tb&nb*gsNzpM5+-@aIPUF&L9zhgY_oMR9G{686|-cZ3Bk78k_3mGb!>`cv+ zKIrCE8}vV7YF!ZyA@+sT$BeB;!MRN>ER9(38jEDXnT{a~nCq?Ow-7Pa?wx-H;Pe&k z!BOZc+#6AbyB_2_&q*$SKSh$89{M^JrEqrk=$q zd<0nGkrYg&0s<36qd1a@=f)6IK``{5au~#jpJS?EPZk!k#sn!hP%Fizd(MKN8JM+v z6B}f?sUG5g>hWWe_rNk5`DcgMuX?TjrZjp5c>APG_e}9lxgQp@rG9N~KmlPve2<~Q zRxm@W9UZ@lgQ|iL59v3p59x>CBb1Lw$UTev*>4yi7&;J!NiKhus$xoZer)bi1iWGW zBgdjo^^*BueU^>ZZ2;fZZtc|Pef^>Gv;t7}u);dbxaH^L~*qQ4WfT?xp zrA4LQqybj+rC=mQ1G0p57|OMBwy^PvF4_l|t_kC^^n`}-{cyY5Z!k7*b3CX+Vxo{q0Wg;twA?mFb;7l7Uoxs^(r z15{`7Y+_O`0hGvwDxG1Bw}x?hz?6Tpf9%iM0ii- zl<`QkKHMWo(NB_X;LiaahexLn6@Ho(k}`5 z0Z!a+1xcqo2VptdEHv)s4U29Fx=~E zxZbzpi)okUj(`^<#yY;foDM6jKQBFD#*n3&BY_1M;UB;ycS7+CnG4Qepu&7eL{jNu zVgk7{%pgcp8lC^QUVrLrips1tkHveJ;rQ;U120zjJ|nUU{>RwITs7@VB7b_BVvLp{PU?I zYTjXj$N_BW2sONR40}!cxnh5l4rx!s2TC6C6Jss130(Qo++-7BeulWWFu%N*juDQS zYDq2J=C8}z-qi#kUIO&J_osl%vi84W-l?S4r;U?h(@7A2o4$rtAD51S7sehfaP3z z6*=^B5!D^Yc>jj}2f-#S@b@8uEJYnjvWR5ED0<)&DfvF_#+QuWk*>%@6nTp}TvTw2 zr-bBW-IN9@t9m@4i&Scz(s9KfL1qGx95a=;)Ox=dl-{9^y?hQhe0sk8d(~OR_Nws^ zw<{?bfGOG;POPJjG*((SYI@Y;4itbY%3oA#?OI2Jt({zSzx8Ej?-yr@ z9r+BLg4CMSHu7v=y1~R9rLgs@8|uj|m`Yypv6%R^{%);*pU>o9>g=&#k|Sk~6M4>4 zT7y?82^g-R7fZ;GM)0u>;W7V6)$&1OFrhhiJ(WiJo2mmn#q6~Ij?@_wHS#nb$F5xo?&g~6aqj(~W4_$glu7uw$8F!LX|%9_oFI5zl6gtY&~{Ew6mc`f z*X{Rsd(qDD@9wJL`zLQS;i`@}O;|hNl-aj%6aa#t*%2E_j=%p@oAPr-(;pzBvW5*| zEBMKp9#7c%3<;J?s}0~k@q|j?1@H$?=7$8V^egS>VD|xJ{sd#R1OzKQWVu+JDh~6_ z*#%n*e0hSwUi@ayRXc!5>#@5TyuGBj%C?zr%@^zlb6Mo@%hE^FpdE;Z3R_lNpim81 ztD|7$OZ54>q#(rBO-9NMD@Bm*9G}9NqIEg zzHN*5T|6K*ShTtPnm_GpqX47q@XM*w_mG=lrRW^C%gIMNy}VtJ$62wxk|17ubN=W1 zEU0t2NiZ~ciIN58ZYvm2g96=?$s*yBM%}L`W3_ShGv(!!S!2`qqLE-0_c0nC@q82W zCEyY3o>i=qhhQQ8c|k`1>dx;BAQ*~l_s#%Pe~}SpF8;>#aZ*w_cgw)4J+vwI_&_h# zKd7DwsZzBbw|!gOXvn%bqou~>(;4>gmtOWBYMXEQUPOt%Gn6Z`FIea$ zmK#TKGP~UHS3J#!8$87(d*L;F5 z;j@oW`0swa-0$L)zslXf6lX>gQ5g9Lj~KndP>jjoSSKXWGZTux7?v^5@r6?6VPR)R z$n`VMU_~JVdV|P&54#XlhoDKR;7EUrpqo)Hiikt;Z@+P?y?vg%GfMiwX=N!^dyYNa0%v&rEWoA5xkk&ut`kP zh<^|oMTm5yu3;QM{R>q5 z161w3=b;b0%`0q6FIJqUe3lzg+*NuEk%GH(V0-FB?l0UQiJjh6%ASc-e-|o+mIDgX zwZCu#xZ<33L(dnYV?dUMu*ovVq{H^eZgk5AHDvU`<~62B1fQ|(BQpUS6ObbNPR2Ve zqyMdtrfbv~BK~1D7r#P5N&OdpCQ_E}<~EX!?yf*fxBqh)V5<&-H-R?ByD_63mCpq) z2%_PzMGuCZh%RY6w8`BB<*lU=nG4Lo0#_HBd!k#af7j*m5{5&gl!^qWQv^qJA0htu zi05T$p-QbzePw*wcEzUU!QPnB*NwscnVgdO{BzTX6 z#n~u*oQ8=oYR7zn>L;SqYc;f7@2p507F^_d^kEb;Z%fz@bINdS+fxQz5B|i4{!cN) zQ-;wu?+Xv)!OT}4b|;7j@l=u6eyo=G_h`;HZ={`HgAN^rB2HLyo8W6yG|z)PGhRk` zX+dw?9YfTcgzbAHw95fiva@eM?8$s|j-h_EtBmVUX!tjxA7G--D`uY=SBSBX#AUz4 zY>dQhA7Tb(3w{ejDsbQLfV#rLyu_gC*B(MZpux+n)>Ld=k>dq76z1vg?-PR?G~}0C zxu@AR93O83WF7U8T_ej}O1R20sd@17A0wsib;8Cxh7lvo=~rt^hUS>Q)r^Hi5AF>_ z$QUg9!ju(d?rHLwDaiA9v(7M473;_~*g>CSolf{WL=+L!`i6PYMZ@sie(hizir*7~ zo3FAHw{3xnWa`SGaaX6Z;mn`_RT2CaJ?Cm7cFk@}FfjFxv2InVRy_9<;RXPW3NVbR`!b zb~jKg!)s#_Hf2D7An%CfpEYC0GJ1syw@BluhEx%6$!PtW!<1#1?xRm=paSL%PZw(T`D7@HltWGbrCPJAW6b$ble`a{6hFm>I2EEfkjGx=X z{*8O%|4X|T#+%*K%?kFM{F+16$ezXLoNd~7F_tOjM=n0ULOoOvH#`|Fm})NjeZV>b zK>q`yU@BJuGc=YxHKF`0Hh}vHW__BKNBjomEMj)%`!xGq17eJz@uMq-oK>2cEI^Z> zpz4J-Dxhr2su?j$vzd>*dTfkzT&V#2#mO)xb)640DOQdst5 zieybzvcf}NTe+gPKfcI~IyOhVIc@3B=OT^_$Dez|#5fKLx~W+6`)I#yi|EDAjN&cg z#a?#%t0jLcBA&}mW46_@K2=2<5wFCi+w@4CS1Iogyz&5|#(*xi*YC>0kQV9K&XFDN-U-OAd!ReZQ$ zAKx#-fI+*)hv3_lpS0tF+u`AwIZ*dKO{#exrDcC8|Y>AA-t8MV2;|EHuoZ zi{@*StVQOFdSZor<*}4dW?UPvSRiT*UxEw0J}|yav9prjZ?*h1Uv?4tyS0m}G+UFz zwn#fUC~cS7!cEVzEkFr({ntczN2Q1hUD=}L84%mBD~c6%xJQh9oPMEg2lNiQR78G1 z8)Y0$b~`Vn^u);9&&5OoEZxazVCO9AM272xFFz(^HxGFCK@FQ z^IH5qEA(_B?aUwwP_!p>#T!+XUESIDhzm8ch%`mCY11*@Hc;|+laW$HbVI0dxJ^$m zH^OuA;J)My<{x{YQRRtvnVw-YSmK0pLd5m^Ip!>jh@@8Gl-{Gna@Oyjvzj$zIb8=f zTK(!TR4WKETc%$;M7!f?0GnMATj}NQ+aFv$i<>SkzUqNW5qYydD3-2}cHz(}376nbW14Wdk#0a$T zv5zw^4B@4%l&2g6$ss8=BA^Snl1m%e3ZRlPu_osq$x3ldPK`%*ho{#f85X)Xc0)03 zw~JtbgVPs!Oa0`Zj=a7DFc4RSWSk-@NHg@DWzh|n-*O+@<;s2R%;-*_>GSbw7vc96vt zkN4=7DY0LrlDyFndkco~^<;%R(KXLqqY?LVg|+WrASy*R0G?oOPy_o@NS@$aNcykP z4nD2;Hy~UMb%%PRq3!%kjtucOM!&MY{cL|6>K_#e5G>vkhYrs1Q1^0Dy*3SI3SF3< ziUYP)cXwG*E3B@Raxg1nmqHLLWEWE(gNpb-?lA8}A7j%}TE|SA@z%(O*^WIX`gLiI zao%J^1sgfj=f_{&_|Ne!_02|InDj^Q7M7c`tHF^BBQVX{zo_gto4(Z45UwD?0$J1( zA8T45>YAfLmP+THnw)}*kR}s8epNSlu9!MU-W!aw{FdL4oksQa^imHqb!Z_Y?Y*W{ z$H^o!A*KsiCI|F#CQD0BbGc>@V(m;JFDaUg?Jn29*<+lKT3c>QqI@R`9c@du09>NE zsTxrvBw9~E{9l5@fZ*ddH6A31RU~*KW9CQ^lT9ksV%_GSrWk91z*C#-X2NRC@?LCZ z=n;e9LXi_+XX@1{@BI2_xj|{zp=vUYeOqRqOLtBWg`DMsF2Js|kz96ovA))oKJ{0o zE?lZce$mDay*#@Q%|+N!s@|Xw`D<|uhJQt*uZmsy)3Wgr%IwE7oh?{pWfYq zOADb-8AV#-?M<%b5wb3K4zrRvuaDV+y*raO2la#CSqxb)_21&F@e{kQw5sIRkt}HK z`U{)j2uO1AaW-J>X|~g~-ocKLxoD&^j`6ya5cZ?-xFN<<3iVg+*yj213A2$N*zTGi zKr%*y?XLzdzs`&qy9tX?hH$tib7g4VPzqHaxIOoTuv9#g_x(8d`JbBS13UUY5C>wu z+6`x4(E%fBCGS`Q<_v?5hRdhf3U8cUjTz zl6;g8)=D7CYWp3PQP)c!7;en)93QiLAPLQ_Rxyea9T>TL*CVVF9(QUbVWK{wdL!La zaiIL%9Mivt5d4j$+6Hl}rS7GATJu^vcqC#;7xp_AZ-Z(UGiwLi1U+k0qb^HBXLiuU zydFKqB{q(%_69yI_;$!}CiK&=YlpU$2Q3yw#zGM^M+qOrEq3d0gw1bM`tP4hhRrKS zEW}J~D1KJW-s1ohM%8c^tvCY|tPJYCrxPt#k=n*%QmCvZDpNF3)X=^zOm%YXREA#&#nw$TuUcBHcLY@|qqdXNv9!$P%sBF|NA93fWsKZCuQhvoAzB2a9Mq{_GMMvn)Kl~E?l8Aa! zZ~yHt$(35ESC>BDmFtQiG@GIx*ZD8381fl7{Og@>-E`f~`Siv2JXwkBq$9cO?I^3* z!7Y6*+*F4Lxz9kIdmdag?*i05ij^2>aODH#IZrmZxzrZUS3*X5_H_i0qHW5xYsrdp z7xDtw4X3CSnE7>`!s$@Gx<<1(f9v93a<#13RJSaopMF#tH|2L^ZPIm8njW8~i0^Fx za4(`u5jjgr>Y&3v0TMCdiCTN=mWx|DSE|(czq_`ir}6GUrq2AL(dg-nudqc|>6>XU zn|>PvGiY&$25O-u(9on%yq<+x^qSH&oPTHdvnFLcvFb;%kwf}?EH%5$$qySIC?dZ) zbD7`3@*C~TjJV*@S#N$mneXS-!YsxuiKXBsZr}M6UAw{QHSxC0F4%V84WLF2>V6bhp3X5Fr_Tnj=|aH{yq z!KcryNnWWSDBj7SYhPgC&TR$x{4P^P`fKc2d@~O_f-}Eyj`Zq_`i-6eWtIY6{(4{LF=0Un-Rblk!yGBX|kIFWyP8szO>P`Jt?5Z!g;Ra!Sb zjQbdD;?S8A%+i_qZ8H44KgQ(WG}0`q?+zjgVXoiYD7KWU39D<%lQ2Gm&}~bkiCC{| z3Ooyv2nI%=8Gkl~cew9CrS~iZu(_Mi6rYaL`m#nFcBBmCk$E#gx5>=qm+7Km7$Ctc zq`=JeH)uc4v*06y(MP4g*dRKQIy1Wd<)wzth24^T6GzUpsS{IJ!bas7k=O=Nw3MU1 zVR`M*ioQvyT_^ok9O+%$yfW-a+S!bL)f0>%K$pTK8Ju%4MPBp{8!eHDCwnvgpNBo( z<}A&Bn9T79lTr9@4|_#ZH+M_d|Ax%?YaC(x`#xc{YxP7W0zar(9IJTYNNV3oi-}G} zCgP06im-3HoUzT4^Cjmg{b>hI4DCV^P2bN(zi44|BeYG%RJNtm_9NX)*>87+xb0EM zemSdsqDfwfluEddXV;(OZkmT#yPa|fQYt4WNlwU(Tq2bpLXBL9{ zx(}9rYk5?o_SS{s*|&-?ni*#B_O^toAFBSmmaqzQt@ryVnAdpBuHO1l|IPdJ&iJDK z-?bQ?7ng54zsK~iwS*mqFOYlVi`wt5QH9$esKlt(L!!bv(E>jQ{*AmpJ-fhPnaN(w z6si2-orV8r)T2E3`nO{2i+@LKKgr>~BZ<(+F52rg#>!oZ5TO+)f$bI|37A_OJITk!&mb8WwwcO;I z9e_xJ01!%MW!P^XCK`O@vjyj3;7|9dj;xq6zvAs`tPhS7&E}DUV5CYq>Zu?v^;%j& z#VH-z77vvdM=ZZ;rdzgbPi>Ktt|VU_C8GCvA;vR-Jo_VLN*N@+A9I-qTwFoGXZ$hF z>pKZ*lebO)UbrR@akRo*V4dMyU-v;bn{|9F>WAzknIt&q7_MLG9vp{o!7=Y*en?^E z=Xgz_jE~_1Lv-7c2A{$27#-fWB$zpdzgt|^mAn{zM!!Pjg1gRma}^d(^a4k;5F=ni zAUl25-n)psEPNW%ltTNcYq z%3E1zg>&kZSo^k6zrpC}ewli5p?@V>UzJ%Op%v`l$!> zGGC;Ny@dXmo-MXwi`Hc(DE-&Mt8D5TDf*o9%Lkhgds4^eLds=!ejoWnrqU&!Y|8u< zt3)vrWZOYQJX2$~=o;jxlrsDt^b{^@CHogcz zgaT2prcUhvrBKOUAOLMo6i@&br~eO|k);+4jrm|R^nGEGnt~xL4F5}U2myBY_CK!V zL!3DFy|DeY!B5u}Ay-HSye|lvA8bbBKWt`DS>uDvsQ-t}fIrv_abWEp8=!v>f*4qR z;Pu=aBfKXI_&#c^@do&=e&h8PTJ*i@8TY+*PnbS`=sVy|8NBE%1t2{NL#K+N)eQfF zhB)Qbo3$W=!j28(a77sBEsiU0_KN#9oRmnkTG2u+R&|XS{)NP{I&rF&1+`O<;^z^x zo3yrAZyCVV&9sF6ja)?a>!dNKSY>gDE`8;Dm^+2UC!!`zHhCBgHvK78NdPgXjsOQ$ zblp`8O#E1NR3|hOhZ-1LRngM3?A9j9V}=TV*fMLc1kmwJpGZEi=G<>_oH7nTB$DGQ zd8zFvJg&2In{45$$37gG)8I_ac;)Oiye#D|C$YS&&9^U@J zPZ*uo6-40YImyezT`DUZo9}EPjkQcf59Lelgk1%{Po!9r)2^+|XTKqtf?e#-)3icG zy`KccTEx-IMPYXK@vg~N2T-o4M(5xS0{{(PXJ@E*Jhd<$>403gihv3CRgao=jy@()5%F|~jlx*` zgj(;iOAWE`R$q|e4{)q##aWKH`P#9)4Ci-98v-dw6Y#U7+*UKBp$inhoY?IIIa?h2 zeJp@t==oWjRb^ zn~33HwQ>XClT-QJix=&tn5?fM13>71XxjF}aohTyd&IGrdYh+yC2WE&pM}rV!`u`h z8sAc?wP~2nTzq_oH81-t_#Xm(fZfVKI&xOcNZE^`wx_2rY&7|ej5D$K$-qT*y7#P* zTbf>*Nr%X|M8AD+bu0D>KRENUv^ZN}JiA3|qP&-s`6VWv)jN#52By1T{O<`$edJ42 z%uCd51C&J|aIU4OVde1Z4@@5CMGI+<>Fv?VL^|LX+ycyED-QQ&96ORmB8eR z0?`(<*`MF=Y=Xoi-bsmV|q@o|sfkP}>L&ebd~ zUdx3e!7+o?>Js)$7r7Qs9;ME{2p9Vx=^^$5P#(_v-GSPQp<+ z2vvKnlWNH3I8>jM=Q!flLuj#(r%i#H@s<)i8I)SqZ1sVgY)jsbf}m`&DW`kX{hkOi zm}XvK9qursCY?k{hZ4+tIN&Q%J4~;x!P2Qd;XMl3h+3vCS#;-XmVl1hKs}LkVQy>H zD7ag;{2u+6%^w5Zc=iwf52Zj+yoN6zYWJl!Rm*1B15y!1LX!x*nS!j?&DN=`~0i zMAn*d$R0zTl_st$v$yYsA1;Ywd$SD1V{=BT!lHb;o>wA@q7WUNi#JRh*(U??kVXrk z0va7SJKz@@Q$k}44M(&?^cpe$vYs+hV^p-Hr=(K@yAdE{agy$B1OupbMNU{3oiWH> zTp_1J=-kFwBU;%`B`=;Ko^wyW*}EdUoA3uOSZ2iUGP}b22>HTD|5L1WAL8npAwxm! z68&F@H5F4=ci?~4Kcs;6mjCB#v|1e>6YL|vzutzN^=$=SXc!zAoVdiWL`{jgFb=YT zQG;Z7GY5~41vEHr4j1boQ-^Q#waZ%icCl*ut*xc)(w3nMF}<}87XiCotxtx2HoG6M z`Asb!H7U%o>%aTDbK^Jm)aP^CDNXX(8TA6Wi0Ek?vV*=8?)7Cp;`Q(*AHC~(2OYE* zK-NP-0>2kZ<_}Mzb)5utiB^P+7IsZajJRLo%^Os5s}#u^V&3$M0hyy8cP(FHZergs=>VE9A z8eaZT#?cJ`))=J-$2etd_4Bh7)GoHmF5=$i?Yk1xE&y&9Y47!R8u>f=0NUs0B>%rU zYwwgJzHgjC1+Xq$fpvShWHno~zsQas8&pGJ%qa0*!IQ=Q}S4THr=Kmy!-O{j~ z%#yvqeg`D?(>-^Ge5ZY;5tTjDMm=vU+0z~BVd}ynIbBc#?SD=01k3z-^mNKA992+P z=Az-+TyYSS-!x*#n)_0liWN_Tvh7|hPWQ9%K#QG!iD0{tj?E_1kX_xwwJtuakYhkX zNlh7p+($5yhyp0B|Hux>XM|1pVm~H#mV;83ztN_@SuKgeK+ot?%L#mVLMm|1N&A&x zE3W4+l5l%iwLQ=6C42ZlUHhEx2%*mtsqF#Qn&Qv+4h=7tgNp^J>#F8Ox92glOC&cr zLLIZ13m4V>9yHvgJ&V`bU*q1%u`g#X{v=uw2=dSAG>7ilwPD&%wr~$G2}FGP_+7$E z&S6#zH$xqjmkphGA4iIi^?=EV1Hr6-brrRh)R_L-#SeD}R`X--X$5aoI+7`#Se0+O zP&y~Q;W$|7x%hw`E8HO!_f4G&c(TxdA5{F)lvjoFx^DX=59dr)!sgPve!0i?&O>H@ zY&^}q-cgS$AJ0+8iivR(vEOo3bfMH8c3`Fh*s}6rM~~0>xOw}0EB!VKF-$(*^grD5nta*&dTz6H7_giE3F!-AfLKT|3N5a z4$5EPh4HDKV!ab25Te5&gz-t{eJDS+lsvprzyq1AxDQM$mIykcpi+5AD|^qu zd^6u}rde`8DL?RqYo18k^u?$-VE-UiJ|J51G&!4?82JWyNt!Or+a%*6wX}~_RBR18 ziNJJ*aQko#_V7uK9StR3^I~_(nhWBFh?HoVdg3#zZQdUgogy(&1;3+MC<4pFns&%YOe=kD$pgJZp&~t(Y!r8OOO_t?M)88yBep|H z=H$g%IDM;Xw;WN3G>r$Hdy?E{^yltKW@>xBZw^S>gQ_I%kC(@xX)6DQKycw5zFY+n zprnt*rUl$Uq`~ z^>7K)RTHI`>hM`Zk%MwWAz0pH?I<=`d_~Q!Ufe^*VIYF1|8TuIYqS z*%#dY73`~NhS6E}=g-;OMOR)11=kmg)?FmwmUJcUQEYicdagPd{vbfDfi=!W^O#jY zrQhhLIqA%J7W@Ga^SQSzjnLDbWx+pUou}>60#7#F>C*nn*6s{Q){;MCw-U$Z+0_mw z8}>WE#06&v!4ZZ`eK*7IHg(G;K=fGoQK1@NQnqQU8=AYvTgV{6etSK+ThTM`z}W}G zmpK!i^s)9Lz2yw=+mC@xkFbVdyD|Bci>ov;(}!4Sea8mJBb!x+96K_KZ}a`|LZl^s z)0YdDzODGrM_G9uvlqT`eESr{&&He4MTw9y6MYr7R+f-=AwlRk)_T{Z2@s)hQsgI=7sZaakQRs5& z3%%*a7V2~E%k}DoE+oCu@P15dr6}Ck;FJTIPO3iJW{`yUJNn?40%?IT^dZ17RPh_4 zV5dpjfA;@OQ%R)P>kvI)j%a=j36Xt^s6;7kWmw46V#_PwKrK^s!RD|_Fkh)-<;eaP zGFg&2yzAz5CXGmU%@?iH9>p8X>6T zoo7JY7wJ6uneVUMcIQK#!Lt7BcwR6=k{SJaH%MEe>iY{D<5w=`LnZE;bgK-}Qt4Fn zEi?jDCnC>v%t!XcfVBcs+lD`815F!|`vRcwZmEU}^5jvo_s8%s**?i~`@7@jdLJMJruLnV$(^wrX=3ok)(asNKN-WB? zue3o^f$&G8XJ!dNolbz>Y??;-!(VhS%(E=MS+FFQgq@ zFM%0!CXIJPEny~f-_>lEM}y!+Pch0cWa+r`u5POa4sGwL8GonII#RF0lr#FKY*CY* zU~+7(sAcjJ?f*7AJ7=)RR6eglfZF5`{~}>Gh81s#L2H3QJ6Rlb8llF2yVWb5FYt`M zBI~c@643j(`DHyAs%vc**M-`{E%#~QFvOXmerFnXUx@ijg4-Wquu%Z9i(U|nrf50! z{XF25W(JKvYTKRSac){>fvHFTpe&(xS1G;&Zq;=(ixX{?tsUwv0B7}%cD(KiZ0G#h zdO~f%1-z*j??jMH^$k~Gmgo~gsmn5h$daC_H1d@6tUIU?{& z+H-CQ%nl#ftybCOc<%1dg~6XQ*hZ&+PxH8;Ajcea683#=Z~QV&)C&fyTQWM0>ErcM zO`SV*q+r;aY@tFfey4d%?K7uqPByU&3OvhChAwoeh5I{i*|F_`z|7>4cKkN&kCE#Dc z8Fh+%84xQuRYgw?f6^+&9kz(@8!1pdJG+FMY7J*_!YWyzdtKMcdQl4e8I06}4vuLj zr7sM!&sLF?xEc7|Gl+Dhf77RO{ba?Hvu)obTl9WscvpAz)cX{0H65zFBM;b zob(HO?`8Kbh}&VA{u1_=TDM!bj3o6K2ZiLe1eIjv8bes?03XA@dT#4@?Bcm1PKbJ% zXkm+v(M$I3hJCH0n^0Ea*##yg&>)%)ZyPeE>Mxe9Jb7<~QgB-WyPA3+bSBI+^^|eI z!QN@i{b$`(FlaUna`!C8*BAAr^d&ih<<*6_k9=DDXj2@Yc;%W4#aMfe@Gd3{&x^}n zegE*HjDUFElDFQ=<8bGyC|jHywD|9TjdShADT#&2?L}Y(ptVD}F?~CW|q{O*Zk1PRgO9 zHH6g|)Td6+e)cc~(XP2;fkeEwQ{s@pP1+`v0OQ+(F5!>Z5%CN2t?^4BVlqp-;^sCG z0r9866M=bzG*L1jY0Vl%8ii*+6R~{yPY)ee!q=8k3OOuVcO)OVh?*z{YED2<}T0qFo=G->8^$BWaR=l0NxcpQ0nBx|1h z%oBa_UjhEb87@n*Jf})=sF^d4e5B!3N&@y0e^ADfeLim0KssT8sDJTBkVP2|KY_hD z;^#R91>#Ok_%o%N_f_B-ad@-&(vc+UC}uw6tRHlqPEBwVh>D?44=WUzvW?&76LN1m zq?<>8RXP3Ti@3jlrg*|ZBIch2PoNu39aS~-39Z5~7Bz#H(#+S397gJC_D3-tV}1&F zZqMkc@&W^GVZVQ5=HX$%x}fY@eFb@Ic^k1T;gz~B8=Y4PwdWe-;yiyN!h zUb-f7bjT-FNTU7iJ-VNpECB|XOO4=9p`-5%^tFxlatf5GSa8v5Sa09!^6X+7rT~hWzi$cK-$-{_e-ZkxNubzJJ9GrE(3GIoXBI zE3r!dX{`0g@NG_!QDC^-g}ovDTWKV~weuDm`)U^?X&b_qKRq?D#uZrHiRe@<$v$RT0hwZN6t|8OBg{mgXOF2wUmAyQ6 z84XYHXz&l&W~K6p(I>;a!YU8V(6Lja_^v8V22PLSx?fAO*?N`LDa-VVwJXbXoLbA( zT!?8tvf*_~nsy$`g-VOd{2pCHKFY88Rv-?FK5G+Ur?24;W1fmY`og(D1L9RezS+GP z4PMhfZNE+@w%8Ci6K3-U$I-@HwI(-r{m?2B+Fy~AcgR_y0C$ws3Krx1-yBg78@X|0 zfD(3p6l-VZvt1R{a{Cj7y$LQLGz|8~d=h&8TE{*vCKy>V`9$$Z$JNz{n5;5DxpuP7 zoi6YZs{ho)f&G-Wmf@W-yDC?yiP{Y^E~Xp%$Qs~zG6RH+#HOF}-%$7} zX7$M}4VwZWoI#yBmc0ACw{XqrXHDc7vKSTRs>L`W_n~mKiuf)`Oa$nSaSw;#!F`)iSV!}e4 zSTr;P@hnr*_o-X59EJE}K34#$M1~%1Y}VQ$DXiqSMa*bZkMD-7bc%U`Jc1;KVWJw|FQmvvjh%FAlOhy6%^P6p1|$q^fe z8S!L~7mcHOc2u8b_nb)DA>48UmE+Ao}LxfG$ z)rKF)Rau`Id}g3yA27q+3NAnYsKf~$l^ly4!W$!$N3_Eogy@G(uR(_+HDE8R^?drR z+wb!YiL>5%`RJjhQ)UzFg3-li-FsBq-1W2O$z?{5hT|$ynVtv~p!VDQuhH+jXXc0F zWi`Ggmg9_{H_)#5L0vI!@zrQw5=3A_v1qeLk}3TM%P3<)nPgL8&SP?@3l)nwqnk|J zt{qbq2kTjbZz=EhR2jF`PjW=S7>x2}K8Y=9vKoy7`>eJWdWI*}3|SJ2n62%53d}XU zalW23#8O1-=Z`8snC+#Vlcm)Mm(%<}dloYxbOF`a$vQ;2BXqJ$Uw$U*VBOQW(08s7 zOEGmvG@Uz*sHv{*@jM?Xp{0Fl>)qmOi0&35`00(hEEvt7Kf>Q~K-hxuw^qWN0K+UE0qKB5dIxi}Ug5TLE8d)2vXxNB!?o4&Uvj3+1``^?%ZJh?VLcNr} zVsh=3@8IqG|77y_L$5rDC{R!x6i`qq|Amg#bha>cxBOpF{{Mf7LKngRKf<=(DrMci zOxxFSGu46a!fMf-PJ8o5Dz$@}*dnFFLb@7Ai95x8V_GRQPf@m0qKH&eMDj3}M@> z0c-#GTjighJiF@u%-^>UUKBgb5i*E$nmED33*3y%xh5jX2YZ!1eLMT69d-rzBKb@f zcnD4ayh+&nU5Y&^4H%3p*gqLMizOdo3F|aI4n`%Kj=alwB47zT0@qs#dl_S*2A+ej z!p3%S4^ZC*Be$PR(Ep_PzcUW^V;@+)XlKS{e4A+O<=N*;xkl zeaFX*c3AR-p+j~p4=~+fEdsAPdOf{pti6*Irj;3Iu@*&@iFg$f=62paZIiPD)br%U zV@uuIOO;=|C!EYtJt`56a(_!Txt%LH4Gg#&8&39ET+ zd@S4=-0(2%201WH7NfI2OSjY`nBoqIU0J5mz_C<`-YhGPw1W%1t`qZPNog#BCK(S> zUX$V^t~;|@(fdR8wWn}9Y6Dt7T|9*7FGDLTt5Xi+VJm7c^@{0;`;hD~uiXp`dS7-t zDAS6DF~X>T!1sc+t=iANce1G^e{y@dyLy$4pURBd4E5tWa~#5b-V8pqICLkL2XG1S zTg)3f=@FUM%E$g*9v1W&?Q`yJrYx@KGK=U1UE4bs+XI*GCSc}j9k=o4F5oy;9NjH~ z(YH@G@0mFqo$Je8Gd=O$UxR=bUIryQOC!E=Ug&~i8PgT{nj49y_RF<6wOo@N;0G&- z*vmOa@zF}zgx*z?_9_x3;aWt+CG?rPV5`lA)|ph|nPoGFIv>RgVn$-qn^XEdhnqom z>uqig7DgTWOlo-f(PEai(_Yj?It1)Cisxp8W&7s)uamI=x1PL|MGzkKv6*MKmZG`Cv?WHbJSYtJn+t@r{)Au%*L301)-!8G z!<&MfQ!#PEdZgMJP7a4@ra`KPVrvbbr=+X)%DJ4qld(lnKeo$J-vYTp<;|1w;#Shc z>NJ(r$sz!&%-ynSyJU_spMVl^b0xd+-0WJ5I9{kktuubOC$stwiLUh zU2`%R)pa_*F7U~KeR8MOQRlvNnLwL1!DG2-lK@3NVLVlgxQunYY{4$9YcGdmmXki| zffit_V7)8O+^fFeb$Sloj zPN9fh9!zXQKV8O0KVAAl&s2yxv`(>EL6ET>E7+szw2Gwcjet!N2TQU%g6L9or_ zN5u;Lk8VZ&?X-z(pnXP=zM+S;{7D$;sbQ{ewcIRO&QW#5H#|d1Os|uyhB#5KP(5@hYQ4|hD*7)(IQ!@(lS~Il}dF%D|x2mkxEsuSqNKY zU4j*AsiG--h7?qnQAr2vZ_REU(65%Y1pyw!aE9b3kt7Aanz}M4zQKs?By4_i&$oa+ z362!-GcKc&GUwol(>Y2gTeb2Ww92MnEETIFGE{Fvgd?~DBpO*$AlLr7Iug#hTxb^adSC@P#^!Z_^df^K~wiC4o1UXk; zzW3c9rh%K>bKFnNkitpRt*v^+UGRz=hyC6i@<7wCduyAm(cQ>8BOgWu!Wl~|@*}!K z<=i}~zjGY@j}YiO$UlbPSY&L^1XW&v=p31z{x_A@GM(`GWJm}vb%jT3 z#d45OyOxrBe1?DR#bZK0;`W-MG1Mg_h35lA}_~`(uAz+GXq|%X&aew<*#tX zO}SA{+oYD_q30cWsZECVk8;|ooxS*Z6Y6NjliQ?LjYJBSie@nLIUMwonp!&2E>F5+ zoPCM^8CfFoSx6SX;*GbON~9%Qp4wfwH;k3L!eV2!vMjAME$TE>msk<&b0BLrdA`RZ zLmh|`jL;;5H)>u$gd^^2AXH5@Uo^|QM^u*CsE)gx)|dap`gmcDwKG>%Z7mf<*&-uW zhNOfCXLl^+N2XIX#nv&6HJx!vLc6D#iL1EZwvw$6s#ZI4(r_oM{zNXiQ)%*LK<>xJ z%bBBNd2y@6g!a{~*ZpC%OSyA!WatcX!Z}rFry(Z{6*)VJSbqpxE8)Hkg$~@YXp?qU zD^(&YnUo0TFr<}%KlBg-2vB*MpwuhtelgYA;L^guiYjq=mFsXF^%3=;#dl^qn4z`e zM<)$kCuE^Rh+`k8n*y-=a(H1JH`mKr$+&*+sb#{5J6Il594;xxx~}?kqj15)P0t|D zjrS`a?sIUqE1z2~y`L+#kDUd<2HO@2CLX7Q`7|Cva77GFbcD!O1wwj@tnxUfC#1dp znyhK61Xo%lO9C5^_T4X(mHiX$_ zHNU|zBJ=@^+Q{HIixLD1!2&U(5khYHn}~>Fl)%&Qiz0=cqqG|%mE#i6LT)1>4A3HY z%zL?+8wB@t8N54nJ?K{&U68op6B6EkV2>WFci{M|HGWPwPXV9ok%%5eY5)-Wp@$MQ z;guhh@;rcj=RJ`?aS>RHE}Ac%e?=v4bSIp)5Lr&Bm+l4%XiL|-n!OgjWqiRKj?#rU zG^00TTwm)>yZ;3*n)#FupI z&Wy6iY(hL}XMRF9Wgt&!D6biT##WUL(U@D+Pp9&8KWOk|sSmg?mSOLUw z9&f%NzBYmPME}wDU0}M`tK&toj=Vt3Dd1u8Qkgh#2)tT8-_f>TygDS^D ztu21l6c)GTsO|mc0%upkg#!?7%7i*b8n>+&G2OF=y7vT6Ul~-S&VFnMTc^3kske*E7(xGxYKG zh#~c2-}eTV-{);hzU@wBFNe9F*&JcM-p7QW-JIzqZevD;R{MifdY2_IecRNC#^Kz` zbys%f6@feet^qe%T^FzIDBK(s%R?W&&S!(=;E~(t#?AeX2tI3r&UQIhK@1MNcOLiy z-utEfL5NBnIY{}JkA#>1&Pm9;F0AS8_0mh?iN}D_D>vtqr;22bHdxP0& zBfv=v<&QEl7|?A&3sI`Y7>WOuUJ$PF3>=a8E_OPxx!Y__3AJvpu#0n}uUU2aF72*# z$1YKAa@1>{_qjsiZe_dtm|NX%KHgW}$75G4@IG9yFx%#oCC)AQ@w;=~949?2*f~AE z{>%KJl?kE!>lYAE(~moe`2Xj=OWDTW;Xhk0B~wRNQ)d?mLpu{2QzsI}|7KHCoUmaB z5I_j|c3t3*goXXJ-h`qUW{E7PMp6UhsNg6n>V+Wb45*Cmw$ib6n_h>!5zzrb5`uXA z}QqH;DOR?0QE5dCgv&kpjO?!kv7x$cV!{oC3m_QX>3vzK&id^_kSP!WP$IZJ%u7g~KvD6=w2MnC~d(;H+<0bGw|GkfrqOdn;y}OChGaqjt38p`0(@RJ{|cB zW~M}Gph`N2gvhW==KbmcUNnx0=Vexm&5prCIo>`oD`Lp^+B`AqGXTn%PJHc`J$uIc zWiLvh=b_tk2TZkpSyMA4@$jKZszp0g>}SjNBj%ZZo~mZPF8#t)qZBQ+BO2oD0HJ?` z1d%x6+zXJ~L-_~X^2Wt@w>V$#J=SX}G7Z9v%ndBf0%s`LR9*;|+PF4{EL3o~Toh-+ zeNtt7?GDUZb0S43l_s>gzs$Lmv^_s#X-p}@OF zj}7JVz`#dXB(}47$pgpbIO_kgF1&pSJK;MU5x-^3-`PjPyEh<%Yj@CTij5qFMCT)1 zPyAcB9f%?)iGh$!uH&K9B;W3coa45eSl~MnY!3Eb%JagKidzjaCb8RAr+oBSa7E+cI$t*32=tPn(W|#yu zpCWyU+?XNOwUK{*c8?l~UKKt>G@>;i_)WrLG-VpoU9jNxS6HG>6pNU#nQ{$KezuV` zLlKL@YDGx8UUPyt-wKW^<{ku6<5hG;_z}^EhXea$Dn*0CT21I)J~9$k6A~4MmUx3c zP^BiUo{X32e1e0O zlLo|pUtr2CMJ+H}sErd@QJ4mH?nI1}8oda_psz9HsNA+jT0fi^v0cza9mJc8$N}+= z%Zg)(3p{dq8!~g2&v!v8Y;-PJ!>G07*};U{JJ}-P7bu`)rwmt+~$=1RswaYDoSplU(OB@v!<-h9+`JHl$-$f`qY=^l~r#m8d zk>Ci60{NZH=^`OU?yQV=IC(%&DgwqNd5|zJdpyPxTq4CHTXL#G0)WYoOtbAEuc(t< zrMJn*pSB84R!7^b)_Er$SYxxxqw}z2eh+D^O!NmDWxC9sh6~~$QQga zp#p#hrfdS}0iFlMFIYx|)#P-*QLI!cXLzjf2G;K)Mq^EJXyZ+3QV^!v3wke9YANr( zO$U2k2vqbJg6IH9gi1NSge{-UW)%6J{D2_C_w zaA%t06p4kmj4g^xcLg1!&+p%Bj}Q6XJDMfGA&o19IbO<%L82m07^SyBvD@Hz!xd_) zzxx!PQa-b~46`6g+C)wUk7|`ATT97x8>*H~1Z}g>g*yfkPR%yQJ0My_k|x}8z&jyW z`h+P=5$xF%+0yU;NB1tm)zx9r*>>5!sbE`>jFe2>lZp^IT~u>VB7+#NJ7loAU+wOR zYVg(5hQrgDhZmR>i(Fz_ea(J`DmXtK8w`|;bITxGksn5hrZH;lVPyb}&Kt(L_-;HM z7FzuO$$jo69fp_t3Jc3(j!sLq6}7#TS?evYvQ>F=#7qmCrSVP_2gsw+a7m=Ti-)Bg zwb>ONN}vA=%DpG#qp-wCF=_AxwXp`Ult zOO@3VWcWaC4>9H5i#5cYq$rtr_#;&o;@jC~TGeU72Ahbp-6-}uf4x#HxL8XoLmR@m zA*g%@VWm%^fQ?KpW0$Kw3+yYtO8XJwTL1U9dhLO9Q=L^*VFeK{c9pZX>ShW=0dlDw+lAQuAucKdAiL{O*9d2khDw)I6&hh-6 zOF{0TN`(wn5gC*ts~f3rqX`t#p4pE#n@{y>1#rv%a{Rh^{bfouzQ($)*CA|iZTBk+ zPN}3uohxf-EH5K5^6maXONFdTS3yesCZ`B@PgzA?g+p7hzugs9`K9MQVqqv|-xVp3 zT#;}>)e|M75OJPZ5=zV%JlU~X9kyWN%TnKSQ0&@x)O{*NXE-&nc1@4E?IMEKq@Amc z7G)%zh|*k3svSK|%F^L)lYNoBmnArBF?}unh@73_YED0`GtXX;JzkR^aRn1eN1p1M zjC_@K!&J*-OpP&B=BAj(en>U{~~AF!d*XUQyXB^k`3XQNzP}O?u**l?%Lpk-tmgL`w#J8 zu>Z26k5a(^$n$dyzU_S%0#wNXE-w#XDX$8@M!=JQGa$mxBdxLy|8BqJiuXeYik*K_ zQ=Sp39u!aqbFc6VKgF3o3`os@^jmLI=a)5`$h`5_hGlX)6cc3t|7_6^)SV|w$hl3{ zWIL)(3^K>@%iI*$(W;elqfK`!E3ykon)I06f!ay(Brth=?m*Hn8CpVi86?R&lU0*a! zHr%aj+uGl>Z>G%g;fXDy<>On2uk{9$qgvjO*JQX~G{In@gwPcyT_`@}bvGW4{{qvz zM><81I)_I?Lm~m{ssq%Na)yw#A+Hg+ZmL`pT`|9CPyrmX3e8hFWUU0?`WLhwz^NP#zwe~P{9w3cIq~$FIs7c4 zZ05KKuY7>d@9IBc`X5Vn5)l6`mF#fJ=bMSohbXVU*cgmTa_~Tz=iQ_llUdbvUPGL5 z9=B2dC>nHSr5kIlqlrOyn>JBQz!Gu5Lysb;uf_H3~?z0(bi?wwQl;!lC z7I%dHH?Taniqy*F2fm*Z^XWm|>zhq`!-hv~5Jk!{mNYbGR(G-CY4eTXiiPg<^G9Jh zA;Fcx?||C?5G+5xK===LC=b<5S=r>SvgTyf|)W~4&A zxHiQ9bKWz>X9--=zKUO4fUEa3TG^Jc0asG9r)G>lyyESM+-iUH1mt|j;aL^})t)?V z{4^Qx9f zI?+2g*}K>q+uP7P7}5XFqtTuayj^}^ARyMCtP7t1*V6ykM#$C7?0?^vXD4dQBMYL8 zegjhMwAIQzKtx14oo*MJwcZFu!s;yc7ucE}g25ZN;Ob1)$^o`Z@&}C>7{)O8edxXM zw^LBI5(J6~Th24~W;3MDM;{-bpFje?iebnYlf{0oESShrch&5M{LPe_qHvTB-@tOh zGQ-Tlcy!l0xvJsDEu{Zo+eT+%(b?V?v~Vec2&VQa1TbZ=f{pz4-`L-(yUicOG}1N= zSybl2_1I+&dHE1ZB&;V|Z{jrb{#E<%q^-l2l_F2Q-{OGVdnzG+yK5BHYo6BfoYiCe zCRb;yCenR;RpYs7udM{tJ``6Tnd9=BQHoPiD5Uq$(h6_wc?fEoJJ|&#Xj$F&D7pge zw(QwPy^eLnLUYm<`p)H&1-J$B#3jRHlF80dEqyOCj!p8Y5<&C~S=fn~qD%Fqn=Yhg z;-(4W@nP4^#}?qp$ugybF_)5ob&9@NsfGXT3nNkZHO>R%5F)bx>id4I2rihAnGd zs8^$g;q)Cx$t|47AeGqPfLw7uAp~{ID8?oI0PWcDXWHHXoS#V_;k~NoMV$m`DORE@ zhCz~pNhF$qa|k7$ZHUE?YCs-C5G&Oo`2o}^jg(jX+A`h+a#DlTHa~>x6oXCybG$5# zG%ArsOs`Kg0_cvrK?-CNOCve}b<{M0Q76AjfGENt^vh9el47F7;_2A&`SswxxY}CJ z`Pxt*0|9;f5KsTluD1VirvLW`^S^cT-C94>c~#8so^dnsbeZdty6)IHyY;5iU-=}q zUiblIybC2whwCH&myJuij?UA5!aNEO2WTyX2||^80-_Q~0s^OS4}u7AqA-HLe{~8d z6u!5oOx(%VNE$7z-zPhdy03kof0(CFr}EeSVPR$z%&hCf6=JE*Kd~fL)pUVZv7@n=Lvr7#CeA2E?D<|NK#g*kCtB^^=U2PHVQ_;*yjbjw5oL-* zy-H!JNBYDhtJmL3mW)Yq>2s81bqKhnh4Of#;)zNXz3O?T^m@>-0uAN9<}S6q+C(+o zU$w_d$?{7ln*S68Si2MtWgE^dv3N&IC&w_Uaw)SLS-j$fl@_Jv^XAVt%jT_tUs%~p z=FKcsr5NQ~EEY~|{}G956vBH{id~N%JbPry#Ed0fV)+g!QW`0-SXbS^Mek?Lag5V? zb}`4gOFFlrcnAG5pS(JTSadcW_oVU{JG@uz`4gV@P+_qcMjsJ`1WDX~kc%7>l9((b z9Z2mqLKHpnq`{+^Au+NicADV9gQkyS%~ByeJuTKXz}X*m&9e8?^Vmnv<46b1uPZC+ zj2qC}iLDb_K5iOGP45Lgn9vDBzz{m~eRW&ynXgET&C9o__p{TYX- zS;bn%q=FrlLJv*Iudr~IZeYV?7uulK!B=Y`0q93~696(6g8RDK;w^r{vUirsP+{vY zi)HIIl!xk;ms)M;s@agj6%q-%AWGv6pj;yHlL(IbA}l?gF__C8p-GeZCt2!hK)z9k z7lUaHqXOQO;m)v#42d&bAnRw6j1R#7sSPGU zaGBMD0x(4^+xkmg2!=6aGID5#sr>Pb6()-fN9*zfpsipm}a<@;WfYj%(RBWP&kE z`>2q28;1od1stT3ReLbdY?J`Ibu)ZUQWuyp&8=YrXz}x7EG^>Wn9*rh+n5nRV9E4` zT$CG^I8w@slWNX1sR}8{c59O+yN}=E)e||VUQ)PdB1BaFh>ifO+EWN3eWSB&#>ISc zbdM5B*wZ@I;edcJe!~z5#blWlk}gTG_zx2v6j_^?VMH!)jkx6!aWqqTX+?5^fic?= zyh27)ydD^_oIQ+y9KYc50f1VKE1c}~u#cp_Q>un*zA$M#Eo%Cp(WL;GUAKS4nMk$e zmzI~n0`H0uP397KdW8=qAd638PH;Iz#^j;s(zj8hez=^M=CUhtD)&gN+8j9v?C~G^ zLv}=FY}O;LVCf#4Joi+URRDN9Ohu^JM4?Vho$*s647Vjl=&>}8HwXYn0~!#9hw&?t z**JP7YBZp9Lfs=;4z3DkWS7zFVIqT=)Pnu`;-r2xPDb>QdiSBqO=?-aAKn$l6q8pc z4o-g04u&LLu8D<(VC(MeakH(=r&+!B_}?0#My%LHFr>Iti*8#{t4OP;ac9919hE<- zo3(MnGSA@>cqiT(&*j0N1#3DUV(Ty@%0o24Lu(QZsYJ^Na)u)lPN3xxtv%S0g*qG( zaX05oM%l2HQyeb!W9wIIDu3PMZXaHieTSGOF8@G#g;%lc=UZ8>?J4#XALwnWE&DSc z>}|SXzwF-O?d4NruA+NfpVAp{lL=j)R=LZEyqWD?Zx^quoaNU}pIW)v1#B+=*lWP4 z?wdlXuM70p*{Me;vb*`b+m870&9h^aw)yGEszzfLWxYw&Otp_f1Y7n-06E#e+Ix_X zyt-p>F8(3-^ACt`g+p=IFGT*5`~8og3Hh^+B!pLEzx8016^gQZ`Ilp^@4vZAuc;qd zGrfEI=N~-ZV#nKe*D7D#GxQMHUj)O=9|bf1D1G$fJ@ogvMIKp39RGyX>_u3yx> zgn8R2bNn1WJSWh_tb&xsfl-c`Pc}~eBZEn&EH;)DU%@1$E=FyvVp>%br946$aH${wK#s{CDw4@4p+^2m zdv(pK%B2`4q5P|a!i>9}sx3YAd6i0AHY!N67)9 z!?-V_IW++kj_Hi|kjI-!gz!2oBr|xTXdZ(uAwx5pyWw%}Nfk!$nv+S$6pYj?s@(_v zL+Zq{yCHvU`=`?*X9UFb-iBzUgWZ@~AtgC0PsK~(T7Ky*^NAzzWY3h)Jd+xdm8at^ zcXKn+r?Q%KXIpc-w=)urnd8pHrwp@(B*nppffht)H}*u~P-z79yRr*-7Wu47JtiN) zB1Ak+mG^jU3xxjaXfX%`fvx!_`%p1_6VuI8@v_FDK~O2WVDXH|+EsD%tl;RaKnAMT z1~_z4ql*y-Ry6IS4-5`+J;=E2uGb5?Y9HxKSqbFR$3Su`yE`6 z=k}S!46YqQ`ribcoqM}QhSLZjBdj6zKV@b@6g`jp2o3ImytyE zA+{Avs35K{2$35gfHXD^dweFIXwN8W%d#2qU4=s8WX{nIUU4!7aRGA@CmP4E9Rs1d zO8JYoM3Bq?w<%e(N9jly`Qm>NjD}nev(l?=%*`Ig1=s_K2Ksj0EW@#*EjKHDT|-lpmF{`LO4Wu>+btGsmwVOJWYN99BjErjMQ)sIqC3ZF_wMI%zhz%9 zUC>;cScOr>!ZEQOgz0MTi$0awbu8@jA{G});{I?et`S=3)eyE_{$X2p6CtO+lq~*`sO22%ld7XBz3p2 zLGj4K1to0a0y`F1aZ76r6uwf`^f#GT+x4SI;MI)_-Zl!84x<2NV?^l{p6D0X`d%m$ei&rEStZ#H&?Fi;`V>?OZBA?CVbFVX?cY zaKgIKr?EEqogDllU{j5XLLKBRkp)9H>b!cfmdBo7*Ps5ewF9JN%aBNrkq9|d=L2=u z9_Gx zM_`a0rwB1nyk&s`I(ojE<%l5Kw~Yh{Yvh)9m1WfAAEpb;1QJ!AB}lNOXg58;=M9TC@7w}$OD^(sqbaFJezFXf$ty~(gxnIWTa5bD zzG(tw%q;B0+7G z%3s&w2L!h-E)id(EphLF0I0GM*jKN<`Crp-Pq03nzliywHX+8|PtddvsPZab8hWBf zR+3~aiy>`)5adxxl`H6%bxR^;PdkFvY%<23s3f(xQ$#AdXL;C{4GSk~Sxyg4z z{B4y7Dc~M9;KI^saYZk9wugBh33h{@oEpg|t*GUB1TFZdoQUg824j%b*7)T)OR~ac zgMTs%=W1_c5;&5`Cu|HH=+;se{JzlV=*s?e?{H0j{34>y`y04r*=pF+3wFF|)9!FD z=w&cN5TQqSpQH?9g;HR*B9pg4CTWm`fLOVr98{o&73bpAY#4z+ae_)HUbf}n*OAgKq)8UUn3a(PS*__| zMO=Bjs$GEHj@+mwPeoy zI8~A*LrpM?UqI_8q1`TFln`kAHW8MA!ZPtF@I;i1qDn^Vz>J@BKl8__zwc$IQ=sdy zHW+dNydk}#rQ}n3rxROl8#&FCj|Vss}ruy*t7sr&4(FL zRmt(LXi8uKz}}Y>mTLtoAV0ZPruw1T`WaYrT9&+8-klcxnVP`uc3i#-OON{06Qw7BDNhpJF`^4t zY)R#>N2weE^;?)1#(A7J*S>Rc{(N&8kX#Gv8Mr1tDgIDB+rP$fjHq=`I}mt(#l69Q z36DV4jpDq4b>)ZPssn0I*&%eF=hg15@nHA-9<-IeQvml5+!~s641O_w^7IC+8a;`w{w}!EE%k7mvE|=PPIe9yoU~+Ycb%l7Wy?uB3|!Y>%PsI4K->IJ0CSG2A%?8 z(}G(x%^$g0P2@9eFAC{X+iLda0uykFXUHuK3caaCJ~+;yv!A*fJ47jb zAey5HIHwQ&%CeV4-&TD~#dIWJm_zBmR|1^{>HlVf%t<9`0|xybCDV}il}>!skMflX zz1VSrpawnaVOu8~gU=VB7S*!!79T;fWd)fn>t{q6)6^<&Pj*`*$fi0SE3UW{nJ^ba z{o7V$Qh`(t!V?y09ZD_2O!x#lEyPUe_3K~38c`Rrp6g7K)PkiFRaZ3Ipb|DxEI1+* zUIFv2NsCYpt-}ENJTloinKnuBYSXNY;;N1AAaHq7M*12!8zqgBnt_CQp&v5ng;<9) z$o&orT@f__8@{fbdO;85XQm>)fG_%4=jk6#KmNBq9FI-=r(A(=$wm46FUB*{zBBW( zT+#2;vfMzs@h+^I;^WWP2O?h6C;h?a-aJ3tM}5U!+1kwg>-=xNGkAq>1c_?^Kf2_Unyd?TQ(m2}FKVNS<9idPaiD7Fw35oqE;bu6T_ zs*Ga^p>3$R&-YvopW_XbxHmU|MZ>heQZWni?*!q_q^#m`#R&^bMO0o?MOEJ z{YYIJW{XWTyFfF4q6aY{O-MnXs24tR>{*tb8X0tKt#g(idE0NQL&t)8 zGQV-BnLepHg{6MHK&nHWr7qE^#FuK(H8EJ}8J%TO&tiSpsMgXYuv(R9){V17pSkSm z0b(B%(WW;-xA;O7&Cb{^6#q|;c;vt~ddSNfcwWFgS23`kHPlLLNd*^BWkHh=<{~cS z9j(EG0mP--NNgJ=pW92XHMG6Vg6#zf{ug1pac%AB=GlJ3*8!(q;N z=aR{E8sAi%b|g>#TLwQoBW3S*2~KhGQ{SJ4L@iXPAaBtEgEn=OumIMM&R7var+){+ z8cNq#&xr zptC;;qWK!aW0^^F)$z%kLpsN40f(DMz|zfMnF5p)V>gI|#JuozS$n{cxP=oXY&6=j zsZ2J0TnYvCz~zCOVR|BKL}Xh9+Dz!XlRNpO!YZT~*&XriOlIE9O;U5t^$GglCne3s zh0FjOCzM%9C`V@>PmU&~N!^*4&Kk{b%M9BYny^r)$%=`4tKoyhz+AN`EE%^gLo&f# z^7AU;pK?30i)oA(FyopwRZxzOX`1a{_LpHK##>^_3P=|Vn9>ziYg(mcDB##%{LSej znXdl^qPc=07HDu|-DvaU=CL7cBOb}X|GYINqRZ0=U?m9JAR>EaC@fz{@FBT`oJ?kP(SqKla> z?sMb6-hNnR>*d*>v52{!J`}OcO5VF#@(H;!PRnXmn~G!Aa#H3KE9PnpT?0H);VM}y zyR?saAN;bP@A$ImcjYXf&L1#*_4Yxy^e0kJeK_^=?~^x+0FZDeo20p0n}zlH_kx-$ zlfIbX8Bxwb%gl!A;&9wW&itWDYH3+OX;dXnJj{%&pdIhgIV@I;0agQC;v9L7D#w)v zpp0-uF3IU1X(^L2JqB&qs5o6K5bpT5q6Swc1L}v;q#C{OGb*Q%T9|5l&Q!knI|2-Z z9BmQ%T;v?%Dx9pXc!yaAX(?%@yLlA%4A;W#4a{h#308~futP}w0%PQw3+Sg;awA56 zgxv`+L%)2)q@1#AkBGVSiP!Jtu(L!k2{d?|B^F+_dgP9u9dhOLi}tznXRnt|Cm%ed zEUDTkLy&fZC=nb%wjs)*XYFB!-Vvx+dnAuDU(vF+NBh>QKYm5?r}dA`z;fXar}$*1 zop|vDwIyLnvG(X5!{6d^`D;jA9mI|;yFzL z{f*M9256iEy!(%eZ=#hp3vsA#bv}lclQMuSks%zRPd%=51e9Q9TZr&YVC#TVr22j; z+UEv^i%YFr>m_IESG;V+7Hry|)HWsN?R5+zb zkeGlCU9pl5gPlOKj1)Cbzdp^q_o-30a&awplS+dvx}R(npjKRLuTHpv5VDy3-lE3~ zBmTzlIS7-{tMb=PMF>4Bpb*hgJ=p=QXzP*-Y$3@H{#tFVJM`1ZnrFIYQm64iO+JI| zU5+d@Xlisb<(oi4b%+d68Q>J3@$IN&?(2Hx2?k|dWhAkYVlsVd)vo~OaP@Ces_pA2 zzVjWb#Or~|cm@;6ZN)eRB^I-nl?pGJ-0F@95MZeBCE!QdGj=3&M;nIUIEb6a`YTnKZ~4}b8EP7--8IN6Goc8TU!BT!UcF0A&bTb0ZLeGFc{X?-QYmoX&j1QZxaR=O z{oTq#eg1l4N#L$3RvWI@CXF)tonF9s4e0@y8~4$il9e zcT`wwa$C;2gv6VfCz)ieSMhi^6lj9c9IRt94o4G*&7`V-3k72Sc4Cj&S}Gdo@h01u zHI+En`ju8XBxeilClGm6MGkf%nE0RJ*@+8^pZXb6@dvS%d`omxxj32Rd@!H3n-c^8 z{?@-Xt|TllZ%T8?&|5O^-3rvkLurn&GzB%BATU1e>k_Dg5p^lH?PrJHQs@S=h17bF z2k;a5dx{=HIKJvka7nJo#~IIm9_Sr-C85Q}H#$e@WD^&mwuMrf&og+2P`U>_lun@Y z3VM>)aYgP~94A8ClCIxdu&KtUR#?I=&3S1FLQW-Raw{hM4p+Hm(1qnJau2Hcg?<{I zw1&~0QZoo)asb|^IJhZ|I+&y%YnHODsK+SO_&MWLJ9v&$!s(Z~@`$6Fq#mOfKzpep zaqgN&nHDNGuEQZDD(v!JFgyNLfV#F7Sc)c3o#X4lrs<5FOLsDMj+MVhxNhb;i&+3& zUE?0Mtg-bftYYSh4io+xeVvI`YGr4ylq&R8hY#-Gnp9w?1>QRAK~ZxObo$Tal{V-r zMSz~RDc&v*`V_!SacQ zWem>nm@S55Sv*ZUbOu{t>^|)>-8a(f`UHMyS11L3indZO#XAYDDshZBrM#xgyrkB$ zn&;-oypmJlR^(%lfFW73HcJvhto-jOM#x;HiC0F&M~1q0Mn!1($aT#_hkO8Dt)UjR&n>cKnOfRA~@kVAJA z5nqxljtSK0Lt3|Gp9RF#^PUxVhGE}~-Y_l-e@RmlocR7AXDuTIY-|N+Y(?bDvuaFR z^6&!wcsKqCtIkv+C~GR>f~GUPQSFYp{z971i6{I*xlG3L%dUAqbgy$5)j@$(XF+G` zv2z(MQi5O^n(s0PZS(pK@>wafviEDv9(04m-|5xt$7Fm>EjWhNCff+zz#_&J-XIL_%%}tWM}s-i2E&Iphtj+9x;Ka*7-!&a z34PPe9@`L$o4`0Y!O7R4zhnA4gzGM2=Xzvv^VLtUPt_khy|Q}*?B^Zb0FeI#h`Z9| zoRE2=w|b%cy;JB*kK1CuMDtmpEO}u)7 zIZ$A4ORWoG>LG)=X`CWl~`&6HB0!!jNncJ$n zt~qxda=PKes0sP%DiS9mL)@+dGj5ZrL!XR3ujFMIeo~cxa$p~rtxD9(U@6Y>a*3fo z24)N@|HyrMQup`w%#D`&;#?3cqI12KD> zBk@hMERtpFV>)PnzJO7HM@Ia_BL9MQxz~>B4S~7g;(2_|`v9S;;Q#w2uW|d^DiDz8 zk8JJ_?b?@{-`Y#zd-=EMy!wQG#HN*X!EW@~jk~9H?*JV5NAO8aYZyoGq=b{{Z#LT2-&q zWPghx#0-;o_B!Ni%M5Ep%rZ88WM0^jU+O(>a!ao@_<4Fk`A_dquJY+LX0hC>1y0E) zRca|L4$#=-(pWK*6DADL!&BL+hr%h1>AtXo$)1f9W89>iRv+ChK zIqWW--Cek#T+h{eMO1coKzqgUZ?g&&jX8wtEht($uMo8bet{R9p;6n3QqadzThQzl zM3;53IZJ3ky0>i9_~Sn3-U_Oqx7ucY(~v+qT0(C2KKQ)kV4G`50GXlPC9~E>PmR(^Ex$T^eYOG zwRuZj5muh8OZQk-2hEEU=ahYZTw~ajW3G#_NtnV)(xjt)IJ#5Bb||f~i2u2=IZZg7 z@rvHelevx;k|o-ZIHWDW|DN9GX+=X1BUi9g4WkNY@r}~m%i4)EI}Nw3_u5r<_fh4x z##DCuX*EmR1QkA-C|7G+);Az5)e&|yWg~GXE8q%gOQlv4z~=|ec|g0YLFlpxrcTe9 zLRatDHl?&GG1?VVANkwYg(%LmQw=FI2k!eS| zs{LX@FFt0cp-sud^7sebWOtjUXH1`GCXtL|)JC6xczjUxEFPS$6!EmKuOsNt{7C+Ui(4Df6(cn$;^VUrv>AibPkaT$A+;^54mm z|0_oJW0Cm3@-CfBjSOuJ?Tk(T3qH0NyOPQFBaD3gdH=Vp%m1fP(8kHs(8N>eKXcO#5cixspzY zOt+lO-jR6RfWH(DNoqY3csRh{-=;kuF}{D@zWv^Tz@|&7(-W(VV#|-0DilGHNTkBu z*3CgYiBLE{=V&Hs2?#4`2zn*{>s(=E+8MN5^G#qj5Glg*^n1C?V{;7}Vz>uSQfN!P zzAHyAWMMPHa7Y5MLP(F)74r_J(ezA3n)Skr8+{;xeO{lR&XN-^+`pdx;1wTl^x)D6 z|uxI_Us8`h73B`bzj)UzJ{x2sOfH z#~W#b;^y-;WmN=`bOz2HEUCR<3Um~TSa$>}EBiALea@Lr`S9eZY;p?9N~if)SwoQb z`$s}sb)+?&)%XPY-#;Y8|4pF%zc_oRAW5KbTeG`tn_afe?y_y$c9y$r+g-M8Gs|{$ zmTh-o>c&0i-Z(RNCQi&tzU9;YbI1Nyu5Yas-k@oLFBh!;mkaj)Xg2)c=kcEhVJ76_ zX>X$7Xy*K-SvuJNC!3n1qW3>MumU1BX*KZG&A*Au!qr-d8-8QTS}ThDAfbs@oF5uW zyKtXpT$|2ZvrF+WMotw)_y7HK0${O$SN6~^cz(Xg_LS{?w9WU^-}m2lLvW^~^kES~ zsVZwg5m{(9E72Jsuylf*W1j$|gcJ5>)wOuEm!@bFi zd$A35G{E!GS4`N^Q-<=HLbvG{X0(wl{=>i`{OVP1I=-SKkl2k6kx}6yR6?@kl&?jj zwYc(}1V;mw?RP&nN+3{g1_?}lY#HOm1>ZHK=r6ItM&gDX)IwG6n!pC>PO95HrZ8mn zK2rd=LIKNoe9k^0rrVFS4ADg!KMh`=9kms$4+(RdNJ+6Z^w=Zl8cV|4x(hCjWCZ@f z%z!gygvowm$+%I)=MJHyx^hr^0INRE>Hy~hAQMgx)^U@2PkyWpPiSlQfqoQQUPGF3 z!06d`1J>7by6)u@bUcD&73_0`?$JRm5;K(rJqQ&&iqEqox#gyMU{aD7M?I#{ zf>&gR;1E`Bu12;+_+I#iP7?&iWvj1Xew}DnQ|iSNwDM zD!iLc|A(I@?W0q5oG7vO$sKX?%a~2rt!E7VwrB+%_@ScOg*}M#gpy{EuT5qWCzUM3 zyG`Mfn+Syp-%OYyhWi=uzYe90SMn)2)7yd>tmt8=D&#$<#AWk3Pgw$jaI)Z2F=A7h3rbuA#a z=dDEhrbXgxd$&)3G$hy#}TYjK~0K5tRfAZ0?#A*SFs|vct^71Y8nDczA(UqYhiO`Ft7J z_K_CB2=sYC{50%=&40xuEqv>9bPfkl%2F{u&T6Ma(bdKwbhgec;V4QPQlpkLZcPs95)9J~Dm zY2lgKG#QRYhb=6C(tCsswR8Z5T1-k{l(-rp8p=y$=G{H|Iff-6iSy?PbuJ-LvreHt(H%VZ0xnN848Y8w%u9gIcFc(?krkn5$x)B* zEqku^BcGA6e<^_lBy>EM2|!jJv`+EK35;F@Wx>QRByc(5YRFFRRzy7A1VkV^$qkN( zk-Zj~Hcp@suE=fnNk|WkQVJ^B=Iyef=k380a>@Bb)J|k0{{s%Kw26JxJ`UYviwIFn zaq`0)YT7$zzof-xK11!$UK18eN6~`iT4$g&P*kyYd=M#*B2)SeDX5~-jU!dGi-m|& zTC~Y!py=`AO?m3Gl<38Mc0uU{+Zc1D+qvXPd;G+_8pgyl(4k1W{hb2(E>r(oOQcvV zy)9YGnm)>>Dbpx~ct*s?Ug4Z7t(Jg2xW2$yj}rn;3-^dF(eF-p38}6g`D=BcS(A1T zpq>}_4pN&b7-OVxKD3Ic>UYf?|8d{)^H?qdZu~21&md2|*Pq}_qu?p{bY3rRM)D%v zxysxkE>)%GcCdp%-)WgiH_e&cl{3O2o}5o%eEpp1Zhr(&jjXq}w>7bco!d2*W|nB$ zcPT+it~MTen@h@#75siI=|j<9&VC!u$|_!i$!b?m-&opy5b639oq}=VT4oFmG;f!9 zSk-E*r@x~)E-zqOx$>Xof-2bLXrV8R4OP>X7UEXgyNOJ?v7%wD%vD&PcU==6EDk+F zwX#+=(E82nYbnyz8hnB-yI@85j&4bHilm+M=bd(71O38f7LCxQOvZIO{|laE4U;q` zs=N&4&w;=XhpwxS`-5B4Iw*|2h~kQ}HH_U1>s6aOeM#jP)bblj*bVX+l3iQ_+i)|K zs69y1*Wn!7_D`pm+b7@hA}HHfv6Hk=OVq{$UK6`B=FwZzzsFVe*8)E$f*XcbA%%L! zF}0zIQ~SyHlS95^DMmw}fUUsKIJ>zE$RQ%#%Wy%J&BVxhuv|MPL#hkX3$d8XQ1$Ji zj6WH+%7WaHZV(HrQZ7KoHuf|4?7%qGOeGv=*F+5!xEo!vn#wk@qzN!YT7Qt&aVrF= z=t{H*MiQ^raK8}&2~8_Z&u?rI&nFpu0qt9tgr2bDvpIb6JqiLcf_%^?=KMG2@Cr!K zmBD|#dyDmxZu`Cx0|&oi1-SpeUv~d54}$-B^A2l4129&aKV}-{8G*CGkYi9?;Vs%J z#qFYowpx-#F(^3SS;-j-mn8AJ_{e6aNkwn@Iyc%d+v8Q9DjiEBt7rO?r%zcSAa2nMjAN)jK2K(*&r0w3@l z4B4H?zpy^uNIgMUp*P*kJxr4RKdyczgCt1!aYy3FEC&?^p37}N=mYciu!Z;2SpSv6 z_=Wgm`Fx`F_wMeP@2vo&^*;rIcY<$pj81+IJS&hq8U)_npnUKJBE7{Cycq<%^)i1L zT))eQ?f`FzA^ygJy;BLjT4?=?>Jps#F_icbNi7?|JY`%@gHwV>Dbj2N7eYf&uy%_D zJ4YaFw@yUFNgyl|cY#24uOz@>Ob&3m1Bu41uM2DLBZOAU54b5 z@o+bs&}o`eaolWI`$86bT<`eNE zS}U^)QZ{3hwz=|k)ON-WMlBK^x(gh3babUS!wu1X$=DCB>yl3_&SW~jIjW7oC}8iR z!ujlM#`c#+ShckdM;y_hDF>Mk+i?e%pxrbyEMe?z8!@466kkcz+u~W1tPvF3Gs@i^7 zyqH1@gpmh_xw7S`EKn3QZK->0Zk#o-6!;X%}uohCNo{LtMDyio&ek5$l zr)#ACQJsw*E@AW5&o~f1_m;Hf-r1K`EV0HqMS*^>{Jsdx5j?B<2+x(qT{}O0I9oxt zub56M9THP{z$JBb^^MqvBFXR?A+MBLfK0>>*$4Gvj$5O-1>92Rf0=2OKD^tN{~kl( za!%Aqg-%g8aYk`-3A%Xj*cefxbjpV7q1o`tM4@a?GmnXu*YKv{ON@B@edCW7gclE+Xs-g)dFN zRY0mP`dMrl(SwHEBPY$_JlaF+HFLrh@N=Xwj0Il(t(t={vWOyozh3^y-}wk6h|_RZ zu5~xd`U9(tzLlde%vsWK1Rop6Fy@jixqWB0Luj9T zP-~(P-C*y?teGndYO!=>a0|8U4AuCXF0NOQV;_^tV93XA|5USJN%erDp55(*%1EaZ z8yiz6s-y>(-_Qec+*X8&Kw6V;THR!o=qyW%s#fjMRAHxxIrGasy1XXbh!9pk=0 zG%#Sr&?>$X#q3?KQ0Tijc40P$7)3#gKb1Zx9|2#Cixlv_ST^?^_w@uS25FuoCRb!; z=~!II6Md^{j^VZfe(YN@H**Vq?mW=3aa25vfDfIpiDBd9;7~~nJ8gi6!utFXisiWY z$WR&yQ*J|i74VT;JBQ*l*(Aru!%?ijs|NErZifVlgqInIhKprW>78QG%`uC1%aVu@ zss-OR*{~X@(QI%oy!`HVMkC1IQ+#UQqfSi7LC+~}6M|G>wVs&A+bTQn)2tR-8ES*= zye#$=&5nDq8|ahtZ0J^9U2_C-X18t2IUz83c~)-X=WLHr1j71fjaO6KMb

    EI$G1 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ܸB?`+zz2+b`RJ}6cE5*=q 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%0Aw-MD4@lGp;E30T1Hrb_PBl0>%snA{S_?1j_ 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

    <4StY+L48LFXt~T^kDKKv3{Db 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

    LLgSTGFHu`;nhZ>F>OR}s& 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�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 literal 0 HcmV?d00001 diff --git a/services/voldemort/pom.xml b/services/voldemort/pom.xml new file mode 100644 index 00000000..eaa01228 --- /dev/null +++ b/services/voldemort/pom.xml @@ -0,0 +1,109 @@ + + + 4.0.0 + + org.apache.whirr + whirr + 0.5.0-incubating-SNAPSHOT + ../../pom.xml + + org.apache.whirr + whirr-voldemort + jar + 0.5.0-incubating-SNAPSHOT + Apache Whirr Voldemort + + + ${project.groupId} + whirr-core + ${project.version} + + + ${project.groupId} + whirr-core + ${project.version} + test-jar + test + + + org.jclouds + jclouds-compute + + + org.jclouds + jclouds-core + + + org.jclouds.driver + jclouds-jsch + + + org.jclouds.driver + jclouds-log4j + + + junit + junit + + + org.hamcrest + hamcrest-all + + + commons-configuration + commons-configuration + + + org.slf4j + slf4j-api + + + org.slf4j + slf4j-log4j12 + test + + + com.jcraft + jsch + + + log4j + log4j + test + + + + linkedin + voldemort + 0.90 + system + ${basedir}/lib/linkedin-voldemort-0.90.RC3.jar + + + com.google.protobuf + protobuf-java + 2.3.0 + + + org.jdom + jdom + 1.1 + + + diff --git a/services/voldemort/src/main/java/org/apache/whirr/service/voldemort/VoldemortClusterActionHandler.java b/services/voldemort/src/main/java/org/apache/whirr/service/voldemort/VoldemortClusterActionHandler.java new file mode 100644 index 00000000..39d89232 --- /dev/null +++ b/services/voldemort/src/main/java/org/apache/whirr/service/voldemort/VoldemortClusterActionHandler.java @@ -0,0 +1,144 @@ +/** + * 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 org.apache.whirr.service.voldemort; + +import static org.apache.whirr.service.FirewallManager.Rule; +import static org.apache.whirr.service.RolePredicates.role; +import static org.apache.whirr.service.voldemort.VoldemortConstants.ADMIN_PORT; +import static org.apache.whirr.service.voldemort.VoldemortConstants.CLIENT_PORT; +import static org.apache.whirr.service.voldemort.VoldemortConstants.FUNCTION_CONFIGURE; +import static org.apache.whirr.service.voldemort.VoldemortConstants.FUNCTION_INSTALL; +import static org.apache.whirr.service.voldemort.VoldemortConstants.HTTP_PORT; +import static org.apache.whirr.service.voldemort.VoldemortConstants.KEY_CONF_URL; +import static org.apache.whirr.service.voldemort.VoldemortConstants.KEY_TARBALL_URL; +import static org.apache.whirr.service.voldemort.VoldemortConstants.PARAM_CLUSTER_NAME; +import static org.apache.whirr.service.voldemort.VoldemortConstants.PARAM_CONF_URL; +import static org.apache.whirr.service.voldemort.VoldemortConstants.PARAM_PARTITIONS_PER_NODE; +import static org.apache.whirr.service.voldemort.VoldemortConstants.PARAM_PROVIDER; +import static org.apache.whirr.service.voldemort.VoldemortConstants.PARAM_TARBALL_URL; +import static org.apache.whirr.service.voldemort.VoldemortConstants.ROLE; +import static org.jclouds.scriptbuilder.domain.Statements.call; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +import org.apache.commons.configuration.Configuration; +import org.apache.whirr.service.Cluster; +import org.apache.whirr.service.ClusterActionEvent; +import org.apache.whirr.service.ClusterActionHandlerSupport; +import org.apache.whirr.service.ClusterSpec; +import org.apache.whirr.service.ComputeServiceContextBuilder; +import org.apache.whirr.service.Cluster.Instance; +import org.apache.whirr.service.FirewallManager; +import org.apache.whirr.service.jclouds.FirewallSettings; +import org.jclouds.compute.ComputeServiceContext; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.common.base.Function; +import com.google.common.base.Joiner; +import com.google.common.collect.Lists; + +public class VoldemortClusterActionHandler extends ClusterActionHandlerSupport { + + private static final Logger LOG = LoggerFactory.getLogger(VoldemortClusterActionHandler.class); + + @Override + public String getRole() { + return ROLE; + } + + @Override + protected void beforeBootstrap(ClusterActionEvent event) throws IOException { + Configuration config = event.getClusterSpec().getConfiguration(); + List optArgs = new ArrayList(); + + String tarUrl = config.getString(KEY_TARBALL_URL); + + if (tarUrl != null && !tarUrl.trim().isEmpty()) { + optArgs.add(PARAM_TARBALL_URL); + optArgs.add(tarUrl); + } + + String confUrl = config.getString(KEY_CONF_URL); + + if (confUrl != null && !confUrl.trim().isEmpty()) { + optArgs.add(PARAM_CONF_URL); + optArgs.add(confUrl); + } + + addStatement(event, call("install_java")); + addStatement(event, call(FUNCTION_INSTALL, optArgs.toArray(new String[optArgs.size()]))); + } + + @Override + protected void beforeConfigure(ClusterActionEvent event) throws IOException, InterruptedException { + ClusterSpec clusterSpec = event.getClusterSpec(); + Cluster cluster = event.getCluster(); + + LOG.info("Authorizing firewall"); + event.getFirewallManager().addRule( + Rule.create() + .destination(cluster.getInstancesMatching(role(ROLE))) + .ports(CLIENT_PORT, ADMIN_PORT, HTTP_PORT) + ); + + String servers = Joiner.on(' ').join(getPrivateIps(cluster.getInstances())); + + Configuration config = event.getClusterSpec().getConfiguration(); + int partitionsPerNode = config.getInt(PARAM_PARTITIONS_PER_NODE, 10); + addStatement(event, call(FUNCTION_CONFIGURE, + PARAM_PROVIDER, + clusterSpec.getProvider(), + PARAM_PARTITIONS_PER_NODE, + Integer.toString(partitionsPerNode), + PARAM_CLUSTER_NAME, + clusterSpec.getClusterName(), + servers)); + } + + @Override + protected void afterConfigure(ClusterActionEvent event) { + ClusterSpec clusterSpec = event.getClusterSpec(); + Cluster cluster = event.getCluster(); + + String servers = Joiner.on(' ').join(getPrivateIps(cluster.getInstances())); + + LOG.info("Completed setup of Voldemort {} with servers {}", clusterSpec.getClusterName(), servers); + } + + /** + * Given a set of instances returns a list of their private IPs. + * + * @param instances Set of instances in the cluster + * @return List of all private IPs as strings + */ + private List getPrivateIps(Set instances) { + return Lists.transform(Lists.newArrayList(instances), new Function() { + + @Override + public String apply(Instance instance) { + return instance.getPrivateIp(); + } + }); + } + +} diff --git a/services/voldemort/src/main/java/org/apache/whirr/service/voldemort/VoldemortConstants.java b/services/voldemort/src/main/java/org/apache/whirr/service/voldemort/VoldemortConstants.java new file mode 100644 index 00000000..82b118dd --- /dev/null +++ b/services/voldemort/src/main/java/org/apache/whirr/service/voldemort/VoldemortConstants.java @@ -0,0 +1,54 @@ +/** + * 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 org.apache.whirr.service.voldemort; + +public final class VoldemortConstants { + + public static final String KEY_TARBALL_URL = "whirr.voldemort.tarball.url"; + + public static final String KEY_CONF_URL = "whirr.voldemort.conf.url"; + + public static final String KEY_PARTITIONS_PER_NODE = "whirr.voldemort.partitions"; + + public static final String FUNCTION_INSTALL = "install_voldemort"; + + public static final String FUNCTION_CONFIGURE = "configure_voldemort"; + + public static final String PARAM_PROVIDER = "-c"; + + public static final String PARAM_TARBALL_URL = "-u"; + + public static final String PARAM_CONF_URL = "-f"; + + public static final String PARAM_PARTITIONS_PER_NODE = "-p"; + + public static final String PARAM_CLUSTER_NAME = "-n"; + + public static final String ROLE = "voldemort"; + + public static final int CLIENT_PORT = 6666; + + public static final int ADMIN_PORT = 6667; + + public static final int HTTP_PORT = 8081; + + private VoldemortConstants() { + } + +} diff --git a/services/voldemort/src/main/resources/META-INF/services/org.apache.whirr.service.ClusterActionHandler b/services/voldemort/src/main/resources/META-INF/services/org.apache.whirr.service.ClusterActionHandler new file mode 100644 index 00000000..aea0e288 --- /dev/null +++ b/services/voldemort/src/main/resources/META-INF/services/org.apache.whirr.service.ClusterActionHandler @@ -0,0 +1 @@ +org.apache.whirr.service.voldemort.VoldemortClusterActionHandler diff --git a/services/voldemort/src/main/resources/functions/configure_voldemort.sh b/services/voldemort/src/main/resources/functions/configure_voldemort.sh new file mode 100644 index 00000000..a33e6bab --- /dev/null +++ b/services/voldemort/src/main/resources/functions/configure_voldemort.sh @@ -0,0 +1,91 @@ +# +# 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. +# + +# -c -p -n * +function configure_voldemort() { + . /etc/profile + + CLUSTER_NAME=voldemort + + while getopts "c:p:n:" OPTION; do + case $OPTION in + c) + CLOUD_PROVIDER="$OPTARG" + ;; + p) + PARTITIONS_PER_NODE="$OPTARG" + ;; + n) + CLUSTER_NAME="$OPTARG" + ;; + esac + done + shift $((OPTIND-1)); + + # Use public IPs for all Voldemort nodes + case $CLOUD_PROVIDER in + ec2) + SELF_HOST=`wget -q -O - http://169.254.169.254/latest/meta-data/local-ipv4` + ;; + *) + SELF_HOST=`/sbin/ifconfig eth1 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'` + ;; + esac + + prop_file=$VOLDEMORT_HOME/config/server.properties + hostname_file=$VOLDEMORT_HOME/hostnames + + if [ -e $hostname_file ]; then + rm -rf $hostname_file + fi + touch $hostname_file + + # Remove the node id from the existing file + mv $prop_file $prop_file.bak + grep -v "^node.id=" $prop_file.bak > $prop_file + + # Set the node id in the server properties file + # Also generate the hostname files + if [[ $# -gt 0 ]]; then + id=0 + for server in "$@"; do + if [[ $server == *$SELF_HOST* ]]; then + myid=$id + echo -e "\nnode.id=$id" >> $prop_file + fi + echo -e "$server\n" >> $hostname_file + id=$((id+1)) + done + + if [ -z $myid ]; then + echo "Could not determine id for my host $SELF_HOST against servers $@." + exit 1 + fi + else + echo "Missing server names" + exit 1 + fi + + + # Set up the cluster metadata + chmod +x $VOLDEMORT_ROOT/contrib/ec2-testing/bin/run-class.sh + chmod +x $VOLDEMORT_ROOT/contrib/ec2-testing/bin/voldemort-clustergenerator.sh + $VOLDEMORT_ROOT/contrib/ec2-testing/bin/voldemort-clustergenerator.sh --useinternal true --clustername $CLUSTER_NAME --partitions $PARTITIONS_PER_NODE --hostnames $hostname_file > $VOLDEMORT_HOME/config/cluster.xml + + # Start Voldemort + nohup /etc/rc.local & +} diff --git a/services/voldemort/src/main/resources/functions/install_voldemort.sh b/services/voldemort/src/main/resources/functions/install_voldemort.sh new file mode 100644 index 00000000..c4daf46c --- /dev/null +++ b/services/voldemort/src/main/resources/functions/install_voldemort.sh @@ -0,0 +1,85 @@ +# +# 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. +# + +function download() { + tar_url=$1 + tar_file=`basename $tar_url` + dest_dir=$2 + + for i in `seq 1 3`; do + curl --retry 3 --show-error --fail -O $tar_url + if tar zxf $tar_file -C $dest_dir ; then + break; + else + rm -f $tar_file + fi + done + + if [ ! -e $tar_file ]; then + echo "Failed to download $tar_url. Aborting." + exit 1 + fi +} + +# -f -u +function install_voldemort() { + VOLDEMORT_VERSION="0.90.RC3" + VOLDEMORT_TAR_URL=http://test.project-voldemort.com:8080/job/release-090/lastSuccessfulBuild/artifact/dist/voldemort-${VOLDEMORT_VERSION}.tar.gz + VOLDEMORT_CONF_URL= + VOLDEMORT_ROOT=/usr/local/voldemort + VOLDEMORT_HOME=/etc/voldemort + + while getopts "f:u:" OPTION; do + case $OPTION in + f) + VOLDEMORT_CONF_URL="$OPTARG" + ;; + u) + VOLDEMORT_TAR_URL="$OPTARG" + ;; + esac + done + + # Download the binary distribution and put it in the correct directory. + download $VOLDEMORT_TAR_URL `dirname $VOLDEMORT_ROOT` + mv ${VOLDEMORT_ROOT}* $VOLDEMORT_ROOT + + # Create our config directory which Voldemort expects to live under $VOLDEMORT_HOME. + mkdir -p $VOLDEMORT_HOME/config + + if [ "$VOLDEMORT_CONF_URL" = "" ] ; then + # Copy sample property files over to config dir if the user didn't provide a config URL. + cp $VOLDEMORT_ROOT/config/single_node_cluster/config/* $VOLDEMORT_HOME/config/. + else + # Otherwise, download the configuration file contents to the configuration directory. + download $VOLDEMORT_CONF_URL $VOLDEMORT_HOME/config + fi + + # Set Voldemort vars + echo "export VOLDEMORT_ROOT=$VOLDEMORT_ROOT" >> /etc/profile + echo "export VOLDEMORT_HOME=$VOLDEMORT_HOME" >> /etc/profile + + # Start + sed -i -e "s/exit 0//" /etc/rc.local + sed -i -e "s/voldemort//" /etc/rc.local + + cat >> /etc/rc.local < /var/log/voldemort.log 2>&1 & +cd - +RC_LOCAL +} diff --git a/services/voldemort/src/test/java/org/apache/whirr/service/voldemort/integration/VoldemortServiceTest.java b/services/voldemort/src/test/java/org/apache/whirr/service/voldemort/integration/VoldemortServiceTest.java new file mode 100644 index 00000000..a6a8a2f8 --- /dev/null +++ b/services/voldemort/src/test/java/org/apache/whirr/service/voldemort/integration/VoldemortServiceTest.java @@ -0,0 +1,117 @@ +/** + * 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 org.apache.whirr.service.voldemort.integration; + +import static org.apache.whirr.service.voldemort.VoldemortConstants.ADMIN_PORT; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Set; + +import org.apache.commons.configuration.CompositeConfiguration; +import org.apache.commons.configuration.PropertiesConfiguration; +import org.apache.whirr.service.Cluster; +import org.apache.whirr.service.ClusterSpec; +import org.apache.whirr.service.Service; +import org.apache.whirr.service.Cluster.Instance; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +import voldemort.client.protocol.admin.AdminClient; +import voldemort.client.protocol.admin.AdminClientConfig; +import voldemort.cluster.Node; + +public class VoldemortServiceTest { + + private ClusterSpec clusterSpec; + + private Service service; + + private Cluster cluster; + + @Before + public void setUp() throws Exception { + CompositeConfiguration config = new CompositeConfiguration(); + if (System.getProperty("config") != null) { + config.addConfiguration(new PropertiesConfiguration(System.getProperty("config"))); + } + config.addConfiguration(new PropertiesConfiguration("whirr-voldemort-test.properties")); + clusterSpec = ClusterSpec.withTemporaryKeys(config); + + service = new Service(); + cluster = service.launchCluster(clusterSpec); + + waitForBootstrap(); + } + + private void waitForBootstrap() { + for (Instance instance : cluster.getInstances()) { + while (true) { + try { + String url = "tcp://" + instance.getPublicAddress().getHostAddress() + ":" + ADMIN_PORT; + AdminClient client = new AdminClient(url, new AdminClientConfig()); + client.getAdminClientCluster(); + break; + } catch (Exception e) { + System.out.print("."); + try { + Thread.sleep(1000); + } catch (InterruptedException e1) { + break; + } + } + } + } + } + + @Test + public void testInstances() throws Exception { + Set instances = cluster.getInstances(); + String url = "tcp://" + instances.iterator().next().getPublicAddress().getHostAddress() + ":" + ADMIN_PORT; + AdminClient client = new AdminClient(url, new AdminClientConfig()); + voldemort.cluster.Cluster c = client.getAdminClientCluster(); + + List voldemortBasedHosts = new ArrayList(); + + for (Node node : c.getNodes()) + voldemortBasedHosts.add(node.getHost()); + + List whirrBasedHosts = new ArrayList(); + + for (Instance instance : instances) + whirrBasedHosts.add(instance.getPrivateAddress().getHostAddress()); + + Collections.sort(voldemortBasedHosts); + Collections.sort(whirrBasedHosts); + + Assert.assertEquals(whirrBasedHosts, voldemortBasedHosts); + } + + @After + public void tearDown() throws IOException, InterruptedException { + if (service != null) { + service.destroyCluster(clusterSpec); + } + } + +} diff --git a/services/voldemort/src/test/resources/log4j.xml b/services/voldemort/src/test/resources/log4j.xml new file mode 100644 index 00000000..e3a7d54c --- /dev/null +++ b/services/voldemort/src/test/resources/log4j.xml @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/services/voldemort/src/test/resources/whirr-voldemort-test.properties b/services/voldemort/src/test/resources/whirr-voldemort-test.properties new file mode 100644 index 00000000..985bf2a0 --- /dev/null +++ b/services/voldemort/src/test/resources/whirr-voldemort-test.properties @@ -0,0 +1,22 @@ +# +# 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. +# +whirr.cluster-name=voldemort +whirr.instance-templates=2 voldemort +whirr.provider=${sys:whirr.test.provider} +whirr.identity=${sys:whirr.test.identity} +whirr.credential=${sys:whirr.test.credential} \ No newline at end of file diff --git a/src/site/confluence/index.confluence b/src/site/confluence/index.confluence index fcb87706..2eb359ea 100644 --- a/src/site/confluence/index.confluence +++ b/src/site/confluence/index.confluence @@ -14,9 +14,9 @@ h2. Which services and cloud providers are supported? Whirr uses [jclouds|http://code.google.com/p/jclouds/] for provisioning, so in principle it should support all the cloud providers that jclouds supports. The following table shows the cloud provider and service combinations that have been tested. -||Cloud provider||Cassandra||Hadoop||ZooKeeper||HBase||elasticsearch|| -|Amazon EC2|Yes|Yes|Yes|Yes|Yes| -|Rackspace Cloud Servers|Yes|Yes|Yes|Yes|Yes| +||Cloud provider||Cassandra||Hadoop||ZooKeeper||HBase||elasticsearch||Voldemort|| +|Amazon EC2|Yes|Yes|Yes|Yes|Yes|Yes| +|Rackspace Cloud Servers|Yes|Yes|Yes|Yes|Yes|Yes| h2. Download From 52988b9cceab3747984f4149e45fb6e77b3ee350 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Tue, 12 Apr 2011 17:33:18 +0000 Subject: [PATCH 156/216] Update svn:ignore properties for cli and voldermort git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1091511 13f79535-47bb-0310-9956-ffa450edef68 From ab4a7171e6bce6b3a3fecb89ba46c54ec37fde18 Mon Sep 17 00:00:00 2001 From: Andrei Savu Date: Tue, 12 Apr 2011 18:32:28 +0000 Subject: [PATCH 157/216] WHIRR-278. Refactor ClusterSpec and extract InstanceTemplate class git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1091532 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 + .../command/DestroyClusterCommandTest.java | 2 +- .../cli/command/LaunchClusterCommandTest.java | 13 +- .../actions/BootstrapClusterAction.java | 2 +- .../actions/ConfigureClusterAction.java | 2 +- .../actions/ScriptBasedClusterAction.java | 2 +- .../org/apache/whirr/service/Cluster.java | 2 +- .../org/apache/whirr/service/ClusterSpec.java | 339 ++++++------------ .../whirr/service/InstanceTemplate.java | 163 +++++++++ .../apache/whirr/service/package-info.java | 2 +- .../apache/whirr/service/ClusterSpecTest.java | 16 +- 11 files changed, 299 insertions(+), 246 deletions(-) create mode 100644 core/src/main/java/org/apache/whirr/service/InstanceTemplate.java diff --git a/CHANGES.txt b/CHANGES.txt index ba87e5cb..2fec483f 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -16,6 +16,8 @@ Trunk (unreleased changes) WHIRR-275. Improve firewall API for services. (tomwhite) + WHIRR-278. Refactor ClusterSpec and extract InstanceTemplate class + BUG FIXES WHIRR-253. ZooKeeper service should only authorize ingress to ZooKeeper diff --git a/cli/src/test/java/org/apache/whirr/cli/command/DestroyClusterCommandTest.java b/cli/src/test/java/org/apache/whirr/cli/command/DestroyClusterCommandTest.java index 3a976fa5..7ff8ce35 100644 --- a/cli/src/test/java/org/apache/whirr/cli/command/DestroyClusterCommandTest.java +++ b/cli/src/test/java/org/apache/whirr/cli/command/DestroyClusterCommandTest.java @@ -95,7 +95,7 @@ public void testAllOptions() throws Exception { Configuration conf = new PropertiesConfiguration(); conf.addProperty("whirr.version", "version-string"); - ClusterSpec expectedClusterSpec = ClusterSpec.withNoDefaults(conf); + ClusterSpec expectedClusterSpec = ClusterSpec.withTemporaryKeys(conf); expectedClusterSpec.setServiceName("test-service"); expectedClusterSpec.setProvider("rackspace"); expectedClusterSpec.setIdentity("myusername"); diff --git a/cli/src/test/java/org/apache/whirr/cli/command/LaunchClusterCommandTest.java b/cli/src/test/java/org/apache/whirr/cli/command/LaunchClusterCommandTest.java index d3206c28..58ed934c 100644 --- a/cli/src/test/java/org/apache/whirr/cli/command/LaunchClusterCommandTest.java +++ b/cli/src/test/java/org/apache/whirr/cli/command/LaunchClusterCommandTest.java @@ -40,6 +40,7 @@ import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.whirr.service.Cluster; import org.apache.whirr.service.ClusterSpec; +import org.apache.whirr.service.InstanceTemplate; import org.apache.whirr.service.Service; import org.apache.whirr.service.ServiceFactory; import org.apache.whirr.ssh.KeyPair; @@ -102,10 +103,10 @@ public void testAllOptions() throws Exception { Configuration conf = new PropertiesConfiguration(); conf.addProperty("whirr.version", "version-string"); - ClusterSpec expectedClusterSpec = ClusterSpec.withNoDefaults(conf); + ClusterSpec expectedClusterSpec = ClusterSpec.withTemporaryKeys(conf); expectedClusterSpec.setInstanceTemplates(Lists.newArrayList( - new ClusterSpec.InstanceTemplate(1, ImmutableSet.of("role1", "role2")), - new ClusterSpec.InstanceTemplate(2, ImmutableSet.of("role3")) + new InstanceTemplate(1, ImmutableSet.of("role1", "role2")), + new InstanceTemplate(2, ImmutableSet.of("role3")) )); expectedClusterSpec.setServiceName("test-service"); expectedClusterSpec.setProvider("rackspace"); @@ -152,10 +153,10 @@ public void testMaxPercentFailure() throws Exception { conf.addProperty("whirr.version", "version-string"); conf.addProperty("whirr.instance-templates-max-percent-failure", "60 dn+tt"); - ClusterSpec expectedClusterSpec = ClusterSpec.withNoDefaults(conf); + ClusterSpec expectedClusterSpec = ClusterSpec.withTemporaryKeys(conf); expectedClusterSpec.setInstanceTemplates(Lists.newArrayList( - new ClusterSpec.InstanceTemplate(1, 1, Sets.newHashSet("jt", "nn")), - new ClusterSpec.InstanceTemplate(3, 2, Sets.newHashSet("dn", "tt")) + new InstanceTemplate(1, 1, Sets.newHashSet("jt", "nn")), + new InstanceTemplate(3, 2, Sets.newHashSet("dn", "tt")) )); expectedClusterSpec.setServiceName("hadoop"); expectedClusterSpec.setProvider("ec2"); diff --git a/core/src/main/java/org/apache/whirr/cluster/actions/BootstrapClusterAction.java b/core/src/main/java/org/apache/whirr/cluster/actions/BootstrapClusterAction.java index b049151f..67d0d44a 100644 --- a/core/src/main/java/org/apache/whirr/cluster/actions/BootstrapClusterAction.java +++ b/core/src/main/java/org/apache/whirr/cluster/actions/BootstrapClusterAction.java @@ -50,7 +50,7 @@ import org.apache.whirr.service.ClusterActionEvent; import org.apache.whirr.service.ClusterActionHandler; import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.service.ClusterSpec.InstanceTemplate; +import org.apache.whirr.service.InstanceTemplate; import org.apache.whirr.service.ComputeServiceContextBuilder; import org.apache.whirr.service.jclouds.StatementBuilder; import org.apache.whirr.service.jclouds.TemplateBuilderStrategy; diff --git a/core/src/main/java/org/apache/whirr/cluster/actions/ConfigureClusterAction.java b/core/src/main/java/org/apache/whirr/cluster/actions/ConfigureClusterAction.java index fad67052..572f9dbd 100644 --- a/core/src/main/java/org/apache/whirr/cluster/actions/ConfigureClusterAction.java +++ b/core/src/main/java/org/apache/whirr/cluster/actions/ConfigureClusterAction.java @@ -31,7 +31,7 @@ import org.apache.whirr.service.ClusterActionEvent; import org.apache.whirr.service.ClusterActionHandler; import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.service.ClusterSpec.InstanceTemplate; +import org.apache.whirr.service.InstanceTemplate; import org.apache.whirr.service.ComputeServiceContextBuilder; import org.apache.whirr.service.RolePredicates; import org.apache.whirr.service.jclouds.StatementBuilder; diff --git a/core/src/main/java/org/apache/whirr/cluster/actions/ScriptBasedClusterAction.java b/core/src/main/java/org/apache/whirr/cluster/actions/ScriptBasedClusterAction.java index 8285106f..59e73532 100644 --- a/core/src/main/java/org/apache/whirr/cluster/actions/ScriptBasedClusterAction.java +++ b/core/src/main/java/org/apache/whirr/cluster/actions/ScriptBasedClusterAction.java @@ -31,7 +31,7 @@ import org.apache.whirr.service.ClusterSpec; import org.apache.whirr.service.ComputeServiceContextBuilder; import org.apache.whirr.service.FirewallManager; -import org.apache.whirr.service.ClusterSpec.InstanceTemplate; +import org.apache.whirr.service.InstanceTemplate; import org.apache.whirr.service.jclouds.StatementBuilder; import org.jclouds.compute.ComputeServiceContext; import org.jclouds.compute.ComputeServiceContextFactory; diff --git a/core/src/main/java/org/apache/whirr/service/Cluster.java b/core/src/main/java/org/apache/whirr/service/Cluster.java index 05218d6d..b6653095 100644 --- a/core/src/main/java/org/apache/whirr/service/Cluster.java +++ b/core/src/main/java/org/apache/whirr/service/Cluster.java @@ -42,7 +42,7 @@ public class Cluster { /** * This class represents a real node running in a cluster. An instance has * one or more roles. - * @see org.apache.whirr.service.ClusterSpec.InstanceTemplate + * @see InstanceTemplate */ public static class Instance { private final Credentials loginCredentials; diff --git a/core/src/main/java/org/apache/whirr/service/ClusterSpec.java b/core/src/main/java/org/apache/whirr/service/ClusterSpec.java index 6a616730..bb7e328a 100644 --- a/core/src/main/java/org/apache/whirr/service/ClusterSpec.java +++ b/core/src/main/java/org/apache/whirr/service/ClusterSpec.java @@ -21,14 +21,11 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Objects; import com.google.common.collect.Lists; -import com.google.common.collect.Maps; import com.google.common.collect.Sets; import java.io.File; import java.io.FileReader; import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.net.URLEncoder; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -41,16 +38,14 @@ import org.apache.commons.configuration.CompositeConfiguration; import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; +import org.apache.commons.configuration.ConfigurationUtils; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.commons.configuration.interpol.ConfigurationInterpolator; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.text.StrLookup; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.HashMap; - import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; import static org.apache.whirr.ssh.KeyPair.sameKeyPair; @@ -76,9 +71,9 @@ public String lookup(String key) { } public enum Property { - SERVICE_NAME(String.class, false, "(optional) The name of the " + + SERVICE_NAME(String.class, false, "(optional) The name of the " + "service to use. E.g. hadoop."), - + INSTANCE_TEMPLATES(String.class, false, "The number of instances " + "to launch for each set of roles. E.g. 1 hadoop-namenode+" + "hadoop-jobtracker, 10 hadoop-datanode+hadoop-tasktracker"), @@ -174,151 +169,6 @@ public String getDescription() { return description; } } - - /** - * This class describes the type of instances that should be in the cluster. - * This is done by specifying the number of instances in each role. - */ - public static class InstanceTemplate { - private static Map aliases = new HashMap(); - private static final Logger LOG = LoggerFactory.getLogger(InstanceTemplate.class); - - static { - /* - * WARNING: this is not a generic aliasing mechanism. This code - * should be removed in the following releases and it's - * used only temporary to deprecate short legacy role names. - */ - aliases.put("nn", "hadoop-namenode"); - aliases.put("jt", "hadoop-jobtracker"); - aliases.put("dn", "hadoop-datanode"); - aliases.put("tt", "hadoop-tasktracker"); - aliases.put("zk", "zookeeper"); - } - - private Set roles; - private int numberOfInstances; - private int minNumberOfInstances; // some instances may fail, at least a minimum number is required - - public InstanceTemplate(int numberOfInstances, String... roles) { - this(numberOfInstances, numberOfInstances, Sets.newLinkedHashSet(Lists.newArrayList(roles))); - } - - public InstanceTemplate(int numberOfInstances, Set roles) { - this(numberOfInstances, numberOfInstances, roles); - } - - public InstanceTemplate(int numberOfInstances, int minNumberOfInstances, String... roles) { - this(numberOfInstances, minNumberOfInstances, Sets.newLinkedHashSet(Lists.newArrayList(roles))); - } - - public InstanceTemplate(int numberOfInstances, int minNumberOfInstances, Set roles) { - for (String role : roles) { - checkArgument(!StringUtils.contains(role, " "), - "Role '%s' may not contain space characters.", role); - } - - this.roles = replaceAliases(roles); - this.numberOfInstances = numberOfInstances; - this.minNumberOfInstances = minNumberOfInstances; - } - - private static Set replaceAliases(Set roles) { - Set newRoles = Sets.newLinkedHashSet(); - for(String role : roles) { - if (aliases.containsKey(role)) { - LOG.warn("Role name '{}' is deprecated, use '{}'", - role, aliases.get(role)); - newRoles.add(aliases.get(role)); - } else { - newRoles.add(role); - } - } - return newRoles; - } - - public Set getRoles() { - return roles; - } - - public int getNumberOfInstances() { - return numberOfInstances; - } - - public int getMinNumberOfInstances() { - return minNumberOfInstances; - } - - public boolean equals(Object o) { - if (o instanceof InstanceTemplate) { - InstanceTemplate that = (InstanceTemplate) o; - return Objects.equal(numberOfInstances, that.numberOfInstances) - && Objects.equal(minNumberOfInstances, that.minNumberOfInstances) - && Objects.equal(roles, that.roles); - } - return false; - } - - public int hashCode() { - return Objects.hashCode(numberOfInstances, minNumberOfInstances, roles); - } - - public String toString() { - return Objects.toStringHelper(this) - .add("numberOfInstances", numberOfInstances) - .add("minNumberOfInstances", minNumberOfInstances) - .add("roles", roles) - .toString(); - } - - public static Map parse(String... strings) { - Set roles = Sets.newLinkedHashSet(Lists.newArrayList(strings)); - roles = replaceAliases(roles); - Map templates = Maps.newHashMap(); - for (String s : roles) { - String[] parts = s.split(" "); - checkArgument(parts.length == 2, - "Invalid instance template syntax for '%s'. Does not match " + - "' ++...', e.g. '1 hadoop-namenode+hadoop-jobtracker'.", s); - templates.put(parts[1], parts[0]); - } - return templates; - } - - public static List parse(CompositeConfiguration cconf) { - final String[] strings = cconf.getStringArray(Property.INSTANCE_TEMPLATES.getConfigName()); - Map maxPercentFailures = parse(cconf.getStringArray(Property.INSTANCE_TEMPLATES_MAX_PERCENT_FAILURES.getConfigName())); - Map minInstances = parse(cconf.getStringArray(Property.INSTANCE_TEMPLATES_MINIMUM_NUMBER_OF_INSTANCES.getConfigName())); - List templates = Lists.newArrayList(); - for (String s : strings) { - String[] parts = s.split(" "); - checkArgument(parts.length == 2, - "Invalid instance template syntax for '%s'. Does not match " + - "' ++...', e.g. '1 hadoop-namenode+hadoop-jobtracker'.", s); - int num = Integer.parseInt(parts[0]); - int minNumberOfInstances = 0; - final String maxPercentFail = maxPercentFailures.get(parts[1]); - if (maxPercentFail != null) { - // round up integer division (a + b -1) / b - minNumberOfInstances = (Integer.parseInt(maxPercentFail) * num + 99) / 100; - } - String minNumberOfInst = minInstances.get(parts[1]); - if (minNumberOfInst != null) { - int minExplicitlySet = Integer.parseInt(minNumberOfInst); - if (minNumberOfInstances > 0) { // maximum between two minims - minNumberOfInstances = Math.max(minNumberOfInstances, minExplicitlySet); - } else { - minNumberOfInstances = minExplicitlySet; - } - } - if (minNumberOfInstances == 0 || minNumberOfInstances > num) { - minNumberOfInstances = num; - } - templates.add(new InstanceTemplate(num, minNumberOfInstances, parts[1].split("\\+"))); - } - return templates; - } - } private static final String DEFAULT_PROPERTIES = "whirr-default.properties"; @@ -361,25 +211,33 @@ public static ClusterSpec withNoDefaults(Configuration conf) return new ClusterSpec(conf, false); } - private List instanceTemplates; + private String clusterName; private String serviceName; + + private String clusterUser; + private String loginUser; + + private List instanceTemplates; private int maxStartupRetries; + private String provider; private String identity; private String credential; - private String clusterName; + private String privateKey; private File privateKeyFile; private String publicKey; + + private String locationId; private String imageId; + private String hardwareId; private int hardwareMinRam; - private String locationId; + private List clientCidrs; private String version; private String runUrlBase; - private String clusterUser; - + private Configuration config; public ClusterSpec() throws ConfigurationException { @@ -391,31 +249,69 @@ public ClusterSpec(Configuration config) throws ConfigurationException { } /** - * * @throws ConfigurationException if something is wrong */ - public ClusterSpec(Configuration config, boolean loadDefaults) + public ClusterSpec(Configuration userConfig, boolean loadDefaults) throws ConfigurationException { - CompositeConfiguration c = new CompositeConfiguration(); - c.addConfiguration(config); if (loadDefaults) { - c.addConfiguration(new PropertiesConfiguration(DEFAULT_PROPERTIES)); + config = composeWithDefaults(userConfig); + } else { + config = ConfigurationUtils.cloneConfiguration(userConfig); } - setServiceName(c.getString(Property.SERVICE_NAME.getConfigName())); - setInstanceTemplates(InstanceTemplate.parse(c)); - setMaxStartupRetries(c.getInt(Property.MAX_STARTUP_RETRIES.getConfigName(), 1)); - setProvider(c.getString(Property.PROVIDER.getConfigName())); - setIdentity(c.getString(Property.IDENTITY.getConfigName())); - setCredential(c.getString(Property.CREDENTIAL.getConfigName())); - setClusterName(c.getString(Property.CLUSTER_NAME.getConfigName())); + setClusterName(getString(Property.CLUSTER_NAME)); + setServiceName(getString(Property.SERVICE_NAME)); + + setLoginUser(getString(Property.LOGIN_USER)); + setClusterUser(getString(Property.CLUSTER_USER)); + + setInstanceTemplates(InstanceTemplate.parse(config)); + setMaxStartupRetries(getInt(Property.MAX_STARTUP_RETRIES, 1)); + + setProvider(getString(Property.PROVIDER)); + setIdentity(getString(Property.IDENTITY)); + setCredential(getString(Property.CREDENTIAL)); + checkAndSetKeyPair(); + + setImageId(getString(Property.IMAGE_ID)); + setHardwareId(getString(Property.HARDWARE_ID)); + setHardwareMinRam(getInt(Property.HARDWARE_MIN_RAM, 1024)); + + setLocationId(getString(Property.LOCATION_ID)); + setClientCidrs(getList(Property.CLIENT_CIDRS)); + + setVersion(getString(Property.VERSION)); + setRunUrlBase(getString(Property.RUN_URL_BASE)); + } + + private String getString(Property key) { + return config.getString(key.getConfigName()); + } + + private int getInt(Property key, int defaultValue) { + return config.getInt(key.getConfigName(), defaultValue); + } + + private List getList(Property key) { + return config.getList(key.getConfigName()); + } + + private Configuration composeWithDefaults(Configuration userConfig) + throws ConfigurationException { + CompositeConfiguration composed = new CompositeConfiguration(); + composed.addConfiguration(userConfig); + composed.addConfiguration( + new PropertiesConfiguration(DEFAULT_PROPERTIES)); + return composed; + } + + private void checkAndSetKeyPair() throws ConfigurationException { try { - String privateKeyPath = c.getString( - Property.PRIVATE_KEY_FILE.getConfigName()); + String privateKeyPath = getString(Property.PRIVATE_KEY_FILE); - String publicKeyPath = c.getString(Property.PUBLIC_KEY_FILE.getConfigName()); + String publicKeyPath = getString(Property.PUBLIC_KEY_FILE); publicKeyPath = (publicKeyPath == null && privateKeyPath != null) ? privateKeyPath + ".pub" : publicKeyPath; if(privateKeyPath != null && publicKeyPath != null) { @@ -440,97 +336,85 @@ public ClusterSpec(Configuration config, boolean loadDefaults) } catch (IOException e) { throw new ConfigurationException("Error reading one of key file", e); } - - setImageId(config.getString(Property.IMAGE_ID.getConfigName())); - setHardwareId(config.getString(Property.HARDWARE_ID.getConfigName())); - setHardwareMinRam(c.getInteger(Property.HARDWARE_MIN_RAM.getConfigName(), 1024)); - setLocationId(config.getString(Property.LOCATION_ID.getConfigName())); - setClientCidrs(c.getList(Property.CLIENT_CIDRS.getConfigName())); - setVersion(c.getString(Property.VERSION.getConfigName())); - String runUrlBase = c.getString(Property.RUN_URL_BASE.getConfigName()); - - if (runUrlBase == null && getVersion() != null) { - try { - runUrlBase = String.format("http://whirr.s3.amazonaws.com/%s/", - URLEncoder.encode(getVersion(), "UTF-8")); - } catch (UnsupportedEncodingException e) { - throw new ConfigurationException(e); - } - } - setRunUrlBase(runUrlBase); - - String loginUser = c.getString(Property.LOGIN_USER.getConfigName()); - if (loginUser != null) { - // patch until jclouds 1.0-beta-10 - System.setProperty("whirr.login-user", loginUser); - } - clusterUser = c.getString(Property.CLUSTER_USER.getConfigName()); - this.config = c; } public List getInstanceTemplates() { return instanceTemplates; } - + public InstanceTemplate getInstanceTemplate(final Set roles) { for (InstanceTemplate template : instanceTemplates) { - if (roles.equals(template.roles)) { + if (roles.equals(template.getRoles())) { return template; } } return null; } - + public InstanceTemplate getInstanceTemplate(String... roles) { return getInstanceTemplate(Sets.newLinkedHashSet(Lists.newArrayList(roles))); } - - public String getServiceName() { - return serviceName; - } + public int getMaxStartupRetries() { return maxStartupRetries; } + public String getProvider() { return provider; } + public String getIdentity() { return identity; } + public String getCredential() { return credential; } + public String getClusterName() { return clusterName; } + + public String getServiceName() { + return serviceName; + } + public String getPrivateKey() { return privateKey; } + public File getPrivateKeyFile() { return privateKeyFile; - } + } + public String getPublicKey() { return publicKey; } + public String getImageId() { return imageId; } + public String getHardwareId() { return hardwareId; } + public int getHardwareMinRam() { return hardwareMinRam; } + public String getLocationId() { return locationId; } + public List getClientCidrs() { return clientCidrs; } + public String getVersion() { return version; } - @Deprecated + public String getRunUrlBase() { return runUrlBase; } @@ -539,15 +423,14 @@ public String getClusterUser() { return clusterUser; } - + public String getLoginUser() { + return loginUser; + } + public void setInstanceTemplates(List instanceTemplates) { this.instanceTemplates = instanceTemplates; } - public void setServiceName(String serviceName) { - this.serviceName = serviceName; - } - public void setMaxStartupRetries(int maxStartupRetries) { this.maxStartupRetries = maxStartupRetries; } @@ -568,6 +451,10 @@ public void setClusterName(String clusterName) { this.clusterName = clusterName; } + public void setServiceName(String serviceName) { + this.serviceName = serviceName; + } + /** * The rsa public key which is authorized to login to your on the cloud nodes. * @@ -653,7 +540,6 @@ public void setVersion(String version) { this.version = version; } - @Deprecated public void setRunUrlBase(String runUrlBase) { this.runUrlBase = runUrlBase; } @@ -662,6 +548,14 @@ public void setClusterUser(String user) { this.clusterUser = user; } + public void setLoginUser(String user) { + loginUser = config.getString(Property.LOGIN_USER.getConfigName()); + if (loginUser != null) { + // patch until jclouds 1.0-beta-10 + System.setProperty("whirr.login-user", loginUser); + } + } + public Configuration getConfiguration() { return config; } @@ -691,12 +585,14 @@ public boolean equals(Object o) { if (o instanceof ClusterSpec) { ClusterSpec that = (ClusterSpec) o; return Objects.equal(instanceTemplates, that.instanceTemplates) - && Objects.equal(serviceName, that.serviceName) && Objects.equal(maxStartupRetries, that.maxStartupRetries) && Objects.equal(provider, that.provider) && Objects.equal(identity, that.identity) && Objects.equal(credential, that.credential) && Objects.equal(clusterName, that.clusterName) + && Objects.equal(serviceName, that.serviceName) + && Objects.equal(clusterUser, that.clusterUser) + && Objects.equal(loginUser, that.loginUser) && Objects.equal(imageId, that.imageId) && Objects.equal(hardwareId, that.hardwareId) && Objects.equal(hardwareMinRam, that.hardwareMinRam) @@ -709,21 +605,23 @@ public boolean equals(Object o) { } public int hashCode() { - return Objects.hashCode(instanceTemplates, serviceName, - maxStartupRetries, provider, identity, credential, clusterName, publicKey, - privateKey, imageId, hardwareId, locationId, clientCidrs, version, - runUrlBase); + return Objects.hashCode(instanceTemplates, maxStartupRetries, provider, + identity, credential, clusterName, serviceName, clusterUser, loginUser, + publicKey, privateKey, imageId, hardwareId, locationId, clientCidrs, + version, runUrlBase); } public String toString() { return Objects.toStringHelper(this) .add("instanceTemplates", instanceTemplates) - .add("serviceName", serviceName) .add("maxStartupRetries", maxStartupRetries) .add("provider", provider) .add("identity", identity) .add("credential", credential) .add("clusterName", clusterName) + .add("serviceName", serviceName) + .add("clusterUser", clusterUser) + .add("loginUser", loginUser) .add("publicKey", publicKey) .add("privateKey", privateKey) .add("imageId", imageId) @@ -734,5 +632,4 @@ public String toString() { .add("version", version) .toString(); } - } diff --git a/core/src/main/java/org/apache/whirr/service/InstanceTemplate.java b/core/src/main/java/org/apache/whirr/service/InstanceTemplate.java new file mode 100644 index 00000000..e8bdb5cc --- /dev/null +++ b/core/src/main/java/org/apache/whirr/service/InstanceTemplate.java @@ -0,0 +1,163 @@ +package org.apache.whirr.service; + +import com.google.common.base.Objects; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import org.apache.commons.configuration.CompositeConfiguration; +import org.apache.commons.configuration.Configuration; +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static com.google.common.base.Preconditions.checkArgument; + +/** + * This class describes the type of instances that should be in the cluster. + * This is done by specifying the number of instances in each role. + */ +public class InstanceTemplate { + private static Map aliases = new HashMap(); + private static final Logger LOG = LoggerFactory.getLogger(InstanceTemplate.class); + + static { + /* + * WARNING: this is not a generic aliasing mechanism. This code + * should be removed in the following releases and it's + * used only temporary to deprecate short legacy role names. + */ + aliases.put("nn", "hadoop-namenode"); + aliases.put("jt", "hadoop-jobtracker"); + aliases.put("dn", "hadoop-datanode"); + aliases.put("tt", "hadoop-tasktracker"); + aliases.put("zk", "zookeeper"); + } + + private Set roles; + private int numberOfInstances; + private int minNumberOfInstances; // some instances may fail, at least a minimum number is required + + public InstanceTemplate(int numberOfInstances, String... roles) { + this(numberOfInstances, numberOfInstances, Sets.newLinkedHashSet(Lists.newArrayList(roles))); + } + + public InstanceTemplate(int numberOfInstances, Set roles) { + this(numberOfInstances, numberOfInstances, roles); + } + + public InstanceTemplate(int numberOfInstances, int minNumberOfInstances, String... roles) { + this(numberOfInstances, minNumberOfInstances, Sets.newLinkedHashSet(Lists.newArrayList(roles))); + } + + public InstanceTemplate(int numberOfInstances, int minNumberOfInstances, Set roles) { + for (String role : roles) { + checkArgument(!StringUtils.contains(role, " "), + "Role '%s' may not contain space characters.", role); + } + + this.roles = replaceAliases(roles); + this.numberOfInstances = numberOfInstances; + this.minNumberOfInstances = minNumberOfInstances; + } + + private static Set replaceAliases(Set roles) { + Set newRoles = Sets.newLinkedHashSet(); + for(String role : roles) { + if (aliases.containsKey(role)) { + LOG.warn("Role name '{}' is deprecated, use '{}'", + role, aliases.get(role)); + newRoles.add(aliases.get(role)); + } else { + newRoles.add(role); + } + } + return newRoles; + } + + public Set getRoles() { + return roles; + } + + public int getNumberOfInstances() { + return numberOfInstances; + } + + public int getMinNumberOfInstances() { + return minNumberOfInstances; + } + + public boolean equals(Object o) { + if (o instanceof InstanceTemplate) { + InstanceTemplate that = (InstanceTemplate) o; + return Objects.equal(numberOfInstances, that.numberOfInstances) + && Objects.equal(minNumberOfInstances, that.minNumberOfInstances) + && Objects.equal(roles, that.roles); + } + return false; + } + + public int hashCode() { + return Objects.hashCode(numberOfInstances, minNumberOfInstances, roles); + } + + public String toString() { + return Objects.toStringHelper(this) + .add("numberOfInstances", numberOfInstances) + .add("minNumberOfInstances", minNumberOfInstances) + .add("roles", roles) + .toString(); + } + + public static Map parse(String... strings) { + Set roles = Sets.newLinkedHashSet(Lists.newArrayList(strings)); + roles = replaceAliases(roles); + Map templates = Maps.newHashMap(); + for (String s : roles) { + String[] parts = s.split(" "); + checkArgument(parts.length == 2, + "Invalid instance template syntax for '%s'. Does not match " + + "' ++...', e.g. '1 hadoop-namenode+hadoop-jobtracker'.", s); + templates.put(parts[1], parts[0]); + } + return templates; + } + + public static List parse(Configuration cconf) { + final String[] strings = cconf.getStringArray(ClusterSpec.Property.INSTANCE_TEMPLATES.getConfigName()); + Map maxPercentFailures = parse(cconf.getStringArray(ClusterSpec.Property.INSTANCE_TEMPLATES_MAX_PERCENT_FAILURES.getConfigName())); + Map minInstances = parse(cconf.getStringArray(ClusterSpec.Property.INSTANCE_TEMPLATES_MINIMUM_NUMBER_OF_INSTANCES.getConfigName())); + List templates = Lists.newArrayList(); + for (String s : strings) { + String[] parts = s.split(" "); + checkArgument(parts.length == 2, + "Invalid instance template syntax for '%s'. Does not match " + + "' ++...', e.g. '1 hadoop-namenode+hadoop-jobtracker'.", s); + int num = Integer.parseInt(parts[0]); + int minNumberOfInstances = 0; + final String maxPercentFail = maxPercentFailures.get(parts[1]); + if (maxPercentFail != null) { + // round up integer division (a + b -1) / b + minNumberOfInstances = (Integer.parseInt(maxPercentFail) * num + 99) / 100; + } + String minNumberOfInst = minInstances.get(parts[1]); + if (minNumberOfInst != null) { + int minExplicitlySet = Integer.parseInt(minNumberOfInst); + if (minNumberOfInstances > 0) { // maximum between two minims + minNumberOfInstances = Math.max(minNumberOfInstances, minExplicitlySet); + } else { + minNumberOfInstances = minExplicitlySet; + } + } + if (minNumberOfInstances == 0 || minNumberOfInstances > num) { + minNumberOfInstances = num; + } + templates.add(new InstanceTemplate(num, minNumberOfInstances, parts[1].split("\\+"))); + } + return templates; + } +} diff --git a/core/src/main/java/org/apache/whirr/service/package-info.java b/core/src/main/java/org/apache/whirr/service/package-info.java index 7b47de35..9e8294e3 100644 --- a/core/src/main/java/org/apache/whirr/service/package-info.java +++ b/core/src/main/java/org/apache/whirr/service/package-info.java @@ -33,7 +33,7 @@ * required. *

    *

    - * An instance template ({@link org.apache.whirr.service.ClusterSpec.InstanceTemplate}) is a specification of the role sets and + * An instance template ({@link InstanceTemplate}) is a specification of the role sets and * cardinalities that make up a cluster. For example, * 1 role-a+role-b,4 role-c * specifies a cluster in which one node is in roles role-a and diff --git a/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java b/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java index cbf160dd..e1bce828 100644 --- a/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java +++ b/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java @@ -43,7 +43,6 @@ import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.commons.io.IOUtils; -import org.apache.whirr.service.ClusterSpec.InstanceTemplate; import org.apache.whirr.ssh.KeyPair; import org.junit.Assert; import org.junit.Test; @@ -54,8 +53,9 @@ public class ClusterSpecTest { public void testDefaultsAreSet() throws ConfigurationException, JSchException, IOException { ClusterSpec spec = ClusterSpec.withTemporaryKeys(); - assertThat(spec.getRunUrlBase(), - startsWith("http://whirr.s3.amazonaws.com/")); + assertThat(spec.getClusterUser(), + is(System.getProperty("user.name"))); + assertThat(spec.getMaxStartupRetries(), is(1)); } @Test @@ -78,16 +78,6 @@ public void testLoginUserSetsSystemProperty() assertThat(System.getProperty("whirr.login-user"), is("ubuntu")); } - @Test - public void testVersionInRunUrlbaseIsUrlEncoded() - throws ConfigurationException, JSchException, IOException { - Configuration conf = new PropertiesConfiguration(); - conf.setProperty(ClusterSpec.Property.VERSION.getConfigName(), "0.1.0+1"); - ClusterSpec spec = ClusterSpec.withNoDefaults(conf); - assertThat(spec.getRunUrlBase(), - is("http://whirr.s3.amazonaws.com/0.1.0%2B1/")); - } - @Test public void testGetConfigurationForKeysWithPrefix() throws ConfigurationException, JSchException, IOException { From af17959a4937d013605b8b9fd98aa2076b7f2555 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Wed, 13 Apr 2011 04:45:06 +0000 Subject: [PATCH 158/216] WHIRR-245. Clearly demarcate the user and service provider APIs. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1091646 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 11 +++++- .../command/AbstractClusterSpecCommand.java | 30 +++++++-------- .../cli/command/DestroyClusterCommand.java | 14 +++---- .../cli/command/DestroyInstanceCommand.java | 23 ++++++------ .../cli/command/LaunchClusterCommand.java | 16 ++++---- .../whirr/cli/command/ListClusterCommand.java | 14 +++---- .../AbstractClusterSpecCommandTest.java | 14 +++---- .../command/DestroyClusterCommandTest.java | 16 ++++---- .../command/DestroyInstanceCommandTest.java | 37 ++++++++++--------- .../cli/command/LaunchClusterCommandTest.java | 32 ++++++++-------- .../cli/command/ListClusterCommandTest.java | 16 ++++---- .../apache/whirr/{service => }/Cluster.java | 21 ++++++----- .../whirr/{service => }/ClusterAction.java | 2 +- .../Service.java => ClusterController.java} | 19 +++++----- ...ory.java => ClusterControllerFactory.java} | 34 ++++++++--------- .../whirr/{service => }/ClusterSpec.java | 19 +++++----- .../{service => }/HandlerMapFactory.java | 7 ++-- .../whirr/{service => }/InstanceTemplate.java | 31 ++++++++++++---- .../whirr/{service => }/RolePredicates.java | 4 +- .../actions/BootstrapClusterAction.java | 12 +++--- .../actions/ConfigureClusterAction.java | 14 +++---- .../actions/DestroyClusterAction.java | 8 ++-- .../actions/ScriptBasedClusterAction.java | 10 ++--- .../{cluster => }/actions/package-info.java | 4 +- .../apache/whirr/{ssh => }/package-info.java | 4 +- .../whirr/service/ClusterActionEvent.java | 4 +- .../service/ClusterActionHandlerSupport.java | 1 + .../service/ComputeServiceContextBuilder.java | 1 + .../apache/whirr/service/FirewallManager.java | 4 +- .../service/jclouds/FirewallSettings.java | 13 +++---- ...keLoginCredentialsFromWhirrProperties.java | 8 ++-- .../jclouds/TemplateBuilderStrategy.java | 2 +- .../apache/whirr/service/package-info.java | 10 ++--- .../apache/whirr/{net => util}/DnsUtil.java | 2 +- .../apache/whirr/{ssh => util}/KeyPair.java | 19 +++++----- .../whirr/{net => util}/package-info.java | 4 +- ...java => ClusterControllerFactoryTest.java} | 18 ++++----- .../whirr/{service => }/ClusterSpecTest.java | 5 +-- .../actions/BootstrapClusterActionTest.java | 22 +++++------ .../service/TemplateBuilderStrategyTest.java | 6 ++- ...ginCredentialsFromWhirrPropertiesTest.java | 1 + .../whirr/{ssh => util}/KeyPairTest.java | 8 ++-- .../integration/DnsUtilTest.java | 4 +- .../org.apache.whirr.ClusterController | 1 + .../services/org.apache.whirr.service.Service | 1 - .../CassandraClusterActionHandler.java | 6 +-- .../service/cassandra/CassandraService.java | 31 ---------------- .../services/org.apache.whirr.service.Service | 1 - .../CassandraClusterActionHandlerTest.java | 2 +- .../integration/CassandraServiceTest.java | 18 ++++----- .../cdh/integration/CdhHadoopServiceTest.java | 19 ++++------ .../ElasticSearchConfigurationBuilder.java | 17 +++++---- .../elasticsearch/ElasticSearchHandler.java | 14 +++---- ...ElasticSearchConfigurationBuilderTest.java | 20 +++++----- .../integration/ElasticSearchTest.java | 33 +++++++++-------- .../whirr/service/hadoop/HadoopCluster.java | 4 +- .../hadoop/HadoopClusterActionHandler.java | 2 +- .../hadoop/HadoopConfigurationBuilder.java | 8 ++-- .../HadoopDataNodeClusterActionHandler.java | 4 +- .../HadoopNameNodeClusterActionHandler.java | 8 ++-- .../whirr/service/hadoop/HadoopProxy.java | 6 +-- .../whirr/service/hadoop/HadoopService.java | 31 ---------------- .../services/org.apache.whirr.service.Service | 1 - .../HadoopConfigurationBuilderTest.java | 6 +-- .../integration/HadoopServiceController.java | 14 +++---- .../BasicServerClusterActionHandler.java | 6 +-- .../whirr/service/hbase/HBaseCluster.java | 6 +-- .../hbase/HBaseClusterActionHandler.java | 2 +- .../HBaseMasterClusterActionHandler.java | 8 ++-- ...HBaseRegionServerClusterActionHandler.java | 8 ++-- .../integration/HBaseServiceController.java | 26 ++++++------- .../VoldemortClusterActionHandler.java | 22 +++++------ .../integration/VoldemortServiceTest.java | 18 ++++----- .../service/zookeeper/ZooKeeperCluster.java | 4 +- .../ZooKeeperClusterActionHandler.java | 8 ++-- .../service/zookeeper/ZooKeeperService.java | 31 ---------------- .../services/org.apache.whirr.service.Service | 1 - .../integration/ZooKeeperServiceTest.java | 14 +++---- 78 files changed, 441 insertions(+), 504 deletions(-) rename core/src/main/java/org/apache/whirr/{service => }/Cluster.java (95%) rename core/src/main/java/org/apache/whirr/{service => }/ClusterAction.java (97%) rename core/src/main/java/org/apache/whirr/{service/Service.java => ClusterController.java} (91%) rename core/src/main/java/org/apache/whirr/{service/ServiceFactory.java => ClusterControllerFactory.java} (63%) rename core/src/main/java/org/apache/whirr/{service => }/ClusterSpec.java (99%) rename core/src/main/java/org/apache/whirr/{service => }/HandlerMapFactory.java (95%) rename core/src/main/java/org/apache/whirr/{service => }/InstanceTemplate.java (87%) rename core/src/main/java/org/apache/whirr/{service => }/RolePredicates.java (96%) rename core/src/main/java/org/apache/whirr/{cluster => }/actions/BootstrapClusterAction.java (97%) rename core/src/main/java/org/apache/whirr/{cluster => }/actions/ConfigureClusterAction.java (92%) rename core/src/main/java/org/apache/whirr/{cluster => }/actions/DestroyClusterAction.java (92%) rename core/src/main/java/org/apache/whirr/{cluster => }/actions/ScriptBasedClusterAction.java (94%) rename core/src/main/java/org/apache/whirr/{cluster => }/actions/package-info.java (86%) rename core/src/main/java/org/apache/whirr/{ssh => }/package-info.java (93%) rename core/src/main/java/org/apache/whirr/{net => util}/DnsUtil.java (98%) rename core/src/main/java/org/apache/whirr/{ssh => util}/KeyPair.java (99%) rename core/src/main/java/org/apache/whirr/{net => util}/package-info.java (93%) rename core/src/test/java/org/apache/whirr/{service/ServiceFactoryTest.java => ClusterControllerFactoryTest.java} (71%) rename core/src/test/java/org/apache/whirr/{service => }/ClusterSpecTest.java (99%) rename core/src/test/java/org/apache/whirr/{cluster => }/actions/BootstrapClusterActionTest.java (98%) rename core/src/test/java/org/apache/whirr/{ssh => util}/KeyPairTest.java (90%) rename core/src/test/java/org/apache/whirr/{net => util}/integration/DnsUtilTest.java (97%) create mode 100644 core/src/test/resources/META-INF/services/org.apache.whirr.ClusterController delete mode 100644 core/src/test/resources/META-INF/services/org.apache.whirr.service.Service delete mode 100644 services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java delete mode 100644 services/cassandra/src/main/resources/META-INF/services/org.apache.whirr.service.Service delete mode 100644 services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java delete mode 100644 services/hadoop/src/main/resources/META-INF/services/org.apache.whirr.service.Service delete mode 100644 services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java delete mode 100644 services/zookeeper/src/main/resources/META-INF/services/org.apache.whirr.service.Service diff --git a/CHANGES.txt b/CHANGES.txt index 2fec483f..6643071b 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -16,7 +16,16 @@ Trunk (unreleased changes) WHIRR-275. Improve firewall API for services. (tomwhite) - WHIRR-278. Refactor ClusterSpec and extract InstanceTemplate class + WHIRR-278. Refactor ClusterSpec and extract InstanceTemplate class. (asavu) + + WHIRR-245. Clearly demarcate the user and service provider APIs. There + are some incompatible API changes which affect clients and service writers: + * The client API has moved from the org.apache.whirr.service package to the + org.apache.whirr package. + * Service(Factory) has been renamed to ClusterController(Factory). + * org.apache.whirr.cluster.actions has been renamed to + org.apache.whirr.actions. + (tomwhite) BUG FIXES diff --git a/cli/src/main/java/org/apache/whirr/cli/command/AbstractClusterSpecCommand.java b/cli/src/main/java/org/apache/whirr/cli/command/AbstractClusterSpecCommand.java index 73d54f6f..535bfdc0 100644 --- a/cli/src/main/java/org/apache/whirr/cli/command/AbstractClusterSpecCommand.java +++ b/cli/src/main/java/org/apache/whirr/cli/command/AbstractClusterSpecCommand.java @@ -18,8 +18,10 @@ package org.apache.whirr.cli.command; -import static org.apache.whirr.service.ClusterSpec.Property.CLUSTER_NAME; -import static org.apache.whirr.service.ClusterSpec.Property.IDENTITY; +import static org.apache.whirr.ClusterSpec.Property.CLUSTER_NAME; +import static org.apache.whirr.ClusterSpec.Property.IDENTITY; + +import com.google.common.collect.Maps; import java.util.EnumSet; import java.util.Map; @@ -33,20 +35,18 @@ import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; +import org.apache.whirr.ClusterController; +import org.apache.whirr.ClusterControllerFactory; +import org.apache.whirr.ClusterSpec; +import org.apache.whirr.ClusterSpec.Property; import org.apache.whirr.cli.Command; -import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.service.ClusterSpec.Property; -import org.apache.whirr.service.Service; -import org.apache.whirr.service.ServiceFactory; - -import com.google.common.collect.Maps; /** * An abstract command for interacting with clusters. */ public abstract class AbstractClusterSpecCommand extends Command { - protected ServiceFactory factory; + protected ClusterControllerFactory factory; protected OptionParser parser = new OptionParser(); private Map optionSpecs; @@ -57,7 +57,7 @@ public abstract class AbstractClusterSpecCommand extends Command { .describedAs("config.properties") .ofType(String.class); - public AbstractClusterSpecCommand(String name, String description, ServiceFactory factory) { + public AbstractClusterSpecCommand(String name, String description, ClusterControllerFactory factory) { super(name, description); this.factory = factory; @@ -105,17 +105,15 @@ protected ClusterSpec getClusterSpec(OptionSet optionSet) throws ConfigurationEx /** * Create the specified service - * @param serviceName - * @return * @throws IllegalArgumentException if serviceName is not found */ - protected Service createService(String serviceName) { - Service service = factory.create(serviceName); - if (service == null) { + protected ClusterController createClusterController(String serviceName) { + ClusterController controller = factory.create(serviceName); + if (controller == null) { throw new IllegalArgumentException("Unable to find service " + serviceName + ", exiting"); } - return service; + return controller; } } diff --git a/cli/src/main/java/org/apache/whirr/cli/command/DestroyClusterCommand.java b/cli/src/main/java/org/apache/whirr/cli/command/DestroyClusterCommand.java index 62239d1b..e8218b1e 100644 --- a/cli/src/main/java/org/apache/whirr/cli/command/DestroyClusterCommand.java +++ b/cli/src/main/java/org/apache/whirr/cli/command/DestroyClusterCommand.java @@ -26,9 +26,9 @@ import joptsimple.OptionParser; import joptsimple.OptionSet; -import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.service.Service; -import org.apache.whirr.service.ServiceFactory; +import org.apache.whirr.ClusterController; +import org.apache.whirr.ClusterControllerFactory; +import org.apache.whirr.ClusterSpec; /** * A command to destroy a running cluster (terminate and cleanup). @@ -36,10 +36,10 @@ public class DestroyClusterCommand extends AbstractClusterSpecCommand { public DestroyClusterCommand() throws IOException { - this(new ServiceFactory()); + this(new ClusterControllerFactory()); } - public DestroyClusterCommand(ServiceFactory factory) { + public DestroyClusterCommand(ClusterControllerFactory factory) { super("destroy-cluster", "Terminate and cleanup resources for a running cluster.", factory); } @@ -56,8 +56,8 @@ public int run(InputStream in, PrintStream out, PrintStream err, try { ClusterSpec clusterSpec = getClusterSpec(optionSet); - Service service = createService(clusterSpec.getServiceName()); - service.destroyCluster(clusterSpec); + ClusterController controller = createClusterController(clusterSpec.getServiceName()); + controller.destroyCluster(clusterSpec); return 0; } catch (IllegalArgumentException e) { err.println(e.getMessage()); diff --git a/cli/src/main/java/org/apache/whirr/cli/command/DestroyInstanceCommand.java b/cli/src/main/java/org/apache/whirr/cli/command/DestroyInstanceCommand.java index 6c134621..7e78c32e 100644 --- a/cli/src/main/java/org/apache/whirr/cli/command/DestroyInstanceCommand.java +++ b/cli/src/main/java/org/apache/whirr/cli/command/DestroyInstanceCommand.java @@ -18,13 +18,6 @@ package org.apache.whirr.cli.command; -import joptsimple.OptionParser; -import joptsimple.OptionSet; -import joptsimple.OptionSpec; -import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.service.Service; -import org.apache.whirr.service.ServiceFactory; - import java.io.BufferedReader; import java.io.File; import java.io.FileReader; @@ -35,6 +28,14 @@ import java.io.Writer; import java.util.List; +import joptsimple.OptionParser; +import joptsimple.OptionSet; +import joptsimple.OptionSpec; + +import org.apache.whirr.ClusterController; +import org.apache.whirr.ClusterControllerFactory; +import org.apache.whirr.ClusterSpec; + /** * A command to destroy an instance from a cluster */ @@ -46,10 +47,10 @@ public class DestroyInstanceCommand extends AbstractClusterSpecCommand { .ofType(String.class); public DestroyInstanceCommand() throws IOException { - this(new ServiceFactory()); + this(new ClusterControllerFactory()); } - public DestroyInstanceCommand(ServiceFactory factory) { + public DestroyInstanceCommand(ClusterControllerFactory factory) { super("destroy-instance", "Terminate and cleanup resources " + "for a single instance.", factory); } @@ -68,10 +69,10 @@ public int run(InputStream in, PrintStream out, throw new IllegalArgumentException("You need to specify an instance ID."); } ClusterSpec clusterSpec = getClusterSpec(optionSet); - Service service = createService(clusterSpec.getServiceName()); + ClusterController controller = createClusterController(clusterSpec.getServiceName()); String instanceId = optionSet.valueOf(instanceOption); - service.destroyInstance(clusterSpec, instanceId); + controller.destroyInstance(clusterSpec, instanceId); updateInstancesFile(clusterSpec, instanceId); return 0; diff --git a/cli/src/main/java/org/apache/whirr/cli/command/LaunchClusterCommand.java b/cli/src/main/java/org/apache/whirr/cli/command/LaunchClusterCommand.java index 1656b98b..0e7738de 100644 --- a/cli/src/main/java/org/apache/whirr/cli/command/LaunchClusterCommand.java +++ b/cli/src/main/java/org/apache/whirr/cli/command/LaunchClusterCommand.java @@ -26,10 +26,10 @@ import joptsimple.OptionParser; import joptsimple.OptionSet; -import org.apache.whirr.service.Cluster; -import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.service.Service; -import org.apache.whirr.service.ServiceFactory; +import org.apache.whirr.Cluster; +import org.apache.whirr.ClusterController; +import org.apache.whirr.ClusterControllerFactory; +import org.apache.whirr.ClusterSpec; /** * A command to launch a new cluster. @@ -37,10 +37,10 @@ public class LaunchClusterCommand extends AbstractClusterSpecCommand { public LaunchClusterCommand() throws IOException { - this(new ServiceFactory()); + this(new ClusterControllerFactory()); } - public LaunchClusterCommand(ServiceFactory factory) { + public LaunchClusterCommand(ClusterControllerFactory factory) { super("launch-cluster", "Launch a new cluster running a service.", factory); } @@ -57,8 +57,8 @@ public int run(InputStream in, PrintStream out, PrintStream err, try { ClusterSpec clusterSpec = getClusterSpec(optionSet); - Service service = createService(clusterSpec.getServiceName()); - Cluster cluster = service.launchCluster(clusterSpec); + ClusterController controller = createClusterController(clusterSpec.getServiceName()); + Cluster cluster = controller.launchCluster(clusterSpec); out.printf("Started cluster of %s instances\n", cluster.getInstances().size()); out.println(cluster); diff --git a/cli/src/main/java/org/apache/whirr/cli/command/ListClusterCommand.java b/cli/src/main/java/org/apache/whirr/cli/command/ListClusterCommand.java index 20208753..2b79c88c 100644 --- a/cli/src/main/java/org/apache/whirr/cli/command/ListClusterCommand.java +++ b/cli/src/main/java/org/apache/whirr/cli/command/ListClusterCommand.java @@ -30,9 +30,9 @@ import joptsimple.OptionParser; import joptsimple.OptionSet; -import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.service.Service; -import org.apache.whirr.service.ServiceFactory; +import org.apache.whirr.ClusterController; +import org.apache.whirr.ClusterControllerFactory; +import org.apache.whirr.ClusterSpec; import org.jclouds.compute.domain.NodeMetadata; /** @@ -41,10 +41,10 @@ public class ListClusterCommand extends AbstractClusterSpecCommand { public ListClusterCommand() throws IOException { - this(new ServiceFactory()); + this(new ClusterControllerFactory()); } - public ListClusterCommand(ServiceFactory factory) { + public ListClusterCommand(ClusterControllerFactory factory) { super("list-cluster", "List the nodes in a cluster.", factory); } @@ -61,8 +61,8 @@ public int run(InputStream in, PrintStream out, PrintStream err, try { ClusterSpec clusterSpec = getClusterSpec(optionSet); - Service service = createService(clusterSpec.getServiceName()); - Set nodes = service.getNodes(clusterSpec); + ClusterController controller = createClusterController(clusterSpec.getServiceName()); + Set nodes = controller.getNodes(clusterSpec); for (NodeMetadata node : nodes) { out.println(Joiner.on('\t').join(node.getId(), node.getImageId(), getFirstAddress(node.getPublicAddresses()), diff --git a/cli/src/test/java/org/apache/whirr/cli/command/AbstractClusterSpecCommandTest.java b/cli/src/test/java/org/apache/whirr/cli/command/AbstractClusterSpecCommandTest.java index 122f20ea..053400bd 100644 --- a/cli/src/test/java/org/apache/whirr/cli/command/AbstractClusterSpecCommandTest.java +++ b/cli/src/test/java/org/apache/whirr/cli/command/AbstractClusterSpecCommandTest.java @@ -29,9 +29,9 @@ import joptsimple.OptionSet; -import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.service.ServiceFactory; -import org.apache.whirr.ssh.KeyPair; +import org.apache.whirr.ClusterControllerFactory; +import org.apache.whirr.ClusterSpec; +import org.apache.whirr.util.KeyPair; import org.junit.Test; public class AbstractClusterSpecCommandTest { @@ -39,7 +39,7 @@ public class AbstractClusterSpecCommandTest { @Test public void testOverrides() throws Exception { AbstractClusterSpecCommand clusterSpecCommand = new AbstractClusterSpecCommand("name", - "description", new ServiceFactory()) { + "description", new ClusterControllerFactory()) { @Override public int run(InputStream in, PrintStream out, PrintStream err, List args) throws Exception { @@ -62,9 +62,9 @@ public int run(InputStream in, PrintStream out, PrintStream err, * Ensure that an invalid service name causes failure */ @Test(expected=IllegalArgumentException.class) - public void testCreateServerWithInvalidServiceName() throws Exception { + public void testCreateServerWithInvalidClusterControllerName() throws Exception { AbstractClusterSpecCommand clusterSpecCommand = new AbstractClusterSpecCommand("name", - "description", new ServiceFactory()) { + "description", new ClusterControllerFactory()) { @Override public int run(InputStream in, PrintStream out, PrintStream err, List args) throws Exception { @@ -80,6 +80,6 @@ public int run(InputStream in, PrintStream out, PrintStream err, ); ClusterSpec clusterSpec = clusterSpecCommand.getClusterSpec(optionSet); // this should fail - non-existent service - clusterSpecCommand.createService("bar"); + clusterSpecCommand.createClusterController("bar"); } } diff --git a/cli/src/test/java/org/apache/whirr/cli/command/DestroyClusterCommandTest.java b/cli/src/test/java/org/apache/whirr/cli/command/DestroyClusterCommandTest.java index 7ff8ce35..360f6a08 100644 --- a/cli/src/test/java/org/apache/whirr/cli/command/DestroyClusterCommandTest.java +++ b/cli/src/test/java/org/apache/whirr/cli/command/DestroyClusterCommandTest.java @@ -35,10 +35,10 @@ import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.PropertiesConfiguration; -import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.service.Service; -import org.apache.whirr.service.ServiceFactory; -import org.apache.whirr.ssh.KeyPair; +import org.apache.whirr.ClusterController; +import org.apache.whirr.ClusterControllerFactory; +import org.apache.whirr.ClusterSpec; +import org.apache.whirr.util.KeyPair; import org.hamcrest.Matcher; import org.junit.Before; import org.junit.Test; @@ -74,9 +74,9 @@ private Matcher containsUsageString() { @Test public void testAllOptions() throws Exception { - ServiceFactory factory = mock(ServiceFactory.class); - Service service = mock(Service.class); - when(factory.create((String) any())).thenReturn(service); + ClusterControllerFactory factory = mock(ClusterControllerFactory.class); + ClusterController controller = mock(ClusterController.class); + when(factory.create((String) any())).thenReturn(controller); DestroyClusterCommand command = new DestroyClusterCommand(factory); Map keys = KeyPair.generateTemporaryFiles(); @@ -106,7 +106,7 @@ public void testAllOptions() throws Exception { verify(factory).create("test-service"); - verify(service).destroyCluster(expectedClusterSpec); + verify(controller).destroyCluster(expectedClusterSpec); } } diff --git a/cli/src/test/java/org/apache/whirr/cli/command/DestroyInstanceCommandTest.java b/cli/src/test/java/org/apache/whirr/cli/command/DestroyInstanceCommandTest.java index c3a32a88..0fd188d7 100644 --- a/cli/src/test/java/org/apache/whirr/cli/command/DestroyInstanceCommandTest.java +++ b/cli/src/test/java/org/apache/whirr/cli/command/DestroyInstanceCommandTest.java @@ -18,13 +18,16 @@ package org.apache.whirr.cli.command; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.is; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import com.google.common.collect.Lists; -import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.service.Service; -import org.apache.whirr.service.ServiceFactory; -import org.apache.whirr.ssh.KeyPair; -import org.junit.Before; -import org.junit.Test; import java.io.ByteArrayOutputStream; import java.io.File; @@ -32,14 +35,12 @@ import java.util.Collections; import java.util.Map; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.containsString; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import static org.hamcrest.Matchers.is; +import org.apache.whirr.ClusterController; +import org.apache.whirr.ClusterControllerFactory; +import org.apache.whirr.ClusterSpec; +import org.apache.whirr.util.KeyPair; +import org.junit.Before; +import org.junit.Test; public class DestroyInstanceCommandTest { @@ -73,9 +74,9 @@ public void testInstanceIdMandatory() throws Exception { @Test public void testDestroyInstanceById() throws Exception { - ServiceFactory factory = mock(ServiceFactory.class); - Service service = mock(Service.class); - when(factory.create((String) any())).thenReturn(service); + ClusterControllerFactory factory = mock(ClusterControllerFactory.class); + ClusterController controller = mock(ClusterController.class); + when(factory.create((String) any())).thenReturn(controller); DestroyInstanceCommand command = new DestroyInstanceCommand(factory); Map keys = KeyPair.generateTemporaryFiles(); @@ -91,7 +92,7 @@ public void testDestroyInstanceById() throws Exception { )); assertThat(rc, is(0)); - verify(service).destroyInstance((ClusterSpec) any(), + verify(controller).destroyInstance((ClusterSpec) any(), eq("region/instanceid")); } } diff --git a/cli/src/test/java/org/apache/whirr/cli/command/LaunchClusterCommandTest.java b/cli/src/test/java/org/apache/whirr/cli/command/LaunchClusterCommandTest.java index 58ed934c..e3a2d30f 100644 --- a/cli/src/test/java/org/apache/whirr/cli/command/LaunchClusterCommandTest.java +++ b/cli/src/test/java/org/apache/whirr/cli/command/LaunchClusterCommandTest.java @@ -38,12 +38,12 @@ import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.PropertiesConfiguration; -import org.apache.whirr.service.Cluster; -import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.service.InstanceTemplate; -import org.apache.whirr.service.Service; -import org.apache.whirr.service.ServiceFactory; -import org.apache.whirr.ssh.KeyPair; +import org.apache.whirr.Cluster; +import org.apache.whirr.ClusterController; +import org.apache.whirr.ClusterControllerFactory; +import org.apache.whirr.ClusterSpec; +import org.apache.whirr.InstanceTemplate; +import org.apache.whirr.util.KeyPair; import org.hamcrest.Matcher; import org.junit.Before; import org.junit.Test; @@ -79,11 +79,11 @@ private Matcher containsUsageString() { @Test public void testAllOptions() throws Exception { - ServiceFactory factory = mock(ServiceFactory.class); - Service service = mock(Service.class); + ClusterControllerFactory factory = mock(ClusterControllerFactory.class); + ClusterController controller = mock(ClusterController.class); Cluster cluster = mock(Cluster.class); - when(factory.create((String) any())).thenReturn(service); - when(service.launchCluster((ClusterSpec) any())).thenReturn(cluster); + when(factory.create((String) any())).thenReturn(controller); + when(controller.launchCluster((ClusterSpec) any())).thenReturn(cluster); LaunchClusterCommand command = new LaunchClusterCommand(factory); Map keys = KeyPair.generateTemporaryFiles(); @@ -118,7 +118,7 @@ public void testAllOptions() throws Exception { verify(factory).create("test-service"); - verify(service).launchCluster(expectedClusterSpec); + verify(controller).launchCluster(expectedClusterSpec); assertThat(outBytes.toString(), containsString("Started cluster of 0 instances")); @@ -127,11 +127,11 @@ public void testAllOptions() throws Exception { @Test public void testMaxPercentFailure() throws Exception { - ServiceFactory factory = mock(ServiceFactory.class); - Service service = mock(Service.class); + ClusterControllerFactory factory = mock(ClusterControllerFactory.class); + ClusterController controller = mock(ClusterController.class); Cluster cluster = mock(Cluster.class); - when(factory.create((String) any())).thenReturn(service); - when(service.launchCluster((ClusterSpec) any())).thenReturn(cluster); + when(factory.create((String) any())).thenReturn(controller); + when(controller.launchCluster((ClusterSpec) any())).thenReturn(cluster); LaunchClusterCommand command = new LaunchClusterCommand(factory); Map keys = KeyPair.generateTemporaryFiles(); @@ -168,7 +168,7 @@ public void testMaxPercentFailure() throws Exception { verify(factory).create("hadoop"); - verify(service).launchCluster(expectedClusterSpec); + verify(controller).launchCluster(expectedClusterSpec); assertThat(outBytes.toString(), containsString("Started cluster of 0 instances")); } diff --git a/cli/src/test/java/org/apache/whirr/cli/command/ListClusterCommandTest.java b/cli/src/test/java/org/apache/whirr/cli/command/ListClusterCommandTest.java index e4425897..a26580af 100644 --- a/cli/src/test/java/org/apache/whirr/cli/command/ListClusterCommandTest.java +++ b/cli/src/test/java/org/apache/whirr/cli/command/ListClusterCommandTest.java @@ -35,10 +35,10 @@ import java.util.Map; import java.util.Set; -import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.service.Service; -import org.apache.whirr.service.ServiceFactory; -import org.apache.whirr.ssh.KeyPair; +import org.apache.whirr.ClusterController; +import org.apache.whirr.ClusterControllerFactory; +import org.apache.whirr.ClusterSpec; +import org.apache.whirr.util.KeyPair; import org.hamcrest.Matcher; import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.compute.domain.NodeMetadataBuilder; @@ -79,9 +79,9 @@ private Matcher containsUsageString() { @Test public void testAllOptions() throws Exception { - ServiceFactory factory = mock(ServiceFactory.class); - Service service = mock(Service.class); - when(factory.create((String) any())).thenReturn(service); + ClusterControllerFactory factory = mock(ClusterControllerFactory.class); + ClusterController controller = mock(ClusterController.class); + when(factory.create((String) any())).thenReturn(controller); NodeMetadata node1 = new NodeMetadataBuilder().name("name1").ids("id1") .location(new LocationBuilder().scope(LocationScope.PROVIDER) .id("location-id1").description("location-desc1").build()) @@ -94,7 +94,7 @@ public void testAllOptions() throws Exception { .imageId("image-id").state(NodeState.RUNNING) .publicAddresses(Lists.newArrayList("100.0.0.2")) .privateAddresses(Lists.newArrayList("10.0.0.2")).build(); - when(service.getNodes((ClusterSpec) any())).thenReturn( + when(controller.getNodes((ClusterSpec) any())).thenReturn( (Set) Sets.newLinkedHashSet(Lists.newArrayList(node1, node2))); ListClusterCommand command = new ListClusterCommand(factory); diff --git a/core/src/main/java/org/apache/whirr/service/Cluster.java b/core/src/main/java/org/apache/whirr/Cluster.java similarity index 95% rename from core/src/main/java/org/apache/whirr/service/Cluster.java rename to core/src/main/java/org/apache/whirr/Cluster.java index b6653095..3bd40043 100644 --- a/core/src/main/java/org/apache/whirr/service/Cluster.java +++ b/core/src/main/java/org/apache/whirr/Cluster.java @@ -16,16 +16,10 @@ * limitations under the License. */ -package org.apache.whirr.service; -import static com.google.common.base.Preconditions.*; +package org.apache.whirr; -import java.io.IOException; -import java.net.InetAddress; -import java.util.Properties; -import java.util.Set; - -import org.apache.whirr.net.DnsUtil; -import org.jclouds.domain.Credentials; +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.base.Objects; import com.google.common.base.Predicate; @@ -33,6 +27,15 @@ import com.google.common.collect.Sets; import com.google.common.net.InetAddresses; +import java.io.IOException; +import java.net.InetAddress; +import java.util.Properties; +import java.util.Set; + +import org.apache.whirr.Cluster.Instance; +import org.apache.whirr.util.DnsUtil; +import org.jclouds.domain.Credentials; + /** * This class represents a real cluster of {@link Instance}s. * diff --git a/core/src/main/java/org/apache/whirr/service/ClusterAction.java b/core/src/main/java/org/apache/whirr/ClusterAction.java similarity index 97% rename from core/src/main/java/org/apache/whirr/service/ClusterAction.java rename to core/src/main/java/org/apache/whirr/ClusterAction.java index 3e4442b5..eb475d48 100644 --- a/core/src/main/java/org/apache/whirr/service/ClusterAction.java +++ b/core/src/main/java/org/apache/whirr/ClusterAction.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.whirr.service; +package org.apache.whirr; import java.io.IOException; diff --git a/core/src/main/java/org/apache/whirr/service/Service.java b/core/src/main/java/org/apache/whirr/ClusterController.java similarity index 91% rename from core/src/main/java/org/apache/whirr/service/Service.java rename to core/src/main/java/org/apache/whirr/ClusterController.java index 25f3b426..af5887d8 100644 --- a/core/src/main/java/org/apache/whirr/service/Service.java +++ b/core/src/main/java/org/apache/whirr/ClusterController.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.whirr.service; +package org.apache.whirr; import com.google.common.base.Charsets; import com.google.common.base.Joiner; @@ -28,10 +28,12 @@ import java.util.Map; import java.util.Set; -import org.apache.whirr.cluster.actions.BootstrapClusterAction; -import org.apache.whirr.cluster.actions.ConfigureClusterAction; -import org.apache.whirr.cluster.actions.DestroyClusterAction; -import org.apache.whirr.service.Cluster.Instance; +import org.apache.whirr.Cluster.Instance; +import org.apache.whirr.actions.BootstrapClusterAction; +import org.apache.whirr.actions.ConfigureClusterAction; +import org.apache.whirr.actions.DestroyClusterAction; +import org.apache.whirr.service.ClusterActionHandler; +import org.apache.whirr.service.ComputeServiceContextBuilder; import org.jclouds.compute.ComputeService; import org.jclouds.compute.ComputeServiceContextFactory; import org.jclouds.compute.domain.ComputeMetadata; @@ -41,12 +43,11 @@ import org.slf4j.LoggerFactory; /** - * This class represents a service that a client wants to use. This class is - * used to start and stop clusters that provide the service. + * This class is used to start and stop clusters. */ -public class Service { +public class ClusterController { - private static final Logger LOG = LoggerFactory.getLogger(Service.class); + private static final Logger LOG = LoggerFactory.getLogger(ClusterController.class); /** * @return the unique name of the service. diff --git a/core/src/main/java/org/apache/whirr/service/ServiceFactory.java b/core/src/main/java/org/apache/whirr/ClusterControllerFactory.java similarity index 63% rename from core/src/main/java/org/apache/whirr/service/ServiceFactory.java rename to core/src/main/java/org/apache/whirr/ClusterControllerFactory.java index b2b83111..cad13fcd 100644 --- a/core/src/main/java/org/apache/whirr/service/ServiceFactory.java +++ b/core/src/main/java/org/apache/whirr/ClusterControllerFactory.java @@ -16,49 +16,49 @@ * limitations under the License. */ -package org.apache.whirr.service; +package org.apache.whirr; + +import com.google.common.collect.Sets; import java.util.ServiceLoader; import java.util.Set; -import com.google.common.collect.Sets; - /** - * This class is used to create {@link Service} instances. + * This class is used to create {@link ClusterController} instances. *

    - * Implementation note. {@link Service} implementations are discovered + * Implementation note. {@link ClusterController} implementations are discovered * using a Service Provider * Interface (SPI), described in {@link ServiceLoader}. */ -public class ServiceFactory { +public class ClusterControllerFactory { - private ServiceLoader serviceLoader = - ServiceLoader.load(Service.class); + private ServiceLoader serviceLoader = + ServiceLoader.load(ClusterController.class); /** - * Create an instance of a {@link Service} according to the given - * name. If the name is null then the default {@link Service} + * Create an instance of a {@link ClusterController} according to the given + * name. If the name is null then the default {@link ClusterController} * is returned. */ - public Service create(String serviceName) { + public ClusterController create(String serviceName) { if (serviceName == null) { - return new Service(); + return new ClusterController(); } - for (Service service : serviceLoader) { - if (service.getName().equals(serviceName)) { - return service; + for (ClusterController controller : serviceLoader) { + if (controller.getName().equals(serviceName)) { + return controller; } } return null; } /** - * Return a collection of available services. + * Return a collection of available {@link ClusterController} names. * @return the available service names */ public Set availableServices() { Set result = Sets.newLinkedHashSet(); - for (Service s : serviceLoader) { + for (ClusterController s : serviceLoader) { result.add(s.getName()); } return result; diff --git a/core/src/main/java/org/apache/whirr/service/ClusterSpec.java b/core/src/main/java/org/apache/whirr/ClusterSpec.java similarity index 99% rename from core/src/main/java/org/apache/whirr/service/ClusterSpec.java rename to core/src/main/java/org/apache/whirr/ClusterSpec.java index bb7e328a..c6d5089d 100644 --- a/core/src/main/java/org/apache/whirr/service/ClusterSpec.java +++ b/core/src/main/java/org/apache/whirr/ClusterSpec.java @@ -16,12 +16,19 @@ * limitations under the License. */ -package org.apache.whirr.service; +package org.apache.whirr; + +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkNotNull; +import static org.apache.whirr.util.KeyPair.sameKeyPair; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Objects; import com.google.common.collect.Lists; import com.google.common.collect.Sets; +import com.jcraft.jsch.JSch; +import com.jcraft.jsch.JSchException; +import com.jcraft.jsch.KeyPair; import java.io.File; import java.io.FileReader; @@ -31,10 +38,6 @@ import java.util.Map; import java.util.Set; -import com.jcraft.jsch.JSch; -import com.jcraft.jsch.JSchException; -import com.jcraft.jsch.KeyPair; - import org.apache.commons.configuration.CompositeConfiguration; import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; @@ -46,10 +49,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; -import static org.apache.whirr.ssh.KeyPair.sameKeyPair; - /** * This class represents the specification of a cluster. It is used to describe * the properties of a cluster before it is launched. @@ -184,7 +183,7 @@ public static ClusterSpec withTemporaryKeys() public static ClusterSpec withTemporaryKeys(Configuration conf) throws ConfigurationException, JSchException, IOException { if (!conf.containsKey(Property.PRIVATE_KEY_FILE.getConfigName())) { - Map keys = org.apache.whirr.ssh.KeyPair.generateTemporaryFiles(); + Map keys = org.apache.whirr.util.KeyPair.generateTemporaryFiles(); LoggerFactory.getLogger(ClusterSpec.class).debug("ssh keys: " + keys.toString()); diff --git a/core/src/main/java/org/apache/whirr/service/HandlerMapFactory.java b/core/src/main/java/org/apache/whirr/HandlerMapFactory.java similarity index 95% rename from core/src/main/java/org/apache/whirr/service/HandlerMapFactory.java rename to core/src/main/java/org/apache/whirr/HandlerMapFactory.java index 64a44acb..8a0b3710 100644 --- a/core/src/main/java/org/apache/whirr/service/HandlerMapFactory.java +++ b/core/src/main/java/org/apache/whirr/HandlerMapFactory.java @@ -16,13 +16,14 @@ * limitations under the License. */ -package org.apache.whirr.service; +package org.apache.whirr; + +import com.google.common.collect.Maps; import java.util.Map; import java.util.ServiceLoader; - -import com.google.common.collect.Maps; +import org.apache.whirr.service.ClusterActionHandler; /** * HandlerMapFactory used in ScriptBasedClusterAction classes to diff --git a/core/src/main/java/org/apache/whirr/service/InstanceTemplate.java b/core/src/main/java/org/apache/whirr/InstanceTemplate.java similarity index 87% rename from core/src/main/java/org/apache/whirr/service/InstanceTemplate.java rename to core/src/main/java/org/apache/whirr/InstanceTemplate.java index e8bdb5cc..aa16aece 100644 --- a/core/src/main/java/org/apache/whirr/service/InstanceTemplate.java +++ b/core/src/main/java/org/apache/whirr/InstanceTemplate.java @@ -1,21 +1,38 @@ -package org.apache.whirr.service; +/** + * 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 org.apache.whirr; + +import static com.google.common.base.Preconditions.checkArgument; import com.google.common.base.Objects; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; -import org.apache.commons.configuration.CompositeConfiguration; -import org.apache.commons.configuration.Configuration; -import org.apache.commons.lang.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; -import static com.google.common.base.Preconditions.checkArgument; +import org.apache.commons.configuration.Configuration; +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * This class describes the type of instances that should be in the cluster. diff --git a/core/src/main/java/org/apache/whirr/service/RolePredicates.java b/core/src/main/java/org/apache/whirr/RolePredicates.java similarity index 96% rename from core/src/main/java/org/apache/whirr/service/RolePredicates.java rename to core/src/main/java/org/apache/whirr/RolePredicates.java index a9b44f1e..1095b0b9 100644 --- a/core/src/main/java/org/apache/whirr/service/RolePredicates.java +++ b/core/src/main/java/org/apache/whirr/RolePredicates.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.whirr.service; +package org.apache.whirr; import com.google.common.base.Predicate; import com.google.common.collect.Sets; @@ -24,7 +24,7 @@ import java.util.Collections; import java.util.Set; -import org.apache.whirr.service.Cluster.Instance; +import org.apache.whirr.Cluster.Instance; /** * {@link Predicate}s for matching {@link Instance}s with certain cluster roles. diff --git a/core/src/main/java/org/apache/whirr/cluster/actions/BootstrapClusterAction.java b/core/src/main/java/org/apache/whirr/actions/BootstrapClusterAction.java similarity index 97% rename from core/src/main/java/org/apache/whirr/cluster/actions/BootstrapClusterAction.java rename to core/src/main/java/org/apache/whirr/actions/BootstrapClusterAction.java index 67d0d44a..810d73c7 100644 --- a/core/src/main/java/org/apache/whirr/cluster/actions/BootstrapClusterAction.java +++ b/core/src/main/java/org/apache/whirr/actions/BootstrapClusterAction.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.whirr.cluster.actions; +package org.apache.whirr.actions; import static org.jclouds.compute.options.TemplateOptions.Builder.runScript; import static org.jclouds.scriptbuilder.domain.Statements.appendFile; @@ -45,12 +45,12 @@ import java.util.concurrent.Executors; import java.util.concurrent.Future; -import org.apache.whirr.service.Cluster; -import org.apache.whirr.service.Cluster.Instance; +import org.apache.whirr.Cluster; +import org.apache.whirr.Cluster.Instance; +import org.apache.whirr.ClusterSpec; +import org.apache.whirr.InstanceTemplate; import org.apache.whirr.service.ClusterActionEvent; import org.apache.whirr.service.ClusterActionHandler; -import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.service.InstanceTemplate; import org.apache.whirr.service.ComputeServiceContextBuilder; import org.apache.whirr.service.jclouds.StatementBuilder; import org.apache.whirr.service.jclouds.TemplateBuilderStrategy; @@ -68,7 +68,7 @@ import org.slf4j.LoggerFactory; /** - * A {@link org.apache.whirr.service.ClusterAction} that starts instances in a cluster in parallel and + * A {@link org.apache.whirr.ClusterAction} that starts instances in a cluster in parallel and * runs bootstrap scripts on them. */ public class BootstrapClusterAction extends ScriptBasedClusterAction { diff --git a/core/src/main/java/org/apache/whirr/cluster/actions/ConfigureClusterAction.java b/core/src/main/java/org/apache/whirr/actions/ConfigureClusterAction.java similarity index 92% rename from core/src/main/java/org/apache/whirr/cluster/actions/ConfigureClusterAction.java rename to core/src/main/java/org/apache/whirr/actions/ConfigureClusterAction.java index 572f9dbd..d848b0bc 100644 --- a/core/src/main/java/org/apache/whirr/cluster/actions/ConfigureClusterAction.java +++ b/core/src/main/java/org/apache/whirr/actions/ConfigureClusterAction.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.whirr.cluster.actions; +package org.apache.whirr.actions; import com.google.common.base.Predicate; import com.google.common.collect.Maps; @@ -26,14 +26,14 @@ import java.util.Map.Entry; import java.util.Set; -import org.apache.whirr.service.Cluster; -import org.apache.whirr.service.Cluster.Instance; +import org.apache.whirr.Cluster; +import org.apache.whirr.Cluster.Instance; +import org.apache.whirr.ClusterSpec; +import org.apache.whirr.InstanceTemplate; +import org.apache.whirr.RolePredicates; import org.apache.whirr.service.ClusterActionEvent; import org.apache.whirr.service.ClusterActionHandler; -import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.service.InstanceTemplate; import org.apache.whirr.service.ComputeServiceContextBuilder; -import org.apache.whirr.service.RolePredicates; import org.apache.whirr.service.jclouds.StatementBuilder; import org.jclouds.compute.ComputeService; import org.jclouds.compute.ComputeServiceContext; @@ -47,7 +47,7 @@ import org.slf4j.LoggerFactory; /** - * A {@link org.apache.whirr.service.ClusterAction} for running a configuration script on instances + * A {@link org.apache.whirr.ClusterAction} for running a configuration script on instances * in the cluster after it has been bootstrapped. */ public class ConfigureClusterAction extends ScriptBasedClusterAction { diff --git a/core/src/main/java/org/apache/whirr/cluster/actions/DestroyClusterAction.java b/core/src/main/java/org/apache/whirr/actions/DestroyClusterAction.java similarity index 92% rename from core/src/main/java/org/apache/whirr/cluster/actions/DestroyClusterAction.java rename to core/src/main/java/org/apache/whirr/actions/DestroyClusterAction.java index 16cd421f..6dd035b5 100644 --- a/core/src/main/java/org/apache/whirr/cluster/actions/DestroyClusterAction.java +++ b/core/src/main/java/org/apache/whirr/actions/DestroyClusterAction.java @@ -16,16 +16,16 @@ * limitations under the License. */ -package org.apache.whirr.cluster.actions; +package org.apache.whirr.actions; import static org.jclouds.compute.predicates.NodePredicates.inGroup; import java.io.IOException; -import org.apache.whirr.service.Cluster; -import org.apache.whirr.service.ClusterAction; +import org.apache.whirr.Cluster; +import org.apache.whirr.ClusterAction; +import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.ClusterActionHandler; -import org.apache.whirr.service.ClusterSpec; import org.apache.whirr.service.ComputeServiceContextBuilder; import org.jclouds.compute.ComputeService; import org.jclouds.compute.ComputeServiceContextFactory; diff --git a/core/src/main/java/org/apache/whirr/cluster/actions/ScriptBasedClusterAction.java b/core/src/main/java/org/apache/whirr/actions/ScriptBasedClusterAction.java similarity index 94% rename from core/src/main/java/org/apache/whirr/cluster/actions/ScriptBasedClusterAction.java rename to core/src/main/java/org/apache/whirr/actions/ScriptBasedClusterAction.java index 59e73532..6553d7fe 100644 --- a/core/src/main/java/org/apache/whirr/cluster/actions/ScriptBasedClusterAction.java +++ b/core/src/main/java/org/apache/whirr/actions/ScriptBasedClusterAction.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.whirr.cluster.actions; +package org.apache.whirr.actions; import com.google.common.collect.Iterables; import com.google.common.collect.Maps; @@ -24,14 +24,14 @@ import java.io.IOException; import java.util.Map; -import org.apache.whirr.service.Cluster; -import org.apache.whirr.service.ClusterAction; +import org.apache.whirr.Cluster; +import org.apache.whirr.ClusterAction; +import org.apache.whirr.ClusterSpec; +import org.apache.whirr.InstanceTemplate; import org.apache.whirr.service.ClusterActionEvent; import org.apache.whirr.service.ClusterActionHandler; -import org.apache.whirr.service.ClusterSpec; import org.apache.whirr.service.ComputeServiceContextBuilder; import org.apache.whirr.service.FirewallManager; -import org.apache.whirr.service.InstanceTemplate; import org.apache.whirr.service.jclouds.StatementBuilder; import org.jclouds.compute.ComputeServiceContext; import org.jclouds.compute.ComputeServiceContextFactory; diff --git a/core/src/main/java/org/apache/whirr/cluster/actions/package-info.java b/core/src/main/java/org/apache/whirr/actions/package-info.java similarity index 86% rename from core/src/main/java/org/apache/whirr/cluster/actions/package-info.java rename to core/src/main/java/org/apache/whirr/actions/package-info.java index 9278092f..99cfea5e 100644 --- a/core/src/main/java/org/apache/whirr/cluster/actions/package-info.java +++ b/core/src/main/java/org/apache/whirr/actions/package-info.java @@ -18,7 +18,7 @@ */ /** *

    - * A collection of {@link org.apache.whirr.service.ClusterAction} implementations. + * A collection of {@link org.apache.whirr.ClusterAction} implementations. *

    */ -package org.apache.whirr.cluster.actions; +package org.apache.whirr.actions; diff --git a/core/src/main/java/org/apache/whirr/ssh/package-info.java b/core/src/main/java/org/apache/whirr/package-info.java similarity index 93% rename from core/src/main/java/org/apache/whirr/ssh/package-info.java rename to core/src/main/java/org/apache/whirr/package-info.java index 4d178253..3da96e9a 100644 --- a/core/src/main/java/org/apache/whirr/ssh/package-info.java +++ b/core/src/main/java/org/apache/whirr/package-info.java @@ -18,7 +18,7 @@ */ /** *

    - * SSH-related classes. + * The Whirr client API. *

    */ -package org.apache.whirr.ssh; +package org.apache.whirr; diff --git a/core/src/main/java/org/apache/whirr/service/ClusterActionEvent.java b/core/src/main/java/org/apache/whirr/service/ClusterActionEvent.java index f5bfe725..965a7d20 100644 --- a/core/src/main/java/org/apache/whirr/service/ClusterActionEvent.java +++ b/core/src/main/java/org/apache/whirr/service/ClusterActionEvent.java @@ -18,11 +18,13 @@ package org.apache.whirr.service; +import org.apache.whirr.Cluster; +import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.jclouds.StatementBuilder; import org.apache.whirr.service.jclouds.TemplateBuilderStrategy; /** - * An event object which is fired when a {@link ClusterAction} occurs. + * An event object which is fired when a {@link org.apache.whirr.ClusterAction} occurs. */ public class ClusterActionEvent { diff --git a/core/src/main/java/org/apache/whirr/service/ClusterActionHandlerSupport.java b/core/src/main/java/org/apache/whirr/service/ClusterActionHandlerSupport.java index 7372d2b5..47e54c7a 100644 --- a/core/src/main/java/org/apache/whirr/service/ClusterActionHandlerSupport.java +++ b/core/src/main/java/org/apache/whirr/service/ClusterActionHandlerSupport.java @@ -22,6 +22,7 @@ import org.apache.commons.configuration.CompositeConfiguration; import org.apache.commons.configuration.Configuration; +import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.jclouds.RunUrlStatement; import org.jclouds.scriptbuilder.domain.Statement; diff --git a/core/src/main/java/org/apache/whirr/service/ComputeServiceContextBuilder.java b/core/src/main/java/org/apache/whirr/service/ComputeServiceContextBuilder.java index 801d309b..4a04368c 100644 --- a/core/src/main/java/org/apache/whirr/service/ComputeServiceContextBuilder.java +++ b/core/src/main/java/org/apache/whirr/service/ComputeServiceContextBuilder.java @@ -26,6 +26,7 @@ import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationConverter; +import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.jclouds.TakeLoginCredentialsFromWhirrProperties; import org.jclouds.compute.ComputeServiceContext; import org.jclouds.compute.ComputeServiceContextFactory; diff --git a/core/src/main/java/org/apache/whirr/service/FirewallManager.java b/core/src/main/java/org/apache/whirr/service/FirewallManager.java index a9640733..874c8c3c 100644 --- a/core/src/main/java/org/apache/whirr/service/FirewallManager.java +++ b/core/src/main/java/org/apache/whirr/service/FirewallManager.java @@ -27,7 +27,9 @@ import java.util.List; import java.util.Set; -import org.apache.whirr.service.Cluster.Instance; +import org.apache.whirr.Cluster; +import org.apache.whirr.Cluster.Instance; +import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.jclouds.FirewallSettings; import org.jclouds.compute.ComputeServiceContext; import org.slf4j.Logger; diff --git a/core/src/main/java/org/apache/whirr/service/jclouds/FirewallSettings.java b/core/src/main/java/org/apache/whirr/service/jclouds/FirewallSettings.java index 4a6c2b3f..69c9b22c 100644 --- a/core/src/main/java/org/apache/whirr/service/jclouds/FirewallSettings.java +++ b/core/src/main/java/org/apache/whirr/service/jclouds/FirewallSettings.java @@ -18,6 +18,9 @@ package org.apache.whirr.service.jclouds; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; + import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; @@ -26,20 +29,16 @@ import java.util.Set; import org.apache.commons.io.IOUtils; -import org.apache.whirr.service.Cluster.Instance; -import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.service.FirewallManager; +import org.apache.whirr.Cluster.Instance; +import org.apache.whirr.ClusterSpec; import org.jclouds.aws.util.AWSUtils; import org.jclouds.compute.ComputeServiceContext; import org.jclouds.ec2.EC2Client; import org.jclouds.ec2.domain.IpProtocol; -import com.google.common.collect.Iterables; -import com.google.common.collect.Lists; - /** * Utility functions for controlling firewall settings for a cluster. - * @deprecated Use {@link FirewallManager} instead. + * @deprecated Use {@link org.apache.whirr.service.FirewallManager} instead. */ @Deprecated public class FirewallSettings { diff --git a/core/src/main/java/org/apache/whirr/service/jclouds/TakeLoginCredentialsFromWhirrProperties.java b/core/src/main/java/org/apache/whirr/service/jclouds/TakeLoginCredentialsFromWhirrProperties.java index 3a011330..9d589b4a 100644 --- a/core/src/main/java/org/apache/whirr/service/jclouds/TakeLoginCredentialsFromWhirrProperties.java +++ b/core/src/main/java/org/apache/whirr/service/jclouds/TakeLoginCredentialsFromWhirrProperties.java @@ -18,15 +18,15 @@ package org.apache.whirr.service.jclouds; +import com.google.common.base.Splitter; +import com.google.common.collect.Lists; + import java.util.List; import javax.inject.Singleton; -import org.jclouds.ec2.compute.strategy.EC2PopulateDefaultLoginCredentialsForImageStrategy; import org.jclouds.domain.Credentials; - -import com.google.common.base.Splitter; -import com.google.common.collect.Lists; +import org.jclouds.ec2.compute.strategy.EC2PopulateDefaultLoginCredentialsForImageStrategy; @Singleton // patch until jclouds 1.0-beta-10 diff --git a/core/src/main/java/org/apache/whirr/service/jclouds/TemplateBuilderStrategy.java b/core/src/main/java/org/apache/whirr/service/jclouds/TemplateBuilderStrategy.java index ed9463c5..ec5e5e35 100644 --- a/core/src/main/java/org/apache/whirr/service/jclouds/TemplateBuilderStrategy.java +++ b/core/src/main/java/org/apache/whirr/service/jclouds/TemplateBuilderStrategy.java @@ -18,7 +18,7 @@ package org.apache.whirr.service.jclouds; -import org.apache.whirr.service.ClusterSpec; +import org.apache.whirr.ClusterSpec; import org.jclouds.compute.domain.OsFamily; import org.jclouds.compute.domain.TemplateBuilder; diff --git a/core/src/main/java/org/apache/whirr/service/package-info.java b/core/src/main/java/org/apache/whirr/service/package-info.java index 9e8294e3..67128ce6 100644 --- a/core/src/main/java/org/apache/whirr/service/package-info.java +++ b/core/src/main/java/org/apache/whirr/service/package-info.java @@ -33,14 +33,14 @@ * required. *

    *

    - * An instance template ({@link InstanceTemplate}) is a specification of the role sets and + * An instance template ({@link org.apache.whirr.InstanceTemplate}) is a specification of the role sets and * cardinalities that make up a cluster. For example, * 1 role-a+role-b,4 role-c * specifies a cluster in which one node is in roles role-a and * role-b, and four nodes are in role role-c. *

    *

    - * A cluster action ({@link org.apache.whirr.service.ClusterAction}) is an action that is performed on a set of machines + * A cluster action ({@link org.apache.whirr.ClusterAction}) is an action that is performed on a set of machines * in a cluster. Examples of cluster actions include 'bootstrap' and 'configure'. *

    * @@ -48,11 +48,11 @@ * *

    * You can launch or destroy clusters using an instance of - * {@link org.apache.whirr.service.Service}. + * {@link org.apache.whirr.ClusterController}. *

    * *

    - * Whirr {@link org.apache.whirr.service.Service#launchCluster(ClusterSpec) launches a cluster} by running the bootstrap action, followed by the + * Whirr {@link org.apache.whirr.ClusterController#launchCluster(ClusterSpec) launches a cluster} by running the bootstrap action, followed by the * configure action. For each of these actions Whirr follows these rules: *

    * @@ -76,7 +76,7 @@ *

    * *

    - * A cluster is {@link org.apache.whirr.service.Service#destroyCluster(ClusterSpec) destroyed} by running the destroy action. + * A cluster is {@link org.apache.whirr.ClusterController#destroyCluster(ClusterSpec) destroyed} by running the destroy action. *

    * *

    Writing a New Service

    diff --git a/core/src/main/java/org/apache/whirr/net/DnsUtil.java b/core/src/main/java/org/apache/whirr/util/DnsUtil.java similarity index 98% rename from core/src/main/java/org/apache/whirr/net/DnsUtil.java rename to core/src/main/java/org/apache/whirr/util/DnsUtil.java index c9b33343..cf04fb9d 100644 --- a/core/src/main/java/org/apache/whirr/net/DnsUtil.java +++ b/core/src/main/java/org/apache/whirr/util/DnsUtil.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.whirr.net; +package org.apache.whirr.util; import java.io.IOException; diff --git a/core/src/main/java/org/apache/whirr/ssh/KeyPair.java b/core/src/main/java/org/apache/whirr/util/KeyPair.java similarity index 99% rename from core/src/main/java/org/apache/whirr/ssh/KeyPair.java rename to core/src/main/java/org/apache/whirr/util/KeyPair.java index a36f6c01..2c0ec9cb 100644 --- a/core/src/main/java/org/apache/whirr/ssh/KeyPair.java +++ b/core/src/main/java/org/apache/whirr/util/KeyPair.java @@ -16,27 +16,28 @@ * limitations under the License. */ -package org.apache.whirr.ssh; +package org.apache.whirr.util; + +import com.google.common.collect.ImmutableMap; +import com.google.common.io.Files; +import com.jcraft.jsch.JSch; +import com.jcraft.jsch.JSchException; import java.io.ByteArrayOutputStream; import java.io.File; -import java.io.IOException; -import java.io.OutputStream; import java.io.FileInputStream; import java.io.FileReader; +import java.io.IOException; +import java.io.OutputStream; +import java.security.GeneralSecurityException; import java.security.PrivateKey; import java.security.PublicKey; import java.security.interfaces.RSAPublicKey; -import java.security.GeneralSecurityException; import java.util.Map; -import com.google.common.collect.ImmutableMap; -import com.google.common.io.Files; -import com.jcraft.jsch.JSch; -import com.jcraft.jsch.JSchException; +import org.apache.commons.codec.binary.Base64; import org.apache.commons.io.IOUtils; import org.apache.commons.ssl.PKCS8Key; -import org.apache.commons.codec.binary.Base64; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/core/src/main/java/org/apache/whirr/net/package-info.java b/core/src/main/java/org/apache/whirr/util/package-info.java similarity index 93% rename from core/src/main/java/org/apache/whirr/net/package-info.java rename to core/src/main/java/org/apache/whirr/util/package-info.java index d40d4a93..8485ec2e 100644 --- a/core/src/main/java/org/apache/whirr/net/package-info.java +++ b/core/src/main/java/org/apache/whirr/util/package-info.java @@ -18,7 +18,7 @@ */ /** *

    - * Network-related classes. + * Utility classes. *

    */ -package org.apache.whirr.net; +package org.apache.whirr.util; diff --git a/core/src/test/java/org/apache/whirr/service/ServiceFactoryTest.java b/core/src/test/java/org/apache/whirr/ClusterControllerFactoryTest.java similarity index 71% rename from core/src/test/java/org/apache/whirr/service/ServiceFactoryTest.java rename to core/src/test/java/org/apache/whirr/ClusterControllerFactoryTest.java index b5bbac82..77891ef2 100644 --- a/core/src/test/java/org/apache/whirr/service/ServiceFactoryTest.java +++ b/core/src/test/java/org/apache/whirr/ClusterControllerFactoryTest.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.whirr.service; +package org.apache.whirr; import static org.hamcrest.Matchers.*; import static org.junit.Assert.assertThat; @@ -25,9 +25,9 @@ import org.junit.Test; -public class ServiceFactoryTest { +public class ClusterControllerFactoryTest { - public static class TestService extends Service { + public static class TestClusterController extends ClusterController { @Override public String getName() { return "test-service"; @@ -40,15 +40,15 @@ public Cluster launchCluster(ClusterSpec clusterSpec) throws IOException { @Test public void testServiceFactoryIsCreatedFromWhirrProperties() throws IOException { - ServiceFactory factory = new ServiceFactory(); - Service service = factory.create("test-service"); - assertThat(service, instanceOf(TestService.class)); + ClusterControllerFactory factory = new ClusterControllerFactory(); + ClusterController controller = factory.create("test-service"); + assertThat(controller, instanceOf(TestClusterController.class)); } @Test public void testServiceFactoryWithNullServiceName() throws IOException { - ServiceFactory factory = new ServiceFactory(); - Service service = factory.create(null); - assertThat(service, instanceOf(Service.class)); + ClusterControllerFactory factory = new ClusterControllerFactory(); + ClusterController controller = factory.create(null); + assertThat(controller, instanceOf(ClusterController.class)); } } diff --git a/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java b/core/src/test/java/org/apache/whirr/ClusterSpecTest.java similarity index 99% rename from core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java rename to core/src/test/java/org/apache/whirr/ClusterSpecTest.java index e1bce828..61893e88 100644 --- a/core/src/test/java/org/apache/whirr/service/ClusterSpecTest.java +++ b/core/src/test/java/org/apache/whirr/ClusterSpecTest.java @@ -16,10 +16,9 @@ * limitations under the License. */ -package org.apache.whirr.service; +package org.apache.whirr; import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.startsWith; import static org.junit.Assert.assertThat; import com.google.common.collect.Iterables; @@ -43,7 +42,7 @@ import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.commons.io.IOUtils; -import org.apache.whirr.ssh.KeyPair; +import org.apache.whirr.util.KeyPair; import org.junit.Assert; import org.junit.Test; diff --git a/core/src/test/java/org/apache/whirr/cluster/actions/BootstrapClusterActionTest.java b/core/src/test/java/org/apache/whirr/actions/BootstrapClusterActionTest.java similarity index 98% rename from core/src/test/java/org/apache/whirr/cluster/actions/BootstrapClusterActionTest.java rename to core/src/test/java/org/apache/whirr/actions/BootstrapClusterActionTest.java index 26a1a260..7da47f21 100644 --- a/core/src/test/java/org/apache/whirr/cluster/actions/BootstrapClusterActionTest.java +++ b/core/src/test/java/org/apache/whirr/actions/BootstrapClusterActionTest.java @@ -16,9 +16,17 @@ * limitations under the License. */ -package org.apache.whirr.cluster.actions; +package org.apache.whirr.actions; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; +import com.google.inject.Module; import java.io.IOException; import java.net.URI; @@ -31,15 +39,11 @@ import java.util.Stack; import java.util.concurrent.atomic.AtomicInteger; -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - import org.apache.commons.configuration.CompositeConfiguration; import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.PropertiesConfiguration; +import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.ClusterActionHandler; -import org.apache.whirr.service.ClusterSpec; import org.jclouds.compute.ComputeService; import org.jclouds.compute.ComputeServiceContext; import org.jclouds.compute.ComputeServiceContextFactory; @@ -66,10 +70,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; -import com.google.inject.Module; - public class BootstrapClusterActionTest { private static final Logger LOG = diff --git a/core/src/test/java/org/apache/whirr/service/TemplateBuilderStrategyTest.java b/core/src/test/java/org/apache/whirr/service/TemplateBuilderStrategyTest.java index 9f1c38a1..19cbb4d1 100644 --- a/core/src/test/java/org/apache/whirr/service/TemplateBuilderStrategyTest.java +++ b/core/src/test/java/org/apache/whirr/service/TemplateBuilderStrategyTest.java @@ -22,14 +22,16 @@ import static org.mockito.Mockito.verify; import com.jcraft.jsch.JSchException; + +import java.io.IOException; + import org.apache.commons.configuration.ConfigurationException; +import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.jclouds.TemplateBuilderStrategy; import org.jclouds.compute.domain.TemplateBuilder; import org.junit.Before; import org.junit.Test; -import java.io.IOException; - public class TemplateBuilderStrategyTest { private TemplateBuilderStrategy strategy = new TemplateBuilderStrategy(); diff --git a/core/src/test/java/org/apache/whirr/service/jclouds/TakeLoginCredentialsFromWhirrPropertiesTest.java b/core/src/test/java/org/apache/whirr/service/jclouds/TakeLoginCredentialsFromWhirrPropertiesTest.java index 16ef1971..b6050278 100644 --- a/core/src/test/java/org/apache/whirr/service/jclouds/TakeLoginCredentialsFromWhirrPropertiesTest.java +++ b/core/src/test/java/org/apache/whirr/service/jclouds/TakeLoginCredentialsFromWhirrPropertiesTest.java @@ -33,6 +33,7 @@ public class TakeLoginCredentialsFromWhirrPropertiesTest { @Test public synchronized void testNotSetIsDefault() throws IOException { try { + System.getProperties().remove("whirr.login-user"); assertThat( strat.execute(null), equalTo(new Credentials("root", null))); diff --git a/core/src/test/java/org/apache/whirr/ssh/KeyPairTest.java b/core/src/test/java/org/apache/whirr/util/KeyPairTest.java similarity index 90% rename from core/src/test/java/org/apache/whirr/ssh/KeyPairTest.java rename to core/src/test/java/org/apache/whirr/util/KeyPairTest.java index 0970a433..40ad5016 100644 --- a/core/src/test/java/org/apache/whirr/ssh/KeyPairTest.java +++ b/core/src/test/java/org/apache/whirr/util/KeyPairTest.java @@ -16,11 +16,11 @@ * limitations under the License. */ -package org.apache.whirr.ssh; +package org.apache.whirr.util; -import static org.apache.whirr.ssh.KeyPair.sameKeyPair; -import static org.apache.whirr.ssh.KeyPair.generate; -import static org.apache.whirr.ssh.KeyPair.generateTemporaryFiles; +import static org.apache.whirr.util.KeyPair.sameKeyPair; +import static org.apache.whirr.util.KeyPair.generate; +import static org.apache.whirr.util.KeyPair.generateTemporaryFiles; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.is; diff --git a/core/src/test/java/org/apache/whirr/net/integration/DnsUtilTest.java b/core/src/test/java/org/apache/whirr/util/integration/DnsUtilTest.java similarity index 97% rename from core/src/test/java/org/apache/whirr/net/integration/DnsUtilTest.java rename to core/src/test/java/org/apache/whirr/util/integration/DnsUtilTest.java index 87776c0f..b21a582b 100644 --- a/core/src/test/java/org/apache/whirr/net/integration/DnsUtilTest.java +++ b/core/src/test/java/org/apache/whirr/util/integration/DnsUtilTest.java @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.whirr.net.integration; +package org.apache.whirr.util.integration; import static org.junit.Assert.*; import static java.lang.System.out; @@ -29,7 +29,7 @@ import java.util.Collections; import java.util.Enumeration; -import org.apache.whirr.net.DnsUtil; +import org.apache.whirr.util.DnsUtil; import org.junit.Test; import org.xbill.DNS.Address; diff --git a/core/src/test/resources/META-INF/services/org.apache.whirr.ClusterController b/core/src/test/resources/META-INF/services/org.apache.whirr.ClusterController new file mode 100644 index 00000000..10767b7c --- /dev/null +++ b/core/src/test/resources/META-INF/services/org.apache.whirr.ClusterController @@ -0,0 +1 @@ +org.apache.whirr.ClusterControllerFactoryTest$TestClusterController \ No newline at end of file diff --git a/core/src/test/resources/META-INF/services/org.apache.whirr.service.Service b/core/src/test/resources/META-INF/services/org.apache.whirr.service.Service deleted file mode 100644 index ffd8252e..00000000 --- a/core/src/test/resources/META-INF/services/org.apache.whirr.service.Service +++ /dev/null @@ -1 +0,0 @@ -org.apache.whirr.service.ServiceFactoryTest$TestService \ No newline at end of file diff --git a/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraClusterActionHandler.java b/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraClusterActionHandler.java index e6915d1b..b8b7916c 100644 --- a/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraClusterActionHandler.java +++ b/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraClusterActionHandler.java @@ -29,11 +29,11 @@ import java.util.Set; import org.apache.commons.configuration.Configuration; -import org.apache.whirr.service.Cluster; -import org.apache.whirr.service.Cluster.Instance; +import org.apache.whirr.Cluster; +import org.apache.whirr.Cluster.Instance; +import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.ClusterActionEvent; import org.apache.whirr.service.ClusterActionHandlerSupport; -import org.apache.whirr.service.ClusterSpec; import org.apache.whirr.service.ComputeServiceContextBuilder; import org.apache.whirr.service.jclouds.FirewallSettings; import org.jclouds.compute.ComputeServiceContext; diff --git a/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java b/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java deleted file mode 100644 index 4384544c..00000000 --- a/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraService.java +++ /dev/null @@ -1,31 +0,0 @@ -/** - * 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 org.apache.whirr.service.cassandra; - -import org.apache.whirr.service.Service; - -@Deprecated -public class CassandraService extends Service { - - @Override - public String getName() { - return "cassandra"; - } - -} diff --git a/services/cassandra/src/main/resources/META-INF/services/org.apache.whirr.service.Service b/services/cassandra/src/main/resources/META-INF/services/org.apache.whirr.service.Service deleted file mode 100644 index 2101e4ee..00000000 --- a/services/cassandra/src/main/resources/META-INF/services/org.apache.whirr.service.Service +++ /dev/null @@ -1 +0,0 @@ -org.apache.whirr.service.cassandra.CassandraService \ No newline at end of file diff --git a/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/CassandraClusterActionHandlerTest.java b/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/CassandraClusterActionHandlerTest.java index 85506833..918edf7c 100644 --- a/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/CassandraClusterActionHandlerTest.java +++ b/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/CassandraClusterActionHandlerTest.java @@ -26,7 +26,7 @@ import java.util.List; import java.util.Set; -import org.apache.whirr.service.Cluster.Instance; +import org.apache.whirr.Cluster.Instance; import org.jclouds.domain.Credentials; import org.junit.Test; diff --git a/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java b/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java index da0dfad1..40311413 100644 --- a/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java +++ b/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/integration/CassandraServiceTest.java @@ -35,10 +35,10 @@ import org.apache.thrift.transport.TFramedTransport; import org.apache.thrift.transport.TSocket; import org.apache.thrift.transport.TTransport; -import org.apache.whirr.service.Cluster; -import org.apache.whirr.service.Cluster.Instance; -import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.service.Service; +import org.apache.whirr.Cluster; +import org.apache.whirr.Cluster.Instance; +import org.apache.whirr.ClusterController; +import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.cassandra.CassandraClusterActionHandler; import org.junit.After; import org.junit.Before; @@ -49,7 +49,7 @@ public class CassandraServiceTest { private static final String KEYSPACE = "Keyspace1"; private ClusterSpec clusterSpec; - private Service service; + private ClusterController controller; private Cluster cluster; @Before @@ -61,8 +61,8 @@ public void setUp() throws Exception { config.addConfiguration(new PropertiesConfiguration("whirr-cassandra-test.properties")); clusterSpec = ClusterSpec.withTemporaryKeys(config); - service = new Service(); - cluster = service.launchCluster(clusterSpec); + controller = new ClusterController(); + cluster = controller.launchCluster(clusterSpec); // give it a sec to boot up the cluster waitForCassandra(); @@ -119,8 +119,8 @@ public void testInstances() throws Exception { @After public void tearDown() throws IOException, InterruptedException { - if (service != null) { - service.destroyCluster(clusterSpec); + if (controller != null) { + controller.destroyCluster(clusterSpec); } } diff --git a/services/cdh/src/test/java/org/apache/whirr/service/cdh/integration/CdhHadoopServiceTest.java b/services/cdh/src/test/java/org/apache/whirr/service/cdh/integration/CdhHadoopServiceTest.java index bf0acd75..253de948 100644 --- a/services/cdh/src/test/java/org/apache/whirr/service/cdh/integration/CdhHadoopServiceTest.java +++ b/services/cdh/src/test/java/org/apache/whirr/service/cdh/integration/CdhHadoopServiceTest.java @@ -20,8 +20,6 @@ import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNull; -import static org.hamcrest.Matchers.instanceOf; -import static org.junit.Assert.assertThat; import java.io.BufferedReader; import java.io.IOException; @@ -29,7 +27,6 @@ import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Writer; -import java.util.Map; import java.util.Map.Entry; import org.apache.commons.configuration.CompositeConfiguration; @@ -47,12 +44,10 @@ import org.apache.hadoop.mapred.JobConf; import org.apache.hadoop.mapred.lib.LongSumReducer; import org.apache.hadoop.mapred.lib.TokenCountMapper; -import org.apache.whirr.service.Cluster; -import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.service.Service; -import org.apache.whirr.service.ServiceFactory; +import org.apache.whirr.Cluster; +import org.apache.whirr.ClusterController; +import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.hadoop.HadoopProxy; -import org.apache.whirr.ssh.KeyPair; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -60,7 +55,7 @@ public class CdhHadoopServiceTest { private ClusterSpec clusterSpec; - private Service service; + private ClusterController controller; private HadoopProxy proxy; private Cluster cluster; @@ -72,9 +67,9 @@ public void setUp() throws Exception { } config.addConfiguration(new PropertiesConfiguration("whirr-hadoop-test.properties")); clusterSpec = ClusterSpec.withTemporaryKeys(config); - service = new Service(); + controller = new ClusterController(); - cluster = service.launchCluster(clusterSpec); + cluster = controller.launchCluster(clusterSpec); proxy = new HadoopProxy(clusterSpec, cluster); proxy.start(); } @@ -141,7 +136,7 @@ public void tearDown() throws IOException, InterruptedException { if (proxy != null) { proxy.stop(); } - service.destroyCluster(clusterSpec); + controller.destroyCluster(clusterSpec); } } diff --git a/services/elasticsearch/src/main/java/org/apache/whirr/service/elasticsearch/ElasticSearchConfigurationBuilder.java b/services/elasticsearch/src/main/java/org/apache/whirr/service/elasticsearch/ElasticSearchConfigurationBuilder.java index 8382f99d..8da916ca 100644 --- a/services/elasticsearch/src/main/java/org/apache/whirr/service/elasticsearch/ElasticSearchConfigurationBuilder.java +++ b/services/elasticsearch/src/main/java/org/apache/whirr/service/elasticsearch/ElasticSearchConfigurationBuilder.java @@ -18,26 +18,27 @@ package org.apache.whirr.service.elasticsearch; +import static org.apache.whirr.RolePredicates.role; + import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.Lists; import com.google.common.collect.Sets; + +import java.util.Iterator; +import java.util.List; +import java.util.Set; + import org.apache.commons.configuration.CompositeConfiguration; import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.commons.lang.StringUtils; -import org.apache.whirr.service.Cluster; -import org.apache.whirr.service.ClusterSpec; +import org.apache.whirr.Cluster; +import org.apache.whirr.ClusterSpec; import org.jclouds.scriptbuilder.domain.Statement; import org.jclouds.scriptbuilder.domain.Statements; import org.slf4j.LoggerFactory; -import java.util.Iterator; -import java.util.List; -import java.util.Set; - -import static org.apache.whirr.service.RolePredicates.role; - public class ElasticSearchConfigurationBuilder { private static final org.slf4j.Logger LOG = diff --git a/services/elasticsearch/src/main/java/org/apache/whirr/service/elasticsearch/ElasticSearchHandler.java b/services/elasticsearch/src/main/java/org/apache/whirr/service/elasticsearch/ElasticSearchHandler.java index 59e08e1f..d76631d4 100644 --- a/services/elasticsearch/src/main/java/org/apache/whirr/service/elasticsearch/ElasticSearchHandler.java +++ b/services/elasticsearch/src/main/java/org/apache/whirr/service/elasticsearch/ElasticSearchHandler.java @@ -18,22 +18,22 @@ package org.apache.whirr.service.elasticsearch; +import static org.apache.whirr.RolePredicates.role; +import static org.jclouds.scriptbuilder.domain.Statements.call; + +import java.io.IOException; + import org.apache.commons.configuration.Configuration; -import org.apache.whirr.service.Cluster; +import org.apache.whirr.Cluster; +import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.ClusterActionEvent; import org.apache.whirr.service.ClusterActionHandlerSupport; -import org.apache.whirr.service.ClusterSpec; import org.apache.whirr.service.ComputeServiceContextBuilder; import org.apache.whirr.service.jclouds.FirewallSettings; import org.jclouds.compute.ComputeServiceContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; - -import static org.apache.whirr.service.RolePredicates.role; -import static org.jclouds.scriptbuilder.domain.Statements.call; - public class ElasticSearchHandler extends ClusterActionHandlerSupport { private static final Logger LOG = diff --git a/services/elasticsearch/src/test/java/org/apache/whirr/service/elasticsearch/ElasticSearchConfigurationBuilderTest.java b/services/elasticsearch/src/test/java/org/apache/whirr/service/elasticsearch/ElasticSearchConfigurationBuilderTest.java index cdf2146d..ad48f861 100644 --- a/services/elasticsearch/src/test/java/org/apache/whirr/service/elasticsearch/ElasticSearchConfigurationBuilderTest.java +++ b/services/elasticsearch/src/test/java/org/apache/whirr/service/elasticsearch/ElasticSearchConfigurationBuilderTest.java @@ -17,23 +17,25 @@ */ package org.apache.whirr.service.elasticsearch; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + import com.google.common.base.Predicate; import com.google.common.collect.Lists; import com.google.common.collect.Sets; + +import java.util.Set; + import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.commons.lang.StringUtils; -import org.apache.whirr.service.Cluster; -import org.apache.whirr.service.ClusterSpec; +import org.apache.whirr.Cluster; +import org.apache.whirr.ClusterSpec; import org.junit.Test; -import java.util.Set; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.is; -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - public class ElasticSearchConfigurationBuilderTest { @Test diff --git a/services/elasticsearch/src/test/java/org/apache/whirr/service/elasticsearch/integration/ElasticSearchTest.java b/services/elasticsearch/src/test/java/org/apache/whirr/service/elasticsearch/integration/ElasticSearchTest.java index 9506c189..4e478188 100644 --- a/services/elasticsearch/src/test/java/org/apache/whirr/service/elasticsearch/integration/ElasticSearchTest.java +++ b/services/elasticsearch/src/test/java/org/apache/whirr/service/elasticsearch/integration/ElasticSearchTest.java @@ -17,18 +17,9 @@ */ package org.apache.whirr.service.elasticsearch.integration; +import static org.apache.whirr.RolePredicates.role; + import com.google.common.collect.Iterables; -import org.apache.commons.configuration.CompositeConfiguration; -import org.apache.commons.configuration.PropertiesConfiguration; -import org.apache.whirr.service.Cluster; -import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.service.Service; -import org.apache.whirr.service.elasticsearch.ElasticSearchHandler; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import java.io.BufferedReader; import java.io.IOException; @@ -37,7 +28,17 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import static org.apache.whirr.service.RolePredicates.role; +import org.apache.commons.configuration.CompositeConfiguration; +import org.apache.commons.configuration.PropertiesConfiguration; +import org.apache.whirr.Cluster; +import org.apache.whirr.ClusterController; +import org.apache.whirr.ClusterSpec; +import org.apache.whirr.service.elasticsearch.ElasticSearchHandler; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class ElasticSearchTest { @@ -45,7 +46,7 @@ public class ElasticSearchTest { LoggerFactory.getLogger(ElasticSearchHandler.class); private ClusterSpec clusterSpec; - private Service service; + private ClusterController controller; private Cluster cluster; @Before @@ -56,8 +57,8 @@ public void setUp() throws Exception { config.addConfiguration(new PropertiesConfiguration(System.getProperty("config"))); } clusterSpec = ClusterSpec.withTemporaryKeys(config); - service = new Service(); - cluster = service.launchCluster(clusterSpec); + controller = new ClusterController(); + cluster = controller.launchCluster(clusterSpec); } @Test @@ -115,7 +116,7 @@ private String getHealthInfo() throws Exception { @After public void tearDown() throws IOException, InterruptedException { - service.destroyCluster(clusterSpec); + controller.destroyCluster(clusterSpec); } } diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopCluster.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopCluster.java index 8af889a0..c5724115 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopCluster.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopCluster.java @@ -21,8 +21,8 @@ import java.io.IOException; import java.net.InetAddress; -import org.apache.whirr.service.Cluster; -import org.apache.whirr.service.RolePredicates; +import org.apache.whirr.Cluster; +import org.apache.whirr.RolePredicates; public class HadoopCluster { public static InetAddress getNamenodePublicAddress(Cluster cluster) throws IOException { diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopClusterActionHandler.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopClusterActionHandler.java index 14c90cc1..7a9dca73 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopClusterActionHandler.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopClusterActionHandler.java @@ -25,9 +25,9 @@ import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; +import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.ClusterActionEvent; import org.apache.whirr.service.ClusterActionHandlerSupport; -import org.apache.whirr.service.ClusterSpec; public abstract class HadoopClusterActionHandler extends ClusterActionHandlerSupport { diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopConfigurationBuilder.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopConfigurationBuilder.java index 175ab4d7..85bc3db8 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopConfigurationBuilder.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopConfigurationBuilder.java @@ -18,7 +18,7 @@ package org.apache.whirr.service.hadoop; -import static org.apache.whirr.service.RolePredicates.role; +import static org.apache.whirr.RolePredicates.role; import com.google.common.annotations.VisibleForTesting; @@ -28,9 +28,9 @@ import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; -import org.apache.whirr.service.Cluster; -import org.apache.whirr.service.Cluster.Instance; -import org.apache.whirr.service.ClusterSpec; +import org.apache.whirr.Cluster; +import org.apache.whirr.Cluster.Instance; +import org.apache.whirr.ClusterSpec; import org.jclouds.scriptbuilder.domain.Statement; public class HadoopConfigurationBuilder { diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopDataNodeClusterActionHandler.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopDataNodeClusterActionHandler.java index 0d6b9f25..3afbad57 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopDataNodeClusterActionHandler.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopDataNodeClusterActionHandler.java @@ -26,9 +26,9 @@ import java.io.IOException; import org.apache.commons.configuration.ConfigurationException; -import org.apache.whirr.service.Cluster; +import org.apache.whirr.Cluster; +import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.ClusterActionEvent; -import org.apache.whirr.service.ClusterSpec; public class HadoopDataNodeClusterActionHandler extends HadoopClusterActionHandler { diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopNameNodeClusterActionHandler.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopNameNodeClusterActionHandler.java index 4d7523a6..b06fbfba 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopNameNodeClusterActionHandler.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopNameNodeClusterActionHandler.java @@ -18,7 +18,7 @@ package org.apache.whirr.service.hadoop; -import static org.apache.whirr.service.RolePredicates.role; +import static org.apache.whirr.RolePredicates.role; import static org.apache.whirr.service.hadoop.HadoopConfigurationBuilder.buildCommon; import static org.apache.whirr.service.hadoop.HadoopConfigurationBuilder.buildHdfs; import static org.apache.whirr.service.hadoop.HadoopConfigurationBuilder.buildMapReduce; @@ -35,10 +35,10 @@ import java.util.Properties; import org.apache.commons.configuration.ConfigurationException; -import org.apache.whirr.service.Cluster; -import org.apache.whirr.service.Cluster.Instance; +import org.apache.whirr.Cluster; +import org.apache.whirr.Cluster.Instance; +import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.ClusterActionEvent; -import org.apache.whirr.service.ClusterSpec; import org.apache.whirr.service.FirewallManager.Rule; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java index bd95d2c5..867234fc 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopProxy.java @@ -29,9 +29,9 @@ import java.io.InputStreamReader; import java.net.InetAddress; -import org.apache.whirr.service.Cluster; -import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.ssh.KeyPair; +import org.apache.whirr.Cluster; +import org.apache.whirr.ClusterSpec; +import org.apache.whirr.util.KeyPair; public class HadoopProxy { diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java deleted file mode 100644 index 8b4b027f..00000000 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopService.java +++ /dev/null @@ -1,31 +0,0 @@ -/** - * 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 org.apache.whirr.service.hadoop; - -import org.apache.whirr.service.Service; - -@Deprecated -public class HadoopService extends Service { - - @Override - public String getName() { - return "hadoop"; - } - -} diff --git a/services/hadoop/src/main/resources/META-INF/services/org.apache.whirr.service.Service b/services/hadoop/src/main/resources/META-INF/services/org.apache.whirr.service.Service deleted file mode 100644 index d3071dec..00000000 --- a/services/hadoop/src/main/resources/META-INF/services/org.apache.whirr.service.Service +++ /dev/null @@ -1 +0,0 @@ -org.apache.whirr.service.hadoop.HadoopService \ No newline at end of file diff --git a/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/HadoopConfigurationBuilderTest.java b/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/HadoopConfigurationBuilderTest.java index 83c06c74..2989e31d 100644 --- a/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/HadoopConfigurationBuilderTest.java +++ b/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/HadoopConfigurationBuilderTest.java @@ -26,9 +26,9 @@ import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.PropertiesConfiguration; -import org.apache.whirr.service.Cluster; -import org.apache.whirr.service.Cluster.Instance; -import org.apache.whirr.service.ClusterSpec; +import org.apache.whirr.Cluster; +import org.apache.whirr.Cluster.Instance; +import org.apache.whirr.ClusterSpec; import org.hamcrest.BaseMatcher; import org.hamcrest.Description; import org.jclouds.domain.Credentials; diff --git a/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceController.java b/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceController.java index 7cad8b61..51379a04 100644 --- a/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceController.java +++ b/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/integration/HadoopServiceController.java @@ -30,9 +30,9 @@ import org.apache.hadoop.mapred.ClusterStatus; import org.apache.hadoop.mapred.JobClient; import org.apache.hadoop.mapred.JobConf; -import org.apache.whirr.service.Cluster; -import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.service.Service; +import org.apache.whirr.Cluster; +import org.apache.whirr.ClusterController; +import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.hadoop.HadoopProxy; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -51,7 +51,7 @@ public static HadoopServiceController getInstance() { private boolean running; private ClusterSpec clusterSpec; - private Service service; + private ClusterController controller; private HadoopProxy proxy; private Cluster cluster; @@ -76,9 +76,9 @@ public synchronized void startup() throws Exception { } config.addConfiguration(new PropertiesConfiguration("whirr-hadoop-test.properties")); clusterSpec = ClusterSpec.withTemporaryKeys(config); - service = new Service(); + controller = new ClusterController(); - cluster = service.launchCluster(clusterSpec); + cluster = controller.launchCluster(clusterSpec); proxy = new HadoopProxy(clusterSpec, cluster); proxy.start(); @@ -146,7 +146,7 @@ public synchronized void shutdown() throws IOException, InterruptedException { if (proxy != null) { proxy.stop(); } - service.destroyCluster(clusterSpec); + controller.destroyCluster(clusterSpec); running = false; } diff --git a/services/hbase/src/main/java/org/apache/whirr/service/hbase/BasicServerClusterActionHandler.java b/services/hbase/src/main/java/org/apache/whirr/service/hbase/BasicServerClusterActionHandler.java index e6f227ef..bdce74d5 100644 --- a/services/hbase/src/main/java/org/apache/whirr/service/hbase/BasicServerClusterActionHandler.java +++ b/services/hbase/src/main/java/org/apache/whirr/service/hbase/BasicServerClusterActionHandler.java @@ -18,15 +18,15 @@ package org.apache.whirr.service.hbase; -import static org.apache.whirr.service.RolePredicates.role; +import static org.apache.whirr.RolePredicates.role; import static org.jclouds.scriptbuilder.domain.Statements.call; import java.io.IOException; import java.net.InetAddress; -import org.apache.whirr.service.Cluster; +import org.apache.whirr.Cluster; +import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.ClusterActionEvent; -import org.apache.whirr.service.ClusterSpec; import org.apache.whirr.service.ComputeServiceContextBuilder; import org.apache.whirr.service.jclouds.FirewallSettings; import org.apache.whirr.service.zookeeper.ZooKeeperCluster; diff --git a/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseCluster.java b/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseCluster.java index d830aa64..bb22efdb 100644 --- a/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseCluster.java +++ b/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseCluster.java @@ -18,12 +18,12 @@ package org.apache.whirr.service.hbase; -import org.apache.whirr.service.Cluster; -import org.apache.whirr.service.RolePredicates; - import java.io.IOException; import java.net.InetAddress; +import org.apache.whirr.Cluster; +import org.apache.whirr.RolePredicates; + public class HBaseCluster { public static InetAddress getMasterPublicAddress(Cluster cluster) throws IOException { return cluster.getInstanceMatching( diff --git a/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseClusterActionHandler.java b/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseClusterActionHandler.java index 7a1be897..14bc3d16 100644 --- a/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseClusterActionHandler.java +++ b/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseClusterActionHandler.java @@ -23,8 +23,8 @@ import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; +import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.ClusterActionHandlerSupport; -import org.apache.whirr.service.ClusterSpec; /** * Base class for HBase service handlers. diff --git a/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseMasterClusterActionHandler.java b/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseMasterClusterActionHandler.java index 4a8bd54f..ac2ba44f 100644 --- a/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseMasterClusterActionHandler.java +++ b/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseMasterClusterActionHandler.java @@ -18,7 +18,7 @@ package org.apache.whirr.service.hbase; -import static org.apache.whirr.service.RolePredicates.role; +import static org.apache.whirr.RolePredicates.role; import static org.jclouds.scriptbuilder.domain.Statements.call; import com.google.common.base.Charsets; @@ -31,10 +31,10 @@ import java.util.Map.Entry; import java.util.Properties; -import org.apache.whirr.service.Cluster; -import org.apache.whirr.service.Cluster.Instance; +import org.apache.whirr.Cluster; +import org.apache.whirr.Cluster.Instance; +import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.ClusterActionEvent; -import org.apache.whirr.service.ClusterSpec; import org.apache.whirr.service.ComputeServiceContextBuilder; import org.apache.whirr.service.hadoop.HadoopProxy; import org.apache.whirr.service.jclouds.FirewallSettings; diff --git a/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseRegionServerClusterActionHandler.java b/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseRegionServerClusterActionHandler.java index 4adcf503..e2b0acf9 100644 --- a/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseRegionServerClusterActionHandler.java +++ b/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseRegionServerClusterActionHandler.java @@ -18,16 +18,16 @@ package org.apache.whirr.service.hbase; -import static org.apache.whirr.service.RolePredicates.role; +import static org.apache.whirr.RolePredicates.role; import static org.jclouds.scriptbuilder.domain.Statements.call; import java.io.IOException; import java.net.InetAddress; -import org.apache.whirr.service.Cluster; -import org.apache.whirr.service.Cluster.Instance; +import org.apache.whirr.Cluster; +import org.apache.whirr.Cluster.Instance; +import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.ClusterActionEvent; -import org.apache.whirr.service.ClusterSpec; import org.apache.whirr.service.ComputeServiceContextBuilder; import org.apache.whirr.service.jclouds.FirewallSettings; import org.apache.whirr.service.zookeeper.ZooKeeperCluster; diff --git a/services/hbase/src/test/java/org/apache/whirr/service/hbase/integration/HBaseServiceController.java b/services/hbase/src/test/java/org/apache/whirr/service/hbase/integration/HBaseServiceController.java index 710943c7..86359301 100644 --- a/services/hbase/src/test/java/org/apache/whirr/service/hbase/integration/HBaseServiceController.java +++ b/services/hbase/src/test/java/org/apache/whirr/service/hbase/integration/HBaseServiceController.java @@ -18,6 +18,10 @@ package org.apache.whirr.service.hbase.integration; +import java.io.IOException; +import java.net.InetAddress; +import java.util.Map.Entry; + import org.apache.commons.configuration.CompositeConfiguration; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.hadoop.conf.Configuration; @@ -28,19 +32,15 @@ import org.apache.hadoop.hbase.rest.client.Client; import org.apache.hadoop.hbase.rest.client.RemoteAdmin; import org.apache.hadoop.hbase.rest.client.RemoteHTable; -import org.apache.whirr.service.Cluster; -import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.service.RolePredicates; -import org.apache.whirr.service.Service; +import org.apache.whirr.Cluster; +import org.apache.whirr.ClusterController; +import org.apache.whirr.ClusterSpec; +import org.apache.whirr.RolePredicates; import org.apache.whirr.service.hadoop.HadoopProxy; import org.apache.whirr.service.hbase.HBaseRestServerClusterActionHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.io.IOException; -import java.net.InetAddress; -import java.util.Map.Entry; - public class HBaseServiceController { private static final Logger LOG = @@ -55,7 +55,7 @@ public static HBaseServiceController getInstance() { private boolean running; private ClusterSpec clusterSpec; - private Service service; + private ClusterController controller; private HadoopProxy proxy; private Cluster cluster; private RemoteHTable remoteMetaTable; @@ -83,9 +83,9 @@ public synchronized void startup() throws Exception { } config.addConfiguration(new PropertiesConfiguration("whirr-hbase-test.properties")); clusterSpec = ClusterSpec.withTemporaryKeys(config); - service = new Service(); + controller = new ClusterController(); - cluster = service.launchCluster(clusterSpec); + cluster = controller.launchCluster(clusterSpec); proxy = new HadoopProxy(clusterSpec, cluster); proxy.start(); @@ -126,8 +126,8 @@ public synchronized void shutdown() throws IOException, InterruptedException { if (proxy != null) { proxy.stop(); } - if (service != null) { - service.destroyCluster(clusterSpec); + if (controller != null) { + controller.destroyCluster(clusterSpec); } running = false; } diff --git a/services/voldemort/src/main/java/org/apache/whirr/service/voldemort/VoldemortClusterActionHandler.java b/services/voldemort/src/main/java/org/apache/whirr/service/voldemort/VoldemortClusterActionHandler.java index 39d89232..d89177ff 100644 --- a/services/voldemort/src/main/java/org/apache/whirr/service/voldemort/VoldemortClusterActionHandler.java +++ b/services/voldemort/src/main/java/org/apache/whirr/service/voldemort/VoldemortClusterActionHandler.java @@ -18,8 +18,7 @@ package org.apache.whirr.service.voldemort; -import static org.apache.whirr.service.FirewallManager.Rule; -import static org.apache.whirr.service.RolePredicates.role; +import static org.apache.whirr.RolePredicates.role; import static org.apache.whirr.service.voldemort.VoldemortConstants.ADMIN_PORT; import static org.apache.whirr.service.voldemort.VoldemortConstants.CLIENT_PORT; import static org.apache.whirr.service.voldemort.VoldemortConstants.FUNCTION_CONFIGURE; @@ -35,28 +34,25 @@ import static org.apache.whirr.service.voldemort.VoldemortConstants.ROLE; import static org.jclouds.scriptbuilder.domain.Statements.call; +import com.google.common.base.Function; +import com.google.common.base.Joiner; +import com.google.common.collect.Lists; + import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Set; import org.apache.commons.configuration.Configuration; -import org.apache.whirr.service.Cluster; +import org.apache.whirr.Cluster; +import org.apache.whirr.Cluster.Instance; +import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.ClusterActionEvent; import org.apache.whirr.service.ClusterActionHandlerSupport; -import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.service.ComputeServiceContextBuilder; -import org.apache.whirr.service.Cluster.Instance; -import org.apache.whirr.service.FirewallManager; -import org.apache.whirr.service.jclouds.FirewallSettings; -import org.jclouds.compute.ComputeServiceContext; +import org.apache.whirr.service.FirewallManager.Rule; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import com.google.common.base.Function; -import com.google.common.base.Joiner; -import com.google.common.collect.Lists; - public class VoldemortClusterActionHandler extends ClusterActionHandlerSupport { private static final Logger LOG = LoggerFactory.getLogger(VoldemortClusterActionHandler.class); diff --git a/services/voldemort/src/test/java/org/apache/whirr/service/voldemort/integration/VoldemortServiceTest.java b/services/voldemort/src/test/java/org/apache/whirr/service/voldemort/integration/VoldemortServiceTest.java index a6a8a2f8..89820df2 100644 --- a/services/voldemort/src/test/java/org/apache/whirr/service/voldemort/integration/VoldemortServiceTest.java +++ b/services/voldemort/src/test/java/org/apache/whirr/service/voldemort/integration/VoldemortServiceTest.java @@ -28,10 +28,10 @@ import org.apache.commons.configuration.CompositeConfiguration; import org.apache.commons.configuration.PropertiesConfiguration; -import org.apache.whirr.service.Cluster; -import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.service.Service; -import org.apache.whirr.service.Cluster.Instance; +import org.apache.whirr.Cluster; +import org.apache.whirr.Cluster.Instance; +import org.apache.whirr.ClusterController; +import org.apache.whirr.ClusterSpec; import org.junit.After; import org.junit.Assert; import org.junit.Before; @@ -45,7 +45,7 @@ public class VoldemortServiceTest { private ClusterSpec clusterSpec; - private Service service; + private ClusterController controller; private Cluster cluster; @@ -58,8 +58,8 @@ public void setUp() throws Exception { config.addConfiguration(new PropertiesConfiguration("whirr-voldemort-test.properties")); clusterSpec = ClusterSpec.withTemporaryKeys(config); - service = new Service(); - cluster = service.launchCluster(clusterSpec); + controller = new ClusterController(); + cluster = controller.launchCluster(clusterSpec); waitForBootstrap(); } @@ -109,8 +109,8 @@ public void testInstances() throws Exception { @After public void tearDown() throws IOException, InterruptedException { - if (service != null) { - service.destroyCluster(clusterSpec); + if (controller != null) { + controller.destroyCluster(clusterSpec); } } diff --git a/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperCluster.java b/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperCluster.java index f8c9d069..2aca1779 100644 --- a/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperCluster.java +++ b/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperCluster.java @@ -20,8 +20,8 @@ import com.google.common.base.Joiner; -import org.apache.whirr.service.Cluster; -import org.apache.whirr.service.RolePredicates; +import org.apache.whirr.Cluster; +import org.apache.whirr.RolePredicates; public class ZooKeeperCluster { public static String getHosts(Cluster cluster) { diff --git a/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperClusterActionHandler.java b/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperClusterActionHandler.java index 8320e57a..be269dc8 100644 --- a/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperClusterActionHandler.java +++ b/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperClusterActionHandler.java @@ -17,7 +17,7 @@ * limitations under the License. */ -import static org.apache.whirr.service.RolePredicates.role; +import static org.apache.whirr.RolePredicates.role; import static org.jclouds.scriptbuilder.domain.Statements.call; import com.google.common.base.Function; @@ -28,11 +28,11 @@ import java.util.List; import java.util.Set; -import org.apache.whirr.service.Cluster; -import org.apache.whirr.service.Cluster.Instance; +import org.apache.whirr.Cluster; +import org.apache.whirr.Cluster.Instance; +import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.ClusterActionEvent; import org.apache.whirr.service.ClusterActionHandlerSupport; -import org.apache.whirr.service.ClusterSpec; import org.apache.whirr.service.FirewallManager.Rule; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java b/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java deleted file mode 100644 index e8394b5e..00000000 --- a/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperService.java +++ /dev/null @@ -1,31 +0,0 @@ -/** - * 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 org.apache.whirr.service.zookeeper; - -import org.apache.whirr.service.Service; - -@Deprecated -public class ZooKeeperService extends Service { - - @Override - public String getName() { - return "zookeeper"; - } - -} diff --git a/services/zookeeper/src/main/resources/META-INF/services/org.apache.whirr.service.Service b/services/zookeeper/src/main/resources/META-INF/services/org.apache.whirr.service.Service deleted file mode 100644 index d1f70a72..00000000 --- a/services/zookeeper/src/main/resources/META-INF/services/org.apache.whirr.service.Service +++ /dev/null @@ -1 +0,0 @@ -org.apache.whirr.service.zookeeper.ZooKeeperService \ No newline at end of file diff --git a/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java b/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java index f48b6b61..dd1e26b8 100644 --- a/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java +++ b/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java @@ -25,9 +25,9 @@ import org.apache.commons.configuration.CompositeConfiguration; import org.apache.commons.configuration.PropertiesConfiguration; -import org.apache.whirr.service.Cluster; -import org.apache.whirr.service.ClusterSpec; -import org.apache.whirr.service.Service; +import org.apache.whirr.Cluster; +import org.apache.whirr.ClusterController; +import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.zookeeper.ZooKeeperCluster; import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.WatchedEvent; @@ -43,7 +43,7 @@ public class ZooKeeperServiceTest { private ClusterSpec clusterSpec; private Cluster cluster; - private Service service; + private ClusterController controller; private String hosts; @Before @@ -54,9 +54,9 @@ public void setUp() throws Exception { } config.addConfiguration(new PropertiesConfiguration("whirr-zookeeper-test.properties")); clusterSpec = ClusterSpec.withTemporaryKeys(config); - service = new Service(); + controller = new ClusterController(); - cluster = service.launchCluster(clusterSpec); + cluster = controller.launchCluster(clusterSpec); hosts = ZooKeeperCluster.getHosts(cluster); } @@ -108,7 +108,7 @@ public void close() throws InterruptedException { @After public void tearDown() throws IOException, InterruptedException { - service.destroyCluster(clusterSpec); + controller.destroyCluster(clusterSpec); } } From c220af6caf9ddaeb64c8d9e47ccb1a5fc108845b Mon Sep 17 00:00:00 2001 From: Andrei Savu Date: Wed, 13 Apr 2011 14:30:42 +0000 Subject: [PATCH 159/216] Removed some empty folders git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1091800 13f79535-47bb-0310-9956-ffa450edef68 From c0ceaee3c2d9377800c40dff1e4de43ef9c4a51b Mon Sep 17 00:00:00 2001 From: Thomas White Date: Wed, 13 Apr 2011 16:21:17 +0000 Subject: [PATCH 160/216] Removed more empty directories. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1091845 13f79535-47bb-0310-9956-ffa450edef68 From 36874dd6ce26a7e2b038647ad76d5a51214ce441 Mon Sep 17 00:00:00 2001 From: Andrei Savu Date: Thu, 14 Apr 2011 06:46:29 +0000 Subject: [PATCH 161/216] WHIRR-269. Improve error msg "Key pair is encrypted" (tomwhite via asavu) git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1092018 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 ++ .../java/org/apache/whirr/ClusterSpec.java | 18 +++++++++++++----- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 6643071b..070ddb3e 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -27,6 +27,8 @@ Trunk (unreleased changes) org.apache.whirr.actions. (tomwhite) + WHIRR-269. Improve error msg "Key pair is encrypted" (tomwhite via asavu) + BUG FIXES WHIRR-253. ZooKeeper service should only authorize ingress to ZooKeeper diff --git a/core/src/main/java/org/apache/whirr/ClusterSpec.java b/core/src/main/java/org/apache/whirr/ClusterSpec.java index c6d5089d..ce71d396 100644 --- a/core/src/main/java/org/apache/whirr/ClusterSpec.java +++ b/core/src/main/java/org/apache/whirr/ClusterSpec.java @@ -307,6 +307,7 @@ private Configuration composeWithDefaults(Configuration userConfig) } private void checkAndSetKeyPair() throws ConfigurationException { + String pairRepresentation = ""; try { String privateKeyPath = getString(Property.PRIVATE_KEY_FILE); @@ -314,26 +315,33 @@ private void checkAndSetKeyPair() throws ConfigurationException { publicKeyPath = (publicKeyPath == null && privateKeyPath != null) ? privateKeyPath + ".pub" : publicKeyPath; if(privateKeyPath != null && publicKeyPath != null) { + pairRepresentation = "(" + privateKeyPath + ", " + + publicKeyPath + ")"; KeyPair pair = KeyPair.load(new JSch(), privateKeyPath, publicKeyPath); if (pair.isEncrypted()) { - throw new ConfigurationException("Key pair is encrypted"); + throw new ConfigurationException("Key pair " + pairRepresentation + + " is encrypted. Try generating a new passwordless SSH keypair " + + "(e.g. with ssh-keygen)."); } if (!sameKeyPair(new File(privateKeyPath), new File(publicKeyPath))) { throw new ConfigurationException("Both keys should belong " + - "to the same key pair"); + "to the same key pair: " + pairRepresentation); } setPrivateKey(new File(privateKeyPath)); setPublicKey(new File(publicKeyPath)); } } catch (JSchException e) { - throw new ConfigurationException("Invalid key pair", e); + throw new ConfigurationException("Invalid key pair: " + + pairRepresentation, e); } catch (IllegalArgumentException e) { - throw new ConfigurationException("Invalid key", e); + throw new ConfigurationException("Invalid key: " + + pairRepresentation, e); } catch (IOException e) { - throw new ConfigurationException("Error reading one of key file", e); + throw new ConfigurationException("Error reading one of key file: " + + pairRepresentation, e); } } From 676ed207435f13792038ef39e8140646c63ecfb7 Mon Sep 17 00:00:00 2001 From: Andrei Savu Date: Thu, 14 Apr 2011 07:17:10 +0000 Subject: [PATCH 162/216] WHIRR-277. Support multiple versions of ZooKeeper git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1092024 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 ++ .../service/ClusterActionHandlerSupport.java | 14 +++++++++++++- recipes/zookeeper-ec2.properties | 4 ++++ .../hadoop/HadoopClusterActionHandler.java | 13 ++----------- .../hbase/HBaseClusterActionHandler.java | 12 ++---------- .../ZooKeeperClusterActionHandler.java | 10 +++++++++- .../resources/functions/install_zookeeper.sh | 9 +++++---- .../whirr-zookeeper-default.properties | 19 +++++++++++++++++++ 8 files changed, 56 insertions(+), 27 deletions(-) create mode 100644 services/zookeeper/src/main/resources/whirr-zookeeper-default.properties diff --git a/CHANGES.txt b/CHANGES.txt index 070ddb3e..51fd9b1d 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -29,6 +29,8 @@ Trunk (unreleased changes) WHIRR-269. Improve error msg "Key pair is encrypted" (tomwhite via asavu) + WHIRR-277. Support multiple versions of ZooKeeper (asavu) + BUG FIXES WHIRR-253. ZooKeeper service should only authorize ingress to ZooKeeper diff --git a/core/src/main/java/org/apache/whirr/service/ClusterActionHandlerSupport.java b/core/src/main/java/org/apache/whirr/service/ClusterActionHandlerSupport.java index 47e54c7a..fdfdb97a 100644 --- a/core/src/main/java/org/apache/whirr/service/ClusterActionHandlerSupport.java +++ b/core/src/main/java/org/apache/whirr/service/ClusterActionHandlerSupport.java @@ -22,6 +22,8 @@ import org.apache.commons.configuration.CompositeConfiguration; import org.apache.commons.configuration.Configuration; +import org.apache.commons.configuration.ConfigurationException; +import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.jclouds.RunUrlStatement; import org.jclouds.scriptbuilder.domain.Statement; @@ -93,13 +95,23 @@ protected void afterOtherAction(ClusterActionEvent event) * @param clusterSpec The cluster specification instance. * @return The composite configuration. */ - protected synchronized Configuration getConfiguration( + protected Configuration getConfiguration( ClusterSpec clusterSpec, Configuration defaults) { CompositeConfiguration cc = new CompositeConfiguration(); cc.addConfiguration(clusterSpec.getConfiguration()); cc.addConfiguration(defaults); return cc; } + + protected Configuration getConfiguration(ClusterSpec clusterSpec, + String defaultsPropertiesFile) throws IOException { + try { + return getConfiguration(clusterSpec, + new PropertiesConfiguration(defaultsPropertiesFile)); + } catch(ConfigurationException e) { + throw new IOException("Error loading " + defaultsPropertiesFile, e); + } + } /** * A convenience method for adding a {@link RunUrlStatement} to a diff --git a/recipes/zookeeper-ec2.properties b/recipes/zookeeper-ec2.properties index 21833a4b..8c2e628a 100644 --- a/recipes/zookeeper-ec2.properties +++ b/recipes/zookeeper-ec2.properties @@ -36,3 +36,7 @@ whirr.credential=${env:AWS_SECRET_ACCESS_KEY} # By default use the user system SSH keys. Override them here. # whirr.private-key-file=${sys:user.home}/.ssh/id_rsa # whirr.public-key-file=${whirr.private-key-file}.pub + +# Specify tarball url +# whirr.zookeeper.tarball.url=http://archive.apache.org/dist/zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz + diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopClusterActionHandler.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopClusterActionHandler.java index 7a9dca73..a89d7e48 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopClusterActionHandler.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopClusterActionHandler.java @@ -35,19 +35,10 @@ public abstract class HadoopClusterActionHandler extends ClusterActionHandlerSup * Returns a composite configuration that is made up from the global * configuration coming from the Whirr core with a hadoop defaults * properties. - * - * @param clusterSpec The cluster specification instance. - * @return The composite configuration. */ - protected synchronized Configuration getConfiguration( + protected Configuration getConfiguration( ClusterSpec clusterSpec) throws IOException { - try { - Configuration defaults = new PropertiesConfiguration( - "whirr-hadoop-default.properties"); - return super.getConfiguration(clusterSpec, defaults); - } catch (ConfigurationException e) { - throw new IOException("Error loading Hadoop default properties.", e); - } + return getConfiguration(clusterSpec, "whirr-hadoop-default.properties"); } @Override diff --git a/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseClusterActionHandler.java b/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseClusterActionHandler.java index 14bc3d16..b88ade83 100644 --- a/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseClusterActionHandler.java +++ b/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseClusterActionHandler.java @@ -36,18 +36,10 @@ public abstract class HBaseClusterActionHandler * Returns a composite configuration that is made up from the global * configuration coming from the Whirr core with a hbase defaults * properties. - * - * @param clusterSpec The cluster specification instance. - * @return The composite configuration. */ protected synchronized Configuration getConfiguration( ClusterSpec clusterSpec) throws IOException { - try { - Configuration defaults = new PropertiesConfiguration( - HBaseConstants.FILE_HBASE_DEFAULT_PROPERTIES); - return super.getConfiguration(clusterSpec, defaults); - } catch (ConfigurationException e) { - throw new IOException("Error loading HBase default properties.", e); - } + return getConfiguration(clusterSpec, + HBaseConstants.FILE_HBASE_DEFAULT_PROPERTIES); } } diff --git a/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperClusterActionHandler.java b/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperClusterActionHandler.java index be269dc8..68bd1704 100644 --- a/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperClusterActionHandler.java +++ b/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperClusterActionHandler.java @@ -28,6 +28,7 @@ import java.util.List; import java.util.Set; +import org.apache.commons.configuration.Configuration; import org.apache.whirr.Cluster; import org.apache.whirr.Cluster.Instance; import org.apache.whirr.ClusterSpec; @@ -50,11 +51,18 @@ public String getRole() { return ZOOKEEPER_ROLE; } + protected Configuration getConfiguration(ClusterSpec spec) + throws IOException { + return getConfiguration(spec, "whirr-zookeeper-default.properties"); + } + @Override protected void beforeBootstrap(ClusterActionEvent event) throws IOException { + Configuration config = getConfiguration(event.getClusterSpec()); addStatement(event, call("install_java")); addStatement(event, call("install_tarball")); - addStatement(event, call("install_zookeeper")); + addStatement(event, call("install_zookeeper", + config.getString("whirr.zookeeper.tarball.url"))); } @Override diff --git a/services/zookeeper/src/main/resources/functions/install_zookeeper.sh b/services/zookeeper/src/main/resources/functions/install_zookeeper.sh index cefedda8..d8b2ba53 100644 --- a/services/zookeeper/src/main/resources/functions/install_zookeeper.sh +++ b/services/zookeeper/src/main/resources/functions/install_zookeeper.sh @@ -16,13 +16,14 @@ # function install_zookeeper() { - ZK_VERSION=${1:-3.3.0} - ZOOKEEPER_HOME=/usr/local/zookeeper-$ZK_VERSION + ZK_TARBALL_URL=$1 + ZOOKEEPER_HOME=/usr/local/$(basename $ZK_TARBALL_URL '.tar.gz') + ZK_CONF_DIR=/etc/zookeeper/conf ZK_LOG_DIR=/var/log/zookeeper ZK_DATA_DIR=$ZK_LOG_DIR/txlog - install_tarball http://www.apache.org/dist/hadoop/zookeeper/zookeeper-$ZK_VERSION/zookeeper-$ZK_VERSION.tar.gz + install_tarball $ZK_TARBALL_URL echo "export ZOOKEEPER_HOME=$ZOOKEEPER_HOME" >> /etc/profile echo 'export PATH=$ZOOKEEPER_HOME/bin:$PATH' >> /etc/profile @@ -38,7 +39,7 @@ function install_zookeeper() { $ZK_CONF_DIR/log4j.properties # Install a CRON task for data directory cleanup - ZK_JAR=$ZOOKEEPER_HOME/zookeeper-$ZK_VERSION.jar + ZK_JAR=$ZOOKEEPER_HOME/$(basename $ZK_TARBALL_URL '.tar.gz').jar ZK_LOG4J_JAR=`echo $ZOOKEEPER_HOME/lib/log4j-*.jar` CRON="0 0 * * * java -cp $ZK_JAR:$ZK_LOG4J_JAR:$ZK_CONF_DIR org.apache.zookeeper.server.PurgeTxnLog $ZK_DATA_DIR $ZK_DATA_DIR -n 10" diff --git a/services/zookeeper/src/main/resources/whirr-zookeeper-default.properties b/services/zookeeper/src/main/resources/whirr-zookeeper-default.properties new file mode 100644 index 00000000..1a229f84 --- /dev/null +++ b/services/zookeeper/src/main/resources/whirr-zookeeper-default.properties @@ -0,0 +1,19 @@ +# +# 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. +# + +whirr.zookeeper.tarball.url=http://archive.apache.org/dist/zookeeper/zookeeper-3.3.3/zookeeper-3.3.3.tar.gz From 1bf7fa15a0e1b5f1b614ebd4f01791f72faff9d1 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Thu, 14 Apr 2011 16:27:43 +0000 Subject: [PATCH 163/216] WHIRR-172. Log warning for unrecognized service names. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1092389 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 ++ .../whirr/cli/command/AbstractClusterSpecCommand.java | 11 ++++++++--- .../cli/command/AbstractClusterSpecCommandTest.java | 6 +++--- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 51fd9b1d..b7b90225 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -44,6 +44,8 @@ Trunk (unreleased changes) WHIRR-274. Add wagon-ssh-external as a maven build extension. (asavu) + WHIRR-172. Log warning for unrecognized service names. (tomwhite) + Release 0.4.0 - 2011-03-15 NEW FEATURES diff --git a/cli/src/main/java/org/apache/whirr/cli/command/AbstractClusterSpecCommand.java b/cli/src/main/java/org/apache/whirr/cli/command/AbstractClusterSpecCommand.java index 535bfdc0..274a65b7 100644 --- a/cli/src/main/java/org/apache/whirr/cli/command/AbstractClusterSpecCommand.java +++ b/cli/src/main/java/org/apache/whirr/cli/command/AbstractClusterSpecCommand.java @@ -39,12 +39,18 @@ import org.apache.whirr.ClusterControllerFactory; import org.apache.whirr.ClusterSpec; import org.apache.whirr.ClusterSpec.Property; +import org.apache.whirr.actions.BootstrapClusterAction; import org.apache.whirr.cli.Command; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * An abstract command for interacting with clusters. */ public abstract class AbstractClusterSpecCommand extends Command { + + private static final Logger LOG = + LoggerFactory.getLogger(AbstractClusterSpecCommand.class); protected ClusterControllerFactory factory; @@ -105,13 +111,12 @@ protected ClusterSpec getClusterSpec(OptionSet optionSet) throws ConfigurationEx /** * Create the specified service - * @throws IllegalArgumentException if serviceName is not found */ protected ClusterController createClusterController(String serviceName) { ClusterController controller = factory.create(serviceName); if (controller == null) { - throw new IllegalArgumentException("Unable to find service " - + serviceName + ", exiting"); + LOG.warn("Unable to find service {}, using default.", serviceName); + controller = factory.create(null); } return controller; } diff --git a/cli/src/test/java/org/apache/whirr/cli/command/AbstractClusterSpecCommandTest.java b/cli/src/test/java/org/apache/whirr/cli/command/AbstractClusterSpecCommandTest.java index 053400bd..f6442625 100644 --- a/cli/src/test/java/org/apache/whirr/cli/command/AbstractClusterSpecCommandTest.java +++ b/cli/src/test/java/org/apache/whirr/cli/command/AbstractClusterSpecCommandTest.java @@ -59,9 +59,9 @@ public int run(InputStream in, PrintStream out, PrintStream err, } /** - * Ensure that an invalid service name causes failure + * Ensure that an invalid service name uses the default (after logging a + * warning). */ - @Test(expected=IllegalArgumentException.class) public void testCreateServerWithInvalidClusterControllerName() throws Exception { AbstractClusterSpecCommand clusterSpecCommand = new AbstractClusterSpecCommand("name", "description", new ClusterControllerFactory()) { @@ -79,7 +79,7 @@ public int run(InputStream in, PrintStream out, PrintStream err, "--private-key-file", keys.get("private").getAbsolutePath() ); ClusterSpec clusterSpec = clusterSpecCommand.getClusterSpec(optionSet); - // this should fail - non-existent service + // following should not fail clusterSpecCommand.createClusterController("bar"); } } From 1aed3404b9cb3a37216a109e44ae01f28bdce8a3 Mon Sep 17 00:00:00 2001 From: Andrei Savu Date: Thu, 14 Apr 2011 21:16:37 +0000 Subject: [PATCH 164/216] WHIRR-282. Set number of Hadoop slots based on hardware (tomwhite via asavu) git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1092518 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 + .../main/java/org/apache/whirr/Cluster.java | 10 +++- .../whirr/actions/BootstrapClusterAction.java | 2 +- .../CassandraClusterActionHandlerTest.java | 2 +- services/hadoop/pom.xml | 4 ++ .../hadoop/HadoopConfigurationBuilder.java | 35 +++++++++++- .../resources/whirr-hadoop-default.properties | 3 - .../HadoopConfigurationBuilderTest.java | 55 +++++++++++++++++-- 8 files changed, 102 insertions(+), 11 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index b7b90225..8bd71253 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -31,6 +31,8 @@ Trunk (unreleased changes) WHIRR-277. Support multiple versions of ZooKeeper (asavu) + WHIRR-282. Set number of Hadoop slots based on hardware (tomwhite via asavu) + BUG FIXES WHIRR-253. ZooKeeper service should only authorize ingress to ZooKeeper diff --git a/core/src/main/java/org/apache/whirr/Cluster.java b/core/src/main/java/org/apache/whirr/Cluster.java index 3bd40043..0395f5bf 100644 --- a/core/src/main/java/org/apache/whirr/Cluster.java +++ b/core/src/main/java/org/apache/whirr/Cluster.java @@ -34,6 +34,7 @@ import org.apache.whirr.Cluster.Instance; import org.apache.whirr.util.DnsUtil; +import org.jclouds.compute.domain.NodeMetadata; import org.jclouds.domain.Credentials; /** @@ -55,9 +56,10 @@ public static class Instance { private final String privateIp; private String privateHostName; private final String id; + private final NodeMetadata nodeMetadata; public Instance(Credentials loginCredentials, Set roles, String publicIp, - String privateIp, String id) { + String privateIp, String id, NodeMetadata nodeMetadata) { this.loginCredentials = checkNotNull(loginCredentials, "loginCredentials"); this.roles = checkNotNull(roles, "roles"); this.publicIp = checkNotNull(publicIp, "publicIp"); @@ -67,6 +69,7 @@ public Instance(Credentials loginCredentials, Set roles, String publicIp checkArgument(InetAddresses.isInetAddress(privateIp), "invalid IP address: %s", privateIp); this.id = checkNotNull(id, "id"); + this.nodeMetadata = nodeMetadata; } public Credentials getLoginCredentials() { @@ -116,12 +119,17 @@ public String getId() { return id; } + public NodeMetadata getNodeMetadata() { + return nodeMetadata; + } + public String toString() { return Objects.toStringHelper(this) .add("roles", roles) .add("publicIp", publicIp) .add("privateIp", privateIp) .add("id", id) + .add("nodeMetadata", nodeMetadata) .toString(); } diff --git a/core/src/main/java/org/apache/whirr/actions/BootstrapClusterAction.java b/core/src/main/java/org/apache/whirr/actions/BootstrapClusterAction.java index 810d73c7..8fc88b27 100644 --- a/core/src/main/java/org/apache/whirr/actions/BootstrapClusterAction.java +++ b/core/src/main/java/org/apache/whirr/actions/BootstrapClusterAction.java @@ -207,7 +207,7 @@ public Instance apply(NodeMetadata node) { return new Instance(node.getCredentials(), roles, Iterables.get(node.getPublicAddresses(), 0), Iterables.get(node.getPrivateAddresses(), 0), - node.getId()); + node.getId(), node); } })); } diff --git a/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/CassandraClusterActionHandlerTest.java b/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/CassandraClusterActionHandlerTest.java index 918edf7c..f764ffaf 100644 --- a/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/CassandraClusterActionHandlerTest.java +++ b/services/cassandra/src/test/java/org/apache/whirr/service/cassandra/CassandraClusterActionHandlerTest.java @@ -34,7 +34,7 @@ public class CassandraClusterActionHandlerTest { private Instance getInstance(String id) throws UnknownHostException { return new Instance(new Credentials("", ""), Sets.newHashSet(""), - "127.0.0.1", "127.0.0.1", id); + "127.0.0.1", "127.0.0.1", id, null); } @Test() diff --git a/services/hadoop/pom.xml b/services/hadoop/pom.xml index 55b1e84e..2a90efc2 100644 --- a/services/hadoop/pom.xml +++ b/services/hadoop/pom.xml @@ -64,6 +64,10 @@ junit junit
    + + org.mockito + mockito-all + org.hamcrest hamcrest-all diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopConfigurationBuilder.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopConfigurationBuilder.java index 85bc3db8..3cd8c21b 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopConfigurationBuilder.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopConfigurationBuilder.java @@ -21,8 +21,11 @@ import static org.apache.whirr.RolePredicates.role; import com.google.common.annotations.VisibleForTesting; +import com.google.common.base.Functions; +import com.google.common.collect.Iterables; import java.io.IOException; +import java.util.Set; import org.apache.commons.configuration.CompositeConfiguration; import org.apache.commons.configuration.Configuration; @@ -31,6 +34,8 @@ import org.apache.whirr.Cluster; import org.apache.whirr.Cluster.Instance; import org.apache.whirr.ClusterSpec; +import org.jclouds.compute.domain.Hardware; +import org.jclouds.compute.domain.Processor; import org.jclouds.scriptbuilder.domain.Statement; public class HadoopConfigurationBuilder { @@ -87,12 +92,34 @@ static Configuration buildHdfsConfiguration(ClusterSpec clusterSpec, Cluster cluster, Configuration defaults) throws ConfigurationException { return build(clusterSpec, cluster, defaults, "hadoop-hdfs"); } - + @VisibleForTesting static Configuration buildMapReduceConfiguration(ClusterSpec clusterSpec, Cluster cluster, Configuration defaults) throws ConfigurationException, IOException { Configuration config = build(clusterSpec, cluster, defaults, "hadoop-mapreduce"); + + Set taskTrackers = cluster + .getInstancesMatching(role(HadoopTaskTrackerClusterActionHandler.ROLE)); + + if (!taskTrackers.isEmpty()) { + + Hardware hardware = Iterables.getFirst(taskTrackers, null) + .getNodeMetadata().getHardware(); + int coresPerNode = 0; + for (Processor processor : hardware.getProcessors()) { + coresPerNode += processor.getCores(); + } + int mapTasksPerNode = (int) Math.ceil(coresPerNode * 1.0); + int reduceTasksPerNode = (int) Math.ceil(coresPerNode * 0.75); + + setIfAbsent(config, "mapred.tasktracker.map.tasks.maximum", mapTasksPerNode + ""); + setIfAbsent(config, "mapred.tasktracker.reduce.tasks.maximum", reduceTasksPerNode + ""); + + int clusterReduceSlots = taskTrackers.size() * reduceTasksPerNode; + setIfAbsent(config, "mapred.reduce.tasks", clusterReduceSlots + ""); + + } Instance jobtracker = cluster .getInstanceMatching(role(HadoopJobTrackerClusterActionHandler.ROLE)); @@ -100,5 +127,11 @@ static Configuration buildMapReduceConfiguration(ClusterSpec clusterSpec, jobtracker.getPublicAddress().getHostName())); return config; } + + private static void setIfAbsent(Configuration config, String property, String value) { + if (!config.containsKey(property)) { + config.setProperty(property, value); + } + } } diff --git a/services/hadoop/src/main/resources/whirr-hadoop-default.properties b/services/hadoop/src/main/resources/whirr-hadoop-default.properties index ac66098d..1da00949 100644 --- a/services/hadoop/src/main/resources/whirr-hadoop-default.properties +++ b/services/hadoop/src/main/resources/whirr-hadoop-default.properties @@ -47,6 +47,3 @@ hadoop-mapreduce.mapred.compress.map.output=true hadoop-mapreduce.mapred.output.compression.type=BLOCK hadoop-mapreduce.mapred.child.java.opts=-Xmx550m hadoop-mapreduce.mapred.child.ulimit=1126400 -hadoop-mapreduce.mapred.tasktracker.map.tasks.maximum=2 -hadoop-mapreduce.mapred.tasktracker.reduce.tasks.maximum=1 -hadoop-mapreduce.mapred.reduce.tasks=10 diff --git a/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/HadoopConfigurationBuilderTest.java b/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/HadoopConfigurationBuilderTest.java index 2989e31d..3c9c05af 100644 --- a/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/HadoopConfigurationBuilderTest.java +++ b/services/hadoop/src/test/java/org/apache/whirr/service/hadoop/HadoopConfigurationBuilderTest.java @@ -20,10 +20,18 @@ import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import com.google.common.collect.Iterators; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import com.google.common.collect.Sets; +import java.util.Collections; +import java.util.List; +import java.util.Set; + import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.whirr.Cluster; @@ -31,6 +39,11 @@ import org.apache.whirr.ClusterSpec; import org.hamcrest.BaseMatcher; import org.hamcrest.Description; +import org.jclouds.compute.domain.Hardware; +import org.jclouds.compute.domain.NodeMetadata; +import org.jclouds.compute.domain.Processor; +import org.jclouds.compute.domain.Volume; +import org.jclouds.compute.domain.internal.HardwareImpl; import org.jclouds.domain.Credentials; import org.junit.Before; import org.junit.Test; @@ -71,11 +84,31 @@ public void setUp() throws Exception { defaults.addProperty("hadoop-mapreduce.p1", "mapred1"); clusterSpec = ClusterSpec.withTemporaryKeys(); + cluster = newCluster(1); + } + + private Cluster newCluster(int numberOfWorkers) { + NodeMetadata node = mock(NodeMetadata.class); + List processors = Lists.newArrayList(new Processor(4, 1.0)); + Hardware hardware = new HardwareImpl(null, null, "id", null, null, + Maps.newHashMap(), processors, 1024, + Lists.newArrayList(), null); + when(node.getHardware()).thenReturn(hardware); + + Set instances = Sets.newLinkedHashSet(); Instance master = new Instance(new Credentials("", ""), Sets.newHashSet(HadoopNameNodeClusterActionHandler.ROLE, HadoopJobTrackerClusterActionHandler.ROLE), - "10.0.0.1", "10.0.0.1", "id"); - cluster = new Cluster(Sets.newHashSet(master)); + "10.0.0.1", "10.0.0.1", "1", node); + instances.add(master); + for (int i = 0; i < numberOfWorkers; i++) { + int id = i + 2; + instances.add(new Instance(new Credentials("", ""), + Sets.newHashSet(HadoopDataNodeClusterActionHandler.ROLE, + HadoopTaskTrackerClusterActionHandler.ROLE), + "10.0.0." + id, "10.0.0." + id, id + "", node)); + } + return new Cluster(instances); } @Test @@ -114,11 +147,25 @@ public void testHdfs() throws Exception { @Test public void testMapReduce() throws Exception { + Cluster cluster = newCluster(5); Configuration conf = HadoopConfigurationBuilder - .buildMapReduceConfiguration(clusterSpec, cluster, defaults); - assertThat(Iterators.size(conf.getKeys()), is(2)); + .buildMapReduceConfiguration(clusterSpec, cluster, defaults); assertThat(conf.getString("p1"), is("mapred1")); assertThat(conf.getString("mapred.job.tracker"), matches(".+:8021")); + assertThat(conf.getString("mapred.tasktracker.map.tasks.maximum"), is("4")); + assertThat(conf.getString("mapred.tasktracker.reduce.tasks.maximum"), is("3")); + assertThat(conf.getString("mapred.reduce.tasks"), is("15")); } + + @Test + public void testOverridesNumberOfReducers() throws Exception { + Configuration overrides = new PropertiesConfiguration(); + overrides.addProperty("hadoop-mapreduce.mapred.reduce.tasks", "7"); + clusterSpec = ClusterSpec.withNoDefaults(overrides); + Configuration conf = HadoopConfigurationBuilder.buildMapReduceConfiguration( + clusterSpec, cluster, defaults); + assertThat(conf.getString("mapred.reduce.tasks"), is("7")); + } + } From 5d6d401ab870e8b55ee89683e6c1f94d62b41c7a Mon Sep 17 00:00:00 2001 From: Andrei Savu Date: Fri, 15 Apr 2011 09:38:49 +0000 Subject: [PATCH 165/216] WHIRR-284. Runurl should only be installed when needed (tomwhite via asavu) git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1092642 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 ++ .../java/org/apache/whirr/actions/ScriptBasedClusterAction.java | 1 - 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index 8bd71253..30528344 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -33,6 +33,8 @@ Trunk (unreleased changes) WHIRR-282. Set number of Hadoop slots based on hardware (tomwhite via asavu) + WHIRR-284. Runurl should only be installed when needed (tomwhite via asavu) + BUG FIXES WHIRR-253. ZooKeeper service should only authorize ingress to ZooKeeper diff --git a/core/src/main/java/org/apache/whirr/actions/ScriptBasedClusterAction.java b/core/src/main/java/org/apache/whirr/actions/ScriptBasedClusterAction.java index 6553d7fe..f4951261 100644 --- a/core/src/main/java/org/apache/whirr/actions/ScriptBasedClusterAction.java +++ b/core/src/main/java/org/apache/whirr/actions/ScriptBasedClusterAction.java @@ -60,7 +60,6 @@ public Cluster execute(ClusterSpec clusterSpec, Cluster cluster) throws IOExcept Cluster newCluster = cluster; for (InstanceTemplate instanceTemplate : clusterSpec.getInstanceTemplates()) { StatementBuilder statementBuilder = new StatementBuilder(); - statementBuilder.addStatement(Statements.call("install_runurl")); ComputeServiceContext computServiceContext = // TODO: shouldn't create lots of these ComputeServiceContextBuilder.build(getComputeServiceContextFactory(), clusterSpec); FirewallManager firewallManager = new FirewallManager(computServiceContext, From 6bd4204af84e4d508f2e81c7e44791cb020981a8 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Fri, 15 Apr 2011 17:22:55 +0000 Subject: [PATCH 166/216] WHIRR-283. Whirr in 5 minutes. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1092769 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 ++ .../confluence/quick-start-guide.confluence | 6 ++++- .../confluence/whirr-in-5-minutes.confluence | 27 +++++++++++++++++++ src/site/site.xml | 3 ++- 4 files changed, 36 insertions(+), 2 deletions(-) create mode 100644 src/site/confluence/whirr-in-5-minutes.confluence diff --git a/CHANGES.txt b/CHANGES.txt index 30528344..0da135c3 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -35,6 +35,8 @@ Trunk (unreleased changes) WHIRR-284. Runurl should only be installed when needed (tomwhite via asavu) + WHIRR-283. Whirr in 5 minutes. (tomwhite) + BUG FIXES WHIRR-253. ZooKeeper service should only authorize ingress to ZooKeeper diff --git a/src/site/confluence/quick-start-guide.confluence b/src/site/confluence/quick-start-guide.confluence index f7a9370d..5dae7f8c 100644 --- a/src/site/confluence/quick-start-guide.confluence +++ b/src/site/confluence/quick-start-guide.confluence @@ -1,6 +1,10 @@ h1. Getting Started with Whirr -The Whirr CLI provides the most convenient way to launch clusters. +The Whirr CLI provides the most convenient way to launch clusters. For the +programmatic interface, see the [javadoc|apidocs/index.html]. + +Also see [Whirr in 5 Minutes|whirr-in-5-minutes] for the condensed instructions +for getting started (with ZooKeeper as the example). h3. Pre-requisites * Java 6 diff --git a/src/site/confluence/whirr-in-5-minutes.confluence b/src/site/confluence/whirr-in-5-minutes.confluence new file mode 100644 index 00000000..faec6527 --- /dev/null +++ b/src/site/confluence/whirr-in-5-minutes.confluence @@ -0,0 +1,27 @@ +h1. Whirr in 5 minutes + +The following commands install Whirr and start a 3 node ZooKeeper cluster on +Amazon EC2 in 5 minutes or less. You need to have Java 6 and an SSH client +already installed. Help on finding your AWS credentials can be found in the +[FAQ|faq#how-do-i-find-my-cloud-credentials]. + +{code} +export AWS_ACCESS_KEY_ID=... +export AWS_SECRET_ACCESS_KEY=... +curl -O http://www.apache.org/dist/incubator/whirr/whirr-0.5.0-incubating/whirr-0.5.0-incubating.tar.gz +tar zxf whirr-0.5.0-incubating.tar.gz; cd whirr-0.5.0-incubating +ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa_whirr +bin/whirr launch-cluster --config recipes/zookeeper-ec2.properties --private-key-file ~/.ssh/id_rsa_whirr +echo "ruok" | nc $(awk '{print $3}' ~/.whirr/zookeeper/instances | head -1) 2181; echo +{code} + +Upon success you should see {{imok}} echoed to the console, indicating that +ZooKeeper is running. + +You can shut down the cluster with + +{code} +bin/whirr destroy-cluster --config recipes/zookeeper-ec2.properties +{code} + +The various options are explained in more detail in the [Quick Start Guide|quick-start-guide]. diff --git a/src/site/site.xml b/src/site/site.xml index 5db69183..1a2f2658 100644 --- a/src/site/site.xml +++ b/src/site/site.xml @@ -66,7 +66,8 @@

    - + + From 7596c4f2db3db6d8bfefbb987e347e4b21b00fef Mon Sep 17 00:00:00 2001 From: Andrei Savu Date: Mon, 18 Apr 2011 19:41:30 +0000 Subject: [PATCH 167/216] WHIRR-279. Create ClusterSpec aware BlobStoreContext factory class (asavu) git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1094708 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 + core/pom.xml | 4 + .../java/org/apache/whirr/ClusterSpec.java | 108 +++++++++++++++--- .../service/BlobStoreContextBuilder.java | 37 ++++++ .../main/resources/whirr-default.properties | 1 + .../org/apache/whirr/ClusterSpecTest.java | 19 +++ pom.xml | 6 + 7 files changed, 160 insertions(+), 17 deletions(-) create mode 100644 core/src/main/java/org/apache/whirr/service/BlobStoreContextBuilder.java diff --git a/CHANGES.txt b/CHANGES.txt index 0da135c3..d9523d8d 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -37,6 +37,8 @@ Trunk (unreleased changes) WHIRR-283. Whirr in 5 minutes. (tomwhite) + WHIRR-279. Create ClusterSpec aware BlobStoreContext factory class (asavu) + BUG FIXES WHIRR-253. ZooKeeper service should only authorize ingress to ZooKeeper diff --git a/core/pom.xml b/core/pom.xml index fc96bfe2..a6709b18 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -61,6 +61,10 @@ org.jclouds.provider cloudservers-uk + + org.jclouds + jclouds-allblobstore + junit junit diff --git a/core/src/main/java/org/apache/whirr/ClusterSpec.java b/core/src/main/java/org/apache/whirr/ClusterSpec.java index ce71d396..9cb5feac 100644 --- a/core/src/main/java/org/apache/whirr/ClusterSpec.java +++ b/core/src/main/java/org/apache/whirr/ClusterSpec.java @@ -25,6 +25,7 @@ import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Objects; import com.google.common.collect.Lists; +import com.google.common.collect.Maps; import com.google.common.collect.Sets; import com.jcraft.jsch.JSch; import com.jcraft.jsch.JSchException; @@ -70,9 +71,19 @@ public String lookup(String key) { } public enum Property { + CLUSTER_NAME(String.class, false, "The name of the cluster " + + "to operate on. E.g. hadoopcluster."), + SERVICE_NAME(String.class, false, "(optional) The name of the " + "service to use. E.g. hadoop."), + LOGIN_USER(String.class, false, "Override the default login user "+ + "used to bootstrap whirr. E.g. ubuntu or myuser:mypass."), + + CLUSTER_USER(String.class, false, "The name of the user that Whirr " + + "will create on all the cluster instances. You have to use " + + "this user to login to nodes."), + INSTANCE_TEMPLATES(String.class, false, "The number of instances " + "to launch for each set of roles. E.g. 1 hadoop-namenode+" + "hadoop-jobtracker, 10 hadoop-datanode+hadoop-tasktracker"), @@ -99,15 +110,19 @@ public enum Property { CREDENTIAL(String.class, false, "The cloud credential."), IDENTITY(String.class, false, "The cloud identity."), - - CLUSTER_NAME(String.class, false, "The name of the cluster " + - "to operate on. E.g. hadoopcluster."), - + PUBLIC_KEY_FILE(String.class, false, "The filename of the public " + "key used to connect to instances."), PRIVATE_KEY_FILE(String.class, false, "The filename of the " + "private RSA key used to connect to instances."), + + BLOBSTORE_PROVIDER(String.class, false, "The blob store provider. " + + "E.g. aws-s3, cloudfiles-us, cloudfiles-uk"), + + BLOBSTORE_IDENTITY(String.class, false, "The blob store identity"), + + BLOBSTORE_CREDENTIAL(String.class, false, "The blob store credential"), IMAGE_ID(String.class, false, "The ID of the image to use for " + "instances. If not specified then a vanilla Linux image is " + @@ -122,21 +137,14 @@ public enum Property { LOCATION_ID(String.class, false, "The location to launch " + "instances in. If not specified then an arbitrary location " + "will be chosen."), - - CLIENT_CIDRS(String.class, true, "A comma-separated list of CIDR" + + + CLIENT_CIDRS(String.class, true, "A comma-separated list of CIDR" + " blocks. E.g. 208.128.0.0/11,108.128.0.0/11"), VERSION(String.class, false, ""), RUN_URL_BASE(String.class, false, "The base URL for forming run " + - "urls from. Change this to host your own set of launch scripts."), - - LOGIN_USER(String.class, false, "Override the default login user "+ - "used to bootstrap whirr. E.g. ubuntu or myuser:mypass."), - - CLUSTER_USER(String.class, false, "The name of the user that Whirr " + - "will create on all the cluster instances. You have to use " + - "this user to login to nodes."); + "urls from. Change this to host your own set of launch scripts."); private Class type; private boolean multipleArguments; @@ -223,6 +231,10 @@ public static ClusterSpec withNoDefaults(Configuration conf) private String identity; private String credential; + private String blobStoreProvider; + private String blobStoreIdentity; + private String blobStoreCredential; + private String privateKey; private File privateKeyFile; private String publicKey; @@ -272,6 +284,10 @@ public ClusterSpec(Configuration userConfig, boolean loadDefaults) setIdentity(getString(Property.IDENTITY)); setCredential(getString(Property.CREDENTIAL)); + setBlobStoreProvider(getString(Property.BLOBSTORE_PROVIDER)); + setBlobStoreIdentity(getString(Property.BLOBSTORE_IDENTITY)); + setBlobStoreCredential(getString(Property.BLOBSTORE_CREDENTIAL)); + checkAndSetKeyPair(); setImageId(getString(Property.IMAGE_ID)); @@ -382,6 +398,46 @@ public String getClusterName() { return clusterName; } + public String getBlobStoreProvider() { + if (blobStoreProvider == null) { + return getDefaultBlobStoreForComputeProvider(); + } + return blobStoreProvider; + } + + /** + * Probably jclouds should provide a similar mechanism + */ + private String getDefaultBlobStoreForComputeProvider() { + Map mappings = Maps.newHashMap(); + + mappings.put("ec2","aws-s3"); + mappings.put("aws-ec2", "aws-s3"); + + mappings.put("cloudservers", "cloudfiles-us"); + mappings.put("cloudservers-us", "cloudfiles-us"); + mappings.put("cloudservers-uk", "cloudfiles-uk"); + + if (!mappings.containsKey(provider)) { + return null; + } + return mappings.get(provider); + } + + public String getBlobStoreIdentity() { + if (blobStoreIdentity == null) { + return identity; + } + return blobStoreIdentity; + } + + public String getBlobStoreCredential() { + if (blobStoreCredential == null) { + return credential; + } + return blobStoreCredential; + } + public String getServiceName() { return serviceName; } @@ -454,6 +510,18 @@ public void setCredential(String credential) { this.credential = credential; } + public void setBlobStoreProvider(String provider) { + blobStoreProvider = provider; + } + + public void setBlobStoreIdentity(String identity) { + blobStoreIdentity = identity; + } + + public void setBlobStoreCredential(String credential) { + blobStoreCredential = credential; + } + public void setClusterName(String clusterName) { this.clusterName = clusterName; } @@ -596,6 +664,9 @@ public boolean equals(Object o) { && Objects.equal(provider, that.provider) && Objects.equal(identity, that.identity) && Objects.equal(credential, that.credential) + && Objects.equal(blobStoreProvider, that.blobStoreProvider) + && Objects.equal(blobStoreIdentity, that.blobStoreIdentity) + && Objects.equal(blobStoreCredential, that.blobStoreCredential) && Objects.equal(clusterName, that.clusterName) && Objects.equal(serviceName, that.serviceName) && Objects.equal(clusterUser, that.clusterUser) @@ -613,9 +684,9 @@ public boolean equals(Object o) { public int hashCode() { return Objects.hashCode(instanceTemplates, maxStartupRetries, provider, - identity, credential, clusterName, serviceName, clusterUser, loginUser, - publicKey, privateKey, imageId, hardwareId, locationId, clientCidrs, - version, runUrlBase); + identity, credential, blobStoreProvider, blobStoreIdentity, blobStoreCredential, + clusterName, serviceName, clusterUser, loginUser, publicKey, privateKey, imageId, + hardwareId, locationId, clientCidrs, version, runUrlBase); } public String toString() { @@ -625,6 +696,9 @@ public String toString() { .add("provider", provider) .add("identity", identity) .add("credential", credential) + .add("blobStoreProvider", blobStoreProvider) + .add("blobStoreCredential", blobStoreCredential) + .add("blobStoreIdentity", blobStoreIdentity) .add("clusterName", clusterName) .add("serviceName", serviceName) .add("clusterUser", clusterUser) diff --git a/core/src/main/java/org/apache/whirr/service/BlobStoreContextBuilder.java b/core/src/main/java/org/apache/whirr/service/BlobStoreContextBuilder.java new file mode 100644 index 00000000..f4095f96 --- /dev/null +++ b/core/src/main/java/org/apache/whirr/service/BlobStoreContextBuilder.java @@ -0,0 +1,37 @@ +/** + * 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 org.apache.whirr.service; + +import org.apache.whirr.ClusterSpec; +import org.jclouds.blobstore.BlobStoreContext; +import org.jclouds.blobstore.BlobStoreContextFactory; + +public class BlobStoreContextBuilder { + + public static BlobStoreContext build(final ClusterSpec spec) { + return build(new BlobStoreContextFactory(), spec); + } + + public static BlobStoreContext build(final BlobStoreContextFactory factory, + final ClusterSpec spec) { + return factory.createContext(spec.getBlobStoreProvider(), + spec.getBlobStoreIdentity(), spec.getBlobStoreCredential()); + } + +} diff --git a/core/src/main/resources/whirr-default.properties b/core/src/main/resources/whirr-default.properties index 270329cc..7f34fb23 100644 --- a/core/src/main/resources/whirr-default.properties +++ b/core/src/main/resources/whirr-default.properties @@ -20,3 +20,4 @@ whirr.version=${version} whirr.max-startup-retries=1 whirr.cluster-user=${sys:user.name} + diff --git a/core/src/test/java/org/apache/whirr/ClusterSpecTest.java b/core/src/test/java/org/apache/whirr/ClusterSpecTest.java index 61893e88..ff8e0510 100644 --- a/core/src/test/java/org/apache/whirr/ClusterSpecTest.java +++ b/core/src/test/java/org/apache/whirr/ClusterSpecTest.java @@ -292,4 +292,23 @@ public void testClusterUserShouldBeCurrentUser() throws Exception { assertThat(spec.getClusterUser(), is(System.getProperty("user.name"))); } + @Test + public void testDefaultBlobStoreforComputeProvider() throws Exception { + for(String pair : new String[]{ + "ec2:aws-s3", + "aws-ec2:aws-s3", + "cloudservers:cloudfiles-us", + "cloudservers-us:cloudfiles-us", + "cloudservers-uk:cloudfiles-uk" + }) { + String[] parts = pair.split(":"); + + Configuration config = new PropertiesConfiguration(); + config.addProperty("whirr.provider", parts[0]); + + ClusterSpec spec = ClusterSpec.withTemporaryKeys(config); + assertThat(spec.getBlobStoreProvider(), is(parts[1])); + } + } + } diff --git a/pom.xml b/pom.xml index 410630d9..099eb30d 100644 --- a/pom.xml +++ b/pom.xml @@ -96,6 +96,12 @@ cloudservers-uk ${jclouds.version} + + + org.jclouds + jclouds-allblobstore + ${jclouds.version} + junit From ac87c5b9226288a4a571bc064ab6e3ace2289178 Mon Sep 17 00:00:00 2001 From: Andrei Savu Date: Mon, 18 Apr 2011 20:02:02 +0000 Subject: [PATCH 168/216] WHIRR-280. Create a blob cache that could be used for storing local files (asavu) git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1094718 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 3 + core/pom.xml | 18 ++ .../java/org/apache/whirr/ClusterSpec.java | 17 +- .../service/ClusterActionHandlerSupport.java | 2 +- .../service/jclouds/SaveHttpResponseTo.java | 48 ++++ .../java/org/apache/whirr/util/BlobCache.java | 213 ++++++++++++++++++ .../whirr/util/integration/BlobCacheTest.java | 124 ++++++++++ .../test/resources/whirr-core-test.properties | 21 ++ 8 files changed, 444 insertions(+), 2 deletions(-) create mode 100644 core/src/main/java/org/apache/whirr/service/jclouds/SaveHttpResponseTo.java create mode 100644 core/src/main/java/org/apache/whirr/util/BlobCache.java create mode 100644 core/src/test/java/org/apache/whirr/util/integration/BlobCacheTest.java create mode 100644 core/src/test/resources/whirr-core-test.properties diff --git a/CHANGES.txt b/CHANGES.txt index d9523d8d..a46c11d8 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -39,6 +39,9 @@ Trunk (unreleased changes) WHIRR-279. Create ClusterSpec aware BlobStoreContext factory class (asavu) + WHIRR-280. Create a blob cache that could be used for storing local + files (asavu) + BUG FIXES WHIRR-253. ZooKeeper service should only authorize ingress to ZooKeeper diff --git a/core/pom.xml b/core/pom.xml index a6709b18..56aef243 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -102,6 +102,24 @@ com.jcraft jsch + + org.apache.httpcomponents + httpcore + 4.1 + test + + + org.apache.httpcomponents + httpmime + 4.1.1 + test + + + org.apache.httpcomponents + httpclient + 4.1.1 + test + log4j log4j diff --git a/core/src/main/java/org/apache/whirr/ClusterSpec.java b/core/src/main/java/org/apache/whirr/ClusterSpec.java index 9cb5feac..6793e47b 100644 --- a/core/src/main/java/org/apache/whirr/ClusterSpec.java +++ b/core/src/main/java/org/apache/whirr/ClusterSpec.java @@ -123,6 +123,8 @@ public enum Property { BLOBSTORE_IDENTITY(String.class, false, "The blob store identity"), BLOBSTORE_CREDENTIAL(String.class, false, "The blob store credential"), + + BLOBSTORE_LOCATION_ID(String.class, false, "The blob store location ID"), IMAGE_ID(String.class, false, "The ID of the image to use for " + "instances. If not specified then a vanilla Linux image is " + @@ -240,6 +242,8 @@ public static ClusterSpec withNoDefaults(Configuration conf) private String publicKey; private String locationId; + private String blobStoreLocationId; + private String imageId; private String hardwareId; @@ -295,6 +299,7 @@ public ClusterSpec(Configuration userConfig, boolean loadDefaults) setHardwareMinRam(getInt(Property.HARDWARE_MIN_RAM, 1024)); setLocationId(getString(Property.LOCATION_ID)); + setBlobStoreLocationId(getString(Property.BLOBSTORE_LOCATION_ID)); setClientCidrs(getList(Property.CLIENT_CIDRS)); setVersion(getString(Property.VERSION)); @@ -438,6 +443,10 @@ public String getBlobStoreCredential() { return blobStoreCredential; } + public String getBlobStoreLocationId() { + return blobStoreLocationId; + } + public String getServiceName() { return serviceName; } @@ -522,6 +531,10 @@ public void setBlobStoreCredential(String credential) { blobStoreCredential = credential; } + public void setBlobStoreLocationId(String locationId) { + blobStoreLocationId = locationId; + } + public void setClusterName(String clusterName) { this.clusterName = clusterName; } @@ -675,6 +688,7 @@ public boolean equals(Object o) { && Objects.equal(hardwareId, that.hardwareId) && Objects.equal(hardwareMinRam, that.hardwareMinRam) && Objects.equal(locationId, that.locationId) + && Objects.equal(blobStoreLocationId, that.blobStoreLocationId) && Objects.equal(clientCidrs, that.clientCidrs) && Objects.equal(version, that.version) ; @@ -686,7 +700,7 @@ public int hashCode() { return Objects.hashCode(instanceTemplates, maxStartupRetries, provider, identity, credential, blobStoreProvider, blobStoreIdentity, blobStoreCredential, clusterName, serviceName, clusterUser, loginUser, publicKey, privateKey, imageId, - hardwareId, locationId, clientCidrs, version, runUrlBase); + hardwareId, locationId, blobStoreLocationId, clientCidrs, version, runUrlBase); } public String toString() { @@ -709,6 +723,7 @@ public String toString() { .add("instanceSizeId", hardwareId) .add("instanceMinRam", hardwareMinRam) .add("locationId", locationId) + .add("blobStoreLocationId", blobStoreLocationId) .add("clientCidrs", clientCidrs) .add("version", version) .toString(); diff --git a/core/src/main/java/org/apache/whirr/service/ClusterActionHandlerSupport.java b/core/src/main/java/org/apache/whirr/service/ClusterActionHandlerSupport.java index fdfdb97a..0d9c6ddc 100644 --- a/core/src/main/java/org/apache/whirr/service/ClusterActionHandlerSupport.java +++ b/core/src/main/java/org/apache/whirr/service/ClusterActionHandlerSupport.java @@ -111,7 +111,7 @@ protected Configuration getConfiguration(ClusterSpec clusterSpec, } catch(ConfigurationException e) { throw new IOException("Error loading " + defaultsPropertiesFile, e); } - } + } /** * A convenience method for adding a {@link RunUrlStatement} to a diff --git a/core/src/main/java/org/apache/whirr/service/jclouds/SaveHttpResponseTo.java b/core/src/main/java/org/apache/whirr/service/jclouds/SaveHttpResponseTo.java new file mode 100644 index 00000000..bbe1cef4 --- /dev/null +++ b/core/src/main/java/org/apache/whirr/service/jclouds/SaveHttpResponseTo.java @@ -0,0 +1,48 @@ +/** + * 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 org.apache.whirr.service.jclouds; + +import com.google.common.base.Function; +import com.google.common.base.Joiner; +import com.google.common.collect.Iterables; +import com.google.common.collect.Multimap; +import org.jclouds.scriptbuilder.domain.InterpretableStatement; + +import java.net.URI; +import java.util.Map; + +/** + * This class is an improved version of the class already existing in jclouds + */ +public class SaveHttpResponseTo extends InterpretableStatement { + public SaveHttpResponseTo(String dir, String file, String method, URI endpoint, Multimap headers) { + super(String.format("({md} %s && {cd} %s && [ ! -f %s ] && " + + "curl -C - -s -q -L --connect-timeout 10 --max-time 600 -X %s -s --retry 20 %s %s >%s)\n", dir, dir, file, method, Joiner.on(' ') + .join(Iterables.transform(headers.entries(), new Function, String>() { + + @Override + public String apply(Map.Entry from) { + return String.format("-H \"%s: %s\"", from.getKey(), from.getValue()); + } + + })), endpoint.toASCIIString(), file)); + } + +} + diff --git a/core/src/main/java/org/apache/whirr/util/BlobCache.java b/core/src/main/java/org/apache/whirr/util/BlobCache.java new file mode 100644 index 00000000..7e5fae8d --- /dev/null +++ b/core/src/main/java/org/apache/whirr/util/BlobCache.java @@ -0,0 +1,213 @@ +/** + * 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 org.apache.whirr.util; + +import com.google.common.collect.Maps; +import org.apache.commons.lang.RandomStringUtils; +import org.apache.whirr.ClusterSpec; +import org.apache.whirr.service.BlobStoreContextBuilder; +import org.apache.whirr.service.ComputeServiceContextBuilder; +import org.apache.whirr.service.jclouds.SaveHttpResponseTo; +import org.jclouds.blobstore.BlobStore; +import org.jclouds.blobstore.BlobStoreContext; +import org.jclouds.blobstore.domain.Blob; +import org.jclouds.compute.ComputeService; +import org.jclouds.compute.ComputeServiceContext; +import org.jclouds.domain.Location; +import org.jclouds.http.HttpRequest; +import org.jclouds.scriptbuilder.domain.Statement; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.Map; +import java.util.Set; + +public class BlobCache { + + private static final Logger LOG = LoggerFactory.getLogger(BlobCache.class); + + private static Map instances = Maps.newHashMap(); + + static { + /* Ensure that all created containers are removed when the JVM stops */ + Runtime.getRuntime().addShutdownHook(new Thread() { + @Override + public void run() { + BlobCache.dropAndCloseAll(); + } + }); + } + + public synchronized static BlobCache getInstance(ClusterSpec spec) throws IOException { + if (instances.containsKey(spec) == false) { + instances.put(spec, new BlobCache(spec)); + } + return instances.get(spec); + } + + public synchronized static void dropAndCloseAll() { + for(BlobCache instance : instances.values()) { + instance.dropAndClose(); + } + instances.clear(); + } + + BlobStoreContext context = null; + String container = null; + Location defaultLocation = null; + + private BlobCache(ClusterSpec spec) throws IOException { + context = BlobStoreContextBuilder.build(spec); + updateDefaultLocation(spec); + } + + public Location getLocation() { + return defaultLocation; + } + + private void updateDefaultLocation(ClusterSpec spec) throws IOException { + if (spec.getBlobStoreLocationId() != null) { + /* find the location with the given Id */ + for(Location loc : context.getBlobStore().listAssignableLocations()) { + if (loc.getId().equals(spec.getBlobStoreLocationId())) { + defaultLocation = loc; + break; + } + } + if (defaultLocation == null) { + LOG.warn("No blob store location found with this ID '{}'. " + + "Using default location.", spec.getBlobStoreLocationId()); + } + } else if (spec.getLocationId() != null) { + /* find the closest location to the compute nodes */ + ComputeServiceContext compute = ComputeServiceContextBuilder.build(spec); + try { + Set computeIsoCodes = null; + for(Location loc : compute.getComputeService().listAssignableLocations()) { + if (loc.getId().equals(spec.getLocationId())) { + computeIsoCodes = loc.getIso3166Codes(); + break; + } + } + if (computeIsoCodes == null) { + LOG.warn("Invalid compute location ID '{}'. " + + "Using default blob store location.", spec.getLocationId()); + } else { + for (Location loc : context.getBlobStore().listAssignableLocations()) { + if (containsAny(loc.getIso3166Codes(), computeIsoCodes)) { + defaultLocation = loc; + break; + } + } + } + } finally { + compute.close(); + } + } + } + + private boolean containsAny(Set set1, Set set2) { + for (T el : set1) { + if (set2.contains(el)) { + return true; + } + } + return false; + } + + public synchronized void putIfAbsent(String localUri) throws URISyntaxException, IOException { + putIfAbsent(new URI(localUri)); + } + + public synchronized void putIfAbsent(URI uri) throws IOException { + try { + putIfAbsent(new File(uri)); + } catch(FileNotFoundException e) { + throw new IOException(e); + } + } + + public synchronized void putIfAbsent(File file) throws FileNotFoundException { + putIfAbsent(file.getName(), new FileInputStream(file), file.length()); + } + + public synchronized void putIfAbsent(String name, InputStream in, long contentLength) { + allocateContainer(); + + BlobStore store = context.getBlobStore(); + if (!store.blobExists(container, name)) { + LOG.info("Uploading '{}' to '{}' blob cache.", name, container); + + Blob blob = context.getBlobStore().newBlob(name); + blob.setPayload(in); + blob.getMetadata().getContentMetadata().setContentLength(contentLength); + store.putBlob(container, blob); + } + } + + public synchronized Statement getAsSaveToStatement(String target, String name) throws IOException { + HttpRequest req = getSignedRequest(name); + return new SaveHttpResponseTo(target, name, req.getMethod(), req.getEndpoint(), req.getHeaders()); + } + + public synchronized Statement getAsSaveToStatement(String target, URI uri) throws IOException { + return getAsSaveToStatement(target, new File(uri).getName()); + } + + public synchronized HttpRequest getSignedRequest(String blobName) throws IOException { + checkExistsBlob(blobName); + return context.getSigner().signGetBlob(container, blobName); + } + + private void checkExistsBlob(String name) throws IOException { + if (container == null || !context.getBlobStore().blobExists(container, name)) { + throw new IOException("Blob not found: " + container + ":" + name); + } + } + + private void allocateContainer() { + if (container == null) { + container = generateRandomContainerName(); + } + } + + private String generateRandomContainerName() { + String candidate; + do { + candidate = RandomStringUtils.randomAlphanumeric(12).toLowerCase(); + } while(!context.getBlobStore().createContainerInLocation(defaultLocation, candidate)); + LOG.info("Created blob cache container '{}' located in '{}'", candidate, defaultLocation); + return candidate; + } + + private void dropAndClose() { + if (container != null) { + LOG.info("Removing blob cache '{}'", container); + context.getBlobStore().deleteContainer(container); + } + context.close(); + } +} diff --git a/core/src/test/java/org/apache/whirr/util/integration/BlobCacheTest.java b/core/src/test/java/org/apache/whirr/util/integration/BlobCacheTest.java new file mode 100644 index 00000000..19dab83b --- /dev/null +++ b/core/src/test/java/org/apache/whirr/util/integration/BlobCacheTest.java @@ -0,0 +1,124 @@ +/** + * 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 org.apache.whirr.util.integration; + +import com.google.common.io.Files; +import com.jcraft.jsch.JSchException; +import org.apache.commons.configuration.CompositeConfiguration; +import org.apache.commons.configuration.Configuration; +import org.apache.commons.configuration.ConfigurationException; +import org.apache.commons.configuration.PropertiesConfiguration; +import org.apache.http.client.HttpClient; +import org.apache.http.client.ResponseHandler; +import org.apache.http.client.methods.HttpGet; +import org.apache.http.impl.client.BasicResponseHandler; +import org.apache.http.impl.client.DefaultHttpClient; +import org.apache.whirr.ClusterSpec; +import org.apache.whirr.util.BlobCache; +import org.jclouds.http.HttpRequest; +import org.jclouds.scriptbuilder.domain.OsFamily; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.Charset; +import java.util.Collection; +import java.util.Map; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; + +public class BlobCacheTest { + + private static final Logger LOG = LoggerFactory.getLogger(BlobCacheTest.class); + + private Configuration getTestConfiguration() throws ConfigurationException { + return new PropertiesConfiguration("whirr-core-test.properties"); + } + + private ClusterSpec getTestClusterSpec() throws Exception { + return ClusterSpec.withTemporaryKeys(getTestConfiguration()); + } + + @Test + public void testUploadFileToBlobCache() throws Exception { + String expected = "dummy content"; + File tempFile = createTemporaryFile(expected); + + ClusterSpec spec = getTestClusterSpec(); + BlobCache cache = BlobCache.getInstance(spec); + + try { + cache.putIfAbsent(tempFile); + + HttpRequest req = cache.getSignedRequest(tempFile.getName()); + assertThat(readContent(req), is(expected)); + + /* render download statement for visual test inspection */ + LOG.info(cache.getAsSaveToStatement("/tmp", + tempFile.getName()).render(OsFamily.UNIX)); + + } finally { + BlobCache.dropAndCloseAll(); + } + } + + @Test + public void testSelectBestLocation() throws Exception { + ClusterSpec spec = getTestClusterSpec(); + if (!spec.getProvider().equals("aws") && !spec.getProvider().equals("aws-ec2")) { + return; // this test can be executed only on amazon but the internal + // location selection mechanism should work for any cloud provider + } + spec.setLocationId("eu-west-1"); + + BlobCache cache = BlobCache.getInstance(spec); + assertThat(cache.getLocation().getId(), is("EU")); + } + + private String readContent(HttpRequest req) throws IOException { + HttpClient client = new DefaultHttpClient(); + try { + HttpGet get = new HttpGet(req.getEndpoint()); + + Map> headers = req.getHeaders().asMap(); + for(String key : headers.keySet()) { + for(String value : headers.get(key)) { + get.addHeader(key, value); + } + } + + ResponseHandler handler = new BasicResponseHandler(); + return client.execute(get, handler); + + } finally { + client.getConnectionManager().shutdown(); + } + } + + private File createTemporaryFile(String content) throws IOException { + File tempFile = File.createTempFile("whirr", ".txt"); + tempFile.deleteOnExit(); + Files.write(content, tempFile, Charset.defaultCharset()); + return tempFile; + } + +} diff --git a/core/src/test/resources/whirr-core-test.properties b/core/src/test/resources/whirr-core-test.properties new file mode 100644 index 00000000..b243f58b --- /dev/null +++ b/core/src/test/resources/whirr-core-test.properties @@ -0,0 +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. +# +whirr.cluster-name=coretest +whirr.provider=${sys:whirr.test.provider} +whirr.identity=${sys:whirr.test.identity} +whirr.credential=${sys:whirr.test.credential} From a7ef7ee83ec8980f1fee413a67ea3aaa151c8d30 Mon Sep 17 00:00:00 2001 From: Andrei Savu Date: Mon, 18 Apr 2011 20:41:57 +0000 Subject: [PATCH 169/216] WHIRR-220. Support local tarball upload (asavu) git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1094736 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 ++ .../service/ClusterActionHandlerSupport.java | 29 +++++++++++++++++ .../CassandraClusterActionHandler.java | 24 +++++++------- .../elasticsearch/ElasticSearchHandler.java | 23 +++++++------ .../functions/configure_elasticsearch.sh | 2 +- .../hadoop/HadoopClusterActionHandler.java | 15 ++++++--- .../BasicServerClusterActionHandler.java | 28 +++++++++------- .../HBaseMasterClusterActionHandler.java | 30 +++++++++-------- ...HBaseRegionServerClusterActionHandler.java | 32 +++++++++++-------- .../VoldemortClusterActionHandler.java | 4 +-- .../ZooKeeperClusterActionHandler.java | 5 ++- 11 files changed, 122 insertions(+), 72 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index a46c11d8..2635423b 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -10,6 +10,8 @@ Trunk (unreleased changes) WHIRR-237. Add Voldemort as a service. (Kirk True via asavu) + WHIRR-220. Support local tarball upload (asavu) + IMPROVEMENTS WHIRR-262. Services should not have to do reverse DNS lookups. (tomwhite) diff --git a/core/src/main/java/org/apache/whirr/service/ClusterActionHandlerSupport.java b/core/src/main/java/org/apache/whirr/service/ClusterActionHandlerSupport.java index 0d9c6ddc..1c229a57 100644 --- a/core/src/main/java/org/apache/whirr/service/ClusterActionHandlerSupport.java +++ b/core/src/main/java/org/apache/whirr/service/ClusterActionHandlerSupport.java @@ -18,7 +18,10 @@ package org.apache.whirr.service; +import java.io.File; import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; import org.apache.commons.configuration.CompositeConfiguration; import org.apache.commons.configuration.Configuration; @@ -26,6 +29,7 @@ import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.jclouds.RunUrlStatement; +import org.apache.whirr.util.BlobCache; import org.jclouds.scriptbuilder.domain.Statement; /** @@ -128,4 +132,29 @@ public static void addRunUrl(ClusterActionEvent event, String runUrl, public static void addStatement(ClusterActionEvent event, Statement statement) { event.getStatementBuilder().addStatement(statement); } + + /** + * Prepare the file url for the remote machine. For public urls this function + * does nothing. For local urls it uploads the files to a temporary blob cache. + */ + public String prepareRemoteFileUrl(ClusterActionEvent event, String rawUrl) + throws IOException { + if (rawUrl != null && rawUrl.startsWith("file://")) { + try { + URI uri = new URI(rawUrl); + + BlobCache cache = BlobCache.getInstance(event.getClusterSpec()); + cache.putIfAbsent(uri); + + String basePath = "/tmp/whirr/cache/files/"; + addStatement(event, cache.getAsSaveToStatement(basePath, uri)); + return "file://" + basePath + (new File(uri)).getName(); + + } catch (URISyntaxException e) { + throw new IOException(e); + } + } + return rawUrl; + } + } diff --git a/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraClusterActionHandler.java b/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraClusterActionHandler.java index b8b7916c..24fa48a1 100644 --- a/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraClusterActionHandler.java +++ b/services/cassandra/src/main/java/org/apache/whirr/service/cassandra/CassandraClusterActionHandler.java @@ -18,6 +18,8 @@ package org.apache.whirr.service.cassandra; +import static org.apache.whirr.RolePredicates.role; +import static org.apache.whirr.service.FirewallManager.Rule; import static org.jclouds.scriptbuilder.domain.Statements.call; import com.google.common.base.Function; @@ -34,9 +36,6 @@ import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.ClusterActionEvent; import org.apache.whirr.service.ClusterActionHandlerSupport; -import org.apache.whirr.service.ComputeServiceContextBuilder; -import org.apache.whirr.service.jclouds.FirewallSettings; -import org.jclouds.compute.ComputeServiceContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -62,7 +61,7 @@ protected void beforeBootstrap(ClusterActionEvent event) throws IOException { addStatement(event, call("install_java")); addStatement(event, call("install_tarball")); Configuration config = event.getClusterSpec().getConfiguration(); - String tarball = config.getString(BIN_TARBALL, null); + String tarball = prepareRemoteFileUrl(event, config.getString(BIN_TARBALL, null)); String major = config.getString(MAJOR_VERSION, null); if (tarball != null && major != null) { addStatement(event, call("install_cassandra", major, tarball)); @@ -76,14 +75,13 @@ protected void beforeConfigure(ClusterActionEvent event) throws IOException, InterruptedException { ClusterSpec clusterSpec = event.getClusterSpec(); Cluster cluster = event.getCluster(); - LOG.info("Authorizing firewall"); - ComputeServiceContext computeServiceContext = - ComputeServiceContextBuilder.build(clusterSpec); - FirewallSettings.authorizeIngress(computeServiceContext, - cluster.getInstances(), clusterSpec, CLIENT_PORT); - FirewallSettings.authorizeIngress(computeServiceContext, - cluster.getInstances(), clusterSpec, JMX_PORT); - + + event.getFirewallManager().addRule( + Rule.create() + .destination(cluster.getInstancesMatching(role(CASSANDRA_ROLE))) + .ports(CLIENT_PORT, JMX_PORT) + ); + List seeds = getSeeds(cluster.getInstances()); String servers = Joiner.on(' ').join(getPrivateIps(seeds)); addStatement(event, call("configure_cassandra", "-c", @@ -105,7 +103,7 @@ public String apply(Instance instance) { * selection method. Right now it picks 20% of the nodes as seeds, or a * minimum of one node if it is a small cluster. * - * @param nodes + * @param instances * all nodes in cluster * @return list of seeds */ diff --git a/services/elasticsearch/src/main/java/org/apache/whirr/service/elasticsearch/ElasticSearchHandler.java b/services/elasticsearch/src/main/java/org/apache/whirr/service/elasticsearch/ElasticSearchHandler.java index d76631d4..3b7bec54 100644 --- a/services/elasticsearch/src/main/java/org/apache/whirr/service/elasticsearch/ElasticSearchHandler.java +++ b/services/elasticsearch/src/main/java/org/apache/whirr/service/elasticsearch/ElasticSearchHandler.java @@ -19,6 +19,7 @@ package org.apache.whirr.service.elasticsearch; import static org.apache.whirr.RolePredicates.role; +import static org.apache.whirr.service.FirewallManager.Rule; import static org.jclouds.scriptbuilder.domain.Statements.call; import java.io.IOException; @@ -28,9 +29,6 @@ import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.ClusterActionEvent; import org.apache.whirr.service.ClusterActionHandlerSupport; -import org.apache.whirr.service.ComputeServiceContextBuilder; -import org.apache.whirr.service.jclouds.FirewallSettings; -import org.jclouds.compute.ComputeServiceContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -49,13 +47,15 @@ public String getRole() { } @Override - protected void beforeBootstrap(ClusterActionEvent event) { + protected void beforeBootstrap(ClusterActionEvent event) throws IOException { ClusterSpec spec = event.getClusterSpec(); Configuration config = spec.getConfiguration(); addStatement(event, call("install_java")); - addStatement(event, call("install_elasticsearch", - config.getString("whirr.elasticsearch.tarball.url", ""))); + + String tarurl = prepareRemoteFileUrl(event, + config.getString("whirr.elasticsearch.tarball.url", "")); + addStatement(event, call("install_elasticsearch", tarurl)); } @Override @@ -63,12 +63,11 @@ protected void beforeConfigure(ClusterActionEvent event) throws IOException { ClusterSpec spec = event.getClusterSpec(); Cluster cluster = event.getCluster(); - LOG.info("Authorizing firewall port {}", HTTP_CLIENT_PORT); - ComputeServiceContext computeServiceContext = - ComputeServiceContextBuilder.build(spec); - - FirewallSettings.authorizeIngress(computeServiceContext, - cluster.getInstancesMatching(role(ROLE)), spec, HTTP_CLIENT_PORT); + event.getFirewallManager().addRule( + Rule.create() + .destination(cluster.getInstancesMatching(role(ROLE))) + .port(HTTP_CLIENT_PORT) + ); Configuration config = ElasticSearchConfigurationBuilder.buildConfig(spec, cluster); addStatement(event, diff --git a/services/elasticsearch/src/main/resources/functions/configure_elasticsearch.sh b/services/elasticsearch/src/main/resources/functions/configure_elasticsearch.sh index 5fb01812..c7fe222e 100644 --- a/services/elasticsearch/src/main/resources/functions/configure_elasticsearch.sh +++ b/services/elasticsearch/src/main/resources/functions/configure_elasticsearch.sh @@ -15,7 +15,7 @@ # limitations under the License. # function configure_elasticsearch() { - cd /usr/local/elasticsearch-0.15.2/ + cd /usr/local/elasticsearch-* for plugin in $@ do diff --git a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopClusterActionHandler.java b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopClusterActionHandler.java index a89d7e48..9c7a55ff 100644 --- a/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopClusterActionHandler.java +++ b/services/hadoop/src/main/java/org/apache/whirr/service/hadoop/HadoopClusterActionHandler.java @@ -44,14 +44,21 @@ protected Configuration getConfiguration( @Override protected void beforeBootstrap(ClusterActionEvent event) throws IOException { ClusterSpec clusterSpec = event.getClusterSpec(); + Configuration conf = getConfiguration(clusterSpec); addStatement(event, call("configure_hostnames", "-c", clusterSpec.getProvider())); - String hadoopInstallFunction = conf.getString( - "whirr.hadoop-install-function", "install_hadoop"); + addStatement(event, call("install_java")); addStatement(event, call("install_tarball")); - String tarball = conf.getString("whirr.hadoop.tarball.url"); - addStatement(event, call(hadoopInstallFunction, "-c", clusterSpec.getProvider(), + + String hadoopInstallFunction = conf.getString( + "whirr.hadoop-install-function", "install_hadoop"); + + String tarball = prepareRemoteFileUrl(event, + conf.getString("whirr.hadoop.tarball.url")); + + addStatement(event, call(hadoopInstallFunction, + "-c", clusterSpec.getProvider(), "-u", tarball)); } } diff --git a/services/hbase/src/main/java/org/apache/whirr/service/hbase/BasicServerClusterActionHandler.java b/services/hbase/src/main/java/org/apache/whirr/service/hbase/BasicServerClusterActionHandler.java index bdce74d5..8801c3cf 100644 --- a/services/hbase/src/main/java/org/apache/whirr/service/hbase/BasicServerClusterActionHandler.java +++ b/services/hbase/src/main/java/org/apache/whirr/service/hbase/BasicServerClusterActionHandler.java @@ -19,6 +19,7 @@ package org.apache.whirr.service.hbase; import static org.apache.whirr.RolePredicates.role; +import static org.apache.whirr.service.FirewallManager.Rule; import static org.jclouds.scriptbuilder.domain.Statements.call; import java.io.IOException; @@ -27,10 +28,7 @@ import org.apache.whirr.Cluster; import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.ClusterActionEvent; -import org.apache.whirr.service.ComputeServiceContextBuilder; -import org.apache.whirr.service.jclouds.FirewallSettings; import org.apache.whirr.service.zookeeper.ZooKeeperCluster; -import org.jclouds.compute.ComputeServiceContext; /** * Provides a base class for servers like REST or Avro. @@ -54,15 +52,19 @@ public String getRole() { @Override protected void beforeBootstrap(ClusterActionEvent event) throws IOException { - ClusterSpec clusterSpec = event.getClusterSpec(); + ClusterSpec clusterSpec = event.getClusterSpec(); + addStatement(event, call("configure_hostnames", HBaseConstants.PARAM_PROVIDER, clusterSpec.getProvider())); addStatement(event, call("install_java")); addStatement(event, call("install_tarball")); + String hbaseInstallFunction = getConfiguration(clusterSpec).getString( HBaseConstants.KEY_INSTALL_FUNCTION, HBaseConstants.FUNCTION_INSTALL); - String tarurl = getConfiguration(clusterSpec).getString( - HBaseConstants.KEY_TARBALL_URL); + + String tarurl = prepareRemoteFileUrl(event, + getConfiguration(clusterSpec).getString(HBaseConstants.KEY_TARBALL_URL)); + addStatement(event, call(hbaseInstallFunction, HBaseConstants.PARAM_PROVIDER, clusterSpec.getProvider(), HBaseConstants.PARAM_TARBALL_URL, tarurl)); @@ -82,18 +84,20 @@ protected void beforeConfigure(ClusterActionEvent event) role(HBaseMasterClusterActionHandler.ROLE)); InetAddress masterPublicAddress = instance.getPublicAddress(); - ComputeServiceContext computeServiceContext = - ComputeServiceContextBuilder.build(clusterSpec); - FirewallSettings.authorizeIngress(computeServiceContext, instance, - clusterSpec, port); + event.getFirewallManager().addRule( + Rule.create().destination(instance).port(port) + ); String hbaseConfigureFunction = getConfiguration(clusterSpec).getString( HBaseConstants.KEY_CONFIGURE_FUNCTION, HBaseConstants.FUNCTION_POST_CONFIGURE); + String master = masterPublicAddress.getHostName(); String quorum = ZooKeeperCluster.getHosts(cluster); - String tarurl = getConfiguration(clusterSpec).getString( - HBaseConstants.KEY_TARBALL_URL); + + String tarurl = prepareRemoteFileUrl(event, + getConfiguration(clusterSpec).getString(HBaseConstants.KEY_TARBALL_URL)); + addStatement(event, call(hbaseConfigureFunction, role, HBaseConstants.PARAM_MASTER, master, HBaseConstants.PARAM_QUORUM, quorum, diff --git a/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseMasterClusterActionHandler.java b/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseMasterClusterActionHandler.java index ac2ba44f..e58b2d6f 100644 --- a/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseMasterClusterActionHandler.java +++ b/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseMasterClusterActionHandler.java @@ -19,6 +19,7 @@ package org.apache.whirr.service.hbase; import static org.apache.whirr.RolePredicates.role; +import static org.apache.whirr.service.FirewallManager.Rule; import static org.jclouds.scriptbuilder.domain.Statements.call; import com.google.common.base.Charsets; @@ -35,11 +36,8 @@ import org.apache.whirr.Cluster.Instance; import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.ClusterActionEvent; -import org.apache.whirr.service.ComputeServiceContextBuilder; import org.apache.whirr.service.hadoop.HadoopProxy; -import org.apache.whirr.service.jclouds.FirewallSettings; import org.apache.whirr.service.zookeeper.ZooKeeperCluster; -import org.jclouds.compute.ComputeServiceContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -61,14 +59,18 @@ public String getRole() { @Override protected void beforeBootstrap(ClusterActionEvent event) throws IOException { ClusterSpec clusterSpec = event.getClusterSpec(); + addStatement(event, call("configure_hostnames", HBaseConstants.PARAM_PROVIDER, clusterSpec.getProvider())); addStatement(event, call("install_java")); addStatement(event, call("install_tarball")); + String hbaseInstallFunction = getConfiguration(clusterSpec).getString( HBaseConstants.KEY_INSTALL_FUNCTION, HBaseConstants.FUNCTION_INSTALL); - String tarurl = getConfiguration(clusterSpec).getString( - HBaseConstants.KEY_TARBALL_URL); + + String tarurl = prepareRemoteFileUrl(event, + getConfiguration(clusterSpec).getString(HBaseConstants.KEY_TARBALL_URL)); + addStatement(event, call(hbaseInstallFunction, HBaseConstants.PARAM_PROVIDER, clusterSpec.getProvider(), HBaseConstants.PARAM_TARBALL_URL, tarurl)); @@ -83,19 +85,21 @@ protected void beforeConfigure(ClusterActionEvent event) throws IOException, Int Instance instance = cluster.getInstanceMatching(role(ROLE)); InetAddress masterPublicAddress = instance.getPublicAddress(); - ComputeServiceContext computeServiceContext = - ComputeServiceContextBuilder.build(clusterSpec); - FirewallSettings.authorizeIngress(computeServiceContext, instance, clusterSpec, - MASTER_WEB_UI_PORT); - FirewallSettings.authorizeIngress(computeServiceContext, instance, clusterSpec, - MASTER_PORT); + event.getFirewallManager().addRules( + Rule.create() + .destination(instance) + .ports(MASTER_WEB_UI_PORT, MASTER_PORT) + ); String hbaseConfigureFunction = getConfiguration(clusterSpec).getString( HBaseConstants.KEY_CONFIGURE_FUNCTION, HBaseConstants.FUNCTION_POST_CONFIGURE); + String master = masterPublicAddress.getHostName(); String quorum = ZooKeeperCluster.getHosts(cluster); - String tarurl = getConfiguration(clusterSpec).getString( - HBaseConstants.KEY_TARBALL_URL); + + String tarurl = prepareRemoteFileUrl(event, + getConfiguration(clusterSpec).getString(HBaseConstants.KEY_TARBALL_URL)); + addStatement(event, call(hbaseConfigureFunction, ROLE, HBaseConstants.PARAM_MASTER, master, HBaseConstants.PARAM_QUORUM, quorum, diff --git a/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseRegionServerClusterActionHandler.java b/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseRegionServerClusterActionHandler.java index e2b0acf9..6b267f6c 100644 --- a/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseRegionServerClusterActionHandler.java +++ b/services/hbase/src/main/java/org/apache/whirr/service/hbase/HBaseRegionServerClusterActionHandler.java @@ -19,6 +19,7 @@ package org.apache.whirr.service.hbase; import static org.apache.whirr.RolePredicates.role; +import static org.apache.whirr.service.FirewallManager.Rule; import static org.jclouds.scriptbuilder.domain.Statements.call; import java.io.IOException; @@ -28,10 +29,7 @@ import org.apache.whirr.Cluster.Instance; import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.ClusterActionEvent; -import org.apache.whirr.service.ComputeServiceContextBuilder; -import org.apache.whirr.service.jclouds.FirewallSettings; import org.apache.whirr.service.zookeeper.ZooKeeperCluster; -import org.jclouds.compute.ComputeServiceContext; public class HBaseRegionServerClusterActionHandler extends HBaseClusterActionHandler { @@ -47,15 +45,19 @@ public String getRole() { @Override protected void beforeBootstrap(ClusterActionEvent event) throws IOException { - ClusterSpec clusterSpec = event.getClusterSpec(); + ClusterSpec clusterSpec = event.getClusterSpec(); + addStatement(event, call("configure_hostnames", HBaseConstants.PARAM_PROVIDER, clusterSpec.getProvider())); addStatement(event, call("install_java")); addStatement(event, call("install_tarball")); + String hbaseInstallFunction = getConfiguration(clusterSpec).getString( HBaseConstants.KEY_INSTALL_FUNCTION, HBaseConstants.FUNCTION_INSTALL); - String tarurl = getConfiguration(clusterSpec).getString( - HBaseConstants.KEY_TARBALL_URL); + + String tarurl = prepareRemoteFileUrl(event, + getConfiguration(clusterSpec).getString(HBaseConstants.KEY_TARBALL_URL)); + addStatement(event, call(hbaseInstallFunction, HBaseConstants.PARAM_PROVIDER, clusterSpec.getProvider(), HBaseConstants.PARAM_TARBALL_URL, tarurl)); @@ -71,20 +73,22 @@ protected void beforeConfigure(ClusterActionEvent event) role(HBaseMasterClusterActionHandler.ROLE)); InetAddress masterPublicAddress = instance.getPublicAddress(); - ComputeServiceContext computeServiceContext = - ComputeServiceContextBuilder.build(clusterSpec); - FirewallSettings.authorizeIngress(computeServiceContext, instance, clusterSpec, - REGIONSERVER_WEB_UI_PORT); - FirewallSettings.authorizeIngress(computeServiceContext, instance, clusterSpec, - REGIONSERVER_PORT); + event.getFirewallManager().addRules( + Rule.create() + .destination(instance) + .ports(REGIONSERVER_WEB_UI_PORT, REGIONSERVER_PORT) + ); String hbaseConfigureFunction = getConfiguration(clusterSpec).getString( HBaseConstants.KEY_CONFIGURE_FUNCTION, HBaseConstants.FUNCTION_POST_CONFIGURE); + String master = masterPublicAddress.getHostName(); String quorum = ZooKeeperCluster.getHosts(cluster); - String tarurl = getConfiguration(clusterSpec).getString( - HBaseConstants.KEY_TARBALL_URL); + + String tarurl = prepareRemoteFileUrl(event, + getConfiguration(clusterSpec).getString(HBaseConstants.KEY_TARBALL_URL)); + addStatement(event, call(hbaseConfigureFunction, ROLE, HBaseConstants.PARAM_MASTER, master, HBaseConstants.PARAM_QUORUM, quorum, diff --git a/services/voldemort/src/main/java/org/apache/whirr/service/voldemort/VoldemortClusterActionHandler.java b/services/voldemort/src/main/java/org/apache/whirr/service/voldemort/VoldemortClusterActionHandler.java index d89177ff..cdcf30b8 100644 --- a/services/voldemort/src/main/java/org/apache/whirr/service/voldemort/VoldemortClusterActionHandler.java +++ b/services/voldemort/src/main/java/org/apache/whirr/service/voldemort/VoldemortClusterActionHandler.java @@ -71,14 +71,14 @@ protected void beforeBootstrap(ClusterActionEvent event) throws IOException { if (tarUrl != null && !tarUrl.trim().isEmpty()) { optArgs.add(PARAM_TARBALL_URL); - optArgs.add(tarUrl); + optArgs.add(prepareRemoteFileUrl(event, tarUrl)); } String confUrl = config.getString(KEY_CONF_URL); if (confUrl != null && !confUrl.trim().isEmpty()) { optArgs.add(PARAM_CONF_URL); - optArgs.add(confUrl); + optArgs.add(prepareRemoteFileUrl(event, confUrl)); } addStatement(event, call("install_java")); diff --git a/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperClusterActionHandler.java b/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperClusterActionHandler.java index 68bd1704..07f24186 100644 --- a/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperClusterActionHandler.java +++ b/services/zookeeper/src/main/java/org/apache/whirr/service/zookeeper/ZooKeeperClusterActionHandler.java @@ -59,10 +59,13 @@ protected Configuration getConfiguration(ClusterSpec spec) @Override protected void beforeBootstrap(ClusterActionEvent event) throws IOException { Configuration config = getConfiguration(event.getClusterSpec()); + addStatement(event, call("install_java")); addStatement(event, call("install_tarball")); + + String tarurl = config.getString("whirr.zookeeper.tarball.url"); addStatement(event, call("install_zookeeper", - config.getString("whirr.zookeeper.tarball.url"))); + prepareRemoteFileUrl(event, tarurl))); } @Override From fc5f34a1f64f4c9de5b26c97b505e6486784edee Mon Sep 17 00:00:00 2001 From: Thomas White Date: Wed, 27 Apr 2011 04:07:02 +0000 Subject: [PATCH 170/216] WHIRR-285. Add support for BYON. git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1096985 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 + core/pom.xml | 4 + .../apache/whirr/ByonClusterController.java | 86 ++++++++++ .../whirr/actions/ByonClusterAction.java | 155 ++++++++++++++++++ .../service/ComputeServiceContextBuilder.java | 6 + .../org.apache.whirr.ClusterController | 1 + pom.xml | 5 + .../functions/configure_zookeeper.sh | 5 +- .../integration/ZooKeeperServiceTest.java | 3 +- 9 files changed, 265 insertions(+), 2 deletions(-) create mode 100644 core/src/main/java/org/apache/whirr/ByonClusterController.java create mode 100644 core/src/main/java/org/apache/whirr/actions/ByonClusterAction.java create mode 100644 core/src/main/resources/META-INF/services/org.apache.whirr.ClusterController diff --git a/CHANGES.txt b/CHANGES.txt index 2635423b..d1af1c13 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -12,6 +12,8 @@ Trunk (unreleased changes) WHIRR-220. Support local tarball upload (asavu) + WHIRR-285. Add support for BYON. (tomwhite) + IMPROVEMENTS WHIRR-262. Services should not have to do reverse DNS lookups. (tomwhite) diff --git a/core/pom.xml b/core/pom.xml index 56aef243..f3ec167f 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -41,6 +41,10 @@ org.jclouds jclouds-core + + org.jclouds.api + byon + org.jclouds.driver jclouds-jsch diff --git a/core/src/main/java/org/apache/whirr/ByonClusterController.java b/core/src/main/java/org/apache/whirr/ByonClusterController.java new file mode 100644 index 00000000..7489866d --- /dev/null +++ b/core/src/main/java/org/apache/whirr/ByonClusterController.java @@ -0,0 +1,86 @@ +/** + * 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 org.apache.whirr; + +import static org.apache.whirr.service.ClusterActionHandler.BOOTSTRAP_ACTION; +import static org.apache.whirr.service.ClusterActionHandler.CONFIGURE_ACTION; +import static org.apache.whirr.service.ClusterActionHandler.DESTROY_ACTION; + +import java.io.IOException; +import java.util.Map; +import java.util.Set; + +import org.apache.whirr.actions.ByonClusterAction; +import org.apache.whirr.service.ClusterActionHandler; +import org.jclouds.compute.ComputeServiceContextFactory; +import org.jclouds.compute.domain.NodeMetadata; + +/** + * Equivalent of {@link ClusterController}, but for execution in BYON mode + * ("bring your own nodes"). + */ +public class ByonClusterController extends ClusterController { + + @Override + public String getName() { + return "byon"; + } + + public Cluster launchCluster(ClusterSpec clusterSpec) throws IOException, + InterruptedException { + + ComputeServiceContextFactory computeServiceFactory = new ComputeServiceContextFactory(); + Map handlerMap = new HandlerMapFactory() + .create(); + + ClusterAction bootstrapper = new ByonClusterAction(BOOTSTRAP_ACTION, + computeServiceFactory, handlerMap); + Cluster cluster = bootstrapper.execute(clusterSpec, null); + + ClusterAction configurer = new ByonClusterAction(CONFIGURE_ACTION, + computeServiceFactory, handlerMap); + cluster = configurer.execute(clusterSpec, cluster); + + return cluster; + } + + public void destroyCluster(ClusterSpec clusterSpec) throws IOException, + InterruptedException { + ComputeServiceContextFactory computeServiceFactory = new ComputeServiceContextFactory(); + Map handlerMap = new HandlerMapFactory() + .create(); + + ClusterAction destroyer = new ByonClusterAction(DESTROY_ACTION, + computeServiceFactory, handlerMap); + destroyer.execute(clusterSpec, null); + } + + @Override + public void destroyInstance(ClusterSpec clusterSpec, String instanceId) + throws IOException { + // TODO + } + + @Override + public Set getNodes(ClusterSpec clusterSpec) + throws IOException, InterruptedException { + // TODO return singleton with trivial NodeMetadata for localhost? + return null; + } +} diff --git a/core/src/main/java/org/apache/whirr/actions/ByonClusterAction.java b/core/src/main/java/org/apache/whirr/actions/ByonClusterAction.java new file mode 100644 index 00000000..4b36ab14 --- /dev/null +++ b/core/src/main/java/org/apache/whirr/actions/ByonClusterAction.java @@ -0,0 +1,155 @@ +/** + * 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 org.apache.whirr.actions; + +import com.google.common.base.Function; +import com.google.common.base.Predicates; +import com.google.common.collect.Collections2; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; + +import java.io.IOException; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; + +import org.apache.whirr.Cluster; +import org.apache.whirr.Cluster.Instance; +import org.apache.whirr.ClusterSpec; +import org.apache.whirr.InstanceTemplate; +import org.apache.whirr.service.ClusterActionEvent; +import org.apache.whirr.service.ClusterActionHandler; +import org.apache.whirr.service.ComputeServiceContextBuilder; +import org.apache.whirr.service.jclouds.StatementBuilder; +import org.jclouds.compute.ComputeService; +import org.jclouds.compute.ComputeServiceContext; +import org.jclouds.compute.ComputeServiceContextFactory; +import org.jclouds.compute.domain.ComputeMetadata; +import org.jclouds.compute.domain.NodeMetadata; +import org.jclouds.domain.Credentials; +import org.jclouds.scriptbuilder.domain.OsFamily; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class ByonClusterAction extends ScriptBasedClusterAction { + + private static final Logger LOG = + LoggerFactory.getLogger(ByonClusterAction.class); + + private final String action; + + public ByonClusterAction(String action, final ComputeServiceContextFactory computeServiceContextFactory, + final Map handlerMap) { + super(computeServiceContextFactory, handlerMap); + this.action = action; + } + + @Override + protected String getAction() { + return action; + } + + @Override + protected void doAction(Map eventMap) + throws IOException, InterruptedException { + + ExecutorService executorService = Executors.newCachedThreadPool(); + + Set> futures = Sets.newHashSet(); + + List nodes = Lists.newArrayList(); + int numberAllocated = 0; + Set instances = Sets.newLinkedHashSet(); + for (Entry entry : eventMap.entrySet()) { + + ClusterSpec clusterSpec = entry.getValue().getClusterSpec(); + final StatementBuilder statementBuilder = entry.getValue().getStatementBuilder(); + ComputeServiceContext computeServiceContext = + ComputeServiceContextBuilder.build(getComputeServiceContextFactory(), clusterSpec); + final ComputeService computeService = computeServiceContext.getComputeService(); + Credentials credentials = new Credentials(clusterSpec.getIdentity(), clusterSpec.getCredential()); + + if (numberAllocated == 0) { + for (ComputeMetadata compute : computeService.listNodes()) { + if (!(compute instanceof NodeMetadata)) { + throw new IllegalArgumentException("Not an instance of NodeMetadata: " + compute); + } + nodes.add((NodeMetadata) compute); + } + } + int num = entry.getKey().getNumberOfInstances(); + final List templateNodes = + nodes.subList(numberAllocated, numberAllocated + num); + numberAllocated += num; + + instances.addAll(getInstances(credentials, + entry.getKey().getRoles(), templateNodes)); + + futures.add(executorService.submit(new Callable() { + @Override + public Void call() throws Exception { + LOG.info("Running script"); + if (LOG.isDebugEnabled()) + LOG.debug("Running script:\n{}", statementBuilder.render(OsFamily.UNIX)); + computeService.runScriptOnNodesMatching( + Predicates.in(templateNodes), + statementBuilder); + LOG.info("Script run completed"); + return null; + } + })); + } + + for (Future future : futures) { + try { + future.get(); + } catch (ExecutionException e) { + throw new IOException(e.getCause()); + } + } + + if (action.equals(ClusterActionHandler.BOOTSTRAP_ACTION)) { + Cluster cluster = new Cluster(instances); + for (ClusterActionEvent event : eventMap.values()) { + event.setCluster(cluster); + } + } + } + + private Set getInstances(final Credentials credentials, final Set roles, + Collection nodes) { + return Sets.newLinkedHashSet(Collections2.transform(Sets.newLinkedHashSet(nodes), + new Function() { + @Override + public Instance apply(NodeMetadata node) { + String publicIp = Iterables.get(node.getPublicAddresses(), 0); + return new Instance(credentials, roles, publicIp, publicIp, node.getId(), null); + } + })); + } + +} diff --git a/core/src/main/java/org/apache/whirr/service/ComputeServiceContextBuilder.java b/core/src/main/java/org/apache/whirr/service/ComputeServiceContextBuilder.java index 4a04368c..408d6c31 100644 --- a/core/src/main/java/org/apache/whirr/service/ComputeServiceContextBuilder.java +++ b/core/src/main/java/org/apache/whirr/service/ComputeServiceContextBuilder.java @@ -50,6 +50,12 @@ public static ComputeServiceContext build(final ClusterSpec spec) throws IOExcep public static ComputeServiceContext build(final ComputeServiceContextFactory factory, final ClusterSpec spec) throws IOException { Configuration jcloudsConfig = spec.getConfigurationForKeysWithPrefix("jclouds"); + + // jclouds byon.endpoint property does not follow convention of starting + // with "jclouds." prefix, so we special case it here + if (jcloudsConfig.containsKey("jclouds.byon.endpoint")) { + jcloudsConfig.setProperty("byon.endpoint", jcloudsConfig.getProperty("jclouds.byon.endpoint")); + } Set wiring = ImmutableSet.of(new JschSshClientModule(), new Log4JLoggingModule(), new BindLoginCredentialsPatchForEC2()); if (spec.getProvider().equals("ec2")){ diff --git a/core/src/main/resources/META-INF/services/org.apache.whirr.ClusterController b/core/src/main/resources/META-INF/services/org.apache.whirr.ClusterController new file mode 100644 index 00000000..c971dcae --- /dev/null +++ b/core/src/main/resources/META-INF/services/org.apache.whirr.ClusterController @@ -0,0 +1 @@ +org.apache.whirr.ByonClusterController \ No newline at end of file diff --git a/pom.xml b/pom.xml index 099eb30d..e5e60d18 100644 --- a/pom.xml +++ b/pom.xml @@ -69,6 +69,11 @@ jclouds-compute ${jclouds.version} + + org.jclouds.api + byon + ${jclouds.version} + org.jclouds.driver jclouds-jsch diff --git a/services/zookeeper/src/main/resources/functions/configure_zookeeper.sh b/services/zookeeper/src/main/resources/functions/configure_zookeeper.sh index 0e88df0d..50d419c7 100644 --- a/services/zookeeper/src/main/resources/functions/configure_zookeeper.sh +++ b/services/zookeeper/src/main/resources/functions/configure_zookeeper.sh @@ -34,9 +34,12 @@ function configure_zookeeper() { ec2 | aws-ec2 ) SELF_HOST=`wget -q -O - http://169.254.169.254/latest/meta-data/local-ipv4` ;; - *) + cloudservers-uk | cloudservers-us) SELF_HOST=`/sbin/ifconfig eth1 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'` ;; + *) + SELF_HOST=`/sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'` + ;; esac myid_file=/var/log/zookeeper/txlog/myid diff --git a/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java b/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java index dd1e26b8..c1348648 100644 --- a/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java +++ b/services/zookeeper/src/test/java/org/apache/whirr/service/zookeeper/integration/ZooKeeperServiceTest.java @@ -27,6 +27,7 @@ import org.apache.commons.configuration.PropertiesConfiguration; import org.apache.whirr.Cluster; import org.apache.whirr.ClusterController; +import org.apache.whirr.ClusterControllerFactory; import org.apache.whirr.ClusterSpec; import org.apache.whirr.service.zookeeper.ZooKeeperCluster; import org.apache.zookeeper.CreateMode; @@ -54,7 +55,7 @@ public void setUp() throws Exception { } config.addConfiguration(new PropertiesConfiguration("whirr-zookeeper-test.properties")); clusterSpec = ClusterSpec.withTemporaryKeys(config); - controller = new ClusterController(); + controller = new ClusterControllerFactory().create(clusterSpec.getServiceName()); cluster = controller.launchCluster(clusterSpec); hosts = ZooKeeperCluster.getHosts(cluster); From ca8fae0826b0a6e6ab1fb0663a395714063ffc53 Mon Sep 17 00:00:00 2001 From: Andrei Savu Date: Wed, 27 Apr 2011 21:13:34 +0000 Subject: [PATCH 171/216] WHIRR-173. Add ClusterAction for generic script execution (asavu) git-svn-id: https://svn.apache.org/repos/asf/incubator/whirr/trunk@1097244 13f79535-47bb-0310-9956-ffa450edef68 --- CHANGES.txt | 2 + .../main/java/org/apache/whirr/cli/Main.java | 4 +- .../whirr/cli/command/RunScriptCommand.java | 179 ++++++++++++++++++ .../command/DestroyInstanceCommandTest.java | 2 +- .../cli/command/RunScriptCommandTest.java | 113 +++++++++++ .../org/apache/whirr/ClusterController.java | 23 +++ 6 files changed, 321 insertions(+), 2 deletions(-) create mode 100644 cli/src/main/java/org/apache/whirr/cli/command/RunScriptCommand.java create mode 100644 cli/src/test/java/org/apache/whirr/cli/command/RunScriptCommandTest.java diff --git a/CHANGES.txt b/CHANGES.txt index d1af1c13..4ba62f86 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -46,6 +46,8 @@ Trunk (unreleased changes) WHIRR-280. Create a blob cache that could be used for storing local files (asavu) + WHIRR-173. Add ClusterAction for generic script execution (asavu) + BUG FIXES WHIRR-253. ZooKeeper service should only authorize ingress to ZooKeeper diff --git a/cli/src/main/java/org/apache/whirr/cli/Main.java b/cli/src/main/java/org/apache/whirr/cli/Main.java index c2e92b75..92f3856a 100644 --- a/cli/src/main/java/org/apache/whirr/cli/Main.java +++ b/cli/src/main/java/org/apache/whirr/cli/Main.java @@ -24,6 +24,7 @@ import org.apache.whirr.cli.command.DestroyInstanceCommand; import org.apache.whirr.cli.command.LaunchClusterCommand; import org.apache.whirr.cli.command.ListClusterCommand; +import org.apache.whirr.cli.command.RunScriptCommand; import org.apache.whirr.cli.command.VersionCommand; import org.apache.whirr.service.ClusterActionHandler; @@ -99,7 +100,8 @@ public static void main(String... args) throws Exception { new LaunchClusterCommand(), new DestroyClusterCommand(), new DestroyInstanceCommand(), - new ListClusterCommand() + new ListClusterCommand(), + new RunScriptCommand() ); int rc = main.run(System.in, System.out, System.err, Arrays.asList(args)); System.exit(rc); diff --git a/cli/src/main/java/org/apache/whirr/cli/command/RunScriptCommand.java b/cli/src/main/java/org/apache/whirr/cli/command/RunScriptCommand.java new file mode 100644 index 00000000..1a0b0109 --- /dev/null +++ b/cli/src/main/java/org/apache/whirr/cli/command/RunScriptCommand.java @@ -0,0 +1,179 @@ +/** + * 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 org.apache.whirr.cli.command; + +import com.google.common.base.Predicate; +import com.google.common.base.Predicates; +import com.google.common.collect.Iterables; +import com.google.common.collect.Lists; +import com.google.common.io.Files; +import joptsimple.OptionParser; +import joptsimple.OptionSet; +import joptsimple.OptionSpec; +import org.apache.commons.lang.StringUtils; +import org.apache.whirr.ClusterController; +import org.apache.whirr.ClusterControllerFactory; +import org.apache.whirr.ClusterSpec; +import org.jclouds.compute.domain.ExecResponse; +import org.jclouds.compute.domain.NodeMetadata; +import org.jclouds.scriptbuilder.domain.Statement; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintStream; +import java.nio.charset.Charset; +import java.util.List; +import java.util.Map; + +import static org.jclouds.compute.predicates.NodePredicates.withIds; +import static org.jclouds.scriptbuilder.domain.Statements.exec; + +public class RunScriptCommand extends AbstractClusterSpecCommand { + + private OptionSpec rolesOption = parser + .accepts("roles", "List of comma separated role names. " + + "E.g. zookeeper,hadoop-namenode") + .withRequiredArg() + .ofType(String.class); + + private OptionSpec instancesOption = parser + .accepts("instances", "List of comma separated instance IDs") + .withRequiredArg() + .ofType(String.class); + + private OptionSpec scriptOption = parser + .accepts("script", "Path to script file to execute.") + .withRequiredArg() + .ofType(String.class); + + public RunScriptCommand() { + this(new ClusterControllerFactory()); + } + + public RunScriptCommand(ClusterControllerFactory factory) { + super("run-script", "Run a script on a specific instance or a " + + "group of instances matching a role name", factory); + } + + @Override + public int run(InputStream in, PrintStream out, PrintStream err, + List args) throws Exception { + + OptionSet optionSet = parser.parse(args.toArray(new String[0])); + if (!optionSet.has(scriptOption)) { + err.println("Please specify a script file to be executed."); + printUsage(parser, err); + return -1; + } + + if (!(new File(optionSet.valueOf(scriptOption))).exists()) { + err.printf("Script file '%s' not found.", optionSet.valueOf(scriptOption)); + printUsage(parser, err); + return -2; + } + + try { + ClusterSpec spec = getClusterSpec(optionSet); + ClusterController controller = createClusterController(spec.getServiceName()); + + Predicate condition = buildFilterPredicate(optionSet, spec); + + return handleScriptOutput(out, err, controller.runScriptOnNodesMatching( + spec, condition, execFile(optionSet.valueOf(scriptOption)))); + + } catch(IllegalArgumentException e) { + err.println(e.getMessage()); + printUsage(parser, err); + return -3; + } + } + + private Predicate buildFilterPredicate(OptionSet optionSet, ClusterSpec spec) + throws IOException { + + Predicate condition = Predicates.alwaysTrue(); + + if (optionSet.has(instancesOption)) { + String[] ids = optionSet.valueOf(instancesOption).split(","); + return Predicates.and(condition, withIds(ids)); + + } else if(optionSet.has(rolesOption)) { + String[] roles = optionSet.valueOf(rolesOption).split(","); + List ids = Lists.newArrayList(); + + for(String line : Files.readLines( + new File(spec.getClusterDirectory(), "instances"), + Charset.defaultCharset())) { + + if (containsAny(line, roles)) { + ids.add(line.split("\t")[0].split("\\/")[1]); + } + } + + condition = Predicates.and(condition, + withIds(ids.toArray(new String[0]))); + } + return condition; + } + + private int handleScriptOutput(PrintStream out, PrintStream err, + Map responses) { + int rc = 0; + for (Map.Entry entry : responses.entrySet()) { + out.printf("** Node %s: %s%n", entry.getKey().getId(), + Iterables.concat(entry.getKey().getPrivateAddresses(), + entry.getKey().getPublicAddresses())); + + ExecResponse response = entry.getValue(); + if (response.getExitCode() != 0) { + rc = response.getExitCode(); + } + out.printf("%s%n", response.getOutput()); + err.printf("%s%n", response.getError()); + } + return rc; + } + + private boolean containsAny(String line, String[] roles) { + for (String role : roles) { + if (line.contains(role)) return true; + } + return false; + } + + private Statement execFile(String filePath) throws IOException { + return exec(getFileContent(filePath)); + } + + private String getFileContent(String filePath) throws IOException { + return StringUtils.join(Files.readLines(new File(filePath), + Charset.defaultCharset()), + "\n"); + } + + private void printUsage(OptionParser parser, + PrintStream stream) throws IOException { + stream.println("Usage: whirr run-script [OPTIONS] --script