mirror of
https://github.com/apache/jclouds.git
synced 2025-02-16 15:08:28 +00:00
Add a special case to distinguish when Cloudstack says 'template' but means 'TemplateExtract' - fixes the failing unit test
This commit is contained in:
parent
a2b6eac75f
commit
1e7592ac98
@ -27,6 +27,7 @@ import javax.annotation.Resource;
|
|||||||
import javax.inject.Named;
|
import javax.inject.Named;
|
||||||
import javax.inject.Singleton;
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
|
import com.google.common.base.Strings;
|
||||||
import org.jclouds.cloudstack.domain.AsyncJob;
|
import org.jclouds.cloudstack.domain.AsyncJob;
|
||||||
import org.jclouds.cloudstack.domain.AsyncJob.Builder;
|
import org.jclouds.cloudstack.domain.AsyncJob.Builder;
|
||||||
import org.jclouds.cloudstack.domain.AsyncJobError;
|
import org.jclouds.cloudstack.domain.AsyncJobError;
|
||||||
@ -36,6 +37,7 @@ import org.jclouds.cloudstack.domain.PortForwardingRule;
|
|||||||
import org.jclouds.cloudstack.domain.PublicIPAddress;
|
import org.jclouds.cloudstack.domain.PublicIPAddress;
|
||||||
import org.jclouds.cloudstack.domain.SecurityGroup;
|
import org.jclouds.cloudstack.domain.SecurityGroup;
|
||||||
import org.jclouds.cloudstack.domain.Template;
|
import org.jclouds.cloudstack.domain.Template;
|
||||||
|
import org.jclouds.cloudstack.domain.TemplateExtraction;
|
||||||
import org.jclouds.cloudstack.domain.VirtualMachine;
|
import org.jclouds.cloudstack.domain.VirtualMachine;
|
||||||
import org.jclouds.domain.JsonBall;
|
import org.jclouds.domain.JsonBall;
|
||||||
import org.jclouds.json.Json;
|
import org.jclouds.json.Json;
|
||||||
@ -61,7 +63,7 @@ public class ParseTypedAsyncJob implements Function<AsyncJob<Map<String, JsonBal
|
|||||||
@Named("jclouds.cloudstack.jobresult-type-map")
|
@Named("jclouds.cloudstack.jobresult-type-map")
|
||||||
Map<String, Class<?>> typeMap = ImmutableMap.<String, Class<?>> builder().put("securitygroup", SecurityGroup.class)
|
Map<String, Class<?>> typeMap = ImmutableMap.<String, Class<?>> builder().put("securitygroup", SecurityGroup.class)
|
||||||
.put("portforwardingrule", PortForwardingRule.class).put("ipforwardingrule", IPForwardingRule.class)
|
.put("portforwardingrule", PortForwardingRule.class).put("ipforwardingrule", IPForwardingRule.class)
|
||||||
.put("template", Template.class).put("network", Network.class).put("ipaddress", PublicIPAddress.class)
|
.put("network", Network.class).put("ipaddress", PublicIPAddress.class)
|
||||||
.put("virtualmachine", VirtualMachine.class).build();
|
.put("virtualmachine", VirtualMachine.class).build();
|
||||||
private final Json json;
|
private final Json json;
|
||||||
|
|
||||||
@ -80,7 +82,15 @@ public class ParseTypedAsyncJob implements Function<AsyncJob<Map<String, JsonBal
|
|||||||
builder.result(null);
|
builder.result(null);
|
||||||
} else {
|
} else {
|
||||||
Entry<String, JsonBall> entry = Iterables.get(toParse.getResult().entrySet(), 0);
|
Entry<String, JsonBall> entry = Iterables.get(toParse.getResult().entrySet(), 0);
|
||||||
if (typeMap.containsKey(entry.getKey())) {
|
if ("template".equals(entry.getKey())) {
|
||||||
|
// Sometimes Cloudstack will say 'template' and the payload is a Template object.
|
||||||
|
// Sometimes Cloudstack will say 'template' and the payload is a TemplateExtraction object.
|
||||||
|
// The 'state' field only exists on TemplateExtraction, so we can test this to work out what we have actually been given.
|
||||||
|
Template template = json.fromJson(entry.getValue().toString(), Template.class);
|
||||||
|
TemplateExtraction templateExtraction = json.fromJson(entry.getValue().toString(), TemplateExtraction.class);
|
||||||
|
boolean isTemplate = Strings.isNullOrEmpty(templateExtraction.getState());
|
||||||
|
builder.result(isTemplate ? template : templateExtraction);
|
||||||
|
} else if (typeMap.containsKey(entry.getKey())) {
|
||||||
builder.result(json.fromJson(entry.getValue().toString(), typeMap.get(entry.getKey())));
|
builder.result(json.fromJson(entry.getValue().toString(), typeMap.get(entry.getKey())));
|
||||||
} else {
|
} else {
|
||||||
logger.warn(
|
logger.warn(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user