Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python3-ec2metadata for 
openSUSE:Factory checked in at 2023-08-31 13:46:06
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python3-ec2metadata (Old)
 and      /work/SRC/openSUSE:Factory/.python3-ec2metadata.new.1766 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python3-ec2metadata"

Thu Aug 31 13:46:06 2023 rev:4 rq:1108194 version:5.0.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python3-ec2metadata/python3-ec2metadata.changes  
2022-10-18 12:45:48.393833930 +0200
+++ 
/work/SRC/openSUSE:Factory/.python3-ec2metadata.new.1766/python3-ec2metadata.changes
        2023-08-31 13:52:12.090127453 +0200
@@ -1,0 +2,11 @@
+Wed Aug 23 21:26:04 UTC 2023 - Robert Schweikert <rjsch...@suse.com>
+
+- Update to version 5.0.0 (bsc#1214215)
+  + Remove the --use-token command line option. Aws is deprecating access
+    to instance metadata without authentication token. Ability to access
+    metadat without token has been removed
+  + Support access to the metadata server over IPv6. If the customer
+    enables the IPv6 endpoint for an instance it will be preferred over the
+    IPv4 endpoint
+
+-------------------------------------------------------------------

Old:
----
  ec2metadata-4.0.0.tar.bz2

New:
----
  ec2metadata-5.0.0.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python3-ec2metadata.spec ++++++
--- /var/tmp/diff_new_pack.CJ78PL/_old  2023-08-31 13:52:13.062162196 +0200
+++ /var/tmp/diff_new_pack.CJ78PL/_new  2023-08-31 13:52:13.066162338 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python3-ec2metadata
 #
-# Copyright (c) 2022 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
 
 %define upstream_name ec2metadata
 Name:           python3-ec2metadata
-Version:        4.0.0
+Version:        5.0.0
 Release:        0
 Summary:        Collect instance metadata in EC2
 License:        GPL-3.0-or-later

++++++ ec2metadata-4.0.0.tar.bz2 -> ec2metadata-5.0.0.tar.bz2 ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ec2metadata-4.0.0/ec2metadata 
new/ec2metadata-5.0.0/ec2metadata
--- old/ec2metadata-4.0.0/ec2metadata   2022-10-10 22:51:55.448845562 +0200
+++ new/ec2metadata-5.0.0/ec2metadata   2023-08-23 23:25:51.057552629 +0200
@@ -68,7 +68,6 @@
         getopt_metaopts.append('help')
         getopt_metaopts.append('listapis')
         getopt_metaopts.append('output')
-        getopt_metaopts.append('use-token-access')
         getopt_metaopts.append('version')
         getopt_metaopts.append('xml')
         getopt_metaopts.sort()
@@ -105,9 +104,6 @@
         elif opt in ('-x', '--xml'):
             generate_xml = True
             continue
-        elif opt == '--use-token-access':
-            meta.use_token_access()
-            continue
 
         metaopts.append(opt.replace('--', ''))
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ec2metadata-4.0.0/lib/ec2metadata/VERSION 
new/ec2metadata-5.0.0/lib/ec2metadata/VERSION
--- old/ec2metadata-4.0.0/lib/ec2metadata/VERSION       2022-10-10 
22:51:55.444845583 +0200
+++ new/ec2metadata-5.0.0/lib/ec2metadata/VERSION       2023-08-23 
23:25:51.057552629 +0200
@@ -1 +1 @@
-4.0.0
+5.0.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ec2metadata-4.0.0/lib/ec2metadata/__init__.py 
new/ec2metadata-5.0.0/lib/ec2metadata/__init__.py
--- old/ec2metadata-4.0.0/lib/ec2metadata/__init__.py   2022-10-10 
22:51:55.444845583 +0200
+++ new/ec2metadata-5.0.0/lib/ec2metadata/__init__.py   2023-08-23 
23:25:51.057552629 +0200
@@ -1,5 +1,5 @@
 # Copyright (c) 2013 Alon Swartz <a...@turnkeylinux.org>
-# Copyright (c) 2019 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
 #
 # This file is part of ec2metadata.
 #
@@ -20,7 +20,8 @@
 import urllib.request
 import urllib.parse
 import urllib.error
-import socket
+
+from socket import (has_ipv6, create_connection)
 
 
 class EC2MetadataError(Exception):
@@ -30,33 +31,22 @@
 class EC2Metadata:
     """Class for querying metadata from EC2"""
 
-    def __init__(self, addr='169.254.169.254', api='2008-02-01'):
-        self.addr = addr
+    def __init__(self, api='2008-02-01'):
         self.api = api
         self.data_categories = ['dynamic/', 'meta-data/']
         self.duplicate_names = []
+        
+        self.addr = None
+        self._set_ipaddress()
 
-        if not self._test_connectivity(self.addr, 80):
-            msg = 'Could not establish connection to: %s' % self.addr
+        if not self.addr:
+            msg = 'Could not establish connection to: IMDS'
             raise EC2MetadataError(msg)
 
         self._set_api_header()
         self._reset_meta_options_api_map()
         self._set_meta_options()
 
-    @staticmethod
-    def _test_connectivity(addr, port):
-        for i in range(6):
-            s = socket.socket()
-            try:
-                s.connect((addr, port))
-                s.close()
-                return True
-            except socket.error:
-                time.sleep(1)
-
-        return False
-
     def _add_meta_option(self, path):
         """Add meta options available under the current path to the options
            to API map"""
@@ -119,20 +109,48 @@
         }
 
     def _set_api_header(self):
-        """Set the header to be used in requests to the metadata service,
-           IMDs. Prefer IMDSv2 which requires a token."""
+        """Set the header to be used in requests to the metadata service"""
         request = urllib.request.Request(
-            'http://169.254.169.254/latest/api/token',
+            'http://%s/latest/api/token' % self.addr,
             headers={'X-aws-ec2-metadata-token-ttl-seconds': '21600'},
             method='PUT'
         )
         try:
             token = urllib.request.urlopen(request).read().decode()
         except urllib.error.URLError:
-            self.request_header = {}
+            raise EC2MetadataError('Unable to retrieve metadata token')
 
         self.request_header = {'X-aws-ec2-metadata-token': token}
-        
+
+    def _set_ipaddress(self):
+        metadata_ip_addrs = {
+            'ipv6_addr': 'fd00:ec2::254',
+            'ipv4_addr': '169.254.169.254'
+        }
+        # Check if the Python implementation has IPv6 support in the first 
place
+        if not has_ipv6:
+            self.addr = metadata_ip_addrs.get('ipv4_addr')
+            return
+            
+        # Python keeps the order in which entries were added to a dictionary
+        # therefore we comply with the RFC and try IPv6 first
+        for ip_family, ip_addr in metadata_ip_addrs.items():
+            for i in range(3):
+                try:
+                    socket = create_connection((ip_addr, 80), timeout=1)
+                    socket.close()
+                    if ip_family == 'ipv6_addr':
+                        # Make the IPv6 address http friendly
+                        self.addr = '[%s]' % ip_addr
+                    else:
+                        self.addr = ip_addr
+                except OSError:
+                    # Cannot reach the network
+                    break
+                except TimeoutError:
+                    # Not ready yet wait a little bit
+                    time.sleep(1)
+
     def _set_meta_options(self):
         """Set the metadata options for the current API on this object."""
         for path in self.data_categories:
@@ -189,7 +207,3 @@
         self._reset_meta_options_api_map()
         self._set_meta_options()
 
-    def use_token_access(self):
-        """Use token based access to retrieve the metadata information. This
-           supports IMDSv2"""
-        self.token_access = True

Reply via email to