summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
authorHuanxuan Ao <huanxuan.ao@easystack.cn>2016-05-02 16:30:29 +0800
committerHuanxuan Ao <huanxuan.ao@easystack.cn>2016-05-02 16:47:53 +0800
commit681d6dc2de83ef13b4fb2fb4abe70f3c1ccb0e10 (patch)
tree62c129ffab20f79b9bd65150340c6de153b0d905 /openstackclient
parent9ec41c0397dbcf818513efd9bc92ad488b66ceca (diff)
downloadpython-openstackclient-681d6dc2de83ef13b4fb2fb4abe70f3c1ccb0e10.tar.gz
Make "flavor show" command to show a private flavor properly
The "flavor show" command could not show a private flavor by flavor name becauce it could not find a private flavor by flavor name. In "until.find_resource(parsed_args.flavor)", If parsed_args.falvor is a name of a flavor, "flavors.find(name=parsed_args.flavor)"will be called to find a flavor.But the default value of "is_public" is "Ture" in "flavors.find()" so that we can only find public flavors.If we want to find all flaovrs by flavor name,we should add "is_public=None" in "flavors.find()". So I tried to change "until.find_resource(parsed_args.flavor)" to "until.find_resource(parsed_args.flavor, is_public=None)", but then I could not find any flavor by flavor id because "is_public" is an unexpected argument of "flavors.get()" in "until.find_resource()". In this case,I think "until.find_resource()" can not find a private flavor properly,and we should combine "manager.get(flavor.id)" and "manager.find(name=flavor.name, is_public=None)" by ourselve to find a flavor. Also,this bug affects other flavor commands like "flavor set/unset/delete",so I fix them in this patch too. Change-Id: I4a4ed7b0a2f522ee04d1c3270afcda7064285c39 Closes-Bug: #1575478
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/compute/v2/flavor.py31
-rw-r--r--openstackclient/tests/compute/v2/test_flavor.py22
2 files changed, 32 insertions, 21 deletions
diff --git a/openstackclient/compute/v2/flavor.py b/openstackclient/compute/v2/flavor.py
index 04674614..4b918369 100644
--- a/openstackclient/compute/v2/flavor.py
+++ b/openstackclient/compute/v2/flavor.py
@@ -18,10 +18,29 @@
import six
from openstackclient.common import command
+from openstackclient.common import exceptions
from openstackclient.common import parseractions
from openstackclient.common import utils
+def _find_flavor(compute_client, flavor):
+ try:
+ return compute_client.flavors.get(flavor)
+ except Exception as ex:
+ if type(ex).__name__ == 'NotFound':
+ pass
+ else:
+ raise
+ try:
+ return compute_client.flavors.find(name=flavor, is_public=None)
+ except Exception as ex:
+ if type(ex).__name__ == 'NotFound':
+ msg = "No flavor with a name or ID of '%s' exists." % flavor
+ raise exceptions.CommandError(msg)
+ else:
+ raise
+
+
class CreateFlavor(command.ShowOne):
"""Create new flavor"""
@@ -132,8 +151,7 @@ class DeleteFlavor(command.Command):
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
- flavor = utils.find_resource(compute_client.flavors,
- parsed_args.flavor)
+ flavor = _find_flavor(compute_client, parsed_args.flavor)
compute_client.flavors.delete(flavor.id)
@@ -239,8 +257,7 @@ class SetFlavor(command.Command):
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
- flavor = utils.find_resource(compute_client.flavors,
- parsed_args.flavor)
+ flavor = _find_flavor(compute_client, parsed_args.flavor)
flavor.set_keys(parsed_args.property)
@@ -258,8 +275,7 @@ class ShowFlavor(command.ShowOne):
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
- resource_flavor = utils.find_resource(compute_client.flavors,
- parsed_args.flavor)
+ resource_flavor = _find_flavor(compute_client, parsed_args.flavor)
flavor = resource_flavor._info.copy()
flavor.pop("links", None)
@@ -290,6 +306,5 @@ class UnsetFlavor(command.Command):
def take_action(self, parsed_args):
compute_client = self.app.client_manager.compute
- flavor = utils.find_resource(compute_client.flavors,
- parsed_args.flavor)
+ flavor = _find_flavor(compute_client, parsed_args.flavor)
flavor.unset_keys(parsed_args.property)
diff --git a/openstackclient/tests/compute/v2/test_flavor.py b/openstackclient/tests/compute/v2/test_flavor.py
index fa29111b..529a3c25 100644
--- a/openstackclient/tests/compute/v2/test_flavor.py
+++ b/openstackclient/tests/compute/v2/test_flavor.py
@@ -273,7 +273,7 @@ class TestFlavorSet(TestFlavor):
super(TestFlavorSet, self).setUp()
self.flavors_mock.find.return_value = self.flavor
-
+ self.flavors_mock.get.side_effect = exceptions.NotFound(None)
self.cmd = flavor.SetFlavor(self.app, None)
def test_flavor_set(self):
@@ -288,10 +288,8 @@ class TestFlavorSet(TestFlavor):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args)
- try:
- self.flavors_mock.find.assert_called_with(name=parsed_args.flavor)
- except Exception:
- self.flavors_mock.get.assert_called_with(parsed_args.flavor)
+ self.flavors_mock.find.assert_called_with(name=parsed_args.flavor,
+ is_public=None)
self.assertIsNone(result)
@@ -331,9 +329,9 @@ class TestFlavorShow(TestFlavor):
def setUp(self):
super(TestFlavorShow, self).setUp()
- # Return value of utils.find_resource()
- self.flavors_mock.get.return_value = self.flavor
-
+ # Return value of _find_resource()
+ self.flavors_mock.find.return_value = self.flavor
+ self.flavors_mock.get.side_effect = exceptions.NotFound(None)
self.cmd = flavor.ShowFlavor(self.app, None)
def test_show_no_options(self):
@@ -369,7 +367,7 @@ class TestFlavorUnset(TestFlavor):
super(TestFlavorUnset, self).setUp()
self.flavors_mock.find.return_value = self.flavor
-
+ self.flavors_mock.get.side_effect = exceptions.NotFound(None)
self.cmd = flavor.UnsetFlavor(self.app, None)
def test_flavor_unset(self):
@@ -384,8 +382,6 @@ class TestFlavorUnset(TestFlavor):
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args)
- try:
- self.flavors_mock.find.assert_called_with(name=parsed_args.flavor)
- except Exception:
- self.flavors_mock.get.assert_called_with(parsed_args.flavor)
+ self.flavors_mock.find.assert_called_with(name=parsed_args.flavor,
+ is_public=None)
self.assertIsNone(result)