@@ -2221,7 +2221,8 @@ def test_detach_interface(self, mock_uv):
22212221 '_add_instance_info_to_node' )
22222222 @mock .patch .object (objects .Instance , 'save' )
22232223 def _test_rebuild (self , mock_save , mock_add_instance_info ,
2224- mock_looping , mock_wait_active , preserve = False ):
2224+ mock_looping , mock_wait_active , preserve = False ,
2225+ reimage_boot_volume = False , block_device_info = None ):
22252226 node_uuid = uuidutils .generate_uuid ()
22262227 node = _get_cached_node (id = node_uuid , instance_id = self .instance_id )
22272228 self .mock_conn .get_node .return_value = node
@@ -2239,7 +2240,9 @@ def _test_rebuild(self, mock_save, mock_add_instance_info,
22392240 context = self .ctx , instance = instance , image_meta = image_meta ,
22402241 injected_files = None , admin_password = None , allocations = {},
22412242 bdms = None , detach_block_devices = None , attach_block_devices = None ,
2242- preserve_ephemeral = preserve )
2243+ preserve_ephemeral = preserve ,
2244+ reimage_boot_volume = reimage_boot_volume ,
2245+ block_device_info = block_device_info )
22432246
22442247 mock_save .assert_called_once_with (
22452248 expected_task_state = [task_states .REBUILDING ])
@@ -2276,11 +2279,25 @@ def test_rebuild_no_preserve_ephemeral(self, mock_required_by,
22762279 def test_rebuild_with_configdrive (self , mock_required_by ,
22772280 mock_configdrive ):
22782281 mock_required_by .return_value = True
2279- self ._test_rebuild ()
2282+ self ._test_rebuild (reimage_boot_volume = True )
22802283 # assert configdrive was generated
22812284 mock_configdrive .assert_called_once_with (
22822285 self .ctx , mock .ANY , mock .ANY , mock .ANY , extra_md = {}, files = None )
22832286
2287+ @mock .patch .object (ironic_driver .IronicDriver , '_generate_configdrive' )
2288+ @mock .patch .object (configdrive , 'required_by' )
2289+ def test_rebuild_bfv_fails (self , mock_required_by ,
2290+ mock_configdrive ):
2291+ mock_required_by .return_value = False
2292+ block_device_info = self ._create_fake_block_device_info ()
2293+ e = self .assertRaises (exception .NovaException ,
2294+ self ._test_rebuild ,
2295+ reimage_boot_volume = True ,
2296+ block_device_info = block_device_info )
2297+ self .assertEqual (
2298+ "Ironic doesn't support rebuilding volume backed instances." ,
2299+ str (e ))
2300+
22842301 @mock .patch .object (ironic_driver .IronicDriver , '_generate_configdrive' )
22852302 @mock .patch .object (configdrive , 'required_by' )
22862303 @mock .patch .object (ironic_driver .IronicDriver ,
0 commit comments