Example #1
0
 def test_update_instance_info_unknown_host(self):
     self.host_manager._recreate_instance_info = mock.MagicMock()
     host_name = 'fake_host'
     inst1 = fake_instance.fake_instance_obj('fake_context',
                                             uuid='aaa',
                                             host=host_name)
     inst2 = fake_instance.fake_instance_obj('fake_context',
                                             uuid='bbb',
                                             host=host_name)
     orig_inst_dict = {inst1.uuid: inst1, inst2.uuid: inst2}
     self.host_manager._instance_info = {
         host_name: {
             'instances': orig_inst_dict,
             'updated': False,
         }
     }
     bad_host = 'bad_host'
     inst3 = fake_instance.fake_instance_obj('fake_context',
                                             uuid='ccc',
                                             host=bad_host)
     inst_list3 = objects.InstanceList(objects=[inst3])
     self.host_manager.update_instance_info('fake_context', bad_host,
                                            inst_list3)
     new_info = self.host_manager._instance_info[host_name]
     self.host_manager._recreate_instance_info.assert_called_once_with(
         'fake_context', bad_host)
     self.assertEqual(len(new_info['instances']), len(orig_inst_dict))
     self.assertFalse(new_info['updated'])
Example #2
0
 def test_update_instance_info(self):
     host_name = 'fake_host'
     inst1 = fake_instance.fake_instance_obj('fake_context',
                                             uuid='aaa',
                                             host=host_name)
     inst2 = fake_instance.fake_instance_obj('fake_context',
                                             uuid='bbb',
                                             host=host_name)
     orig_inst_dict = {inst1.uuid: inst1, inst2.uuid: inst2}
     self.host_manager._instance_info = {
         host_name: {
             'instances': orig_inst_dict,
             'updated': False,
         }
     }
     inst3 = fake_instance.fake_instance_obj('fake_context',
                                             uuid='ccc',
                                             host=host_name)
     inst4 = fake_instance.fake_instance_obj('fake_context',
                                             uuid='ddd',
                                             host=host_name)
     update = objects.InstanceList(objects=[inst3, inst4])
     self.host_manager.update_instance_info('fake_context', host_name,
                                            update)
     new_info = self.host_manager._instance_info[host_name]
     self.assertEqual(len(new_info['instances']), 4)
     self.assertTrue(new_info['updated'])
    def _get_group_details_with_filter_not_configured(self, policy):
        wrong_filter = {
            'affinity': 'ServerGroupAntiAffinityFilter',
            'anti-affinity': 'ServerGroupAffinityFilter',
        }
        self.flags(scheduler_default_filters=[wrong_filter[policy]])

        instance = fake_instance.fake_instance_obj(self.context,
                                                   params={'host': 'hostA'})

        group = objects.InstanceGroup()
        group.uuid = str(uuid.uuid4())
        group.members = [instance.uuid]
        group.policies = [policy]

        with contextlib.nested(
                mock.patch.object(objects.InstanceGroup,
                                  'get_by_instance_uuid',
                                  return_value=group),
                mock.patch.object(objects.InstanceGroup,
                                  'get_hosts',
                                  return_value=['hostA']),
        ) as (get_group, get_hosts):
            scheduler_utils._SUPPORTS_ANTI_AFFINITY = None
            scheduler_utils._SUPPORTS_AFFINITY = None
            self.assertRaises(exception.UnsupportedPolicyException,
                              scheduler_utils._get_group_details, self.context,
                              'fake-uuid')
Example #4
0
 def fake_compute_api_get(self, context, instance_id,
                          want_objects=False, expected_attrs=None):
     if want_objects:
         return fake_instance.fake_instance_obj(
                 context, **{'uuid': instance_id})
     else:
         return {'uuid': instance_id}
Example #5
0
    def _test_live_migration(self, mock_get_vm_dvd_paths,
                             mock_copy_logs, side_effect):
        mock_instance = fake_instance.fake_instance_obj(self.context)
        mock_post = mock.MagicMock()
        mock_recover = mock.MagicMock()
        fake_dest = mock.sentinel.DESTINATION
        self._livemigrops._livemigrutils.live_migrate_vm.side_effect = [
            side_effect]
        if side_effect is vmutils.HyperVException:
            self.assertRaises(vmutils.HyperVException,
                              self._livemigrops.live_migration,
                              self.context, mock_instance, fake_dest,
                              mock_post, mock_recover, False, None)
            mock_recover.assert_called_once_with(self.context, mock_instance,
                                                 fake_dest, False)
        else:
            self._livemigrops.live_migration(context=self.context,
                                             instance_ref=mock_instance,
                                             dest=fake_dest,
                                             post_method=mock_post,
                                             recover_method=mock_recover)

            mock_copy_logs.assert_called_once_with(mock_instance.name,
                                                   fake_dest)
            mock_live_migr = self._livemigrops._livemigrutils.live_migrate_vm
            mock_live_migr.assert_called_once_with(mock_instance.name,
                                                   fake_dest)
            mock_post.assert_called_once_with(self.context, mock_instance,
                                              fake_dest, False)
Example #6
0
 def test_post_live_migration_at_destination(self, mock_log_vm):
     mock_instance = fake_instance.fake_instance_obj(self.context)
     self._livemigrops.post_live_migration_at_destination(
         self.context, mock_instance, network_info=mock.sentinel.NET_INFO,
         block_migration=mock.sentinel.BLOCK_INFO)
     mock_log_vm.assert_called_once_with(mock_instance.name,
                                         mock_instance.uuid)
Example #7
0
    def test_power_on(self, mock_set_vm_state):
        mock_instance = fake_instance.fake_instance_obj(self.context)

        self._vmops.power_on(mock_instance)

        mock_set_vm_state.assert_called_once_with(
            mock_instance, constants.HYPERV_VM_STATE_ENABLED)
Example #8
0
    def test_blank_attach_volume(self):
        no_blank_volume = self.blank_bdm.copy()
        no_blank_volume['volume_id'] = None
        test_bdm = self.driver_classes['blank'](no_blank_volume)
        instance = fake_instance.fake_instance_obj(mock.sentinel.ctx,
                                                   **{'uuid': 'fake-uuid'})
        volume_class = self.driver_classes['volume']
        volume = {
            'id': 'fake-volume-id-2',
            'display_name': 'fake-uuid-blank-vol'
        }

        with contextlib.nested(
                mock.patch.object(self.volume_api,
                                  'create',
                                  return_value=volume),
                mock.patch.object(volume_class,
                                  'attach')) as (vol_create, vol_attach):
            test_bdm.attach(self.context, instance, self.volume_api,
                            self.virt_driver)

            vol_create.assert_called_once_with(
                self.context,
                test_bdm.volume_size,
                'fake-uuid-blank-vol',
                '',
                availability_zone=instance.availability_zone)
            vol_attach.assert_called_once_with(self.context,
                                               instance,
                                               self.volume_api,
                                               self.virt_driver,
                                               do_check_attach=True)
            self.assertEqual('fake-volume-id-2', test_bdm.volume_id)
Example #9
0
 def test_deallocate_for_instance_with_expected_networks(self):
     instance = fake_instance.fake_instance_obj(context.get_admin_context())
     self._test_network_api('deallocate_for_instance',
                            rpc_method='call',
                            instance=instance,
                            requested_networks={},
                            version='1.11')
Example #10
0
    def _test_power_off(self, timeout):
        instance = fake_instance.fake_instance_obj(self.context)
        with mock.patch.object(self._vmops, '_set_vm_state') as mock_set_state:
            self._vmops.power_off(instance, timeout)

            mock_set_state.assert_called_once_with(
                instance, constants.HYPERV_VM_STATE_DISABLED)
Example #11
0
 def fake_compute_api_get(self, context, instance_id, **kwargs):
     want_objects = kwargs.get('want_objects')
     if want_objects:
         return fake_instance.fake_instance_obj(
                 context, **{'uuid': instance_id})
     else:
         return {'uuid': instance_id}
Example #12
0
def fake_compute_get(*args, **kwargs):
    inst = fakes.stub_instance(1,
                               uuid=UUID3,
                               task_state="kayaking",
                               vm_state="slightly crunchy",
                               power_state=1)
    return fake_instance.fake_instance_obj(args[1], **inst)
Example #13
0
    def test_list_resizing_instances(self):
        instances = [{'image_ref': '1',
                      'host': CONF.host,
                      'id': '1',
                      'uuid': '123',
                      'vm_state': vm_states.RESIZED,
                      'task_state': None}]

        all_instances = [fake_instance.fake_instance_obj(None, **instance)
                         for instance in instances]

        image_cache_manager = imagecache.ImageCacheManager()
        self.mox.StubOutWithMock(objects.block_device.BlockDeviceMappingList,
                   'get_by_instance_uuid')

        ctxt = context.get_admin_context()
        objects.block_device.BlockDeviceMappingList.get_by_instance_uuid(
                ctxt, '123').AndReturn(swap_bdm_256)

        self.mox.ReplayAll()
        running = image_cache_manager._list_running_instances(ctxt,
            all_instances)

        self.assertEqual(1, len(running['used_images']))
        self.assertEqual((1, 0, ['instance-00000001']),
                         running['used_images']['1'])
        self.assertEqual(set(['instance-00000001', '123',
                              'instance-00000001_resize', '123_resize']),
                         running['instance_names'])

        self.assertEqual(1, len(running['image_popularity']))
        self.assertEqual(1, running['image_popularity']['1'])
Example #14
0
    def _test_spawn(self, mock_delete_disk_files,
                    mock_ebs_root_in_block_devices, mock_create_root_vhd,
                    mock_create_ephemeral_vhd, mock_get_image_vm_gen,
                    mock_create_instance, mock_configdrive_required,
                    mock_create_config_drive, mock_attach_config_drive,
                    mock_power_on, mock_destroy, exists, boot_from_volume,
                    configdrive_required, fail):
        mock_instance = fake_instance.fake_instance_obj(self.context)
        mock_image_meta = mock.MagicMock()

        fake_root_path = mock_create_root_vhd.return_value
        fake_root_path = None if boot_from_volume else fake_root_path
        fake_ephemeral_path = mock_create_ephemeral_vhd.return_value
        fake_vm_gen = mock_get_image_vm_gen.return_value
        fake_config_drive_path = mock_create_config_drive.return_value

        self._vmops._vmutils.vm_exists.return_value = exists
        mock_ebs_root_in_block_devices.return_value = boot_from_volume
        mock_create_root_vhd.return_value = fake_root_path
        mock_configdrive_required.return_value = configdrive_required
        mock_create_instance.side_effect = fail
        if exists:
            self.assertRaises(exception.InstanceExists, self._vmops.spawn,
                              self.context, mock_instance, mock_image_meta,
                              [mock.sentinel.FILE], mock.sentinel.PASSWORD,
                              mock.sentinel.INFO, mock.sentinel.DEV_INFO)
        elif fail is vmutils.HyperVException:
            self.assertRaises(vmutils.HyperVException, self._vmops.spawn,
                              self.context, mock_instance, mock_image_meta,
                              [mock.sentinel.FILE], mock.sentinel.PASSWORD,
                              mock.sentinel.INFO, mock.sentinel.DEV_INFO)
            mock_destroy.assert_called_once_with(mock_instance)
        else:
            self._vmops.spawn(self.context, mock_instance, mock_image_meta,
                              [mock.sentinel.FILE], mock.sentinel.PASSWORD,
                              mock.sentinel.INFO, mock.sentinel.DEV_INFO)
            self._vmops._vmutils.vm_exists.assert_called_once_with(
                mock_instance.name)
            mock_delete_disk_files.assert_called_once_with(
                mock_instance.name)
            mock_ebs_root_in_block_devices.assert_called_once_with(
                mock.sentinel.DEV_INFO)
            if not boot_from_volume:
                mock_create_root_vhd.assert_called_once_with(self.context,
                                                             mock_instance)
            mock_create_ephemeral_vhd.assert_called_once_with(mock_instance)
            mock_get_image_vm_gen.assert_called_once_with(fake_root_path,
                                                          mock_image_meta)
            mock_create_instance.assert_called_once_with(
                mock_instance, mock.sentinel.INFO, mock.sentinel.DEV_INFO,
                fake_root_path, fake_ephemeral_path, fake_vm_gen)
            mock_configdrive_required.assert_called_once_with(mock_instance)
            if configdrive_required:
                mock_create_config_drive.assert_called_once_with(
                    mock_instance, [mock.sentinel.FILE],
                    mock.sentinel.PASSWORD,
                    mock.sentinel.INFO)
                mock_attach_config_drive.assert_called_once_with(
                    mock_instance, fake_config_drive_path, fake_vm_gen)
            mock_power_on.assert_called_once_with(mock_instance)
Example #15
0
 def test_setup_instance_network_on_host(self, fake_migrate_finish):
     instance = fake_instance.fake_instance_obj(self.context)
     self.network_api.setup_instance_network_on_host(
         self.context, instance, 'fake_compute_source')
     fake_migrate_finish.assert_called_once_with(
         self.context, instance,
         {'source_compute': None, 'dest_compute': 'fake_compute_source'})
    def _test_live_migration(self, mock_get_vm_dvd_paths, mock_copy_logs,
                             side_effect):
        mock_instance = fake_instance.fake_instance_obj(self.context)
        mock_post = mock.MagicMock()
        mock_recover = mock.MagicMock()
        fake_dest = mock.sentinel.DESTINATION
        self._livemigrops._livemigrutils.live_migrate_vm.side_effect = [
            side_effect
        ]
        if side_effect is vmutils.HyperVException:
            self.assertRaises(vmutils.HyperVException,
                              self._livemigrops.live_migration, self.context,
                              mock_instance, fake_dest, mock_post,
                              mock_recover, False, None)
            mock_recover.assert_called_once_with(self.context, mock_instance,
                                                 fake_dest, False)
        else:
            self._livemigrops.live_migration(context=self.context,
                                             instance_ref=mock_instance,
                                             dest=fake_dest,
                                             post_method=mock_post,
                                             recover_method=mock_recover)

            mock_copy_logs.assert_called_once_with(mock_instance.name,
                                                   fake_dest)
            mock_live_migr = self._livemigrops._livemigrutils.live_migrate_vm
            mock_live_migr.assert_called_once_with(mock_instance.name,
                                                   fake_dest)
            mock_post.assert_called_once_with(self.context, mock_instance,
                                              fake_dest, False)
 def fake_get(self,
              context,
              instance_uuid,
              expected_attrs=None,
              want_objects=True):
     return fake_instance.fake_instance_obj(None,
                                            **{'uuid': instance_uuid})
Example #18
0
    def test_power_on(self, mock_set_vm_state):
        mock_instance = fake_instance.fake_instance_obj(self.context)

        self._vmops.power_on(mock_instance)

        mock_set_vm_state.assert_called_once_with(
            mock_instance, constants.HYPERV_VM_STATE_ENABLED)
Example #19
0
    def _test_get_info(self, vm_exists):
        mock_instance = fake_instance.fake_instance_obj(self.context)
        mock_info = mock.MagicMock(spec_set=dict)
        fake_info = {
            'EnabledState': 2,
            'MemoryUsage': mock.sentinel.FAKE_MEM_KB,
            'NumberOfProcessors': mock.sentinel.FAKE_NUM_CPU,
            'UpTime': mock.sentinel.FAKE_CPU_NS
        }

        def getitem(key):
            return fake_info[key]

        mock_info.__getitem__.side_effect = getitem

        expected = hardware.InstanceInfo(state=constants.HYPERV_POWER_STATE[2],
                                         max_mem_kb=mock.sentinel.FAKE_MEM_KB,
                                         mem_kb=mock.sentinel.FAKE_MEM_KB,
                                         num_cpu=mock.sentinel.FAKE_NUM_CPU,
                                         cpu_time_ns=mock.sentinel.FAKE_CPU_NS)

        self._vmops._vmutils.vm_exists.return_value = vm_exists
        self._vmops._vmutils.get_vm_summary_info.return_value = mock_info

        if not vm_exists:
            self.assertRaises(exception.InstanceNotFound, self._vmops.get_info,
                              mock_instance)
        else:
            response = self._vmops.get_info(mock_instance)
            self._vmops._vmutils.vm_exists.assert_called_once_with(
                mock_instance.name)
            self._vmops._vmutils.get_vm_summary_info.assert_called_once_with(
                mock_instance.name)
            self.assertEqual(response, expected)
Example #20
0
    def _get_group_details_with_filter_not_configured(self, policy):
        wrong_filter = {
            'affinity': 'ServerGroupAntiAffinityFilter',
            'anti-affinity': 'ServerGroupAffinityFilter',
        }
        self.flags(scheduler_default_filters=[wrong_filter[policy]])

        instance = fake_instance.fake_instance_obj(self.context,
                params={'host': 'hostA'})

        group = objects.InstanceGroup()
        group.uuid = str(uuid.uuid4())
        group.members = [instance.uuid]
        group.policies = [policy]

        with contextlib.nested(
            mock.patch.object(objects.InstanceGroup, 'get_by_instance_uuid',
                              return_value=group),
            mock.patch.object(objects.InstanceGroup, 'get_hosts',
                              return_value=['hostA']),
        ) as (get_group, get_hosts):
            scheduler_utils._SUPPORTS_ANTI_AFFINITY = None
            scheduler_utils._SUPPORTS_AFFINITY = None
            self.assertRaises(exception.UnsupportedPolicyException,
                              scheduler_utils._get_group_details,
                              self.context, 'fake-uuid')
 def fake_compute_api_get(self, context, instance_id, **kwargs):
     want_objects = kwargs.get('want_objects')
     if want_objects:
         return fake_instance.fake_instance_obj(context,
                                                **{'uuid': instance_id})
     else:
         return {'uuid': instance_id}
Example #22
0
 def test_cleanup_instance_network_on_host(self, fake_migrate_start):
     instance = fake_instance.fake_instance_obj(self.context)
     self.network_api.cleanup_instance_network_on_host(
         self.context, instance, 'fake_compute_source')
     fake_migrate_start.assert_called_once_with(
         self.context, instance,
         {'source_compute': 'fake_compute_source', 'dest_compute': None})
Example #23
0
 def test_deallocate_for_instance(self):
     instance = fake_instance.fake_instance_obj(context.get_admin_context())
     self._test_network_api('deallocate_for_instance',
                            rpc_method='call',
                            requested_networks=self.DefaultArg(None),
                            instance=instance,
                            version='1.11')
Example #24
0
    def test_destroy_exception(self, mock_power_off):
        mock_instance = fake_instance.fake_instance_obj(self.context)
        self._vmops._vmutils.destroy_vm.side_effect = vmutils.HyperVException
        self._vmops._vmutils.vm_exists.return_value = True

        self.assertRaises(vmutils.HyperVException, self._vmops.destroy,
                          mock_instance)
Example #25
0
    def _test_power_off(self, timeout):
        instance = fake_instance.fake_instance_obj(self.context)
        with mock.patch.object(self._vmops, '_set_vm_state') as mock_set_state:
            self._vmops.power_off(instance, timeout)

            mock_set_state.assert_called_once_with(
                instance, constants.HYPERV_VM_STATE_DISABLED)
Example #26
0
    def _test_get_info(self, vm_exists):
        mock_instance = fake_instance.fake_instance_obj(self.context)
        mock_info = mock.MagicMock(spec_set=dict)
        fake_info = {'EnabledState': 2,
                     'MemoryUsage': mock.sentinel.FAKE_MEM_KB,
                     'NumberOfProcessors': mock.sentinel.FAKE_NUM_CPU,
                     'UpTime': mock.sentinel.FAKE_CPU_NS}

        def getitem(key):
            return fake_info[key]
        mock_info.__getitem__.side_effect = getitem

        expected = hardware.InstanceInfo(state=constants.HYPERV_POWER_STATE[2],
                                         max_mem_kb=mock.sentinel.FAKE_MEM_KB,
                                         mem_kb=mock.sentinel.FAKE_MEM_KB,
                                         num_cpu=mock.sentinel.FAKE_NUM_CPU,
                                         cpu_time_ns=mock.sentinel.FAKE_CPU_NS)

        self._vmops._vmutils.vm_exists.return_value = vm_exists
        self._vmops._vmutils.get_vm_summary_info.return_value = mock_info

        if not vm_exists:
            self.assertRaises(exception.InstanceNotFound,
                              self._vmops.get_info, mock_instance)
        else:
            response = self._vmops.get_info(mock_instance)
            self._vmops._vmutils.vm_exists.assert_called_once_with(
                mock_instance.name)
            self._vmops._vmutils.get_vm_summary_info.assert_called_once_with(
                mock_instance.name)
            self.assertEqual(response, expected)
Example #27
0
    def test_destroy_exception(self, mock_power_off):
        mock_instance = fake_instance.fake_instance_obj(self.context)
        self._vmops._vmutils.destroy_vm.side_effect = vmutils.HyperVException
        self._vmops._vmutils.vm_exists.return_value = True

        self.assertRaises(vmutils.HyperVException,
                          self._vmops.destroy, mock_instance)
Example #28
0
    def _test_snapshot(self, mock_save_glance_image, base_disk_path):
        mock_instance = fake_instance.fake_instance_obj(self.context)
        mock_update = mock.MagicMock()
        fake_src_path = os.path.join('fake', 'path')
        self._snapshotops._pathutils.lookup_root_vhd_path.return_value = (
            fake_src_path)
        fake_exp_dir = os.path.join(os.path.join('fake', 'exp'), 'dir')
        self._snapshotops._pathutils.get_export_dir.return_value = fake_exp_dir
        self._snapshotops._vhdutils.get_vhd_parent_path.return_value = (
            base_disk_path)
        fake_snapshot_path = (
            self._snapshotops._vmutils.take_vm_snapshot.return_value)

        self._snapshotops.snapshot(context=self.context,
                                   instance=mock_instance,
                                   image_id=mock.sentinel.IMAGE_ID,
                                   update_task_state=mock_update)

        self._snapshotops._vmutils.take_vm_snapshot.assert_called_once_with(
            mock_instance.name)
        mock_lookup_path = self._snapshotops._pathutils.lookup_root_vhd_path
        mock_lookup_path.assert_called_once_with(mock_instance.name)
        mock_get_vhd_path = self._snapshotops._vhdutils.get_vhd_parent_path
        mock_get_vhd_path.assert_called_once_with(fake_src_path)
        self._snapshotops._pathutils.get_export_dir.assert_called_once_with(
            mock_instance.name)

        expected = [
            mock.call(
                fake_src_path,
                os.path.join(fake_exp_dir, os.path.basename(fake_src_path)))
        ]
        dest_vhd_path = os.path.join(fake_exp_dir,
                                     os.path.basename(fake_src_path))
        if base_disk_path:
            basename = os.path.basename(base_disk_path)
            base_dest_disk_path = os.path.join(fake_exp_dir, basename)
            expected.append(mock.call(base_disk_path, base_dest_disk_path))
            mock_reconnect = self._snapshotops._vhdutils.reconnect_parent_vhd
            mock_reconnect.assert_called_once_with(dest_vhd_path,
                                                   base_dest_disk_path)
            self._snapshotops._vhdutils.merge_vhd.assert_called_once_with(
                dest_vhd_path, base_dest_disk_path)
            mock_save_glance_image.assert_called_once_with(
                self.context, mock.sentinel.IMAGE_ID, base_dest_disk_path)
        else:
            mock_save_glance_image.assert_called_once_with(
                self.context, mock.sentinel.IMAGE_ID, dest_vhd_path)
        self._snapshotops._pathutils.copyfile.has_calls(expected)
        expected_update = [
            mock.call(task_state=task_states.IMAGE_PENDING_UPLOAD),
            mock.call(task_state=task_states.IMAGE_UPLOADING,
                      expected_state=task_states.IMAGE_PENDING_UPLOAD)
        ]
        mock_update.has_calls(expected_update)
        self._snapshotops._vmutils.remove_vm_snapshot.assert_called_once_with(
            fake_snapshot_path)
        self._snapshotops._pathutils.rmtree.assert_called_once_with(
            fake_exp_dir)
Example #29
0
 def test_add_fixed_ip_to_instance_refresh_cache(self):
     sys_meta = flavors.save_flavor_info({}, test_flavor.fake_flavor)
     instance = fake_instance.fake_instance_obj(
         self.context, expected_attrs=['system_metadata'],
         system_metadata=sys_meta)
     network_id = 'fake-network-id'
     self._test_refresh_cache('add_fixed_ip_to_instance', self.context,
                              instance, network_id)
Example #30
0
 def setUp(self):
     super(TestVCPU, self).setUp()
     self._vcpu = vcpu.VCPU()
     self._vcpu._total = 10
     self._vcpu._used = 0
     self._flavor = fake_flavor_obj(vcpus=5)
     self._big_flavor = fake_flavor_obj(vcpus=20)
     self._instance = fake_instance.fake_instance_obj(None)
Example #31
0
 def test_attach_config_drive_gen2(self, mock_attach_drive):
     instance = fake_instance.fake_instance_obj(self.context)
     self._vmops.attach_config_drive(instance,
                                     self._FAKE_CONFIGDRIVE_PATH,
                                     constants.VM_GEN_2)
     mock_attach_drive.assert_called_once_with(
         instance.name, self._FAKE_CONFIGDRIVE_PATH,
         1, 0, constants.CTRL_TYPE_SCSI, constants.DISK)
Example #32
0
 def test_delete_instance_info(self):
     host_name = 'fake_host'
     inst1 = fake_instance.fake_instance_obj('fake_context', uuid='aaa',
                                             host=host_name)
     inst2 = fake_instance.fake_instance_obj('fake_context', uuid='bbb',
                                             host=host_name)
     orig_inst_dict = {inst1.uuid: inst1, inst2.uuid: inst2}
     self.host_manager._instance_info = {
             host_name: {
                 'instances': orig_inst_dict,
                 'updated': False,
             }}
     self.host_manager.delete_instance_info('fake_context', host_name,
                                            inst1.uuid)
     new_info = self.host_manager._instance_info[host_name]
     self.assertEqual(len(new_info['instances']), 1)
     self.assertTrue(new_info['updated'])
Example #33
0
 def test_remove_fixed_ip_from_instance_refresh_cache(self):
     sys_meta = flavors.save_flavor_info({}, test_flavor.fake_flavor)
     instance = fake_instance.fake_instance_obj(
         self.context, expected_attrs=['system_metadata'],
         system_metadata=sys_meta)
     address = 'fake-address'
     self._test_refresh_cache('remove_fixed_ip_from_instance', self.context,
                              instance, address)
Example #34
0
    def _test_spawn(self, mock_delete_disk_files,
                    mock_ebs_root_in_block_devices, mock_create_root_vhd,
                    mock_create_ephemeral_vhd, mock_get_image_vm_gen,
                    mock_create_instance, mock_configdrive_required,
                    mock_create_config_drive, mock_attach_config_drive,
                    mock_power_on, mock_destroy, exists, boot_from_volume,
                    configdrive_required, fail):
        mock_instance = fake_instance.fake_instance_obj(self.context)
        mock_image_meta = mock.MagicMock()

        fake_root_path = mock_create_root_vhd.return_value
        fake_root_path = None if boot_from_volume else fake_root_path
        fake_ephemeral_path = mock_create_ephemeral_vhd.return_value
        fake_vm_gen = mock_get_image_vm_gen.return_value
        fake_config_drive_path = mock_create_config_drive.return_value

        self._vmops._vmutils.vm_exists.return_value = exists
        mock_ebs_root_in_block_devices.return_value = boot_from_volume
        mock_create_root_vhd.return_value = fake_root_path
        mock_configdrive_required.return_value = configdrive_required
        mock_create_instance.side_effect = fail
        if exists:
            self.assertRaises(exception.InstanceExists, self._vmops.spawn,
                              self.context, mock_instance, mock_image_meta,
                              [mock.sentinel.FILE], mock.sentinel.PASSWORD,
                              mock.sentinel.INFO, mock.sentinel.DEV_INFO)
        elif fail is vmutils.HyperVException:
            self.assertRaises(vmutils.HyperVException, self._vmops.spawn,
                              self.context, mock_instance, mock_image_meta,
                              [mock.sentinel.FILE], mock.sentinel.PASSWORD,
                              mock.sentinel.INFO, mock.sentinel.DEV_INFO)
            mock_destroy.assert_called_once_with(mock_instance)
        else:
            self._vmops.spawn(self.context, mock_instance, mock_image_meta,
                              [mock.sentinel.FILE], mock.sentinel.PASSWORD,
                              mock.sentinel.INFO, mock.sentinel.DEV_INFO)
            self._vmops._vmutils.vm_exists.assert_called_once_with(
                mock_instance.name)
            mock_delete_disk_files.assert_called_once_with(mock_instance.name)
            mock_ebs_root_in_block_devices.assert_called_once_with(
                mock.sentinel.DEV_INFO)
            if not boot_from_volume:
                mock_create_root_vhd.assert_called_once_with(
                    self.context, mock_instance)
            mock_create_ephemeral_vhd.assert_called_once_with(mock_instance)
            mock_get_image_vm_gen.assert_called_once_with(
                fake_root_path, mock_image_meta)
            mock_create_instance.assert_called_once_with(
                mock_instance, mock.sentinel.INFO, mock.sentinel.DEV_INFO,
                fake_root_path, fake_ephemeral_path, fake_vm_gen)
            mock_configdrive_required.assert_called_once_with(mock_instance)
            if configdrive_required:
                mock_create_config_drive.assert_called_once_with(
                    mock_instance, [mock.sentinel.FILE],
                    mock.sentinel.PASSWORD, mock.sentinel.INFO)
                mock_attach_config_drive.assert_called_once_with(
                    mock_instance, fake_config_drive_path, fake_vm_gen)
            mock_power_on.assert_called_once_with(mock_instance)
Example #35
0
 def test_allocate_for_instance_refresh_cache(self):
     sys_meta = flavors.save_flavor_info({}, test_flavor.fake_flavor)
     instance = fake_instance.fake_instance_obj(
         self.context, expected_attrs=['system_metadata'],
         system_metadata=sys_meta)
     vpn = 'fake-vpn'
     requested_networks = 'fake-networks'
     self._test_refresh_cache('allocate_for_instance', self.context,
                              instance, vpn, requested_networks)
Example #36
0
    def test_config_drive_update_instance(self, mock_required):
        inst = fake_instance.fake_instance_obj(context.get_admin_context())
        inst.config_drive = ''
        configdrive.update_instance(inst)
        self.assertTrue(inst.config_drive)

        inst.config_drive = True
        configdrive.update_instance(inst)
        self.assertTrue(inst.config_drive)
Example #37
0
    def test_create_vm_com_port_pipe(self):
        mock_instance = fake_instance.fake_instance_obj(self.context)
        pipe_path = r'\\.\pipe\%s' % mock_instance['uuid']

        self._vmops._create_vm_com_port_pipe(mock_instance)

        get_vm_serial_port = self._vmops._vmutils.get_vm_serial_port_connection
        get_vm_serial_port.assert_called_once_with(mock_instance['name'],
                                                   update_connection=pipe_path)
Example #38
0
    def test_create_vm_com_port_pipe(self):
        mock_instance = fake_instance.fake_instance_obj(self.context)
        pipe_path = r'\\.\pipe\%s' % mock_instance['uuid']

        self._vmops._create_vm_com_port_pipe(mock_instance)

        get_vm_serial_port = self._vmops._vmutils.get_vm_serial_port_connection
        get_vm_serial_port.assert_called_once_with(mock_instance['name'],
                                                   update_connection=pipe_path)
Example #39
0
    def test_power_off_soft(self, mock_soft_shutdown, mock_set_state):
        instance = fake_instance.fake_instance_obj(self.context)
        mock_soft_shutdown.return_value = True

        self._vmops.power_off(instance, 1, 0)

        mock_soft_shutdown.assert_called_once_with(
            instance, 1, vmops.SHUTDOWN_TIME_INCREMENT)
        self.assertFalse(mock_set_state.called)
Example #40
0
    def _test_create_config_drive(self, mock_execute, mock_ConfigDriveBuilder,
                                  mock_InstanceMetadata, config_drive_format,
                                  config_drive_cdrom, side_effect):
        mock_instance = fake_instance.fake_instance_obj(self.context)
        self.flags(config_drive_format=config_drive_format)
        self.flags(config_drive_cdrom=config_drive_cdrom, group='hyperv')
        self.flags(config_drive_inject_password=True, group='hyperv')
        self._vmops._pathutils.get_instance_dir.return_value = (self.FAKE_DIR)
        mock_ConfigDriveBuilder().__enter__().make_drive.side_effect = [
            side_effect
        ]

        if config_drive_format != self.ISO9660:
            self.assertRaises(vmutils.UnsupportedConfigDriveFormatException,
                              self._vmops._create_config_drive, mock_instance,
                              [mock.sentinel.FILE], mock.sentinel.PASSWORD,
                              mock.sentinel.NET_INFO)
        elif side_effect is processutils.ProcessExecutionError:
            self.assertRaises(processutils.ProcessExecutionError,
                              self._vmops._create_config_drive, mock_instance,
                              [mock.sentinel.FILE], mock.sentinel.PASSWORD,
                              mock.sentinel.NET_INFO)
        else:
            path = self._vmops._create_config_drive(mock_instance,
                                                    [mock.sentinel.FILE],
                                                    mock.sentinel.PASSWORD,
                                                    mock.sentinel.NET_INFO)
            mock_InstanceMetadata.assert_called_once_with(
                mock_instance,
                content=[mock.sentinel.FILE],
                extra_md={'admin_pass': mock.sentinel.PASSWORD},
                network_info=mock.sentinel.NET_INFO)
            self._vmops._pathutils.get_instance_dir.assert_called_once_with(
                mock_instance.name)
            mock_ConfigDriveBuilder.assert_called_with(
                instance_md=mock_InstanceMetadata())
            mock_make_drive = mock_ConfigDriveBuilder().__enter__().make_drive
            path_iso = os.path.join(self.FAKE_DIR, self.FAKE_CONFIG_DRIVE_ISO)
            path_vhd = os.path.join(self.FAKE_DIR, self.FAKE_CONFIG_DRIVE_VHD)
            mock_make_drive.assert_called_once_with(path_iso)
            if not CONF.hyperv.config_drive_cdrom:
                expected = path_vhd
                mock_execute.assert_called_once_with(CONF.hyperv.qemu_img_cmd,
                                                     'convert',
                                                     '-f',
                                                     'raw',
                                                     '-O',
                                                     'vpc',
                                                     path_iso,
                                                     path_vhd,
                                                     attempts=1)
                self._vmops._pathutils.remove.assert_called_once_with(
                    os.path.join(self.FAKE_DIR, self.FAKE_CONFIG_DRIVE_ISO))
            else:
                expected = path_iso

            self.assertEqual(expected, path)
Example #41
0
def fake_compute_api_get(self, context, instance_id, want_objects=False,
                         **kwargs):
    # BAD_UUID is something that does not exist
    if instance_id == 'BAD_UUID':
        raise exception.InstanceNotFound(instance_id=instance_id)
    else:
        return fake_instance.fake_instance_obj(context, id=1, uuid=instance_id,
                                               task_state=None, host='host1',
                                               vm_state=vm_states.ACTIVE)
Example #42
0
 def test_sync_instance_info(self):
     self.host_manager._recreate_instance_info = mock.MagicMock()
     host_name = 'fake_host'
     inst1 = fake_instance.fake_instance_obj('fake_context', uuid='aaa',
                                             host=host_name)
     inst2 = fake_instance.fake_instance_obj('fake_context', uuid='bbb',
                                             host=host_name)
     orig_inst_dict = {inst1.uuid: inst1, inst2.uuid: inst2}
     self.host_manager._instance_info = {
             host_name: {
                 'instances': orig_inst_dict,
                 'updated': False,
             }}
     self.host_manager.sync_instance_info('fake_context', host_name,
                                          ['bbb', 'aaa'])
     new_info = self.host_manager._instance_info[host_name]
     self.assertFalse(self.host_manager._recreate_instance_info.called)
     self.assertTrue(new_info['updated'])
 def test_post_live_migration_at_destination(self, mock_log_vm):
     mock_instance = fake_instance.fake_instance_obj(self.context)
     self._livemigrops.post_live_migration_at_destination(
         self.context,
         mock_instance,
         network_info=mock.sentinel.NET_INFO,
         block_migration=mock.sentinel.BLOCK_INFO)
     mock_log_vm.assert_called_once_with(mock_instance.name,
                                         mock_instance.uuid)
Example #44
0
 def test_recreate_instance_info(self, mock_get_by_host):
     host_name = 'fake_host'
     inst1 = fake_instance.fake_instance_obj('fake_context', uuid='aaa',
                                             host=host_name)
     inst2 = fake_instance.fake_instance_obj('fake_context', uuid='bbb',
                                             host=host_name)
     orig_inst_dict = {inst1.uuid: inst1, inst2.uuid: inst2}
     new_inst_list = objects.InstanceList(objects=[inst1, inst2])
     mock_get_by_host.return_value = new_inst_list
     self.host_manager._instance_info = {
             host_name: {
                 'instances': orig_inst_dict,
                 'updated': True,
             }}
     self.host_manager._recreate_instance_info('fake_context', host_name)
     new_info = self.host_manager._instance_info[host_name]
     self.assertEqual(len(new_info['instances']), len(new_inst_list))
     self.assertFalse(new_info['updated'])
Example #45
0
 def test_attach_config_drive_gen2(self, mock_attach_drive):
     instance = fake_instance.fake_instance_obj(self.context)
     self._vmops.attach_config_drive(instance, self._FAKE_CONFIGDRIVE_PATH,
                                     constants.VM_GEN_2)
     mock_attach_drive.assert_called_once_with(instance.name,
                                               self._FAKE_CONFIGDRIVE_PATH,
                                               1, 0,
                                               constants.CTRL_TYPE_SCSI,
                                               constants.DISK)
Example #46
0
 def test_check_and_attach_config_drive_unknown_path(self):
     instance = fake_instance.fake_instance_obj(
         self.context, expected_attrs=['system_metadata'])
     instance.config_drive = 'True'
     self._migrationops._pathutils.lookup_configdrive_path.return_value = (
         None)
     self.assertRaises(vmutils.HyperVException,
                       self._migrationops._check_and_attach_config_drive,
                       instance, mock.sentinel.FAKE_VM_GEN)
 def _stub_instance_get(self, uuid=None):
     if uuid is None:
         uuid = uuidutils.generate_uuid()
     instance = fake_instance.fake_instance_obj(self.context,
             id=1, uuid=uuid, vm_state=vm_states.ACTIVE,
             task_state=None, launched_at=timeutils.utcnow())
     self.compute_api.get(self.context, uuid, expected_attrs=None,
                          want_objects=True).AndReturn(instance)
     return instance
Example #48
0
    def test_config_drive_update_instance(self, mock_required):
        inst = fake_instance.fake_instance_obj(context.get_admin_context())
        inst.config_drive = ''
        configdrive.update_instance(inst)
        self.assertTrue(inst.config_drive)

        inst.config_drive = True
        configdrive.update_instance(inst)
        self.assertTrue(inst.config_drive)
Example #49
0
    def test_power_off_soft(self, mock_soft_shutdown, mock_set_state):
        instance = fake_instance.fake_instance_obj(self.context)
        mock_soft_shutdown.return_value = True

        self._vmops.power_off(instance, 1, 0)

        mock_soft_shutdown.assert_called_once_with(
            instance, 1, vmops.SHUTDOWN_TIME_INCREMENT)
        self.assertFalse(mock_set_state.called)
Example #50
0
    def _test_snapshot(self, mock_save_glance_image, base_disk_path):
        mock_instance = fake_instance.fake_instance_obj(self.context)
        mock_update = mock.MagicMock()
        fake_src_path = os.path.join('fake', 'path')
        self._snapshotops._pathutils.lookup_root_vhd_path.return_value = (
            fake_src_path)
        fake_exp_dir = os.path.join(os.path.join('fake', 'exp'), 'dir')
        self._snapshotops._pathutils.get_export_dir.return_value = fake_exp_dir
        self._snapshotops._vhdutils.get_vhd_parent_path.return_value = (
            base_disk_path)
        fake_snapshot_path = (
            self._snapshotops._vmutils.take_vm_snapshot.return_value)

        self._snapshotops.snapshot(context=self.context,
                                   instance=mock_instance,
                                   image_id=mock.sentinel.IMAGE_ID,
                                   update_task_state=mock_update)

        self._snapshotops._vmutils.take_vm_snapshot.assert_called_once_with(
            mock_instance.name)
        mock_lookup_path = self._snapshotops._pathutils.lookup_root_vhd_path
        mock_lookup_path.assert_called_once_with(mock_instance.name)
        mock_get_vhd_path = self._snapshotops._vhdutils.get_vhd_parent_path
        mock_get_vhd_path.assert_called_once_with(fake_src_path)
        self._snapshotops._pathutils.get_export_dir.assert_called_once_with(
            mock_instance.name)

        expected = [mock.call(fake_src_path,
                              os.path.join(fake_exp_dir,
                                           os.path.basename(fake_src_path)))]
        dest_vhd_path = os.path.join(fake_exp_dir,
                                     os.path.basename(fake_src_path))
        if base_disk_path:
            basename = os.path.basename(base_disk_path)
            base_dest_disk_path = os.path.join(fake_exp_dir, basename)
            expected.append(mock.call(base_disk_path, base_dest_disk_path))
            mock_reconnect = self._snapshotops._vhdutils.reconnect_parent_vhd
            mock_reconnect.assert_called_once_with(dest_vhd_path,
                                                   base_dest_disk_path)
            self._snapshotops._vhdutils.merge_vhd.assert_called_once_with(
                dest_vhd_path, base_dest_disk_path)
            mock_save_glance_image.assert_called_once_with(
                self.context, mock.sentinel.IMAGE_ID, base_dest_disk_path)
        else:
            mock_save_glance_image.assert_called_once_with(
                self.context, mock.sentinel.IMAGE_ID, dest_vhd_path)
        self._snapshotops._pathutils.copyfile.has_calls(expected)
        expected_update = [
            mock.call(task_state=task_states.IMAGE_PENDING_UPLOAD),
            mock.call(task_state=task_states.IMAGE_UPLOADING,
                      expected_state=task_states.IMAGE_PENDING_UPLOAD)]
        mock_update.has_calls(expected_update)
        self._snapshotops._vmutils.remove_vm_snapshot.assert_called_once_with(
            fake_snapshot_path)
        self._snapshotops._pathutils.rmtree.assert_called_once_with(
            fake_exp_dir)
Example #51
0
    def test_config_drive_required_by_image_property(self):
        inst = fake_instance.fake_instance_obj(context.get_admin_context())
        inst.config_drive = ''
        inst.system_metadata = {
            utils.SM_IMAGE_PROP_PREFIX + 'img_config_drive': 'mandatory'}
        self.assertTrue(configdrive.required_by(inst))

        inst.system_metadata = {
            utils.SM_IMAGE_PROP_PREFIX + 'img_config_drive': 'optional'}
        self.assertFalse(configdrive.required_by(inst))
Example #52
0
    def test_power_on_having_block_devices(self, mock_set_vm_state,
                                           mock_fix_instance_vol_paths):
        mock_instance = fake_instance.fake_instance_obj(self.context)

        self._vmops.power_on(mock_instance, mock.sentinel.block_device_info)

        mock_fix_instance_vol_paths.assert_called_once_with(
            mock_instance.name, mock.sentinel.block_device_info)
        mock_set_vm_state.assert_called_once_with(
            mock_instance, constants.HYPERV_VM_STATE_ENABLED)
Example #53
0
    def test_power_on_having_block_devices(self, mock_set_vm_state,
                                           mock_fix_instance_vol_paths):
        mock_instance = fake_instance.fake_instance_obj(self.context)

        self._vmops.power_on(mock_instance, mock.sentinel.block_device_info)

        mock_fix_instance_vol_paths.assert_called_once_with(
            mock_instance.name, mock.sentinel.block_device_info)
        mock_set_vm_state.assert_called_once_with(
            mock_instance, constants.HYPERV_VM_STATE_ENABLED)
Example #54
0
    def _create_server_group(self, policy='anti-affinity'):
        instance = fake_instance.fake_instance_obj(self.context,
                params={'host': 'hostA'})

        group = objects.InstanceGroup()
        group.name = 'pele'
        group.uuid = str(uuid.uuid4())
        group.members = [instance.uuid]
        group.policies = [policy]
        return group