예제 #1
0
파일: vm.py 프로젝트: andymcc/nova-powervm
    def execute_impl(self):
        data = None
        if self.nvram_mgr is not None:
            LOG.info(_LI('Fetching NVRAM for instance %s.'),
                     self.instance.name, instance=self.instance)
            data = self.nvram_mgr.fetch(self.instance)
            LOG.debug('NVRAM data is: %s', data, instance=self.instance)

        wrap = vm.crt_lpar(self.adapter, self.host_wrapper, self.instance,
                           self.flavor, nvram=data, slot_mgr=self.slot_mgr)
        pvm_stg.add_lpar_storage_scrub_tasks([wrap.id], self.stg_ftsk,
                                             lpars_exist=True)
        # If the stg_ftsk passed in was None and we initialized a
        # 'create_scrubber' stg_ftsk then run it immediately. We do
        # this because we moved the LPAR storage scrub tasks out of the
        # build_map initialization. This was so that we could construct the
        # build map earlier in the spawn, just before the LPAR is created.
        # Only rebuilds should be passing in None for stg_ftsk.
        if self.stg_ftsk.name == 'create_scrubber':
            LOG.info(_LI('Scrubbing storage for instance %s as part of '
                         'rebuild.'), self.instance.name,
                     instance=self.instance)
            self.stg_ftsk.execute()

        return wrap
예제 #2
0
 def execute(self):
     LOG.info(_LI('Creating instance: %s'), self.instance.name)
     wrap = vm.crt_lpar(self.adapter, self.host_wrapper, self.instance,
                        self.flavor)
     pvm_stg.add_lpar_storage_scrub_tasks([wrap.id], self.stg_ftsk,
                                          lpars_exist=True)
     return wrap
예제 #3
0
 def execute(self):
     LOG.info(_LI('Creating instance: %s'), self.instance.name)
     wrap = vm.crt_lpar(self.adapter, self.host_wrapper, self.instance,
                        self.flavor)
     pvm_stg.add_lpar_storage_scrub_tasks([wrap.id],
                                          self.stg_ftsk,
                                          lpars_exist=True)
     return wrap
예제 #4
0
    def test_crt_lpar(self, mock_vld_all, mock_bld, mock_stdz, mock_ibmi):
        instance = objects.Instance(**powervm.TEST_INSTANCE)
        flavor = instance.get_flavor()
        flavor.extra_specs = {'powervm:dedicated_proc': 'true'}

        host_wrapper = mock.Mock()
        lparw = pvm_lpar.LPAR.wrap(self.resp.feed.entries[0])
        mock_bld.return_value = lparw
        self.apt.create.return_value = lparw.entry
        vm.crt_lpar(self.apt, host_wrapper, instance, flavor)
        self.assertTrue(self.apt.create.called)
        self.assertTrue(mock_vld_all.called)

        flavor.extra_specs = {'powervm:BADATTR': 'true'}
        host_wrapper = mock.Mock()
        self.assertRaises(exception.InvalidAttribute, vm.crt_lpar,
                          self.apt, host_wrapper, instance, flavor)
예제 #5
0
    def test_crt_lpar(self, mock_vld_all, mock_bld, mock_stdz, mock_ibmi):
        instance = objects.Instance(**powervm.TEST_INSTANCE)
        flavor = instance.get_flavor()
        flavor.extra_specs = {'powervm:dedicated_proc': 'true'}

        host_wrapper = mock.Mock()
        lparw = pvm_lpar.LPAR.wrap(self.resp.feed.entries[0])
        mock_bld.return_value = lparw
        self.apt.create.return_value = lparw.entry
        vm.crt_lpar(self.apt, host_wrapper, instance, flavor)
        self.assertTrue(self.apt.create.called)
        self.assertTrue(mock_vld_all.called)

        flavor.extra_specs = {'powervm:BADATTR': 'true'}
        host_wrapper = mock.Mock()
        self.assertRaises(exception.InvalidAttribute, vm.crt_lpar,
                          self.apt, host_wrapper, instance, flavor)
예제 #6
0
파일: vm.py 프로젝트: adreznec/nova-powervm
    def execute_impl(self):
        data = None
        if self.nvram_mgr is not None:
            LOG.info(_LI('Fetching NVRAM for instance %s.'),
                     self.instance.name, instance=self.instance)
            data = self.nvram_mgr.fetch(self.instance)
            LOG.debug('NVRAM data is: %s', data, instance=self.instance)

        wrap = vm.crt_lpar(self.adapter, self.host_wrapper, self.instance,
                           self.flavor, nvram=data)
        pvm_stg.add_lpar_storage_scrub_tasks([wrap.id], self.stg_ftsk,
                                             lpars_exist=True)
        return wrap
예제 #7
0
    def test_crt_lpar(self, mock_vld_all, mock_bld, mock_stdz, mock_ibmi):
        instance = objects.Instance(**powervm.TEST_INSTANCE)
        flavor = instance.get_flavor()
        flavor.extra_specs = {'powervm:dedicated_proc': 'true'}

        host_wrapper = mock.Mock()
        lparw = pvm_lpar.LPAR.wrap(self.resp.feed.entries[0])
        mock_bld.return_value = lparw
        self.apt.create.return_value = lparw.entry
        vm.crt_lpar(self.apt, host_wrapper, instance, flavor, nvram='data')
        self.apt.create.assert_called_once_with(
            lparw, host_wrapper.schema_type, child_type='LogicalPartition',
            root_id=host_wrapper.uuid, service='uom', timeout=-1)
        mock_stdz.assert_called_once_with(host_wrapper, uncapped_weight=64,
                                          proc_units_factor=0.1)
        self.assertEqual(lparw.nvram, 'data')
        self.assertTrue(mock_vld_all.called)

        # Test srr and slot_mgr
        self.apt.reset_mock()
        mock_vld_all.reset_mock()
        mock_stdz.reset_mock()
        flavor.extra_specs = {'powervm:srr_capability': 'true'}
        self.apt.create.return_value = lparw.entry
        mock_slot_mgr = mock.Mock(build_map=mock.Mock(
            get_max_vslots=mock.Mock(return_value=123)))
        vm.crt_lpar(self.apt, host_wrapper, instance, flavor,
                    slot_mgr=mock_slot_mgr)
        self.assertTrue(self.apt.create.called)
        self.assertTrue(mock_vld_all.called)
        self.assertTrue(lparw.srr_enabled)
        mock_stdz.assert_called_once_with(host_wrapper, uncapped_weight=64,
                                          proc_units_factor=0.1, max_slots=123)
        # The save is called with the LPAR's actual value, which in this mock
        # setup comes from lparw
        mock_slot_mgr.register_max_vslots.assert_called_with(
            lparw.io_config.max_virtual_slots)

        # Test to verify the LPAR Creation with invalid name specification
        mock_bld.side_effect = lpar_bld.LPARBuilderException("Invalid Name")
        host_wrapper = mock.Mock()
        self.assertRaises(exception.BuildAbortException, vm.crt_lpar,
                          self.apt, host_wrapper, instance, flavor)

        resp = mock.Mock(status=202, method='fake', path='/dev/',
                         reason='Failure')
        mock_bld.side_effect = pvm_exc.HttpError(resp)
        try:
            vm.crt_lpar(self.apt, host_wrapper, instance, flavor)
        except nvex.PowerVMAPIFailed as e:
            self.assertEqual(e.kwargs['inst_name'], instance.name)
            self.assertEqual(e.kwargs['reason'], mock_bld.side_effect)
        flavor.extra_specs = {'powervm:BADATTR': 'true'}
        host_wrapper = mock.Mock()
        self.assertRaises(exception.InvalidAttribute, vm.crt_lpar,
                          self.apt, host_wrapper, instance, flavor)
예제 #8
0
    def test_crt_lpar(self, mock_vld_all, mock_bld, mock_stdz, mock_ibmi):
        instance = objects.Instance(**powervm.TEST_INSTANCE)
        flavor = instance.get_flavor()
        flavor.extra_specs = {'powervm:dedicated_proc': 'true'}

        host_wrapper = mock.Mock()
        lparw = pvm_lpar.LPAR.wrap(self.resp.feed.entries[0])
        mock_bld.return_value = lparw
        self.apt.create.return_value = lparw.entry
        vm.crt_lpar(self.apt, host_wrapper, instance, flavor, nvram='data')
        self.apt.create.assert_called_once_with(
            lparw, host_wrapper.schema_type, child_type='LogicalPartition',
            root_id=host_wrapper.uuid, service='uom', timeout=-1)
        self.assertEqual(lparw.nvram, 'data')
        self.assertTrue(mock_vld_all.called)

        # Test srr
        self.apt.reset_mock()
        mock_vld_all.reset_mock()
        flavor.extra_specs = {'powervm:srr_capability': 'true'}
        self.apt.create.return_value = lparw.entry
        vm.crt_lpar(self.apt, host_wrapper, instance, flavor)
        self.assertTrue(self.apt.create.called)
        self.assertTrue(mock_vld_all.called)
        self.assertTrue(lparw.srr_enabled)

        # Test to verify the LPAR Creation with invalid name specification
        mock_bld.side_effect = lpar_bld.LPARBuilderException("Invalid Name")
        host_wrapper = mock.Mock()
        self.assertRaises(exception.BuildAbortException, vm.crt_lpar,
                          self.apt, host_wrapper, instance, flavor)

        resp = mock.Mock(status=202, method='fake', path='/dev/',
                         reason='Failure')
        mock_bld.side_effect = pvm_exc.HttpError(resp)
        try:
            vm.crt_lpar(self.apt, host_wrapper, instance, flavor)
        except nvex.PowerVMAPIFailed as e:
            self.assertEqual(e.kwargs['inst_name'], instance.name)
            self.assertEqual(e.kwargs['reason'], mock_bld.side_effect)
        flavor.extra_specs = {'powervm:BADATTR': 'true'}
        host_wrapper = mock.Mock()
        self.assertRaises(exception.InvalidAttribute, vm.crt_lpar,
                          self.apt, host_wrapper, instance, flavor)