Merge "Structure FindFloatingIP() to work without ip_cache"
This commit is contained in:
		| @@ -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, | ||||||
|         ) |         ) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Jenkins
					Jenkins