diff --git a/commands/pom.xml b/commands/pom.xml index 74f58efd..d554a47e 100644 --- a/commands/pom.xml +++ b/commands/pom.xml @@ -124,7 +124,7 @@ limitations under the License. org.apache.jclouds.driver - jclouds-sshj + jclouds-jsch org.apache.jclouds.driver diff --git a/commands/src/main/java/org/jclouds/karaf/commands/compute/ComputeCommandWithOptions.java b/commands/src/main/java/org/jclouds/karaf/commands/compute/ComputeCommandWithOptions.java index 3ab31e1b..acf6dd01 100644 --- a/commands/src/main/java/org/jclouds/karaf/commands/compute/ComputeCommandWithOptions.java +++ b/commands/src/main/java/org/jclouds/karaf/commands/compute/ComputeCommandWithOptions.java @@ -20,6 +20,7 @@ import com.google.common.base.Strings; import com.google.common.collect.ImmutableSet; import com.google.inject.Module; + import org.apache.felix.gogo.commands.Option; import org.jclouds.Constants; import org.jclouds.ContextBuilder; @@ -29,7 +30,7 @@ import org.jclouds.karaf.utils.EnvHelper; import org.jclouds.karaf.utils.ServiceHelper; import org.jclouds.logging.log4j.config.Log4JLoggingModule; -import org.jclouds.sshj.config.SshjSshClientModule; +import org.jclouds.ssh.jsch.config.JschSshClientModule; import java.io.IOException; import java.io.File; @@ -86,6 +87,9 @@ protected ComputeService getComputeService() throws IOException { String apiValue = EnvHelper.getComputeApi(api); String identityValue = EnvHelper.getComputeIdentity(identity); String credentialValue = EnvHelper.getComputeCredential(credential); + if (providerValue.equals("google-compute-engine")) { + credentialValue = EnvHelper.getGoogleCredentialFromJsonFile(credentialValue); + } String endpointValue = EnvHelper.getComputeEndpoint(endpoint); boolean contextNameProvided = !Strings.isNullOrEmpty(name); boolean canCreateService = (!Strings.isNullOrEmpty(providerValue) || !Strings.isNullOrEmpty(apiValue)) @@ -136,7 +140,7 @@ protected ComputeService getComputeService() throws IOException { ContextBuilder builder = ContextBuilder .newBuilder(providerOrApiValue) .credentials(identityValue, credentialValue) - .modules(ImmutableSet. of(new SshjSshClientModule(), new Log4JLoggingModule(), + .modules(ImmutableSet. of(new JschSshClientModule(), new Log4JLoggingModule(), new PropertiesCredentialStore())); if (!Strings.isNullOrEmpty(endpointValue)) { builder = builder.endpoint(endpointValue); diff --git a/feature/pom.xml b/feature/pom.xml index 492f2850..f23fa930 100644 --- a/feature/pom.xml +++ b/feature/pom.xml @@ -130,7 +130,7 @@ limitations under the License. jclouds-cloudsigma2-sjc jclouds-cloudsigma2-wdc jclouds-cloudsigma2-zrh - jclouds-digitalocean + jclouds-digitalocean2 jclouds-dynect jclouds-elastichosts-lon-b jclouds-elastichosts-lon-p @@ -139,8 +139,8 @@ limitations under the License. jclouds-elastichosts-tor-p jclouds-gogrid jclouds-go2cloud-jhb1 + jclouds-google-compute-engine jclouds-glesys - jclouds-hpcloud-compute jclouds-openhosting-east1 jclouds-rackspace-cloudfiles-us jclouds-rackspace-cloudfiles-uk diff --git a/feature/src/main/resources/feature.xml b/feature/src/main/resources/feature.xml index cf97677a..a2f858af 100644 --- a/feature/src/main/resources/feature.xml +++ b/feature/src/main/resources/feature.xml @@ -165,7 +165,7 @@ limitations under the License. jclouds-api-s3 - mvn:org.bouncycastle/bcprov-jdk15on/${bcprov.version} + mvn:org.bouncycastle/bcprov-ext-jdk15on/${bcprov.version} mvn:org.apache.jclouds.driver/jclouds-bouncycastle/${jclouds.version} mvn:io.netty/netty/${netty.bundle.version} mvn:org.apache.httpcomponents/httpcore-osgi/${httpcore.version} @@ -273,35 +273,30 @@ limitations under the License. jclouds-compute mvn:org.apache.jclouds.api/elasticstack/${jclouds.version} - mvn:org.apache.jclouds.common/openstack-common/${jclouds.version} mvn:org.apache.jclouds.provider/elastichosts-lon-b/${jclouds.version} jclouds-compute mvn:org.apache.jclouds.api/elasticstack/${jclouds.version} - mvn:org.apache.jclouds.common/openstack-common/${jclouds.version} mvn:org.apache.jclouds.provider/elastichosts-lon-p/${jclouds.version} jclouds-compute mvn:org.apache.jclouds.api/elasticstack/${jclouds.version} - mvn:org.apache.jclouds.common/openstack-common/${jclouds.version} mvn:org.apache.jclouds.provider/elastichosts-sat-p/${jclouds.version} jclouds-compute mvn:org.apache.jclouds.api/elasticstack/${jclouds.version} - mvn:org.apache.jclouds.common/openstack-common/${jclouds.version} mvn:org.apache.jclouds.provider/elastichosts-lax-p/${jclouds.version} jclouds-compute mvn:org.apache.jclouds.api/elasticstack/${jclouds.version} - mvn:org.apache.jclouds.common/openstack-common/${jclouds.version} mvn:org.apache.jclouds.provider/elastichosts-tor-p/${jclouds.version} @@ -320,17 +315,25 @@ limitations under the License. mvn:org.apache.jclouds.provider/glesys/${jclouds.version} - - jclouds-api-openstack-nova - mvn:org.apache.jclouds.provider/hpcloud-compute/${jclouds.version} - - jclouds-compute mvn:org.apache.jclouds.api/elasticstack/${jclouds.version} mvn:org.apache.jclouds.provider/openhosting-east1/${jclouds.version} + + jclouds-compute + mvn:org.apache.jclouds.api/oauth/${jclouds.version} + mvn:org.apache.jclouds.provider/digitalocean2/${jclouds.version} + + + + jclouds-compute + mvn:org.apache.jclouds.api/oauth/${jclouds.version} + mvn:org.apache.jclouds.common/googlecloud/${jclouds.version} + mvn:org.apache.jclouds.provider/google-compute-engine/${jclouds.version} + + jclouds-compute mvn:org.apache.jclouds.api/elasticstack/${jclouds.version} @@ -348,11 +351,6 @@ limitations under the License. mvn:org.apache.jclouds.provider/softlayer/${jclouds.version} - - jclouds-compute - mvn:org.apache.jclouds.labs/digitalocean/${jclouds.version} - - jclouds-compute mvn:org.apache.jclouds.labs/cloudsigma2/${jclouds.version} @@ -387,17 +385,17 @@ limitations under the License. mvn:org.apache.jclouds.karaf/jclouds-karaf/${project.version}/cfg/credentials jclouds-compute jclouds-blobstore - mvn:net.schmizz/sshj/${sshj.version} - mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jsch-agentproxy-sshj/${jsch.agentproxy.bundle.version} + mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jsch/${jsch.bundle.version} + mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jsch-agentproxy-jsch/${jsch.agentproxy.bundle.version} mvn:com.jcraft/jsch.agentproxy.connector-factory/${jsch.agentproxy.version} mvn:com.jcraft/jsch.agentproxy.usocket-nc/${jsch.agentproxy.version} mvn:com.jcraft/jsch.agentproxy.sshagent/${jsch.agentproxy.version} mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.jzlib/${jzlib.bundle.version} - mvn:org.bouncycastle/bcpkix-jdk15on/${bcprov.version} - mvn:org.bouncycastle/bcprov-jdk15on/${bcprov.version} + mvn:org.bouncycastle/bcprov-ext-jdk15on/${bcprov.version} mvn:org.apache.jclouds.driver/jclouds-bouncycastle/${jclouds.version} mvn:org.apache.jclouds.driver/jclouds-slf4j/${jclouds.version} - mvn:org.apache.jclouds.driver/jclouds-sshj/${jclouds.version} + mvn:org.apache.jclouds.common/googlecloud/${jclouds.version} + mvn:org.apache.jclouds.driver/jclouds-jsch/${jclouds.version} mvn:org.apache.jclouds.driver/jclouds-log4j/${jclouds.version} mvn:org.apache.jclouds.karaf/core/${project.version} mvn:org.apache.jclouds.karaf/cache/${project.version} diff --git a/itests/src/test/java/org/jclouds/karaf/itests/HPCloudFeaturesInstallationTest.java b/itests/src/test/java/org/jclouds/karaf/itests/HPCloudFeaturesInstallationTest.java deleted file mode 100644 index 5f3d95e7..00000000 --- a/itests/src/test/java/org/jclouds/karaf/itests/HPCloudFeaturesInstallationTest.java +++ /dev/null @@ -1,46 +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.jclouds.karaf.itests; - -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.ops4j.pax.exam.junit.ExamReactorStrategy; -import org.ops4j.pax.exam.junit.JUnit4TestRunner; -import org.ops4j.pax.exam.spi.reactors.AllConfinedStagedReactorFactory; - -@RunWith(JUnit4TestRunner.class) -@ExamReactorStrategy(AllConfinedStagedReactorFactory.class) -public class HPCloudFeaturesInstallationTest extends JcloudsFeaturesTestSupport { - - @Before - public void setUp() { - System.err.println(executeCommand("features:addurl " + getJcloudsKarafFeatureURL())); - } - - @After - public void tearDown() { - - } - - @Test - public void testHPCloudCompute() throws Exception { - installAndCheckFeature("jclouds-hpcloud-compute"); - } -} diff --git a/itests/src/test/java/org/jclouds/karaf/itests/MiscFeaturesInstallationTest.java b/itests/src/test/java/org/jclouds/karaf/itests/MiscFeaturesInstallationTest.java index 50599d4f..c4860bc5 100644 --- a/itests/src/test/java/org/jclouds/karaf/itests/MiscFeaturesInstallationTest.java +++ b/itests/src/test/java/org/jclouds/karaf/itests/MiscFeaturesInstallationTest.java @@ -90,7 +90,12 @@ public void testGlesysFeature() throws Exception { } @Test - public void testDigitalOceanFeature() throws Exception { - installAndCheckFeature("jclouds-digitalocean"); + public void testDigitalOcean2Feature() throws Exception { + installAndCheckFeature("jclouds-digitalocean2"); + } + + @Test + public void testGoogleComputeEngineFeature() throws Exception { + installAndCheckFeature("jclouds-google-compute-engine"); } } diff --git a/pom.xml b/pom.xml index bb958615..6bdf6547 100644 --- a/pom.xml +++ b/pom.xml @@ -182,7 +182,7 @@ limitations under the License. 1.0_5 - 1.49 + 1.51 1.2.8 3.0 1.2.8 @@ -200,8 +200,9 @@ limitations under the License. 1.11 1.11_1 2.1 - 0.1.44_2 - 0.0.8 + 0.1.49 + ${jsch.version}_1 + 0.0.9 ${jsch.agentproxy.version}_1 1.3.9_1 1.9.0 @@ -218,7 +219,6 @@ limitations under the License. 2.0.0 1.5.8 1.11 - 0.8.1 1.2 @@ -357,7 +357,7 @@ limitations under the License. org.bouncycastle - bcprov-jdk15on + bcprov-ext-jdk15on ${bcprov.version} @@ -448,11 +448,11 @@ limitations under the License. ${guava.version} - + - net.schmizz - sshj - ${sshj.version} + com.jcraft + jsch + ${jsch.version} com.jcraft @@ -463,7 +463,7 @@ limitations under the License. org.apache.servicemix.bundles - org.apache.servicemix.bundles.jsch-agentproxy-sshj + org.apache.servicemix.bundles.jsch-agentproxy-jsch ${jsch.agentproxy.bundle.version} @@ -538,16 +538,16 @@ limitations under the License. jclouds-jsch ${jclouds.version} - - org.apache.jclouds.driver - jclouds-sshj - ${jclouds.version} - org.apache.jclouds.api chef ${jclouds.chef.version} + + org.apache.jclouds.common + googlecloud + ${jclouds.version} + diff --git a/services/pom.xml b/services/pom.xml index fba87611..1a4e972d 100644 --- a/services/pom.xml +++ b/services/pom.xml @@ -70,7 +70,7 @@ limitations under the License. org.apache.jclouds.driver - jclouds-sshj + jclouds-jsch diff --git a/services/src/main/java/org/jclouds/karaf/services/internal/ComputeServiceFactory.java b/services/src/main/java/org/jclouds/karaf/services/internal/ComputeServiceFactory.java index ef5f0afb..2b72ac45 100644 --- a/services/src/main/java/org/jclouds/karaf/services/internal/ComputeServiceFactory.java +++ b/services/src/main/java/org/jclouds/karaf/services/internal/ComputeServiceFactory.java @@ -17,10 +17,10 @@ package org.jclouds.karaf.services.internal; -import com.google.common.base.Strings; -import com.google.common.collect.ImmutableSet; -import com.google.common.reflect.TypeToken; -import com.google.inject.Module; +import java.util.Dictionary; +import java.util.Enumeration; +import java.util.Properties; + import org.jclouds.ContextBuilder; import org.jclouds.apis.ApiMetadata; import org.jclouds.apis.ApiPredicates; @@ -34,7 +34,7 @@ import org.jclouds.logging.log4j.config.Log4JLoggingModule; import org.jclouds.providers.ProviderMetadata; import org.jclouds.providers.ProviderPredicates; -import org.jclouds.sshj.config.SshjSshClientModule; +import org.jclouds.ssh.jsch.config.JschSshClientModule; import org.osgi.framework.BundleContext; import org.osgi.framework.InvalidSyntaxException; import org.osgi.framework.ServiceRegistration; @@ -43,9 +43,10 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Dictionary; -import java.util.Enumeration; -import java.util.Properties; +import com.google.common.base.Strings; +import com.google.common.collect.ImmutableSet; +import com.google.common.reflect.TypeToken; +import com.google.inject.Module; public class ComputeServiceFactory extends ServiceFactorySupport { @@ -159,7 +160,7 @@ public synchronized void updated(String pid, Dictionary properties) throws Confi builder = builder.endpoint(endpoint); } - builder = builder.name(id).modules(ImmutableSet.of(new Log4JLoggingModule(), new SshjSshClientModule())); + builder = builder.name(id).modules(ImmutableSet.of(new Log4JLoggingModule(), new JschSshClientModule())); if (credentialStore != null) { builder = builder.modules(ImmutableSet.of(credentialStore)); diff --git a/utils/pom.xml b/utils/pom.xml index 746e29fb..bc66aeb8 100644 --- a/utils/pom.xml +++ b/utils/pom.xml @@ -33,6 +33,10 @@ limitations under the License. org.apache.jclouds.karaf core + + org.apache.jclouds.common + googlecloud + diff --git a/utils/src/main/java/org/jclouds/karaf/utils/EnvHelper.java b/utils/src/main/java/org/jclouds/karaf/utils/EnvHelper.java index 54ecb39b..f8cdd173 100644 --- a/utils/src/main/java/org/jclouds/karaf/utils/EnvHelper.java +++ b/utils/src/main/java/org/jclouds/karaf/utils/EnvHelper.java @@ -25,6 +25,12 @@ import java.util.Properties; import org.jclouds.Constants; +import org.jclouds.domain.Credentials; +import org.jclouds.googlecloud.GoogleCredentialsFromJson; + +import com.google.common.base.Charsets; +import com.google.common.base.Supplier; +import com.google.common.io.Files; public class EnvHelper { @@ -91,6 +97,22 @@ public static String getComputeCredential(String credential) { credential, Constants.PROPERTY_CREDENTIAL, JCLOUDS_COMPUTE_CREDENTIAL); } + /** + * Extracts the credential value from the Google Cloud credentials json file. + * @param jsonFile + * @return + */ + public static String getGoogleCredentialFromJsonFile(String jsonFile) { + try { + String fileContents = Files.toString(new File(jsonFile), Charsets.UTF_8); + Supplier credentialSupplier = new GoogleCredentialsFromJson(fileContents); + String credential = credentialSupplier.get().credential; + return credential; + } catch (IOException e) { + return null; + } + } + /** * Returns the endpoint value and falls back to env if the specified value is null. *