Merge pull request #1039 from aledsage/fix/NPE-jclouds-toMetadataRecord
Avoid NPE in toMetadataRecord for jclouds machine
diff --git a/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsSshMachineLocation.java b/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsSshMachineLocation.java
index d23ca8c..282a37f 100644
--- a/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsSshMachineLocation.java
+++ b/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsSshMachineLocation.java
@@ -5,6 +5,7 @@
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
@@ -15,7 +16,9 @@
import org.jclouds.compute.ComputeServiceContext;
import org.jclouds.compute.callables.RunScriptOnNode;
import org.jclouds.compute.domain.ExecResponse;
+import org.jclouds.compute.domain.Hardware;
import org.jclouds.compute.domain.NodeMetadata;
+import org.jclouds.compute.domain.Processor;
import org.jclouds.compute.options.RunScriptOptions;
import org.jclouds.domain.LoginCredentials;
import org.jclouds.scriptbuilder.domain.InterpretableStatement;
@@ -209,16 +212,19 @@
@Override
public Map<String, String> toMetadataRecord() {
+ Hardware hardware = node.getHardware();
+ List<? extends Processor> processors = (hardware != null) ? hardware.getProcessors() : null;
+
ImmutableMap.Builder<String, String> builder = ImmutableMap.builder();
builder.putAll(super.toMetadataRecord());
putIfNotNull(builder, "provider", getParent().getProvider());
putIfNotNull(builder, "account", getParent().getIdentity());
putIfNotNull(builder, "serverId", node.getProviderId());
putIfNotNull(builder, "imageId", node.getImageId());
- putIfNotNull(builder, "instanceTypeName", node.getHardware().getName());
- putIfNotNull(builder, "instanceTypeId", node.getHardware().getProviderId());
- putIfNotNull(builder, "ram", "" + node.getHardware().getRam());
- putIfNotNull(builder, "cpus", "" + node.getHardware().getProcessors().size());
+ putIfNotNull(builder, "instanceTypeName", (hardware != null ? hardware.getName() : null));
+ putIfNotNull(builder, "instanceTypeId", (hardware != null ? hardware.getProviderId() : null));
+ putIfNotNull(builder, "ram", "" + (hardware != null ? hardware.getRam() : null));
+ putIfNotNull(builder, "cpus", "" + (processors != null ? processors.size() : null));
putIfNotNull(builder, "osName", getOsDetails().getName());
putIfNotNull(builder, "osArch", getOsDetails().getArch());
putIfNotNull(builder, "64bit", getOsDetails().is64bit() ? "true" : "false");