Issue with OpenStack and jclouds 1.4.0

52 views
Skip to first unread message

Daniel Stein (ChoreOS)

unread,
Mar 29, 2012, 6:29:36 AM3/29/12
to jclouds
I'm trying to use OpenStack with jclouds 1.4.0, but i'm getting the
following error when running some junit testing:

java.lang.NoClassDefFoundError: org/jclouds/concurrent/
RetryOnTimeOutExceptionFunction
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:634)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:
142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:277)
at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
at
org.jclouds.openstack.config.OpenStackAuthenticationModule.configure(OpenStackAuthenticationModule.java:
66)
at com.google.inject.AbstractModule.configure(AbstractModule.java:59)
at com.google.inject.spi.Elements
$RecordingBinder.install(Elements.java:223)
at com.google.inject.AbstractModule.install(AbstractModule.java:118)
at
org.jclouds.openstack.nova.config.NovaRestClientModule.configure(NovaRestClientModule.java:
68)
at com.google.inject.AbstractModule.configure(AbstractModule.java:59)
at com.google.inject.spi.Elements
$RecordingBinder.install(Elements.java:223)
at com.google.inject.spi.Elements.getElements(Elements.java:101)
at com.google.inject.internal.InjectorShell
$Builder.build(InjectorShell.java:133)
at
com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:
103)
at com.google.inject.Guice.createInjector(Guice.java:95)
at com.google.inject.Guice.createInjector(Guice.java:72)
at
org.jclouds.rest.RestContextBuilder.buildInjector(RestContextBuilder.java:
175)
at
org.jclouds.compute.ComputeServiceContextBuilder.buildInjector(ComputeServiceContextBuilder.java:
52)
at
org.jclouds.compute.ComputeServiceContextBuilder.buildComputeServiceContext(ComputeServiceContextBuilder.java:
65)
at
org.jclouds.compute.ComputeServiceContextFactory.buildContextUnwrappingExceptions(ComputeServiceContextFactory.java:
70)
at
org.jclouds.compute.ComputeServiceContextFactory.createContext(ComputeServiceContextFactory.java:
121)
at
eu.choreos.nodepoolmanager.cloudprovider.OpenStackCloudProvider.getClient(OpenStackCloudProvider.java:
45)
at
eu.choreos.nodepoolmanager.cloudprovider.OpenStackCloudProvider.getNodes(OpenStackCloudProvider.java:
98)
at
eu.choreos.nodepoolmanager.cloudprovider.OpenStackCloudProviderTest.shouldCreateNodeFromPool(OpenStackCloudProviderTest.java:
30)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
43)
at java.lang.reflect.Method.invoke(Method.java:616)
at org.junit.runners.model.FrameworkMethod
$1.runReflectiveCall(FrameworkMethod.java:44)
at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:
15)
at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:
41)
at
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:
20)
at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:
28)
at
org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:
79)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:
71)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:
49)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:
28)
at
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:
31)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:
50)
at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:
38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
467)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
683)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:
390)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:
197)
Caused by: java.lang.ClassNotFoundException:
org.jclouds.concurrent.RetryOnTimeOutExceptionFunction
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
... 57 more

I got the jclouds-all 1.4.0 package using Maven. The code:

public class OpenStackCloudProvider implements CloudProvider {

private static String OP_AUTHURL = "";
private static String OP_USER = "";

private static String OP_ID = "";
private static String OP_APIKEY = "";

private ComputeService getClient(String imageId) {
System.out.println("Getting OS Client...");
Properties overrides = new Properties();
//point the JClouds to the Openstack v 1.1 API endpoint URL
//for swift version 1.4.4 the URL is of the form: http(s)://
ip:port/auth
overrides.setProperty(Constants.PROPERTY_ENDPOINT, OP_AUTHURL);

// get a context with nova that offers the portable
ComputeService api
ComputeServiceContext context = new
ComputeServiceContextFactory().createContext("nova", OP_ID,
OP_APIKEY,

ImmutableSet.<Module> of(),

overrides);

// here's an example of the portable api

// run some nodes
return context.getComputeService();
}

@Override
public Node createNode(Node node) throws RunNodesException {
System.out.println("Creating OpenStack node...");

String imageId = node.getImage();
if (StringUtils.isEmpty(imageId)) {
imageId = "";
}
String image = imageId.substring(imageId.indexOf('/') + 1);

ComputeService client = getClient(image);
Set<? extends NodeMetadata> createdNodes =
client.createNodesInGroup(
"default", 1, getTemplate(client, imageId));
NodeMetadata cloudNode = Iterables.get(createdNodes, 0);

setNodeProperties(node, cloudNode);
client.getContext().close();

System.out.println("OpenStack Node created");
return node;
}

@Override
public Node getNode(String nodeId) throws NodeNotFoundException {
ComputeService client = getClient("");

Node node = new Node();

try {
NodeMetadata cloudNode = client.getNodeMetadata(nodeId);
setNodeProperties(node, cloudNode);
} catch (Exception e) {
throw new NodeNotFoundException();
}

return node;
}

@Override
public List<Node> getNodes() {
List<Node> nodeList = new ArrayList<Node>();
Node node;

ComputeService client = getClient("");
Set<? extends ComputeMetadata> cloudNodes =
client.listNodes();
for (ComputeMetadata computeMetadata : cloudNodes) {
NodeMetadata cloudNode =
client.getNodeMetadata(computeMetadata
.getId());
node = new Node();

setNodeProperties(node, cloudNode);
if (node.getState() != 1) {
nodeList.add(node);
}
}

client.getContext().close();

return nodeList;
}

@Override
public void destroyNode(String id) {
ComputeService client = getClient("");
client.destroyNode(id);
client.getContext().close();
}

@Override
public Node createOrUseExistingNode(Node node) throws
RunNodesException {
// TODO Auto-generated method stub
return null;
}

private Template getTemplate(ComputeService client, String
imageId) {

if (imageId.isEmpty()) {
Set <? extends Image> images = client.listImages();
imageId = images.toArray()[0].toString();
}

TemplateBuilder builder =
client.templateBuilder().imageId(imageId);
Set <? extends Hardware> profiles =
client.listHardwareProfiles();
builder.hardwareId(profiles.toArray()[0].toString());
Template template = builder.build();
//TemplateOptions options = template.getOptions();
return template;
}

private void setNodeProperties(Node node, NodeMetadata cloudNode)
{
setNodeIp(node, cloudNode);
node.setHostname(cloudNode.getName());
node.setSo(cloudNode.getOperatingSystem().getName());
node.setId(cloudNode.getId());
node.setImage(cloudNode.getImageId());
node.setState(cloudNode.getState().ordinal());
node.setUser(OP_USER);
node.setPrivateKey(OP_APIKEY);
}

private void setNodeIp(Node node, NodeMetadata cloudNode) {
Iterator<String> publicAddresses =
cloudNode.getPublicAddresses()
.iterator();

if (publicAddresses != null && publicAddresses.hasNext()) {
node.setIp(publicAddresses.next());
}
}

}


Adrian Cole

unread,
Mar 29, 2012, 8:43:20 AM3/29/12
to jcl...@googlegroups.com

Do you have 1.5 in your classpath?  The class you in your trace was removed in 1.5

On Mar 29, 2012 6:29 AM, "Daniel Stein (ChoreOS)" <ksatec...@gmail.com> wrote:

Daniel Stein (ChoreOS)

unread,
Mar 29, 2012, 9:37:33 AM3/29/12
to jclouds
I'm using jclouds 1.4, no 1.5 in my classpath.

On Mar 29, 9:43 am, Adrian Cole <adrian.f.c...@gmail.com> wrote:
> Do you have 1.5 in your classpath?  The class you in your trace was removed
> in 1.5
> On Mar 29, 2012 6:29 AM, "Daniel Stein (ChoreOS)" <ksatechnol...@gmail.com>
> wrote:

Adrian Cole

unread,
Mar 29, 2012, 9:43:35 AM3/29/12
to jcl...@googlegroups.com
actually, my mistake. This class is in 1.5, too.

how are you managing your classpath?
-A

> --
> You received this message because you are subscribed to the Google Groups "jclouds" group.
> To post to this group, send email to jcl...@googlegroups.com.
> To unsubscribe from this group, send email to jclouds+u...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/jclouds?hl=en.
>

Daniel Stein (ChoreOS)

unread,
Mar 29, 2012, 10:02:02 AM3/29/12
to jclouds
I got jclouds 1.4.0 using Maven.
> ...
>
> read more »

Adrian Cole

unread,
Mar 29, 2012, 10:06:39 AM3/29/12
to jcl...@googlegroups.com
ok. I would switch to 1.5.0-alpha.1 for openstack, since old is
crappy anyway. Provided you are running keystone essex, this is best.
Are you running keystone?

also, here's an example app:
https://github.com/jclouds/jclouds-examples/tree/master/compute-basics

-A

Daniel Stein (ChoreOS)

unread,
Apr 4, 2012, 3:50:20 PM4/4/12
to jclouds
I switched to 1.5.0-alpha.1 (got it from Maven), and the error
remains.

I'm not using keystone as far as I know.
> ...
>
> read more »

Adrian Cole

unread,
Apr 4, 2012, 4:57:29 PM4/4/12
to jcl...@googlegroups.com

Ok, so you have a classpath conflict, so best to either use jclouds 1.4.0 or 1.5.x, but not both.

In the directory of your pom.xml, you can do mvn help:dependency-tree to see what's pulling in different versions.

If you are not running keystone (and can't have keystone installed), probably best to use the 1.5.0-SNAPSHOT api "openstack-nova-ec2" and set your endpoint to "https://your-host/services/Cloud"

We can cut another alpha this week, which will be 1.5.0-alpha.3 to solidify this.

-A

Daniel Stein (ChoreOS)

unread,
Apr 4, 2012, 5:05:40 PM4/4/12
to jclouds
I removed 1.4.0 before installing 1.5.0 from Maven. I will double
check it in case something wasn't removed properly, and also try the
snapshot one with the ec2 login.

On Apr 4, 5:57 pm, Adrian Cole <adrian.f.c...@gmail.com> wrote:
> Ok, so you have a classpath conflict, so best to either use jclouds 1.4.0
> or 1.5.x, but not both.
>
> In the directory of your pom.xml, you can do mvn help:dependency-tree to
> see what's pulling in different versions.
>
> If you are not running keystone (and can't have keystone installed),
> probably best to use the 1.5.0-SNAPSHOT api "openstack-nova-ec2" and set
> your endpoint to "https://your-host/services/Cloud"
>
> We can cut another alpha this week, which will be 1.5.0-alpha.3 to solidify
> this.
>
> -A
> On Apr 4, 2012 12:50 PM, "Daniel Stein (ChoreOS)" <ksatechnol...@gmail.com>
> ...
>
> read more »

Adrian Cole

unread,
Apr 4, 2012, 5:12:59 PM4/4/12
to jcl...@googlegroups.com

Cool.  Keep us posted!

Daniel Stein (ChoreOS)

unread,
Apr 11, 2012, 2:57:44 PM4/11/12
to jclouds
I managed to get jclouds 1.5.0-alpha.1 to work with nova (I had to
reinstall the vm since the hdd died). I managed to login with nova
credentials, but i'm getting an error after the login is accepted.
Also, the openstack I have access to was installed with its defaults,
and I can't change it in any way.

The error:
java.lang.IllegalStateException: URI is not available
at org.jclouds.openstack.nova.domain.Resource.getURI(Resource.java:
50)
at
org.jclouds.openstack.nova.compute.functions.NovaImageToImage.apply(NovaImageToImage.java:
52)
at
org.jclouds.openstack.nova.compute.functions.NovaImageToImage.apply(NovaImageToImage.java:
35)
at com.google.common.collect.Iterators$8.next(Iterators.java:765)
at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:267)
at
org.jclouds.openstack.nova.compute.suppliers.NovaImageSupplier.get(NovaImageSupplier.java:
65)
at
org.jclouds.openstack.nova.compute.suppliers.NovaImageSupplier.get(NovaImageSupplier.java:
44)
at org.jclouds.compute.config.BaseComputeServiceContextModule
$8.get(BaseComputeServiceContextModule.java:217)
at org.jclouds.compute.config.BaseComputeServiceContextModule
$8.get(BaseComputeServiceContextModule.java:214)
at
org.jclouds.rest.suppliers.SetAndThrowAuthorizationExceptionSupplier.get(SetAndThrowAuthorizationExceptionSupplier.java:
49)
at
org.jclouds.concurrent.RetryOnTimeOutExceptionSupplier.get(RetryOnTimeOutExceptionSupplier.java:
47)
at com.google.common.base.Suppliers
$ExpiringMemoizingSupplier.get(Suppliers.java:173)
at
org.jclouds.rest.suppliers.MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.get(MemoizedRetryOnTimeOutButNotOnAuthorizationExceptionSupplier.java:
59)
at
org.jclouds.openstack.nova.compute.functions.ServerToNodeMetadata.parseImage(ServerToNodeMetadata.java:
134)
at
org.jclouds.openstack.nova.compute.functions.ServerToNodeMetadata.apply(ServerToNodeMetadata.java:
109)
at
org.jclouds.openstack.nova.compute.functions.ServerToNodeMetadata.apply(ServerToNodeMetadata.java:
51)
at com.google.common.collect.Iterators$8.next(Iterators.java:765)
at com.google.common.collect.Iterators
$7.computeNext(Iterators.java:627)
at
com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:
141)
at
com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:
136)
at com.google.common.collect.Sets.newLinkedHashSet(Sets.java:267)
at
org.jclouds.compute.internal.BaseComputeService.listNodes(BaseComputeService.java:
337)
at
eu.choreos.nodepoolmanager.cloudprovider.OpenStackCloudProvider.getNodes(OpenStackCloudProvider.java:
99)
On Apr 4, 6:12 pm, Adrian Cole <adrian.f.c...@gmail.com> wrote:
> Cool.  Keep us posted!
> On Apr 4, 2012 2:05 PM, "Daniel Stein (ChoreOS)" <ksatechnol...@gmail.com>
> ...
>
> read more »
Reply all
Reply to author
Forward
0 new messages