From 208988b0e935836c76042d6f42829ec23135049b Mon Sep 17 00:00:00 2001 From: Ben Nemec Date: Thu, 8 Jan 2015 17:58:40 +0000 Subject: [PATCH] Return LOCALHOST if no default interface If no default interface is available in netutils._get_my_ipv4_address(), return LOCALHOST immediately. Without this change, an UnboundLocalError exception will be raised instead. Co-Authored-By: Ruby Loo Change-Id: I098450c32ef8ad467298c845dd0122da3e3cda3e Closes-Bug: #1405217 Closes-Bug: #1408701 --- oslo_utils/netutils.py | 2 ++ oslo_utils/tests/test_netutils.py | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/oslo_utils/netutils.py b/oslo_utils/netutils.py index 7849ca6d..41587f26 100644 --- a/oslo_utils/netutils.py +++ b/oslo_utils/netutils.py @@ -152,6 +152,8 @@ def _get_my_ipv4_address(): except (KeyError, IndexError): LOG.info(_LI('Could not determine default network interface, ' 'using 127.0.0.1 for IPv4 address')) + return LOCALHOST + try: return netifaces.ifaddresses(interface)[netifaces.AF_INET][0]['addr'] except (KeyError, IndexError): diff --git a/oslo_utils/tests/test_netutils.py b/oslo_utils/tests/test_netutils.py index 790104f7..7e1b5459 100644 --- a/oslo_utils/tests/test_netutils.py +++ b/oslo_utils/tests/test_netutils.py @@ -222,3 +222,12 @@ class NetworkUtilsTest(test_base.BaseTestCase): ifaddr.return_value = {} addr = netutils._get_my_ipv4_address() self.assertEqual('127.0.0.1', addr) + + @mock.patch('netifaces.gateways') + @mock.patch('netifaces.ifaddresses') + def test_get_my_ipv4_address_without_default_interface( + self, ifaddr, gateways): + gateways.return_value = {} + addr = netutils._get_my_ipv4_address() + self.assertEqual('127.0.0.1', addr) + self.assertFalse(ifaddr.called)