diff --git a/openstack/compute/v2/_proxy.py b/openstack/compute/v2/_proxy.py index 9046add12..2aec33d1b 100644 --- a/openstack/compute/v2/_proxy.py +++ b/openstack/compute/v2/_proxy.py @@ -67,10 +67,12 @@ class Proxy(proxy.Proxy): :param name_or_id: The name or ID of a flavor. :param bool ignore_missing: When set to ``False`` - :class:`~openstack.exceptions.ResourceNotFound` will be - raised when the resource does not exist. - When set to ``True``, None will be returned when - attempting to find a nonexistent resource. + :class:`~openstack.exceptions.ResourceNotFound` will be raised when + the resource does not exist. When set to ``True``, None will be + returned when attempting to find a nonexistent resource. + :param bool get_extra_specs: When set to ``True`` and extra_specs not + present in the response will invoke additional API call to fetch + extra_specs. :returns: One :class:`~openstack.compute.v2.flavor.Flavor` or None """ flavor = self._find(_flavor.Flavor, name_or_id, @@ -110,11 +112,14 @@ class Proxy(proxy.Proxy): """Get a single flavor :param flavor: The value can be the ID of a flavor or a - :class:`~openstack.compute.v2.flavor.Flavor` instance. + :class:`~openstack.compute.v2.flavor.Flavor` instance. + :param bool get_extra_specs: When set to ``True`` and extra_specs not + present in the response will invoke additional API call to fetch + extra_specs. :returns: One :class:`~openstack.compute.v2.flavor.Flavor` :raises: :class:`~openstack.exceptions.ResourceNotFound` - when no resource can be found. + when no resource can be found. """ flavor = self._get(_flavor.Flavor, flavor) if get_extra_specs and not flavor.extra_specs: diff --git a/openstack/compute/v2/flavor.py b/openstack/compute/v2/flavor.py index 00c9ec54b..0b43a441a 100644 --- a/openstack/compute/v2/flavor.py +++ b/openstack/compute/v2/flavor.py @@ -104,9 +104,9 @@ class Flavor(resource.Resource): self._action(session, body) def get_access(self, session): - """Lists tenants who have access to a private flavor and adds private - flavor access to and removes private flavor access from tenants. By - default, only administrators can manage private flavor access. A + """Lists tenants who have access to a private flavor + + By default, only administrators can manage private flavor access. A private flavor has is_public set to false while a public flavor has is_public set to true. @@ -119,8 +119,9 @@ class Flavor(resource.Resource): def fetch_extra_specs(self, session): """Fetch extra_specs of the flavor + Starting with 2.61 extra_specs are returned with the flavor details, - before that a separate call is required + before that a separate call is required. """ url = utils.urljoin(Flavor.base_path, self.id, 'os-extra_specs') microversion = self._get_microversion_for(session, 'fetch') diff --git a/openstack/compute/v2/server.py b/openstack/compute/v2/server.py index d5b77fb16..ef027b363 100644 --- a/openstack/compute/v2/server.py +++ b/openstack/compute/v2/server.py @@ -487,7 +487,7 @@ class Server(resource.Resource, metadata.MetadataMixin, resource.TagMixin): def get_console_url(self, session, console_type): action = CONSOLE_TYPE_ACTION_MAPPING.get(console_type) if not action: - raise ValueError("Unsupported console type") + raise ValueError("Unsupported console type %s" % console_type) body = {action: {'type': console_type}} resp = self._action(session, body) return resp.json().get('console') diff --git a/openstack/tests/unit/compute/v2/test_proxy.py b/openstack/tests/unit/compute/v2/test_proxy.py index 33a821715..08c452818 100644 --- a/openstack/tests/unit/compute/v2/test_proxy.py +++ b/openstack/tests/unit/compute/v2/test_proxy.py @@ -719,38 +719,45 @@ class TestCompute(TestComputeProxy): method_args=["value", "console_type"], expected_args=["console_type"]) - def test_create_console(self): - with \ - mock.patch('openstack.utils.supports_microversion') as smv, \ - mock.patch('openstack.compute.v2._proxy.Proxy._create') as rcc, \ - mock.patch('openstack.compute.v2.server.Server.get_console_url') \ - as sgc: - console_fake = { - 'url': 'a', - 'type': 'b', - 'protocol': 'c' - } - smv.return_value = False - sgc.return_value = console_fake - ret = self.proxy.create_console('fake_server', 'fake_type') - smv.assert_called_once_with(self.proxy, '2.6') - rcc.assert_not_called() - sgc.assert_called_with(self.proxy, 'fake_type') - self.assertDictEqual(console_fake, ret) + @mock.patch('openstack.utils.supports_microversion', autospec=True) + @mock.patch('openstack.compute.v2._proxy.Proxy._create', autospec=True) + @mock.patch('openstack.compute.v2.server.Server.get_console_url', + autospec=True) + def test_create_console_mv_old(self, sgc, rcc, smv): + console_fake = { + 'url': 'a', + 'type': 'b', + 'protocol': 'c' + } + smv.return_value = False + sgc.return_value = console_fake + ret = self.proxy.create_console('fake_server', 'fake_type') + smv.assert_called_once_with(self.proxy, '2.6') + rcc.assert_not_called() + sgc.assert_called_with(mock.ANY, self.proxy, 'fake_type') + self.assertDictEqual(console_fake, ret) - smv.reset_mock() - sgc.reset_mock() - rcc.reset_mock() + @mock.patch('openstack.utils.supports_microversion', autospec=True) + @mock.patch('openstack.compute.v2._proxy.Proxy._create', autospec=True) + @mock.patch('openstack.compute.v2.server.Server.get_console_url', + autospec=True) + def test_create_console_mv_2_6(self, sgc, rcc, smv): + console_fake = { + 'url': 'a', + 'type': 'b', + 'protocol': 'c' + } - # Test server_remote_console is triggered when mv>=2.6 - smv.return_value = True - rcc.return_value = server_remote_console.ServerRemoteConsole( - **console_fake) - ret = self.proxy.create_console('fake_server', 'fake_type') - smv.assert_called_once_with(self.proxy, '2.6') - sgc.assert_not_called() - rcc.assert_called_with(server_remote_console.ServerRemoteConsole, - server_id='fake_server', - type='fake_type', - protocol=None) - self.assertEqual(console_fake['url'], ret['url']) + # Test server_remote_console is triggered when mv>=2.6 + smv.return_value = True + rcc.return_value = server_remote_console.ServerRemoteConsole( + **console_fake) + ret = self.proxy.create_console('fake_server', 'fake_type') + smv.assert_called_once_with(self.proxy, '2.6') + sgc.assert_not_called() + rcc.assert_called_with(mock.ANY, + server_remote_console.ServerRemoteConsole, + server_id='fake_server', + type='fake_type', + protocol=None) + self.assertEqual(console_fake['url'], ret['url']) diff --git a/releasenotes/notes/add-compute-flavor-ops-12149e58299c413e.yaml b/releasenotes/notes/add-compute-flavor-ops-12149e58299c413e.yaml index fcb4e0345..45c2d6b9d 100644 --- a/releasenotes/notes/add-compute-flavor-ops-12149e58299c413e.yaml +++ b/releasenotes/notes/add-compute-flavor-ops-12149e58299c413e.yaml @@ -1,7 +1,5 @@ --- features: - | - Add additional compute flavor operations (flavor_add_tenant_access, flavor_remove_tenant_access, get_flavor_access, extra_specs fetching/updating). -other: - - | - Merge FlavorDetails into Flavor class. + Add additional compute flavor operations (flavor_add_tenant_access, + flavor_remove_tenant_access, get_flavor_access, extra_specs fetching/updating). diff --git a/releasenotes/notes/optimize-server-console-1d27c107b9a1cdc3.yaml b/releasenotes/notes/optimize-server-console-1d27c107b9a1cdc3.yaml index c943007bc..9cb44b4a8 100644 --- a/releasenotes/notes/optimize-server-console-1d27c107b9a1cdc3.yaml +++ b/releasenotes/notes/optimize-server-console-1d27c107b9a1cdc3.yaml @@ -1,4 +1,6 @@ --- features: - | - Optimizes compute server console creation by addind older get_server_console method to the server and create_console proxy method calling appropriate method depending on the suported microversion. + Optimizes compute server console creation by adding older + get_server_console method to the server and create_console proxy method + calling appropriate method depending on the supported microversion.