File fix_next_server_being_hostname.patch of Package cobbler

Index: cobbler-3.3.3/cobbler/settings/migrations/V3_3_0.py
===================================================================
--- cobbler-3.3.3.orig/cobbler/settings/migrations/V3_3_0.py
+++ cobbler-3.3.3/cobbler/settings/migrations/V3_3_0.py
@@ -11,6 +11,7 @@ import glob
 import ipaddress
 import json
 import os
+import socket
 
 from shutil import copytree
 
@@ -310,11 +311,38 @@ def migrate_cobbler_collections(collecti
                 data["next_server_v6"] = addr
                 data.pop("next_server")
             else:
-                _ip = ipaddress.ip_address(addr)
-                if isinstance(_ip, ipaddress.IPv4Address):
-                    data["next_server_v4"] = data.pop("next_server")
-                elif isinstance(_ip, ipaddress.IPv6Address):
-                    data["next_server_v6"] = data.pop("next_server")
+                try:
+                    _ip = ipaddress.ip_address(addr)
+                    if isinstance(_ip, ipaddress.IPv4Address):
+                        data["next_server_v4"] = data.pop("next_server")
+                    elif isinstance(_ip, ipaddress.IPv6Address):
+                        data["next_server_v6"] = data.pop("next_server")
+                except ValueError:
+                    # next_server is a hostname so we need to resolve hostname
+                    try:
+                        data["next_server_v4"] = socket.getaddrinfo(
+                            addr,
+                            None,
+                            socket.AF_INET,
+                        )[1][4][0]
+                    except OSError:
+                        pass
+                    try:
+                        data["next_server_v6"] = socket.getaddrinfo(
+                            addr,
+                            None,
+                            socket.AF_INET6,
+                        )[1][4][0]
+                    except OSError:
+                        pass
+
+                    if "next_server_v4" not in data and "next_server_v6" not in data:
+                        print(
+                            "ERROR: Neither IPv4 nor IPv6 addresses can be resolved for "
+                            f"'next server': {data['next_server']}. Please check your DNS configuration."
+                        )
+                    else:
+                        data.pop("next_server")
 
         # enable_gpxe -> enable_ipxe
         if "enable_gpxe" in data:
openSUSE Build Service is sponsored by