diff --git a/README.txt b/README.txt index cc220c25dc..8c53837911 100644 --- a/README.txt +++ b/README.txt @@ -29,11 +29,12 @@ data. our current version is 1.0-beta-8 our dev version is 1.0-SNAPSHOT -our compute api supports: aws-ec2, gogrid, cloudservers (rackspace), vcloud, - trmk-ecloud, trmk-vcloudexpress, eucalyptus, cloudsigma, - elasticstack, bluelock-vclouddirector, slicehost, - elastichosts-lon-p (Peer 1), elastichosts-sat-p (Peer 1), - elastichosts-lon-b (BlueSquare), stub (in-memory) +our compute api supports: aws-ec2, gogrid, cloudservers (rackspace), vcloud (generic), + trmk-ecloud, trmk-vcloudexpress, eucalyptus (generic), + cloudsigma, elasticstack(generic), bluelock-vclouddirector, + slicehost, ecc-ec2, elastichosts-lon-p (Peer 1), + elastichosts-sat-p (Peer 1), elastichosts-lon-b (BlueSquare), + ec2 (generic), stub (in-memory) * note * the pom dependency org.jclouds/jclouds-allcompute gives you access to to all of these providers diff --git a/allcompute/pom.xml b/allcompute/pom.xml index a84113f858..1105da6b42 100644 --- a/allcompute/pom.xml +++ b/allcompute/pom.xml @@ -29,6 +29,11 @@ jclouds-allcompute allcompute + + org.jclouds.provider + ecc-ec2 + ${project.version} + org.jclouds.provider aws-ec2 diff --git a/apis/eucalyptus/pom.xml b/apis/eucalyptus/pom.xml new file mode 100644 index 0000000000..ab03a3a43a --- /dev/null +++ b/apis/eucalyptus/pom.xml @@ -0,0 +1,136 @@ + + + + + 4.0.0 + + org.jclouds + jclouds-project + 1.0-SNAPSHOT + ../../project/pom.xml + + org.jclouds.api + eucalyptus + jclouds Eucalyptus api + EC2 implementation based on Eucalyptus + + + http://ecc.eucalyptus.com:8773/services/Eucalyptus + 2010-06-15 + ${test.eucalyptus.identity} + ${test.eucalyptus.credential} + + + + + org.jclouds.api + ec2 + ${project.version} + + + org.jclouds.api + ec2 + ${project.version} + test-jar + test + + + org.jclouds + jclouds-core + ${project.version} + test-jar + test + + + org.jclouds + jclouds-compute + ${project.version} + test-jar + test + + + org.jclouds + jclouds-jsch + ${project.version} + test + + + org.jclouds + jclouds-log4j + ${project.version} + test + + + log4j + log4j + 1.2.16 + test + + + + + + live + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration + integration-test + + test + + + + + test.eucalyptus.endpoint + ${test.eucalyptus.endpoint} + + + test.eucalyptus.apiversion + ${test.eucalyptus.apiversion} + + + test.eucalyptus.identity + ${test.eucalyptus.identity} + + + test.eucalyptus.credential + ${test.eucalyptus.credential} + + + + + + + + + + + + + + diff --git a/apis/ec2/src/main/java/org/jclouds/ec2/EucalyptusPropertiesBuilder.java b/apis/eucalyptus/src/main/java/org/jclouds/eucalyptus/EucalyptusPropertiesBuilder.java similarity index 96% rename from apis/ec2/src/main/java/org/jclouds/ec2/EucalyptusPropertiesBuilder.java rename to apis/eucalyptus/src/main/java/org/jclouds/eucalyptus/EucalyptusPropertiesBuilder.java index 9228e51810..f694b44bd3 100644 --- a/apis/ec2/src/main/java/org/jclouds/ec2/EucalyptusPropertiesBuilder.java +++ b/apis/eucalyptus/src/main/java/org/jclouds/eucalyptus/EucalyptusPropertiesBuilder.java @@ -17,15 +17,17 @@ * ==================================================================== */ -package org.jclouds.ec2; +package org.jclouds.eucalyptus; import static org.jclouds.Constants.PROPERTY_ENDPOINT; +import static org.jclouds.compute.reference.ComputeServiceConstants.PROPERTY_TIMEOUT_PORT_OPEN; import static org.jclouds.ec2.reference.EC2Constants.PROPERTY_EC2_AMI_OWNERS; import static org.jclouds.ec2.reference.EC2Constants.PROPERTY_EC2_CC_AMIs; -import static org.jclouds.compute.reference.ComputeServiceConstants.PROPERTY_TIMEOUT_PORT_OPEN; import java.util.Properties; +import org.jclouds.ec2.EC2PropertiesBuilder; + /** * Builds properties used in Eucalyptus Clients * diff --git a/apis/ec2/src/test/java/org/jclouds/ec2/compute/EucalyptusComputeServiceLiveTestDisabled.java b/apis/eucalyptus/src/test/java/org/jclouds/eucalyptus/compute/EucalyptusComputeServiceLiveTest.java similarity index 80% rename from apis/ec2/src/test/java/org/jclouds/ec2/compute/EucalyptusComputeServiceLiveTestDisabled.java rename to apis/eucalyptus/src/test/java/org/jclouds/eucalyptus/compute/EucalyptusComputeServiceLiveTest.java index 874b92d828..91ea635f07 100644 --- a/apis/ec2/src/test/java/org/jclouds/ec2/compute/EucalyptusComputeServiceLiveTestDisabled.java +++ b/apis/eucalyptus/src/test/java/org/jclouds/eucalyptus/compute/EucalyptusComputeServiceLiveTest.java @@ -17,31 +17,25 @@ * ==================================================================== */ -package org.jclouds.ec2.compute; +package org.jclouds.eucalyptus.compute; import static org.jclouds.compute.util.ComputeServiceUtils.getCores; import static org.testng.Assert.assertEquals; import org.jclouds.compute.domain.OsFamily; import org.jclouds.compute.domain.Template; -import org.testng.annotations.BeforeClass; +import org.jclouds.ec2.compute.EC2ComputeServiceLiveTest; import org.testng.annotations.Test; /** - * Disabled until we have an environment with enough room to run a few nodes simultaneously. * * @author Adrian Cole */ -@Test(groups = "live", enabled = true, sequential = true) -public class EucalyptusComputeServiceLiveTestDisabled extends EC2ComputeServiceLiveTest { +@Test(groups = "live", sequential = true, testName = "EucalyptusComputeServiceLiveTest") +public class EucalyptusComputeServiceLiveTest extends EC2ComputeServiceLiveTest { - public EucalyptusComputeServiceLiveTestDisabled() { + public EucalyptusComputeServiceLiveTest() { provider = "eucalyptus"; - } - - @BeforeClass - @Override - public void setServiceDefaults() { // security groups must be <30 characters tag = "eu"; } diff --git a/apis/eucalyptus/src/test/java/org/jclouds/eucalyptus/compute/EucalyptusTemplateBuilderLiveTest.java b/apis/eucalyptus/src/test/java/org/jclouds/eucalyptus/compute/EucalyptusTemplateBuilderLiveTest.java new file mode 100644 index 0000000000..2c98b25e91 --- /dev/null +++ b/apis/eucalyptus/src/test/java/org/jclouds/eucalyptus/compute/EucalyptusTemplateBuilderLiveTest.java @@ -0,0 +1,76 @@ +/** + * + * Copyright (C) 2010 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.eucalyptus.compute; + +import static org.jclouds.compute.util.ComputeServiceUtils.getCores; +import static org.testng.Assert.assertEquals; + +import java.io.IOException; + +import org.jclouds.compute.BaseTemplateBuilderLiveTest; +import org.jclouds.compute.domain.OsFamily; +import org.jclouds.compute.domain.Template; +import org.jclouds.compute.domain.os.OsFamilyVersion64Bit; +import org.testng.annotations.Test; + +import com.google.common.base.Predicate; + +/** + * + * @author Adrian Cole + */ +@Test(groups = "live") +public class EucalyptusTemplateBuilderLiveTest extends BaseTemplateBuilderLiveTest { + + public EucalyptusTemplateBuilderLiveTest() { + provider = "eucalyptus"; + } + + @Override + protected Predicate defineUnsupportedOperatingSystems() { + return new Predicate() { + + @Override + public boolean apply(OsFamilyVersion64Bit input) { + return input.family == OsFamily.RHEL || // + (input.family == OsFamily.CENTOS && !input.version.equals("5.3") || !input.is64Bit) || // + input.family == OsFamily.WINDOWS || // + input.family == OsFamily.UBUNTU; + + } + + }; + } + + @Test + public void testDefaultTemplateBuilder() throws IOException { + + Template defaultTemplate = context.getComputeService().templateBuilder().build(); + assert (defaultTemplate.getImage().getProviderId().startsWith("emi-")) : defaultTemplate; + assertEquals(defaultTemplate.getImage().getOperatingSystem().getVersion(), "5.3"); + assertEquals(defaultTemplate.getImage().getOperatingSystem().is64Bit(), true); + assertEquals(defaultTemplate.getImage().getOperatingSystem().getFamily(), OsFamily.CENTOS); + assertEquals(defaultTemplate.getImage().getUserMetadata().get("rootDeviceType"), "instance-store"); + assertEquals(defaultTemplate.getLocation().getId(), "Eucalyptus"); + assertEquals(getCores(defaultTemplate.getHardware()), 1.0d); + + } + +} diff --git a/apis/pom.xml b/apis/pom.xml index 5de311a586..cad86ec220 100644 --- a/apis/pom.xml +++ b/apis/pom.xml @@ -41,5 +41,6 @@ simpledb cloudwatch walrus + eucalyptus diff --git a/compute/src/main/clojure/org/jclouds/compute.clj b/compute/src/main/clojure/org/jclouds/compute.clj index 735b4fe7a6..8fed275929 100644 --- a/compute/src/main/clojure/org/jclouds/compute.clj +++ b/compute/src/main/clojure/org/jclouds/compute.clj @@ -21,7 +21,7 @@ "A clojure binding to the jclouds ComputeService. Current supported providers are: - [ec2, cloudservers, trmk-ecloud, trmk-vcloudexpress, vcloud, + [ec2, aws-ec2, ecc-ec2, cloudservers, trmk-ecloud, trmk-vcloudexpress, vcloud, bluelock, eucalyptus, slicehost, elastichosts-lon-p, elastichosts-sat-p, elastichosts, elastichosts-lon-b, cloudsigma, stub] diff --git a/core/src/main/resources/rest.properties b/core/src/main/resources/rest.properties index 4038204bb3..21ed1ca28e 100644 --- a/core/src/main/resources/rest.properties +++ b/core/src/main/resources/rest.properties @@ -90,7 +90,10 @@ vcloudexpress.contextbuilder=org.jclouds.vcloud.VCloudExpressContextBuilder vcloudexpress.propertiesbuilder=org.jclouds.vcloud.VCloudExpressPropertiesBuilder eucalyptus.contextbuilder=org.jclouds.ec2.EC2ContextBuilder -eucalyptus.propertiesbuilder=org.jclouds.ec2.EucalyptusPropertiesBuilder +eucalyptus.propertiesbuilder=org.jclouds.eucalyptus.EucalyptusPropertiesBuilder + +ecc-ec2.contextbuilder=org.jclouds.ec2.EC2ContextBuilder +ecc-ec2.propertiesbuilder=org.jclouds.ecc.ECCEucalyptusPropertiesBuilder nova.contextbuilder=org.jclouds.ec2.EC2ContextBuilder nova.propertiesbuilder=org.jclouds.ec2.NovaPropertiesBuilder diff --git a/providers/ecc-ec2/pom.xml b/providers/ecc-ec2/pom.xml new file mode 100644 index 0000000000..001bb07a67 --- /dev/null +++ b/providers/ecc-ec2/pom.xml @@ -0,0 +1,148 @@ + + + + + 4.0.0 + + org.jclouds + jclouds-project + 1.0-SNAPSHOT + ../../project/pom.xml + + org.jclouds.provider + ecc-ec2 + jclouds Eucalyptus Community Cloud EC2 provider + Eucalyptus (EC2) implementation targeted to the Eucalyptus Community Cloud + + + http://ecc.eucalyptus.com:8773/services/Eucalyptus + 2010-06-15 + ${test.ecc-ec2.identity} + ${test.ecc-ec2.credential} + + + + + org.jclouds.api + eucalyptus + ${project.version} + + + org.jclouds.api + ec2 + ${project.version} + + + org.jclouds.api + eucalyptus + ${project.version} + test-jar + test + + + org.jclouds.api + ec2 + ${project.version} + test-jar + test + + + org.jclouds + jclouds-compute + ${project.version} + test-jar + test + + + org.jclouds + jclouds-core + ${project.version} + test-jar + test + + + org.jclouds + jclouds-jsch + ${project.version} + test + + + org.jclouds + jclouds-log4j + ${project.version} + test + + + log4j + log4j + 1.2.16 + test + + + + + + live + + + + org.apache.maven.plugins + maven-surefire-plugin + + + integration + integration-test + + test + + + + + test.ecc-ec2.endpoint + ${test.ecc-ec2.endpoint} + + + test.ecc-ec2.apiversion + ${test.ecc-ec2.apiversion} + + + test.ecc-ec2.identity + ${test.ecc-ec2.identity} + + + test.ecc-ec2.credential + ${test.ecc-ec2.credential} + + + + + + + + + + + + + + diff --git a/providers/ecc-ec2/src/main/java/org/jclouds/ecc/ECCEucalyptusPropertiesBuilder.java b/providers/ecc-ec2/src/main/java/org/jclouds/ecc/ECCEucalyptusPropertiesBuilder.java new file mode 100644 index 0000000000..67c99ceedf --- /dev/null +++ b/providers/ecc-ec2/src/main/java/org/jclouds/ecc/ECCEucalyptusPropertiesBuilder.java @@ -0,0 +1,45 @@ +/** + * + * Copyright (C) 2010 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.ecc; + +import static org.jclouds.Constants.PROPERTY_ENDPOINT; + +import java.util.Properties; + +import org.jclouds.eucalyptus.EucalyptusPropertiesBuilder; + +/** + * Builds properties used in ECCEucalyptus Clients + * + * @author Adrian Cole + */ +public class ECCEucalyptusPropertiesBuilder extends EucalyptusPropertiesBuilder { + @Override + protected Properties defaultProperties() { + Properties properties = super.defaultProperties(); + properties.setProperty(PROPERTY_ENDPOINT, "http://173.205.188.130:8773/services/Eucalyptus"); + return properties; + } + + public ECCEucalyptusPropertiesBuilder(Properties properties) { + super(properties); + } + +} diff --git a/providers/ecc-ec2/src/test/java/org/jclouds/ecc/compute/ECCEucalyptusComputeServiceLiveTest.java b/providers/ecc-ec2/src/test/java/org/jclouds/ecc/compute/ECCEucalyptusComputeServiceLiveTest.java new file mode 100644 index 0000000000..6cd261e59e --- /dev/null +++ b/providers/ecc-ec2/src/test/java/org/jclouds/ecc/compute/ECCEucalyptusComputeServiceLiveTest.java @@ -0,0 +1,63 @@ +/** + * + * Copyright (C) 2010 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.ecc.compute; + +import static org.jclouds.compute.util.ComputeServiceUtils.getCores; +import static org.testng.Assert.assertEquals; + +import org.jclouds.compute.domain.OsFamily; +import org.jclouds.compute.domain.Template; +import org.jclouds.ec2.compute.EC2ComputeServiceLiveTest; +import org.testng.annotations.Test; + +/** + * + * @author Adrian Cole + */ +@Test(groups = "live", sequential = true, testName = "ECCEucalyptusComputeServiceLiveTest") +public class ECCEucalyptusComputeServiceLiveTest extends EC2ComputeServiceLiveTest { + + public ECCEucalyptusComputeServiceLiveTest() { + provider = "ecc-ec2"; + // security groups must be <30 characters + tag = "eu"; + } + + @Override + @Test(enabled = false) + public void testExtendedOptionsAndLogin() throws Exception { + // euc does not support monitoring + } + + @Override + @Test(enabled = false) + public void testExtendedOptionsNoKeyPair() throws Exception { + // euc does not support multiple security groups + } + + @Override + protected void assertDefaultWorks() { + Template defaultTemplate = client.templateBuilder().build(); + assertEquals(defaultTemplate.getImage().getOperatingSystem().is64Bit(), true); + assertEquals(defaultTemplate.getImage().getOperatingSystem().getFamily(), OsFamily.CENTOS); + assertEquals(getCores(defaultTemplate.getHardware()), 1.0d); + } + +} diff --git a/providers/ecc-ec2/src/test/java/org/jclouds/ecc/compute/ECCEucalyptusTemplateBuilderLiveTest.java b/providers/ecc-ec2/src/test/java/org/jclouds/ecc/compute/ECCEucalyptusTemplateBuilderLiveTest.java new file mode 100644 index 0000000000..8937b77e5d --- /dev/null +++ b/providers/ecc-ec2/src/test/java/org/jclouds/ecc/compute/ECCEucalyptusTemplateBuilderLiveTest.java @@ -0,0 +1,76 @@ +/** + * + * Copyright (C) 2010 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.ecc.compute; + +import static org.jclouds.compute.util.ComputeServiceUtils.getCores; +import static org.testng.Assert.assertEquals; + +import java.io.IOException; + +import org.jclouds.compute.BaseTemplateBuilderLiveTest; +import org.jclouds.compute.domain.OsFamily; +import org.jclouds.compute.domain.Template; +import org.jclouds.compute.domain.os.OsFamilyVersion64Bit; +import org.testng.annotations.Test; + +import com.google.common.base.Predicate; + +/** + * + * @author Adrian Cole + */ +@Test(groups = "live") +public class ECCEucalyptusTemplateBuilderLiveTest extends BaseTemplateBuilderLiveTest { + + public ECCEucalyptusTemplateBuilderLiveTest() { + provider = "ecc-ec2"; + } + + @Override + protected Predicate defineUnsupportedOperatingSystems() { + return new Predicate() { + + @Override + public boolean apply(OsFamilyVersion64Bit input) { + return input.family == OsFamily.RHEL || // + (input.family == OsFamily.CENTOS && !input.version.equals("5.3") || !input.is64Bit) || // + input.family == OsFamily.WINDOWS || // + input.family == OsFamily.UBUNTU; + + } + + }; + } + + @Test + public void testDefaultTemplateBuilder() throws IOException { + + Template defaultTemplate = context.getComputeService().templateBuilder().build(); + assert (defaultTemplate.getImage().getProviderId().startsWith("emi-")) : defaultTemplate; + assertEquals(defaultTemplate.getImage().getOperatingSystem().getVersion(), "5.3"); + assertEquals(defaultTemplate.getImage().getOperatingSystem().is64Bit(), true); + assertEquals(defaultTemplate.getImage().getOperatingSystem().getFamily(), OsFamily.CENTOS); + assertEquals(defaultTemplate.getImage().getUserMetadata().get("rootDeviceType"), "instance-store"); + assertEquals(defaultTemplate.getLocation().getId(), "Eucalyptus"); + assertEquals(getCores(defaultTemplate.getHardware()), 1.0d); + + } + +} diff --git a/providers/pom.xml b/providers/pom.xml index c8d7244771..a8edaa89ee 100644 --- a/providers/pom.xml +++ b/providers/pom.xml @@ -43,5 +43,6 @@ googlestorage scaleup-storage ecc-s3 + ecc-ec2