docs: def _extract_instance_info(instances):
      '''
      Given an instance query, return a dict of all instance data
      '''
      ret = {}
      for instance in instances:
          # items could be type dict or list (for stopped EC2 instances)
          if isinstance(instance['instancesSet']['item'], list):
              for item in instance['instancesSet']['item']:
                  name = _extract_name_tag(item)
                  ret[name] = item
                  ret[name]['name'] = name
                  ret[name].update(
                      dict(
                          id=item['instanceId'],
                          image=item['imageId'],
                          size=item['instanceType'],
                          state=item['instanceState']['name'],
                          private_ips=item.get('privateIpAddress', []),
                          public_ips=item.get('ipAddress', [])
                      )
                  )
          else:
              item = instance['instancesSet']['item']
              name = _extract_name_tag(item)
              ret[name] = item
              ret[name]['name'] = name
              ret[name].update(
                  dict(
                      id=item['instanceId'],
                      image=item['imageId'],
                      size=item['instanceType'],
                      state=item['instanceState']['name'],
                      private_ips=item.get('privateIpAddress', []),
                      public_ips=item.get('ipAddress', [])
                  )
              )
  
      return ret