From 9bd096803e24091af294ea450d24d6b45fe9ff4b Mon Sep 17 00:00:00 2001 From: Adrian Vladu Date: Thu, 4 Oct 2018 13:03:16 +0300 Subject: [PATCH] Fix get_network_details_v2 exception get_network_details_v2 implementation should be consistent with the base metadata service implementation. The method should return None in case the underlying metadata does not exist or if it is invalid. Change-Id: Ida3fe780f22dc20db6bd8ed3f43728a2671b46da Closes-Bug: #1796053 --- .../metadata/services/baseopenstackservice.py | 6 +++++- .../metadata/services/test_baseopenstackservice.py | 11 +++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/cloudbaseinit/metadata/services/baseopenstackservice.py b/cloudbaseinit/metadata/services/baseopenstackservice.py index 453f83d8..f0e488b9 100644 --- a/cloudbaseinit/metadata/services/baseopenstackservice.py +++ b/cloudbaseinit/metadata/services/baseopenstackservice.py @@ -238,7 +238,11 @@ class BaseOpenStackService(base.BaseMetadataService): return services def get_network_details_v2(self): - network_data = self._get_network_data() + try: + network_data = self._get_network_data() + except base.NotExistingMetadataException: + LOG.info("V2 network metadata not found") + return links = self._parse_network_data_links( network_data.get("links", [])) diff --git a/cloudbaseinit/tests/metadata/services/test_baseopenstackservice.py b/cloudbaseinit/tests/metadata/services/test_baseopenstackservice.py index 684c49aa..377720d5 100644 --- a/cloudbaseinit/tests/metadata/services/test_baseopenstackservice.py +++ b/cloudbaseinit/tests/metadata/services/test_baseopenstackservice.py @@ -488,3 +488,14 @@ class TestBaseOpenStackService(unittest.TestCase): def test_get_network_details_v2_invalid_bond_lb_algo(self): self._test_get_network_details_v2(invalid_bond_lb_algo=True) + + @mock.patch(MODPATH + ".BaseOpenStackService._get_network_data") + @mock.patch(MODPATH + ".LOG.info") + def test_get_network_details_v2_no_metadata(self, mock_log_exception, + mock_get_network_data): + mock_get_network_data.side_effect = ( + base.NotExistingMetadataException('failed to get metadata')) + network_details = self._service.get_network_details_v2() + + self.assertIsNone(network_details) + self.assertTrue(mock_log_exception.called)