function instanceInfo(instance) {
var securityGroups = [];
for (var group in Iterator(instance.getSecurityGroups())) {
securityGroups.push(String(group.getGroupName()));
}
var tags = [];
for (var tag in Iterator(instance.getTags())) {
tags.push({
key : String(tag.getKey()),
value : String(tag.getValue())
});
}
return {
architecture : String(instance.getArchitecture()),
clientToken : String(instance.getClientToken()),
ebsOptimized : !!instance.getEbsOptimized(),
hypervisor : String(instance.getHypervisor()),
amiId : String(instance.getImageId()),
instanceId : String(instance.getInstanceId()),
instanceType : String(instance.getInstanceType()),
keyName : String(instance.getKeyName()),
launchTime : new Date(instance.getLaunchTime().getTime()),
platform : String(instance.getPlatform()),
privateDnsName : String(instance.getPrivateDnsName()),
privateIpAddress : String(instance.getPrivateIpAddress()),
publicDnsName : String(instance.getPublicDnsName()),
publicIpAddress : String(instance.getPublicIpAddress()),
ramdiskId : String(instance.getRamdiskId()),
rootDeviceName : String(instance.getRootDeviceName()),
rootDeviceType : String(instance.getRootDeviceType()),
securityGroups : securityGroups,
state : String(instance.getState().getName()),
stateReason : String(instance.getStateReason() ? instance.getStateReason().getMessage() : null),
stateTransitionReason : String(instance.getStateTransitionReason()),
tags : tags
};
}