Structure FindFloatingIP() to work without ip_cache
Currently we have an ip_cache returned from _find_floating_ip() which is generally ignored as it is not always required. This patch removes the need of ip_cache in _find_floating_ip(). Co-Authored-By: Sindhu Devale<sindhu.devale@intel.com> Change-Id: I8b92271185f82f275fa73adad03e9dad70be70e4
This commit is contained in:
parent
8a1f4b6592
commit
0e42ea3ae3
@ -83,7 +83,6 @@ def _get_attrs(client_manager, parsed_args):
|
|||||||
|
|
||||||
def _find_floating_ip(
|
def _find_floating_ip(
|
||||||
session,
|
session,
|
||||||
ip_cache,
|
|
||||||
name_or_id,
|
name_or_id,
|
||||||
ignore_missing=True,
|
ignore_missing=True,
|
||||||
**params
|
**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
|
The SDK's find_ip() can only locate a floating IP by ID so we have
|
||||||
to do this ourselves.
|
to do this ourselves.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def _get_one_match(name_or_id):
|
def _get_one_match(name_or_id):
|
||||||
"""Given a list of results, return the match"""
|
"""Given a list of results, return the match"""
|
||||||
the_result = None
|
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
|
id_value = maybe_result.id
|
||||||
ip_value = maybe_result.floating_ip_address
|
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 to short-circuit by looking directly for a matching ID.
|
||||||
try:
|
try:
|
||||||
match = _floating_ip.FloatingIP.existing(id=name_or_id, **params)
|
match = _floating_ip.FloatingIP.existing(id=name_or_id, **params)
|
||||||
return (match.get(session), ip_cache)
|
return match.get(session)
|
||||||
except sdk_exceptions.NotFoundException:
|
except sdk_exceptions.NotFoundException:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
if len(ip_cache) == 0:
|
|
||||||
ip_cache = list(_floating_ip.FloatingIP.list(session, **params))
|
|
||||||
|
|
||||||
result = _get_one_match(name_or_id)
|
result = _get_one_match(name_or_id)
|
||||||
if result is not None:
|
if result is not None:
|
||||||
return (result, ip_cache)
|
return result
|
||||||
|
|
||||||
if ignore_missing:
|
if ignore_missing:
|
||||||
return (None, ip_cache)
|
return None
|
||||||
raise sdk_exceptions.ResourceNotFound(
|
raise sdk_exceptions.ResourceNotFound(
|
||||||
"No %s found for %s" % (_floating_ip.FloatingIP.__name__, name_or_id))
|
"No %s found for %s" % (_floating_ip.FloatingIP.__name__, name_or_id))
|
||||||
|
|
||||||
@ -240,9 +236,8 @@ class DeleteFloatingIP(common.NetworkAndComputeDelete):
|
|||||||
return parser
|
return parser
|
||||||
|
|
||||||
def take_action_network(self, client, parsed_args):
|
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.app.client_manager.sdk_connection.session,
|
||||||
self.ip_cache,
|
|
||||||
self.r,
|
self.r,
|
||||||
ignore_missing=False,
|
ignore_missing=False,
|
||||||
)
|
)
|
||||||
@ -255,11 +250,6 @@ class DeleteFloatingIP(common.NetworkAndComputeDelete):
|
|||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
"""Implements a naive cache for the list of floating IPs"""
|
"""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)
|
super(DeleteFloatingIP, self).take_action(parsed_args)
|
||||||
|
|
||||||
|
|
||||||
@ -459,9 +449,6 @@ class ListIPFloating(ListFloatingIP):
|
|||||||
class ShowFloatingIP(common.NetworkAndComputeShowOne):
|
class ShowFloatingIP(common.NetworkAndComputeShowOne):
|
||||||
_description = _("Display floating IP details")
|
_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):
|
def update_parser_common(self, parser):
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'floating_ip',
|
'floating_ip',
|
||||||
@ -471,9 +458,8 @@ class ShowFloatingIP(common.NetworkAndComputeShowOne):
|
|||||||
return parser
|
return parser
|
||||||
|
|
||||||
def take_action_network(self, client, parsed_args):
|
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.app.client_manager.sdk_connection.session,
|
||||||
[],
|
|
||||||
parsed_args.floating_ip,
|
parsed_args.floating_ip,
|
||||||
ignore_missing=False,
|
ignore_missing=False,
|
||||||
)
|
)
|
||||||
|
@ -218,8 +218,8 @@ class TestDeleteFloatingIPNetwork(TestFloatingIPNetwork):
|
|||||||
)
|
)
|
||||||
def test_floating_ip_delete(self, find_floating_ip_mock):
|
def test_floating_ip_delete(self, find_floating_ip_mock):
|
||||||
find_floating_ip_mock.side_effect = [
|
find_floating_ip_mock.side_effect = [
|
||||||
(self.floating_ips[0], []),
|
self.floating_ips[0],
|
||||||
(self.floating_ips[1], []),
|
self.floating_ips[1],
|
||||||
]
|
]
|
||||||
arglist = [
|
arglist = [
|
||||||
self.floating_ips[0].id,
|
self.floating_ips[0].id,
|
||||||
@ -233,7 +233,6 @@ class TestDeleteFloatingIPNetwork(TestFloatingIPNetwork):
|
|||||||
|
|
||||||
find_floating_ip_mock.assert_called_once_with(
|
find_floating_ip_mock.assert_called_once_with(
|
||||||
mock.ANY,
|
mock.ANY,
|
||||||
[],
|
|
||||||
self.floating_ips[0].id,
|
self.floating_ips[0].id,
|
||||||
ignore_missing=False,
|
ignore_missing=False,
|
||||||
)
|
)
|
||||||
@ -246,8 +245,8 @@ class TestDeleteFloatingIPNetwork(TestFloatingIPNetwork):
|
|||||||
)
|
)
|
||||||
def test_floating_ip_delete_multi(self, find_floating_ip_mock):
|
def test_floating_ip_delete_multi(self, find_floating_ip_mock):
|
||||||
find_floating_ip_mock.side_effect = [
|
find_floating_ip_mock.side_effect = [
|
||||||
(self.floating_ips[0], []),
|
self.floating_ips[0],
|
||||||
(self.floating_ips[1], []),
|
self.floating_ips[1],
|
||||||
]
|
]
|
||||||
arglist = []
|
arglist = []
|
||||||
verifylist = []
|
verifylist = []
|
||||||
@ -264,13 +263,11 @@ class TestDeleteFloatingIPNetwork(TestFloatingIPNetwork):
|
|||||||
calls = [
|
calls = [
|
||||||
call(
|
call(
|
||||||
mock.ANY,
|
mock.ANY,
|
||||||
[],
|
|
||||||
self.floating_ips[0].id,
|
self.floating_ips[0].id,
|
||||||
ignore_missing=False,
|
ignore_missing=False,
|
||||||
),
|
),
|
||||||
call(
|
call(
|
||||||
mock.ANY,
|
mock.ANY,
|
||||||
[],
|
|
||||||
self.floating_ips[1].id,
|
self.floating_ips[1].id,
|
||||||
ignore_missing=False,
|
ignore_missing=False,
|
||||||
),
|
),
|
||||||
@ -289,7 +286,7 @@ class TestDeleteFloatingIPNetwork(TestFloatingIPNetwork):
|
|||||||
)
|
)
|
||||||
def test_floating_ip_delete_multi_exception(self, find_floating_ip_mock):
|
def test_floating_ip_delete_multi_exception(self, find_floating_ip_mock):
|
||||||
find_floating_ip_mock.side_effect = [
|
find_floating_ip_mock.side_effect = [
|
||||||
(self.floating_ips[0], []),
|
self.floating_ips[0],
|
||||||
exceptions.CommandError,
|
exceptions.CommandError,
|
||||||
]
|
]
|
||||||
arglist = [
|
arglist = [
|
||||||
@ -310,13 +307,11 @@ class TestDeleteFloatingIPNetwork(TestFloatingIPNetwork):
|
|||||||
|
|
||||||
find_floating_ip_mock.assert_any_call(
|
find_floating_ip_mock.assert_any_call(
|
||||||
mock.ANY,
|
mock.ANY,
|
||||||
[],
|
|
||||||
self.floating_ips[0].id,
|
self.floating_ips[0].id,
|
||||||
ignore_missing=False,
|
ignore_missing=False,
|
||||||
)
|
)
|
||||||
find_floating_ip_mock.assert_any_call(
|
find_floating_ip_mock.assert_any_call(
|
||||||
mock.ANY,
|
mock.ANY,
|
||||||
[],
|
|
||||||
'unexist_floating_ip',
|
'unexist_floating_ip',
|
||||||
ignore_missing=False,
|
ignore_missing=False,
|
||||||
)
|
)
|
||||||
@ -584,7 +579,7 @@ class TestShowFloatingIPNetwork(TestFloatingIPNetwork):
|
|||||||
"floating_ip._find_floating_ip"
|
"floating_ip._find_floating_ip"
|
||||||
)
|
)
|
||||||
def test_floating_ip_show(self, find_floating_ip_mock):
|
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 = [
|
arglist = [
|
||||||
self.floating_ip.id,
|
self.floating_ip.id,
|
||||||
]
|
]
|
||||||
@ -597,7 +592,6 @@ class TestShowFloatingIPNetwork(TestFloatingIPNetwork):
|
|||||||
|
|
||||||
find_floating_ip_mock.assert_called_once_with(
|
find_floating_ip_mock.assert_called_once_with(
|
||||||
mock.ANY,
|
mock.ANY,
|
||||||
[],
|
|
||||||
self.floating_ip.id,
|
self.floating_ip.id,
|
||||||
ignore_missing=False,
|
ignore_missing=False,
|
||||||
)
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user