Returns the volume id added... mount point is /mnt/vol-<id>/.

def AddNewVolumeToInstance(self, instance_id, vol_size_gb):
    """ Returns the volume id added... mount point is /mnt/vol-<id>/. """
    assert(vol_size_gb >= 1)
    if vol_size_gb > 1000: # probably spending too much if you go bigger
      raise RuntimeError('Adding volumes this large has not been tested.')
    instance = self.__GetInstanceById(instance_id)
    assert(instance)
    # select an unused device
    # see http://askubuntu.com/questions/47617/
    # how-to-attach-new-ebs-volume-to-ubuntu-machine-on-aws
    potential_device_names = ['/dev/xvdf',
                              '/dev/xvdg',
                              '/dev/xvdh', 
                              '/dev/xvdi']
    device_name = None
    for name in potential_device_names:
      if not self.DeviceExists(name, instance):
        device_name = name
        break
    if not device_name:
      raise RuntimeError('No suitable device names available')
    # Attach volume
    volume = self.ec2.create_volume(vol_size_gb, instance.placement)
    volume.attach(instance.id, device_name)
    # wait for volume to attach
    core.WaitForVolumeAttached(volume)
    while not self.DeviceExists(device_name, instance):
        logging.info( 'waiting for device to be attached...')
        time.sleep(5)
    assert(volume.id)
    assert(volume.attach_data.device == device_name)
    # format file system, mount the file system, update fstab to automount
    hostname = instance.dns_name
    add_ebs_volume_playbook = pkg_resources.resource_filename(__name__,
      'ami/playbooks/workstation/add_ebs_volume.yml')
    extra_vars = {}
    extra_vars['volume_name'] = volume.id
    extra_vars['volume_device'] = device_name
    assert(core.RunPlaybookOnHost(add_ebs_volume_playbook, hostname, 
                                  self.ssh_key, extra_vars))      
    return volume.id