storage: fix Storage.clone and Storage.clone_volume
1. Volume.import_volume expect volume to be created first. 2. asyncio.wait do not accept generator, it must be concrete iterable.
This commit is contained in:
		
							parent
							
								
									1af7034d57
								
							
						
					
					
						commit
						910f793c61
					
				@ -513,13 +513,22 @@ class Storage(object):
 | 
			
		||||
        src_volume = src_vm.volumes[name]
 | 
			
		||||
        msg = "Importing volume {!s} from vm {!s}"
 | 
			
		||||
        self.vm.log.info(msg.format(src_volume.name, src_vm.name))
 | 
			
		||||
 | 
			
		||||
        # First create the destination volume
 | 
			
		||||
        create_op_ret = dst.create()
 | 
			
		||||
        # clone/import functions may be either synchronous or asynchronous
 | 
			
		||||
        # in the later case, we need to wait for them to finish
 | 
			
		||||
        if asyncio.iscoroutine(create_op_ret):
 | 
			
		||||
            yield from create_op_ret
 | 
			
		||||
 | 
			
		||||
        # Then import data from source volume
 | 
			
		||||
        clone_op_ret = dst.import_volume(src_volume)
 | 
			
		||||
 | 
			
		||||
        # clone/import functions may be either synchronous or asynchronous
 | 
			
		||||
        # in the later case, we need to wait for them to finish
 | 
			
		||||
        if asyncio.iscoroutine(clone_op_ret):
 | 
			
		||||
            clone_op_ret = yield from clone_op_ret
 | 
			
		||||
        self.vm.volumes[name] = clone_op_ret
 | 
			
		||||
            yield from clone_op_ret
 | 
			
		||||
        self.vm.volumes[name] = dst
 | 
			
		||||
        return self.vm.volumes[name]
 | 
			
		||||
 | 
			
		||||
    @asyncio.coroutine
 | 
			
		||||
@ -528,8 +537,8 @@ class Storage(object):
 | 
			
		||||
 | 
			
		||||
        self.vm.volumes = {}
 | 
			
		||||
        with VmCreationManager(self.vm):
 | 
			
		||||
            yield from asyncio.wait(self.clone_volume(src_vm, vol_name)
 | 
			
		||||
                for vol_name in self.vm.volume_config.keys())
 | 
			
		||||
            yield from asyncio.wait([self.clone_volume(src_vm, vol_name)
 | 
			
		||||
                for vol_name in self.vm.volume_config.keys()])
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def outdated_volumes(self):
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user