summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2017-04-04 20:31:15 +0000
committerGerrit Code Review <review@openstack.org>2017-04-04 20:31:15 +0000
commit25a77f7c7c00fc8255c330f395ace24a4e75db8b (patch)
tree6cd52643d66b003ff324c19d76363cdeaebbf81a
parentabb2498e714cf1915e5ec7a8a344a0a71962bc50 (diff)
parent0e42ea3ae325cf5b168bb966e62cd6b8e9ee0159 (diff)
downloadpython-openstackclient-25a77f7c7c00fc8255c330f395ace24a4e75db8b.tar.gz
Merge "Structure FindFloatingIP() to work without ip_cache"
-rw-r--r--openstackclient/network/v2/floating_ip.py28
-rw-r--r--openstackclient/tests/unit/network/v2/test_floating_ip.py18
2 files changed, 13 insertions, 33 deletions
diff --git a/openstackclient/network/v2/floating_ip.py b/openstackclient/network/v2/floating_ip.py
index ee39a299..bc347b72 100644
--- a/openstackclient/network/v2/floating_ip.py
+++ b/openstackclient/network/v2/floating_ip.py
@@ -83,7 +83,6 @@ def _get_attrs(client_manager, parsed_args):
def _find_floating_ip(
session,
- ip_cache,
name_or_id,
ignore_missing=True,
**params
@@ -93,11 +92,11 @@ def _find_floating_ip(
The SDK's find_ip() can only locate a floating IP by ID so we have
to do this ourselves.
"""
-
def _get_one_match(name_or_id):
"""Given a list of results, return the match"""
the_result = None
- for maybe_result in ip_cache:
+ ip_list = list(_floating_ip.FloatingIP.list(session, **params))
+ for maybe_result in ip_list:
id_value = maybe_result.id
ip_value = maybe_result.floating_ip_address
@@ -116,19 +115,16 @@ def _find_floating_ip(
# Try to short-circuit by looking directly for a matching ID.
try:
match = _floating_ip.FloatingIP.existing(id=name_or_id, **params)
- return (match.get(session), ip_cache)
+ return match.get(session)
except sdk_exceptions.NotFoundException:
pass
- if len(ip_cache) == 0:
- ip_cache = list(_floating_ip.FloatingIP.list(session, **params))
-
result = _get_one_match(name_or_id)
if result is not None:
- return (result, ip_cache)
+ return result
if ignore_missing:
- return (None, ip_cache)
+ return None
raise sdk_exceptions.ResourceNotFound(
"No %s found for %s" % (_floating_ip.FloatingIP.__name__, name_or_id))
@@ -240,9 +236,8 @@ class DeleteFloatingIP(common.NetworkAndComputeDelete):
return parser
def take_action_network(self, client, parsed_args):
- (obj, self.ip_cache) = _find_floating_ip(
+ obj = _find_floating_ip(
self.app.client_manager.sdk_connection.session,
- self.ip_cache,
self.r,
ignore_missing=False,
)
@@ -255,11 +250,6 @@ class DeleteFloatingIP(common.NetworkAndComputeDelete):
def take_action(self, parsed_args):
"""Implements a naive cache for the list of floating IPs"""
- # NOTE(dtroyer): This really only prevents multiple list()
- # calls when performing multiple resource deletes
- # in a single command. In an interactive session
- # each delete command will call list().
- self.ip_cache = []
super(DeleteFloatingIP, self).take_action(parsed_args)
@@ -459,9 +449,6 @@ class ListIPFloating(ListFloatingIP):
class ShowFloatingIP(common.NetworkAndComputeShowOne):
_description = _("Display floating IP details")
- # ip_cache is unused here but is a side effect of _find_floating_ip()
- ip_cache = []
-
def update_parser_common(self, parser):
parser.add_argument(
'floating_ip',
@@ -471,9 +458,8 @@ class ShowFloatingIP(common.NetworkAndComputeShowOne):
return parser
def take_action_network(self, client, parsed_args):
- (obj, self.ip_cache) = _find_floating_ip(
+ obj = _find_floating_ip(
self.app.client_manager.sdk_connection.session,
- [],
parsed_args.floating_ip,
ignore_missing=False,
)
diff --git a/openstackclient/tests/unit/network/v2/test_floating_ip.py b/openstackclient/tests/unit/network/v2/test_floating_ip.py
index e395300d..0b3fd888 100644
--- a/openstackclient/tests/unit/network/v2/test_floating_ip.py
+++ b/openstackclient/tests/unit/network/v2/test_floating_ip.py
@@ -218,8 +218,8 @@ class TestDeleteFloatingIPNetwork(TestFloatingIPNetwork):
)
def test_floating_ip_delete(self, find_floating_ip_mock):
find_floating_ip_mock.side_effect = [
- (self.floating_ips[0], []),
- (self.floating_ips[1], []),
+ self.floating_ips[0],
+ self.floating_ips[1],
]
arglist = [
self.floating_ips[0].id,
@@ -233,7 +233,6 @@ class TestDeleteFloatingIPNetwork(TestFloatingIPNetwork):
find_floating_ip_mock.assert_called_once_with(
mock.ANY,
- [],
self.floating_ips[0].id,
ignore_missing=False,
)
@@ -246,8 +245,8 @@ class TestDeleteFloatingIPNetwork(TestFloatingIPNetwork):
)
def test_floating_ip_delete_multi(self, find_floating_ip_mock):
find_floating_ip_mock.side_effect = [
- (self.floating_ips[0], []),
- (self.floating_ips[1], []),
+ self.floating_ips[0],
+ self.floating_ips[1],
]
arglist = []
verifylist = []
@@ -264,13 +263,11 @@ class TestDeleteFloatingIPNetwork(TestFloatingIPNetwork):
calls = [
call(
mock.ANY,
- [],
self.floating_ips[0].id,
ignore_missing=False,
),
call(
mock.ANY,
- [],
self.floating_ips[1].id,
ignore_missing=False,
),
@@ -289,7 +286,7 @@ class TestDeleteFloatingIPNetwork(TestFloatingIPNetwork):
)
def test_floating_ip_delete_multi_exception(self, find_floating_ip_mock):
find_floating_ip_mock.side_effect = [
- (self.floating_ips[0], []),
+ self.floating_ips[0],
exceptions.CommandError,
]
arglist = [
@@ -310,13 +307,11 @@ class TestDeleteFloatingIPNetwork(TestFloatingIPNetwork):
find_floating_ip_mock.assert_any_call(
mock.ANY,
- [],
self.floating_ips[0].id,
ignore_missing=False,
)
find_floating_ip_mock.assert_any_call(
mock.ANY,
- [],
'unexist_floating_ip',
ignore_missing=False,
)
@@ -584,7 +579,7 @@ class TestShowFloatingIPNetwork(TestFloatingIPNetwork):
"floating_ip._find_floating_ip"
)
def test_floating_ip_show(self, find_floating_ip_mock):
- find_floating_ip_mock.return_value = (self.floating_ip, [])
+ find_floating_ip_mock.return_value = self.floating_ip
arglist = [
self.floating_ip.id,
]
@@ -597,7 +592,6 @@ class TestShowFloatingIPNetwork(TestFloatingIPNetwork):
find_floating_ip_mock.assert_called_once_with(
mock.ANY,
- [],
self.floating_ip.id,
ignore_missing=False,
)