On Hetzner, IPv6 is provided via metadata service, not via DHCP. However, the cloud-init is asking for it via DHCP. Configured here:
Run Fedora Server in Hetzner cloud, other distributions probably affected as well.
2026-05-04 22:58:46,891 - distros[DEBUG]: DHCP client selected: dhcpcd
2026-05-04 22:58:46,891 - dhcp.py[DEBUG]: Performing a dhcp discovery on enp1s0
2026-05-04 22:58:46,891 - subp.py[DEBUG]: Running command ['ip', 'link', 'set', 'dev', 'enp1s0', 'up'] with allowed return codes [0] (shell=False, capture=True)
2026-05-04 22:58:46,894 - util.py[DEBUG]: Reading from /sys/class/net/enp1s0/type (quiet=False)
2026-05-04 22:58:46,894 - util.py[DEBUG]: Reading 2 bytes from /sys/class/net/enp1s0/type
2026-05-04 22:58:46,894 - subp.py[DEBUG]: Running command ['dhcpcd', '--ipv4only', '--waitip', '--persistent', '--noarp', '--script=/bin/true', 'enp1s0'] with allowed return codes [0] (shell=False, capture=True)
2026-05-04 22:58:48,079 - performance.py[DEBUG]: Running ['dhcpcd', '--ipv4only', '--waitip', '--persistent', '--noarp', '--script=/bin/true', 'enp1s0'] took 1.185 seconds
2026-05-04 22:58:48,079 - subp.py[DEBUG]: Running command ['dhcpcd', '--dumplease', '--ipv4only', 'enp1s0'] with allowed return codes [0] (shell=False, capture=True)
2026-05-04 22:58:48,084 - dhcp.py[DEBUG]: Parsing dhcpcd lease for interface enp1s0: 'reason=BOUND\ninterface=enp1s0\nprotocol=dhcp\nip_address=157.xxx.191\nsubnet_cidr=32\nbroadcast_address=157.xxx.191\nnetwork_number=157.xxx.191\nfilename=/snponly-arm64-script.efi\nsubnet_mask=255.255.255.255\nclassless_static_routes=172.31.1.1/32 0.0.0.0 0.0.0.0/0 172.31.1.1\nrouters=172.31.1.1\ndomain_name_servers=185.12.64.2 185.12.64.1\ndhcp_lease_time=86400\ndhcp_message_type=5\ndhcp_server_identifier=172.31.1.1\nms_classless_static_routes=172.31.1.1/32 0.0.0.0 0.0.0.0/0 172.31.1.1\n'
2026-05-04 22:58:48,084 - util.py[DEBUG]: Reading from /var/lib/dhcpcd/enp1s0.lease (quiet=False)
2026-05-04 22:58:48,084 - util.py[DEBUG]: Reading 310 bytes from /var/lib/dhcpcd/enp1s0.lease
2026-05-04 22:58:48,084 - subp.py[DEBUG]: Running command ['dhcpcd', '--ipv4only', '--waitip', '--persistent', '--noarp', '--script=/bin/true', 'enp1s0', '-P'] with allowed return codes [0] (shell=False, capture=True)
2026-05-04 22:58:48,087 - util.py[DEBUG]: Reading from /run/dhcpcd/enp1s0-4.pid (quiet=False)
2026-05-04 22:58:48,087 - util.py[DEBUG]: Reading 4 bytes from /run/dhcpcd/enp1s0-4.pid
2026-05-04 22:58:48,087 - util.py[DEBUG]: Reading from /proc/915/stat (quiet=True)
2026-05-04 22:58:48,088 - util.py[DEBUG]: Reading 304 bytes from /proc/915/stat
2026-05-04 22:58:48,088 - dhcp.py[DEBUG]: killing dhcpcd with pid=915 gid=915
2026-05-04 22:58:48,089 - ephemeral.py[DEBUG]: Received dhcp lease on enp1s0 for 157.90.150.191/255.255.255.255
2026-05-04 22:58:48,089 - ephemeral.py[DEBUG]: Attempting setup of ephemeral network on enp1s0 with 157.90.150.191/32 brd 157.90.150.191
2026-05-04 22:58:48,089 - subp.py[DEBUG]: Running command ['ip', '--json', 'addr'] with allowed return codes [0] (shell=False, capture=True)
2026-05-04 22:58:48,092 - ephemeral.py[DEBUG]: Skip adding ip address: enp1s0 already has address 157.90.150.191
2026-05-04 22:58:48,092 - ephemeral.py[DEBUG]: Skip bringing up network link: interface enp1s0 is already up
2026-05-04 22:58:48,092 - subp.py[DEBUG]: Running command ['ip', '-4', 'route', 'append', '172.31.1.1/32', 'dev', 'enp1s0'] with allowed return codes [0] (shell=False, capture=True)
2026-05-04 22:58:48,094 - subp.py[DEBUG]: Running command ['ip', '-4', 'route', 'append', '0.0.0.0/0', 'via', '172.31.1.1', 'dev', 'enp1s0'] with allowed return codes [0] (shell=False, capture=True)
2026-05-04 22:58:48,096 - ephemeral.py[DEBUG]: Successfully brought up None for ephemeral ipv4 networking.
2026-05-04 22:58:48,096 - performance.py[DEBUG]: Getting metadata took 1.450 seconds
2026-05-04 22:58:48,096 - handlers.py[DEBUG]: finish: init-local/search-Hetzner: FAIL: no local data found from DataSourceHetzner
2026-05-04 22:58:48,096 - log_util.py[WARNING]: Getting data from <class 'cloudinit.sources.DataSourceHetzner.DataSourceHetzner'> failed
2026-05-04 22:58:48,096 - log_util.py[DEBUG]: Getting data from <class 'cloudinit.sources.DataSourceHetzner.DataSourceHetzner'> failed
Traceback (most recent call last):
File "/usr/lib/python3.14/site-packages/cloudinit/sources/__init__.py", line 1081, in find_source
if s.update_metadata_if_supported(
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
[EventType.BOOT_NEW_INSTANCE]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
):
^
File "/usr/lib/python3.14/site-packages/cloudinit/sources/__init__.py", line 949, in update_metadata_if_supported
result = self.get_data()
File "/usr/lib/python3.14/site-packages/cloudinit/performance.py", line 103, in decorator
return func(*args, **kwargs)
File "/usr/lib/python3.14/site-packages/cloudinit/sources/__init__.py", line 505, in get_data
return_value = self._check_and_get_data()
File "/usr/lib/python3.14/site-packages/cloudinit/sources/__init__.py", line 436, in _check_and_get_data
return self._get_data()
~~~~~~~~~~~~~~^^
File "/usr/lib/python3.14/site-packages/cloudinit/sources/DataSourceHetzner.py", line 103, in _get_data
with EphemeralIPNetwork(
~~~~~~~~~~~~~~~~~~^
self.distro,
^^^^^^^^^^^^
...<10 lines>...
],
^^
):
^
File "/usr/lib/python3.14/site-packages/cloudinit/net/ephemeral.py", line 462, in __enter__
self._perform_ephemeral_network_setup(ip_version="ipv6")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/site-packages/cloudinit/net/ephemeral.py", line 509, in _perform_ephemeral_network_setup
EphemeralIPv6Network(
~~~~~~~~~~~~~~~~~~~~^
self.distro,
^^^^^^^^^^^^
self.interface,
^^^^^^^^^^^^^^^
)
^
File "/usr/lib/python3.14/site-packages/cloudinit/net/ephemeral.py", line 262, in __init__
raise ValueError("Cannot init network on {0}".format(interface))
ValueError: Cannot init network on None
Bug report
On Hetzner, IPv6 is provided via metadata service, not via DHCP. However, the cloud-init is asking for it via DHCP. Configured here:
cloud-init/cloudinit/sources/DataSourceHetzner.py
Line 107 in d7eb828
Changing that value to
Falsefixed the traceback for me. However, I don't understand enough to be sure, someone from Hetzner probably should confirm, maybe @DarkPhily ?Steps to reproduce the problem
Run Fedora Server in Hetzner cloud, other distributions probably affected as well.
Environment details
cloud-init logs