try to work around the broken gethostbyaddr more thoroughly
[tests.git] / system / TestPlc.py
index 9555a99..57543d1 100644 (file)
@@ -24,6 +24,8 @@ from PlcapiUrlScanner import PlcapiUrlScanner
 
 from TestBonding import TestBonding
 
+from gethostbyaddr import workaround_gethostbyaddr
+
 has_sfa_cache_filename="sfa-cache"
 
 # step methods must take (self) and return a boolean (options is a member of the class)
@@ -703,28 +705,6 @@ class TestPlc:
         for level in [ 'arch' ]:
             repo_url = os.path.dirname(repo_url)
 
-        ##########
-        # on the virsh containers, DNS resolution using gethostbyaddr
-        # won't work fine, for the hosts under .pl.sophia.inria.fr
-        # although these IPs can be reversed from virtually everywhere else
-        #
-        # this has started with something around fedora35 so I am suspecting python-3.10
-        #
-        # in any case, here's a quick and dirty workaround, as I have bumped my head
-        # against the screen for two good hours and not found any single clue
-        # about how to deal with this properly
-
-        import subprocess
-
-        def workaround_gethostaddr(ip):
-            command = f"host {ip} 8.8.8.8"
-            completed = subprocess.run(command, shell=True, capture_output=True)
-            pieces = completed.stdout.decode().split("domain name pointer ")
-            if len(pieces) == 2:
-                return pieces[1].replace(".\n", "")
-            else:
-                return None
-
         # invoke initvm (drop support for vs)
         script = "lbuild-initvm.sh"
         script_options = ""
@@ -734,15 +714,11 @@ class TestPlc:
         script_options += " -f {}".format(self.options.fcdistro)
         script_options += " -r {}".format(repo_url)
         vserver_name = self.vservername
-        try:
-            vserver_hostname = socket.gethostbyaddr(self.vserverip)[0]
-        except:
-            # read more above about this workaround
-            vserver_hostname = workaround_gethostaddr(self.vserverip)
-            if not vserver_hostname:
-                print("Cannot reverse lookup {}".format(self.vserverip))
-                print("This is considered fatal, as this might pollute the test results")
-                return False
+        vserver_hostname = workaround_gethostbyaddr(self.vserverip)
+        if not vserver_hostname:
+            print("Cannot reverse lookup {}".format(self.vserverip))
+            print("This is considered fatal, as this might pollute the test results")
+            return False
         script_options += " -n {}".format(vserver_hostname)
         create_vserver="{build_dir}/{script} {script_options} {vserver_name}".format(**locals())
         return self.run_in_host(create_vserver) == 0