Skip to content

Hetzner: IPv6 is not provided via DHCP #6862

@pschiffe

Description

@pschiffe

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:

Changing that value to False fixed 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 version: cloud-init-25.3-3.fc44.noarch
  • Operating System Distribution: Fedora Linux 44 (Server Edition)
  • Cloud provider, platform or installer type: Hetzner cloud

cloud-init logs

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working correctlynewAn issue that still needs triage

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions