'Migrate the volume to the specified host.
Returns a boolean indicating whether the migration occurred, as well as
model_update.'

def _migrate_volume(self, context, volume, host):

    LOG.debug('_migrate_volume(Volume    ID    =    %(id)s,    Volume    Name    =    %(name)s,    host    =    %(host)s)    Start.', {'id': volume.id, 'name': volume.name, 'host': host})
    false_ret = (False, None)
    if ('capabilities' not in host):
        LOG.debug('Host    not    in    capabilities.    Host    =    %s    ', host)
        return false_ret
    capabilities = host['capabilities']
    if (capabilities.get('vendor_name') != self._properties['vendor_name']):
        LOG.debug('Vendor    is    not    %(vendor)s.    capabilities    =    %(capabilities)s    ', {'vendor': self._properties['vendor_name'], 'capabilities': capabilities})
        return false_ret
    temp_conf = self.get_conf(host)
    temp_conf_properties = self.get_conf_properties(temp_conf)
    if (temp_conf_properties['cli_fip'] != self._properties['cli_fip']):
        LOG.debug('FIP    is    mismatch.    FIP    =    %(tempfip)s    !=    %(fip)s', {'tempfip': temp_conf_properties['cli_fip'], 'fip': self._properties['cli_fip']})
        return false_ret
    (rvname, ldn, selected_pool) = self._bind_ld(volume, volume.size, self._validate_migrate_volume, self._convert_id2migratename, self._select_migrate_poolnumber, temp_conf)
    if (selected_pool >= 0):
        specs = self.get_volume_type_qos_specs(volume)
        self.check_io_parameter(specs)
        self._cli.set_io_limit(rvname, specs)
        volume_properties = {'mvname': self.get_ldname(volume.id, self._properties['ld_name_format']), 'rvname': rvname, 'capacity': (volume.size * units.Gi), 'mvid': volume.id, 'rvid': None, 'flag': 'migrate', 'context': self._context}
        self._cli.backup_restore(volume_properties, cli.UnpairWaitForMigrate)
    LOG.debug('_migrate_volume(Volume    ID    =    %(id)s,    Host    =    %(host)s)    End.', {'id': volume.id, 'host': host})
    return (True, [])
