qubes/storage: allow snapshots of snapshots
It may make sense to create 'snapshot' volume out of already 'snapshot', not only 'origin'. In pracice it will exactly the same as 'snapshot connected directly to 'origin'. QubesOS/qubes-issues#866
This commit is contained in:
		
							parent
							
								
									48176d51f1
								
							
						
					
					
						commit
						54c70766a4
					
				| @ -237,13 +237,27 @@ class FilePool(Pool): | ||||
|             raise StoragePoolException("Unknown volume type " + volume_type) | ||||
| 
 | ||||
|         if volume_type in ['snapshot', 'read-only']: | ||||
|             origin_pool = vm.app.get_pool( | ||||
|                 vm.template.volume_config[name]['pool']) | ||||
|             name = volume_config['name'] | ||||
| 
 | ||||
|             origin_vm = vm | ||||
|             while hasattr(origin_vm, 'template') and \ | ||||
|                 origin_vm.volume_config[name]['volume_type'] == \ | ||||
|                     volume_type: | ||||
|                 origin_vm = origin_vm.template | ||||
| 
 | ||||
|             expected_origin_type = { | ||||
|                 'snapshot': 'origin', | ||||
|                 'read-only': 'read-write',  # FIXME: really? | ||||
|             }[volume_type] | ||||
|             assert origin_vm.volume_config[name]['volume_type'] == \ | ||||
|                 expected_origin_type | ||||
| 
 | ||||
|             origin_pool = vm.app.get_pool(origin_vm.volume_config[name]['pool']) | ||||
|             assert isinstance(origin_pool, | ||||
|                               FilePool), 'Origin volume not a file volume' | ||||
|             volume_config['target_dir'] = origin_pool.target_dir(vm.template) | ||||
|             name = volume_config['name'] | ||||
|             volume_config['size'] = vm.template.volume_config[name]['size'] | ||||
| 
 | ||||
|             volume_config['target_dir'] = origin_pool.target_dir(origin_vm) | ||||
|             volume_config['size'] = origin_vm.volume_config[name]['size'] | ||||
|         else: | ||||
|             volume_config['target_dir'] = self.target_dir(vm) | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Marek Marczykowski-Górecki
						Marek Marczykowski-Górecki