You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ev...@apache.org on 2014/06/23 20:40:51 UTC
git commit: Fix for JSON parse error on createNodesInGroup
(JCLOUDS-558)
Repository: jclouds
Updated Branches:
refs/heads/master c417ddef6 -> b95898fc0
Fix for JSON parse error on createNodesInGroup (JCLOUDS-558)
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/b95898fc
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/b95898fc
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/b95898fc
Branch: refs/heads/master
Commit: b95898fc0a3d574143f89bfd0f2d0d422fc87de2
Parents: c417dde
Author: Everett Toews <ev...@rackspace.com>
Authored: Thu Jun 19 15:19:18 2014 -0500
Committer: Everett Toews <ev...@rackspace.com>
Committed: Mon Jun 23 13:40:40 2014 -0500
----------------------------------------------------------------------
.../nova/v2_0/config/NovaParserModule.java | 28 +++++-
.../openstack/nova/v2_0/domain/Server.java | 4 +-
.../v2_0/parse/ParseServerWithoutImageTest.java | 99 ++++++++++++++++++++
.../resources/server_details_without_image.json | 74 +++++++++++++++
4 files changed, 202 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b95898fc/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/config/NovaParserModule.java
----------------------------------------------------------------------
diff --git a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/config/NovaParserModule.java b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/config/NovaParserModule.java
index f5f023d..9cc5aef 100644
--- a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/config/NovaParserModule.java
+++ b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/config/NovaParserModule.java
@@ -122,7 +122,16 @@ public class NovaParserModule extends AbstractModule {
@Override
public Server deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext context)
throws JsonParseException {
- Server serverBase = apply((ServerInternal) context.deserialize(jsonElement, ServerInternal.class));
+ Server serverBase = null;
+
+ // Servers can be created without an image so test if an image object is returned
+ if (jsonElement.getAsJsonObject().get("image").isJsonObject()) {
+ serverBase = apply((ServerInternal) context.deserialize(jsonElement, ServerInternal.class));
+ }
+ else {
+ serverBase = apply((ServerInternalWithoutImage) context.deserialize(jsonElement, ServerInternalWithoutImage.class));
+ }
+
Server.Builder<?> result = Server.builder().fromServer(serverBase);
ServerExtendedStatus extendedStatus = context.deserialize(jsonElement, ServerExtendedStatus.class);
if (!Objects.equal(extendedStatus, ServerExtendedStatus.builder().build())) {
@@ -151,5 +160,22 @@ public class NovaParserModule extends AbstractModule {
super(id, name, links, uuid, tenantId, userId, updated, created, hostId, accessIPv4, accessIPv6, status, image, flavor, keyName, configDrive, addresses, metadata, extendedStatus, extendedAttributes, diskConfig);
}
}
+
+ public Server apply(ServerInternalWithoutImage in) {
+ return in.toBuilder().build();
+ }
+
+ private static class ServerInternalWithoutImage extends Server {
+ @ConstructorProperties({
+ "id", "name", "links", "uuid", "tenant_id", "user_id", "updated", "created", "hostId", "accessIPv4", "accessIPv6", "status", "flavor", "key_name", "config_drive", "addresses", "metadata", "extendedStatus", "extendedAttributes", "OS-DCF:diskConfig"
+ })
+ protected ServerInternalWithoutImage(String id, @Nullable String name, java.util.Set<Link> links, @Nullable String uuid, String tenantId,
+ String userId, Date updated, Date created, @Nullable String hostId, @Nullable String accessIPv4,
+ @Nullable String accessIPv6, Server.Status status, Resource flavor, @Nullable String keyName,
+ @Nullable String configDrive, Multimap<String, Address> addresses, Map<String, String> metadata,
+ @Nullable ServerExtendedStatus extendedStatus, @Nullable ServerExtendedAttributes extendedAttributes, @Nullable String diskConfig) {
+ super(id, name, links, uuid, tenantId, userId, updated, created, hostId, accessIPv4, accessIPv6, status, null, flavor, keyName, configDrive, addresses, metadata, extendedStatus, extendedAttributes, diskConfig);
+ }
+ }
}
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b95898fc/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/Server.java
----------------------------------------------------------------------
diff --git a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/Server.java b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/Server.java
index adea635..220ff62 100644
--- a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/Server.java
+++ b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/Server.java
@@ -317,7 +317,7 @@ public class Server extends Resource {
})
protected Server(String id, @Nullable String name, java.util.Set<Link> links, @Nullable String uuid, String tenantId,
String userId, @Nullable Date updated, Date created, @Nullable String hostId, @Nullable String accessIPv4,
- @Nullable String accessIPv6, Server.Status status, Resource image, Resource flavor, @Nullable String keyName,
+ @Nullable String accessIPv6, Server.Status status, @Nullable Resource image, Resource flavor, @Nullable String keyName,
@Nullable String configDrive, Multimap<String, Address> addresses, Map<String, String> metadata,
@Nullable ServerExtendedStatus extendedStatus, @Nullable ServerExtendedAttributes extendedAttributes,
@Nullable String diskConfig) {
@@ -331,7 +331,7 @@ public class Server extends Resource {
this.accessIPv4 = Strings.emptyToNull(accessIPv4);
this.accessIPv6 = Strings.emptyToNull(accessIPv6);
this.status = checkNotNull(status, "status");
- this.image = checkNotNull(image, "image");
+ this.image = image;
this.flavor = checkNotNull(flavor, "flavor");
this.keyName = Strings.emptyToNull(keyName);
this.configDrive = Strings.emptyToNull(configDrive);
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b95898fc/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseServerWithoutImageTest.java
----------------------------------------------------------------------
diff --git a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseServerWithoutImageTest.java b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseServerWithoutImageTest.java
new file mode 100644
index 0000000..d58d8d0
--- /dev/null
+++ b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseServerWithoutImageTest.java
@@ -0,0 +1,99 @@
+/*
+ * 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.openstack.nova.v2_0.parse;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMultimap;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import org.jclouds.date.internal.SimpleDateFormatDateService;
+import org.jclouds.json.BaseItemParserTest;
+import org.jclouds.json.config.GsonModule;
+import org.jclouds.openstack.nova.v2_0.config.NovaParserModule;
+import org.jclouds.openstack.nova.v2_0.domain.Address;
+import org.jclouds.openstack.nova.v2_0.domain.Server;
+import org.jclouds.openstack.nova.v2_0.domain.Server.Status;
+import org.jclouds.openstack.v2_0.domain.Link;
+import org.jclouds.openstack.v2_0.domain.Link.Relation;
+import org.jclouds.openstack.v2_0.domain.Resource;
+import org.jclouds.rest.annotations.SelectJson;
+import org.testng.annotations.Test;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.core.MediaType;
+import java.net.URI;
+
+import static org.jclouds.openstack.nova.v2_0.domain.Address.createV4;
+import static org.jclouds.openstack.nova.v2_0.domain.Address.createV6;
+
+@Test(groups = "unit", testName = "ParseServerWithoutImageTest")
+public class ParseServerWithoutImageTest extends BaseItemParserTest<Server> {
+
+ @Override
+ public String resource() {
+ return "/server_details_without_image.json";
+ }
+
+ @Override
+ @SelectJson("server")
+ @Consumes(MediaType.APPLICATION_JSON)
+ public Server expected() {
+ return Server
+ .builder()
+ .id("52415800-8b69-11e0-9b19-734f000004d2")
+ .tenantId("1234")
+ .userId("5678")
+ .name("sample-f352")
+ .updated(new SimpleDateFormatDateService().iso8601SecondsDateParse("2010-10-10T12:00:00Z"))
+ .created(new SimpleDateFormatDateService().iso8601SecondsDateParse("2010-08-10T12:00:00Z"))
+ .hostId("e4d909c290d0fb1ca068ffaddf22cbd0")
+ .accessIPv4("67.23.10.132")
+ .accessIPv6("::babe:67.23.10.132")
+ .status(Status.BUILD)
+ .diskConfig(Server.DISK_CONFIG_AUTO)
+ .flavor(
+ Resource
+ .builder()
+ .id("52415800-8b69-11e0-9b19-734f216543fd")
+ .name("null")
+ .links(
+ Link.create(
+ Relation.SELF,
+ URI.create("http://servers.api.openstack.org/v1.1/1234/flavors/52415800-8b69-11e0-9b19-734f216543fd")),
+ Link.create(
+ Relation.BOOKMARK,
+ URI.create("http://servers.api.openstack.org/1234/flavors/52415800-8b69-11e0-9b19-734f216543fd")))
+ .build())
+ .metadata(
+ new ImmutableMap.Builder<String, String>().put("Server Label", "Web Head 1")
+ .put("Image Version", "2.1").build())
+ .addresses(ImmutableMultimap.<String, Address>builder()
+ .putAll("public", createV4("67.23.10.132"), createV6("::babe:67.23.10.132"), createV4("67.23.10.131"), createV6("::babe:4317:0A83"))
+ .putAll("private", createV4("10.176.42.16"), createV6("::babe:10.176.42.16"))
+ .build())
+ .links(Link.create(
+ Relation.SELF, URI.create("http://servers.api.openstack.org/v1.1/1234/servers/52415800-8b69-11e0-9b19-734f6f006e54")),
+ Link.create(
+ Relation.BOOKMARK,
+ URI.create("http://servers.api.openstack.org/1234/servers/52415800-8b69-11e0-9b19-734f6f006e54")))
+ .build();
+ }
+
+ protected Injector injector() {
+ return Guice.createInjector(new NovaParserModule(), new GsonModule());
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/b95898fc/apis/openstack-nova/src/test/resources/server_details_without_image.json
----------------------------------------------------------------------
diff --git a/apis/openstack-nova/src/test/resources/server_details_without_image.json b/apis/openstack-nova/src/test/resources/server_details_without_image.json
new file mode 100644
index 0000000..9448733
--- /dev/null
+++ b/apis/openstack-nova/src/test/resources/server_details_without_image.json
@@ -0,0 +1,74 @@
+{
+ "server": {
+ "id": "52415800-8b69-11e0-9b19-734f000004d2",
+ "tenant_id": "1234",
+ "user_id": "5678",
+ "name": "sample-f352",
+ "updated": "2010-10-10T12:00:00Z",
+ "created": "2010-08-10T12:00:00Z",
+ "hostId": "e4d909c290d0fb1ca068ffaddf22cbd0",
+ "accessIPv4" : "67.23.10.132",
+ "accessIPv6" : "::babe:67.23.10.132",
+ "status": "BUILD(scheduling)",
+ "progress": 60,
+ "OS-DCF:diskConfig": "AUTO",
+ "image" : "",
+ "flavor" : {
+ "id": "52415800-8b69-11e0-9b19-734f216543fd",
+ "links": [
+ {
+ "rel": "self",
+ "href": "http://servers.api.openstack.org/v1.1/1234/flavors/52415800-8b69-11e0-9b19-734f216543fd"
+ },
+ {
+ "rel": "bookmark",
+ "href": "http://servers.api.openstack.org/1234/flavors/52415800-8b69-11e0-9b19-734f216543fd"
+ }
+ ]
+ },
+ "addresses": {
+ "public" : [
+ {
+ "version": 4,
+ "addr": "67.23.10.132"
+ },
+ {
+ "version": 6,
+ "addr": "::babe:67.23.10.132"
+ },
+ {
+ "version": 4,
+ "addr": "67.23.10.131"
+ },
+ {
+ "version": 6,
+ "addr": "::babe:4317:0A83"
+ }
+ ],
+ "private" : [
+ {
+ "version": 4,
+ "addr": "10.176.42.16"
+ },
+ {
+ "version": 6,
+ "addr": "::babe:10.176.42.16"
+ }
+ ]
+ },
+ "metadata": {
+ "Server Label": "Web Head 1",
+ "Image Version": "2.1"
+ },
+ "links": [
+ {
+ "rel": "self",
+ "href": "http://servers.api.openstack.org/v1.1/1234/servers/52415800-8b69-11e0-9b19-734f6f006e54"
+ },
+ {
+ "rel": "bookmark",
+ "href": "http://servers.api.openstack.org/1234/servers/52415800-8b69-11e0-9b19-734f6f006e54"
+ }
+ ]
+ }
+}
\ No newline at end of file