diff options
| -rw-r--r-- | cloudinit/sources/helpers/azure.py | 12 | ||||
| -rw-r--r-- | tests/unittests/test_datasource/test_azure_helper.py | 7 | 
2 files changed, 14 insertions, 5 deletions
diff --git a/cloudinit/sources/helpers/azure.py b/cloudinit/sources/helpers/azure.py index 33003da0..21b4cd21 100644 --- a/cloudinit/sources/helpers/azure.py +++ b/cloudinit/sources/helpers/azure.py @@ -225,16 +225,18 @@ class WALinuxAgentShim(object):                  value = line.strip(' ').split(' ', 2)[-1].strip(';\n"')          if value is None:              raise Exception('No endpoint found in DHCP config.') -        if ':' in value: +        unescaped_value = value.replace('\\', '') +        if len(unescaped_value) > 4:              hex_string = '' -            for hex_pair in value.split(':'): +            for hex_pair in unescaped_value.split(':'):                  if len(hex_pair) == 1:                      hex_pair = '0' + hex_pair                  hex_string += hex_pair -            value = struct.pack('>L', int(hex_string.replace(':', ''), 16)) +            packed_bytes = struct.pack( +                '>L', int(hex_string.replace(':', ''), 16))          else: -            value = value.replace('\\', '').encode('utf-8') -        endpoint_ip_address = socket.inet_ntoa(value) +            packed_bytes = unescaped_value.encode('utf-8') +        endpoint_ip_address = socket.inet_ntoa(packed_bytes)          LOG.debug('Azure endpoint found at %s', endpoint_ip_address)          return endpoint_ip_address diff --git a/tests/unittests/test_datasource/test_azure_helper.py b/tests/unittests/test_datasource/test_azure_helper.py index 68af31cd..5f906837 100644 --- a/tests/unittests/test_datasource/test_azure_helper.py +++ b/tests/unittests/test_datasource/test_azure_helper.py @@ -133,6 +133,13 @@ class TestFindEndpoint(TestCase):          self.assertEqual(ip_address,                           azure_helper.WALinuxAgentShim.find_endpoint()) +    def test_packed_string_containing_a_colon(self): +        ip_address = '100.72.58.108' +        file_content = self._build_lease_content(ip_address, use_hex=False) +        self.load_file.return_value = file_content +        self.assertEqual(ip_address, +                         azure_helper.WALinuxAgentShim.find_endpoint()) +      def test_latest_lease_used(self):          ip_addresses = ['4.3.2.1', '98.76.54.32']          file_content = '\n'.join([self._build_lease_content(ip_address)  | 
