[ 
https://issues.apache.org/jira/browse/JCLOUDS-558?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13989311#comment-13989311
 ] 

Ignasi Barrera commented on JCLOUDS-558:
----------------------------------------

This is the API call jclouds is using to get the list of nodes:
http://docs.openstack.org/api/openstack-compute/2/content/GET_OS-EXT-IPS-MAC-v2_getServersDetailed_v2__tenant_id__servers_detail_ext-os-server-os-ext-ips-mac.html

It returns an image object and not a String. I don't really know why your 
OpenStack installation is returning a String there, but adding a check for an 
empty String does not seem to be the right way to fix it (why not considering 
also numeric or even boolean values there, or just catch any parsing error for 
that field?). The API seems to be returning something different than what is 
said in the docs, so let's first investigate a bit and try understand why, and 
then we'll be in a better position to apply the right fix.

Let's see if the stackers can give some light here!

> JSON parse error on createNodesInGroup
> --------------------------------------
>
>                 Key: JCLOUDS-558
>                 URL: https://issues.apache.org/jira/browse/JCLOUDS-558
>             Project: jclouds
>          Issue Type: Bug
>          Components: jclouds-compute
>    Affects Versions: 1.7.2
>         Environment: jclouds version 1.7.2 and 1.8.0-SNAPSHOT
> ubuntu 14.04 x86_64
> $ java -version
> java version "1.7.0_55"
> OpenJDK Runtime Environment (IcedTea 2.4.7) (7u55-2.4.7-1ubuntu1)
> OpenJDK 64-Bit Server VM (build 24.51-b03, mixed mode)
> openstack Havana 2013.2.3
>            Reporter: Andrew Ruef
>
> using jclouds-example compute-basic: 
> https://github.com/jclouds/jclouds-examples/tree/master/compute-basics
> with command line:
>     java \
>          -Dopenstack-nova.image-id=RegionOne/<image ID> \
>          -Dopenstack-nova.login-user=ubuntu \
>          -Djclouds.trust-all-certs=true \
>          -Djclouds.keystone.credential-type=passwordCredentials \
>          -Dopenstack-nova.endpoint=https://<openstack endpoint host>/v2.0 \
>          -jar target/compute-basics-jar-with-dependencies.jar \
>          openstack-nova <tenant>:<username> <password> mygroup add
> Command fails with exception: 
> {noformat}
> -  no jclouds.zones configured for provider openstack-nova
> -  >> invoking server:list
> -  Sending request 811507394: GET http://<host>/v2/<stuff>/servers/detail 
> HTTP/1.1
> -  >> GET http://<host>/v2/<stuff>/servers/detail HTTP/1.1
> -  >> Accept: application/json
> -  >> X-Auth-Token: <redacted>
> -  Receiving response 811507394: HTTP/1.1 200 OK
> -  << HTTP/1.1 200 OK
> -  << Date: Sat, 03 May 2014 05:36:11 GMT
> -  << Connection: keep-alive
> -  << X-Compute-Request-Id: req-30c4d178-ac5f-4f86-8fc3-9dbd10f593ab
> -  << Content-Type: application/json
> -  << Content-Length: 1503
> -  << "{"servers": [{"status": "ACTIVE", "updated": "2014-05-03T00:45:10Z", 
> "hostId": "cfcfe7bbd3568725754d4cbf500668e0c3890c3f722d322b219559bd", 
> "addresses": {"<tenantid>": [{"OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:46:45:df", 
> "version": 4, "addr": "10.10.3.2", "OS-EXT-IPS:type": "fixed"}, 
> {"OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:46:45:df", "version": 4, "addr": 
> "<ipaddr>", "OS-EXT-IPS:type": "floating"}]}, "links": [{"href": 
> "http://<hostandport>/v2/<stuff>/servers/6aa6bb89-d9ef-4647-982a-803eee53f573",
>  "rel": "self"}, {"href": 
> "http://<hostandport>/<Stuff>/servers/6aa6bb89-d9ef-4647-982a-803eee53f573", 
> "rel": "bookmark"}], "key_name": "foo-test", "image": "", 
> "OS-EXT-STS:task_state": null, "OS-EXT-STS:vm_state": "active", 
> "OS-SRV-USG:launched_at": "2014-05-03T00:45:09.000000", "flavor": {"id": "3", 
> "links": [{"href": "http://<hostandport>/<stuff>/flavors/3", "rel": 
> "bookmark"}]}, "id": "6aa6bb89-d9ef-4647-982a-803eee53f573", 
> "security_groups": [{"name": "default"}], "OS-SRV-USG:terminated_at": null, 
> "OS-EXT-AZ:availability_zone": "FOO", "user_id": "<username>", "name": 
> "<hostname>", "created": "2014-05-03T00:44:12Z", "tenant_id": "<stuff>", 
> "OS-DCF:diskConfig": "MANUAL", "os-extended-volumes:volumes_attached": 
> [{"id": "<stuff>"}], "accessIPv4": "", "accessIPv6": "", "progress": 0, 
> "OS-EXT-STS:power_state": 1, "config_drive": "", "metadata": {}}]}"
> -  Error parsing input
> com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: 
> Expected BEGIN_OBJECT but was STRING
>       at 
> org.jclouds.json.internal.DeserializationConstructorAndReflectiveTypeAdapterFactory$DeserializeIntoParameterizedConstructor.read(DeserializationConstructorAndReflectiveTypeAdapterFactory.java:181)
>  ~[compute-basics-jar-with-dependencies.jar:na]
>       at 
> org.jclouds.json.internal.DeserializationConstructorAndReflectiveTypeAdapterFactory$ParameterReader.read(DeserializationConstructorAndReflectiveTypeAdapterFactory.java:263)
>  ~[compute-basics-jar-with-dependencies.jar:na]
>       at 
> org.jclouds.json.internal.DeserializationConstructorAndReflectiveTypeAdapterFactory$DeserializeIntoParameterizedConstructor.read(DeserializationConstructorAndReflectiveTypeAdapterFactory.java:175)
>  ~[compute-basics-jar-with-dependencies.jar:na]
>       at com.google.gson.Gson.fromJson(Gson.java:803) 
> ~[compute-basics-jar-with-dependencies.jar:na]
>       at com.google.gson.Gson.fromJson(Gson.java:868) 
> ~[compute-basics-jar-with-dependencies.jar:na]
>       at com.google.gson.Gson$1.deserialize(Gson.java:126) 
> ~[compute-basics-jar-with-dependencies.jar:na]
>       at 
> org.jclouds.openstack.nova.v2_0.config.NovaParserModule$ServerAdapter.deserialize(NovaParserModule.java:129)
>  ~[compute-basics-jar-with-dependencies.jar:na]
>       at 
> org.jclouds.openstack.nova.v2_0.config.NovaParserModule$ServerAdapter.deserialize(NovaParserModule.java:124)
>  ~[compute-basics-jar-with-dependencies.jar:na]
>       at com.google.gson.TreeTypeAdapter.read(TreeTypeAdapter.java:58) 
> ~[compute-basics-jar-with-dependencies.jar:na]
>       at 
> org.jclouds.json.internal.NullFilteringTypeAdapterFactories$IterableTypeAdapter.readAndBuild(NullFilteringTypeAdapterFactories.java:92)
>  ~[compute-basics-jar-with-dependencies.jar:na]
>       at 
> org.jclouds.json.internal.NullFilteringTypeAdapterFactories$IterableTypeAdapter.read(NullFilteringTypeAdapterFactories.java:84)
>  ~[compute-basics-jar-with-dependencies.jar:na]
>       at 
> org.jclouds.json.internal.NullFilteringTypeAdapterFactories$IterableTypeAdapter.read(NullFilteringTypeAdapterFactories.java:63)
>  ~[compute-basics-jar-with-dependencies.jar:na]
>       at 
> org.jclouds.json.internal.DeserializationConstructorAndReflectiveTypeAdapterFactory$ParameterReader.read(DeserializationConstructorAndReflectiveTypeAdapterFactory.java:263)
>  ~[compute-basics-jar-with-dependencies.jar:na]
>       at 
> org.jclouds.json.internal.DeserializationConstructorAndReflectiveTypeAdapterFactory$DeserializeIntoParameterizedConstructor.read(DeserializationConstructorAndReflectiveTypeAdapterFactory.java:175)
>  ~[compute-basics-jar-with-dependencies.jar:na]
>       at com.google.gson.Gson.fromJson(Gson.java:803) 
> ~[compute-basics-jar-with-dependencies.jar:na]
>       at com.google.gson.Gson.fromJson(Gson.java:768) 
> ~[compute-basics-jar-with-dependencies.jar:na]
>       at com.google.gson.Gson.fromJson(Gson.java:717) 
> ~[compute-basics-jar-with-dependencies.jar:na]
>       at org.jclouds.json.internal.GsonWrapper.fromJson(GsonWrapper.java:45) 
> ~[compute-basics-jar-with-dependencies.jar:na]
>       at org.jclouds.http.functions.ParseJson.apply(ParseJson.java:84) 
> [compute-basics-jar-with-dependencies.jar:na]
>       at org.jclouds.http.functions.ParseJson.apply(ParseJson.java:78) 
> [compute-basics-jar-with-dependencies.jar:na]
>       at org.jclouds.http.functions.ParseJson.apply(ParseJson.java:64) 
> [compute-basics-jar-with-dependencies.jar:na]
>       at org.jclouds.http.functions.ParseJson.apply(ParseJson.java:44) 
> [compute-basics-jar-with-dependencies.jar:na]
>       at 
> com.google.common.base.Functions$FunctionComposition.apply(Functions.java:216)
>  [compute-basics-jar-with-dependencies.jar:na]
>       at 
> org.jclouds.rest.internal.InvokeSyncToAsyncHttpMethod.invoke(InvokeSyncToAsyncHttpMethod.java:129)
>  [compute-basics-jar-with-dependencies.jar:na]
>       at 
> org.jclouds.rest.internal.InvokeSyncToAsyncHttpMethod.apply(InvokeSyncToAsyncHttpMethod.java:95)
>  [compute-basics-jar-with-dependencies.jar:na]
>       at 
> org.jclouds.rest.internal.InvokeSyncToAsyncHttpMethod.apply(InvokeSyncToAsyncHttpMethod.java:56)
>  [compute-basics-jar-with-dependencies.jar:na]
>       at 
> org.jclouds.reflect.FunctionalReflection$FunctionalInvocationHandler.handleInvocation(FunctionalReflection.java:117)
>  [compute-basics-jar-with-dependencies.jar:na]
>       at 
> com.google.common.reflect.AbstractInvocationHandler.invoke(AbstractInvocationHandler.java:87)
>  [compute-basics-jar-with-dependencies.jar:na]
>       at com.sun.proxy.$Proxy80.listInDetail(Unknown Source) [na:na]
>       at 
> org.jclouds.openstack.nova.v2_0.compute.NovaComputeServiceAdapter.listNodes(NovaComputeServiceAdapter.java:205)
>  [compute-basics-jar-with-dependencies.jar:na]
>       at 
> org.jclouds.compute.strategy.impl.AdaptingComputeServiceStrategies.listDetailsOnNodesMatching(AdaptingComputeServiceStrategies.java:123)
>  [compute-basics-jar-with-dependencies.jar:na]
>       at 
> org.jclouds.compute.strategy.impl.AdaptingComputeServiceStrategies.listNodes(AdaptingComputeServiceStrategies.java:113)
>  [compute-basics-jar-with-dependencies.jar:na]
>       at 
> org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet.getNextNames(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:194)
>  [compute-basics-jar-with-dependencies.jar:na]
>       at 
> org.jclouds.compute.strategy.impl.CreateNodesWithGroupEncodedIntoNameThenAddToSet.execute(CreateNodesWithGroupEncodedIntoNameThenAddToSet.java:123)
>  [compute-basics-jar-with-dependencies.jar:na]
>       at 
> org.jclouds.openstack.nova.v2_0.compute.strategy.ApplyNovaTemplateOptionsCreateNodesWithGroupEncodedIntoNameThenAddToSet.execute(ApplyNovaTemplateOptionsCreateNodesWithGroupEncodedIntoNameThenAddToSet.java:148)
>  [compute-basics-jar-with-dependencies.jar:na]
>       at 
> org.jclouds.compute.internal.BaseComputeService.createNodesInGroup(BaseComputeService.java:215)
>  [compute-basics-jar-with-dependencies.jar:na]
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
> ~[na:1.7.0_55]
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
> ~[na:1.7.0_55]
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>  ~[na:1.7.0_55]
>       at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_55]
>       at 
> com.google.inject.internal.DelegatingInvocationHandler.invoke(DelegatingInvocationHandler.java:37)
>  [compute-basics-jar-with-dependencies.jar:na]
>       at com.sun.proxy.$Proxy59.createNodesInGroup(Unknown Source) [na:na]
>       at org.jclouds.examples.compute.basics.MainApp.main(MainApp.java:169) 
> [compute-basics-jar-with-dependencies.jar:na]
> Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was 
> STRING
>       at 
> com.google.gson.internal.bind.JsonTreeReader.expect(JsonTreeReader.java:139) 
> ~[compute-basics-jar-with-dependencies.jar:na]
>       at 
> com.google.gson.internal.bind.JsonTreeReader.beginObject(JsonTreeReader.java:70)
>  ~[compute-basics-jar-with-dependencies.jar:na]
>       at 
> org.jclouds.json.internal.DeserializationConstructorAndReflectiveTypeAdapterFactory$DeserializeIntoParameterizedConstructor.read(DeserializationConstructorAndReflectiveTypeAdapterFactory.java:167)
>  ~[compute-basics-jar-with-dependencies.jar:na]
>       ... 42 common frames omitted
> {noformat}
> It looks like the JSON schema is not appropriate? This version of OpenStack 
> seems pretty old.. am I doing something wrong? 



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to