@@ -2276,7 +2276,8 @@ def test_detach_interface(self, mock_uv):
22762276 @mock .patch .object (objects .Instance , 'save' )
22772277 def _test_rebuild (self , mock_save , mock_add_instance_info ,
22782278 mock_looping , mock_wait_active , mock_metadata ,
2279- preserve = False ):
2279+ preserve = False , reimage_boot_volume = False ,
2280+ block_device_info = None ):
22802281 node_uuid = uuidutils .generate_uuid ()
22812282 node = _get_cached_node (id = node_uuid , instance_id = self .instance_id )
22822283 self .mock_conn .get_node .return_value = node
@@ -2300,7 +2301,9 @@ def _test_rebuild(self, mock_save, mock_add_instance_info,
23002301 context = self .ctx , instance = instance , image_meta = image_meta ,
23012302 injected_files = None , admin_password = None , allocations = {},
23022303 bdms = None , detach_block_devices = None , attach_block_devices = None ,
2303- preserve_ephemeral = preserve )
2304+ preserve_ephemeral = preserve ,
2305+ reimage_boot_volume = reimage_boot_volume ,
2306+ block_device_info = block_device_info )
23042307
23052308 mock_save .assert_called_once_with (
23062309 expected_task_state = [task_states .REBUILDING ])
@@ -2339,11 +2342,25 @@ def test_rebuild_no_preserve_ephemeral(self, mock_required_by,
23392342 def test_rebuild_with_configdrive (self , mock_required_by ,
23402343 mock_configdrive ):
23412344 mock_required_by .return_value = True
2342- self ._test_rebuild ()
2345+ self ._test_rebuild (reimage_boot_volume = True )
23432346 # assert configdrive was generated
23442347 mock_configdrive .assert_called_once_with (
23452348 self .ctx , mock .ANY , mock .ANY , mock .ANY , extra_md = {}, files = None )
23462349
2350+ @mock .patch .object (ironic_driver .IronicDriver , '_generate_configdrive' )
2351+ @mock .patch .object (configdrive , 'required_by' )
2352+ def test_rebuild_bfv_fails (self , mock_required_by ,
2353+ mock_configdrive ):
2354+ mock_required_by .return_value = False
2355+ block_device_info = self ._create_fake_block_device_info ()
2356+ e = self .assertRaises (exception .NovaException ,
2357+ self ._test_rebuild ,
2358+ reimage_boot_volume = True ,
2359+ block_device_info = block_device_info )
2360+ self .assertEqual (
2361+ "Ironic doesn't support rebuilding volume backed instances." ,
2362+ str (e ))
2363+
23472364 @mock .patch .object (ironic_driver .IronicDriver ,
23482365 'get_instance_driver_metadata' )
23492366 @mock .patch .object (ironic_driver .IronicDriver , '_generate_configdrive' )
0 commit comments