Hi, I'm the maintainer of the jenkins jclouds-plugin and just wanted to chime in here...
I'd suggest designing that little test program as a LiveTest (fetching
account-specifics and credentials from a local maven settings.xml). If
you like, I can help with that but not before the end of next week
(extremely busy at work right now).
Cheers
-Fritz
On 09.03.2017 13:03, Ignasi Barrera wrote:
> I'd say you could just create a snapshot in your account and write a
> small main program that calls `listNodes` . Something like this:
>
> try {
> String identity = "<client email>"; // Something like
> "[email protected]"
> String credential = Files.toString(new File("<path to the GCE
> account private key>"), Charsets.UTF_8);
>
> ComputeServiceContext ctx =
> ContextBuilder.newBuilder("google-compute-engine")
> .credentials(identity, credential)
> .modules(ImmutableSet.of(new SshjSshClientModule()))
> .buildView(ComputeServiceContext.class);
>
> ComputeService compute = ctx.getComputeService();
>
> compute.listNodes(); // This will fail if there are snapshots
> until the issue is fixed.
> finally {
> ctx.close();
> }
>
> You'll just need to add the
> "org.apache.jclouds.provider/google-compute-engine" and
> "org.apache.jclouds.driver/jclouds-sshj" dependencies to run that
> small program.
>
>
> You can have a look at the README for more info on how to get the credentials:
> https://github.com/jclouds/jclouds/tree/master/providers/google-compute-engine
>
>
> HTH!
>
> I.
>
> On 8 March 2017 at 17:57, Tomasz Wojtun <[email protected]> wrote:
>> Hi Ignasi.
>>
>> I will be glad to make a pull request. Can you tell me if there is an easy
>> way to test the fix in IDE?
>>
>> Regards,
>> Tomasz
>>
>> On 07/03/2017, 14:32, "Ignasi Barrera" <[email protected]> wrote:
>>
>> Hi Tomasz,
>>
>> You're right. jclouds should not fail in that case, The
>> "diskuRIToImage" in the InstanceToNodeMetadata class is a cache, and
>> it makes no sense to try to load a "null" key. I'd say the right way
>> to fix it is just to execute this [1] only if the input disk's source
>> is not null. Do you want to try opening a pull request with a patch?
>> I'd be happy to help!
>>
>>
>> I.
>>
>> [1]
>> https://github.com/jclouds/jclouds/blob/master/providers/google-compute-engine/src/main/java/org/jclouds/googlecomputeengine/compute/functions/InstanceToNodeMetadata.java#L77
>>
>>
>> On 7 March 2017 at 13:31, Tomasz Wojtun <[email protected]>
>> wrote:
>> > Hi Jclouds users.
>> >
>> >
>> >
>> > I want to use jclouds-plugin on Jenkins to provide jenkina slave
>> machines
>> > on Google Compute.
>> >
>> > The plugin fails to count nodes with specific images, when it comes up
>> on
>> > instance created from snapshot.
>> >
>> > The cause seems to be in jclouds code.
>> >
>> > Shouldn’t diskURIToImage.getUnchecked() in InstanceToNodeMetadata
>> return
>> > null and not throw an error in this case?
>> >
>> >
>> >
>> > Best regards,
>> >
>> > Tomasz
>> >
>> >
>> >
>> > StackTrace:
>> >
>> > Timer task
>> hudson.slaves.NodeProvisioner$NodeProvisionerInvoker@79b4d01d
>> > failed
>> > shaded.com.google.common.util.concurrent.UncheckedExecutionException:
>> > java.util.concurrent.ExecutionException: could not find image for disk
>> >
>> https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/INSTANCE_NAME:
>> > endpoint for [0] not configured for
>> > org.jclouds.googlecomputeengine.compute.functions.Resources.public
>> abstract
>> > org.jclouds.googlecomputeengine.domain.Image
>> >
>> org.jclouds.googlecomputeengine.compute.functions.Resources.image(java.net.URI)
>> > at
>> >
>> shaded.com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4829)
>> > at
>> >
>> org.jclouds.googlecomputeengine.compute.functions.InstanceToNodeMetadata.apply(InstanceToNodeMetadata.java:77)
>> > at
>> >
>> org.jclouds.googlecomputeengine.compute.functions.InstanceToNodeMetadata.apply(InstanceToNodeMetadata.java:43)
>> > at
>> >
>> shaded.com.google.common.base.Functions$FunctionComposition.apply(Functions.java:211)
>> > at
>> >
>> shaded.com.google.common.collect.Iterators$8.transform(Iterators.java:794)
>> > at
>> >
>> shaded.com.google.common.collect.TransformedIterator.next(TransformedIterator.java:48)
>> > at
>> >
>> shaded.com.google.common.collect.Iterators$7.computeNext(Iterators.java:646)
>> > at
>> >
>> shaded.com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:143)
>> > at
>> >
>> shaded.com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:138)
>> > at
>> shaded.com.google.common.collect.Iterators.addAll(Iterators.java:356)
>> > at
>> shaded.com.google.common.collect.Iterables.addAll(Iterables.java:350)
>> > at
>> shaded.com.google.common.collect.Sets.newLinkedHashSet(Sets.java:328)
>> > at
>> >
>> org.jclouds.compute.internal.BaseComputeService.listNodes(BaseComputeService.java:342)
>> > at
>> >
>> jenkins.plugins.jclouds.compute.JCloudsCloud.getRunningNodesCount(JCloudsCloud.java:482)
>> > at
>> >
>> jenkins.plugins.jclouds.compute.JCloudsCloud.provision(JCloudsCloud.java:365)
>> > at
>> >
>> hudson.slaves.NodeProvisioner$StandardStrategyImpl.apply(NodeProvisioner.java:701)
>> > at hudson.slaves.NodeProvisioner.update(NodeProvisioner.java:307)
>> > at hudson.slaves.NodeProvisioner.access$000(NodeProvisioner.java:60)
>> > at
>> >
>> hudson.slaves.NodeProvisioner$NodeProvisionerInvoker.doRun(NodeProvisioner.java:798)
>> > at hudson.triggers.SafeTimerTask.run(SafeTimerTask.java:50)
>> > at
>> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
>> > at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
>> > at
>> >
>> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
>> > at
>> >
>> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
>> > at
>> >
>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
>> > at
>> >
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
>> > at java.lang.Thread.run(Thread.java:745)
>> > Caused by: java.util.concurrent.ExecutionException: could not find
>> image for
>> > disk
>> >
>> https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks/INSTANCE_NAME:
>> > endpoint for [0] not configured for
>> > org.jclouds.googlecomputeengine.compute.functions.Resources.public
>> abstract
>> > org.jclouds.googlecomputeengine.domain.Image
>> >
>> org.jclouds.googlecomputeengine.compute.functions.Resources.image(java.net.URI)
>> > at
>> >
>> org.jclouds.googlecomputeengine.compute.loaders.DiskURIToImage.load(DiskURIToImage.java:50)
>> > at
>> >
>> org.jclouds.googlecomputeengine.compute.loaders.DiskURIToImage.load(DiskURIToImage.java:32)
>> > at
>> >
>> shaded.com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3524)
>> > at
>> >
>> shaded.com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2317)
>> > at
>> >
>> shaded.com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2280)
>> > at
>> >
>> shaded.com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2195)
>> > at shaded.com.google.common.cache.LocalCache.get(LocalCache.java:3934)
>> > at
>> shaded.com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3938)
>> > at
>> >
>> shaded.com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4821)
>> > at
>> >
>> shaded.com.google.common.cache.LocalCache$LocalLoadingCache.getUnchecked(LocalCache.java:4827)
>> > ... 26 more
>> > Caused by: java.lang.IllegalArgumentException: endpoint for [0] not
>> > configured for
>> > org.jclouds.googlecomputeengine.compute.functions.Resources.public
>> abstract
>> > org.jclouds.googlecomputeengine.domain.Image
>> >
>> org.jclouds.googlecomputeengine.compute.functions.Resources.image(java.net.URI)
>> > at
>> >
>> shaded.com.google.common.base.Preconditions.checkArgument(Preconditions.java:148)
>> > at
>> >
>> org.jclouds.rest.internal.RestAnnotationProcessor.getEndpointInParametersOrNull(RestAnnotationProcessor.java:526)
>> > at
>> >
>> org.jclouds.rest.internal.RestAnnotationProcessor.getEndpointFor(RestAnnotationProcessor.java:548)
>> > at
>> >
>> org.jclouds.rest.internal.RestAnnotationProcessor.apply(RestAnnotationProcessor.java:204)
>> > at
>> >
>> org.jclouds.rest.internal.RestAnnotationProcessor.apply(RestAnnotationProcessor.java:137)
>> > at
>> >
>> org.jclouds.rest.internal.InvokeHttpMethod.toCommand(InvokeHttpMethod.java:188)
>> > at
>> >
>> org.jclouds.rest.internal.InvokeHttpMethod.invoke(InvokeHttpMethod.java:84)
>> > at
>> >
>> org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:73)
>> > at
>> >
>> org.jclouds.rest.internal.InvokeHttpMethod.apply(InvokeHttpMethod.java:44)
>> > at
>> >
>> org.jclouds.rest.internal.DelegatesToInvocationFunction.handle(DelegatesToInvocationFunction.java:156)
>> > at
>> >
>> org.jclouds.rest.internal.DelegatesToInvocationFunction.invoke(DelegatesToInvocationFunction.java:123)
>> > at com.sun.proxy.$Proxy109.image(Unknown Source)
>> > at
>> >
>> org.jclouds.googlecomputeengine.compute.loaders.DiskURIToImage.load(DiskURIToImage.java:48)
>> > ... 35 more
>> >
>> >
>>
>>
signature.asc
Description: OpenPGP digital signature
