Skip to content

cloudinit/net: handle two different routes for the same ip (#1124)

BZ: 2028031
Tested by: QE

commit 0e25076b34fa995161b83996e866c0974cee431f
Author: Emanuele Giuseppe Esposito <eesposit@redhat.com>
Date:   Mon Dec 6 18:34:26 2021 +0100

    cloudinit/net: handle two different routes for the same ip (#1124)

    If we set a dhcp server side like this:
    $ cat /var/tmp/cloud-init/cloud-init-dhcp-f0rie5tm/dhcp.leases
    lease {
    ...
    option classless-static-routes 31.169.254.169.254 0.0.0.0,31.169.254.169.254
        10.112.143.127,22.10.112.140 0.0.0.0,0 10.112.140.1;
    ...
    }
    cloud-init fails to configure the routes via 'ip route add' because to there are
    two different routes for 169.254.169.254:

    $ ip -4 route add 192.168.1.1/32 via 0.0.0.0 dev eth0
    $ ip -4 route add 192.168.1.1/32 via 10.112.140.248 dev eth0

    But NetworkManager can handle such scenario successfully as it uses "ip route append".
    So change cloud-init to also use "ip route append" to fix the issue:

    $ ip -4 route append 192.168.1.1/32 via 0.0.0.0 dev eth0
    $ ip -4 route append 192.168.1.1/32 via 10.112.140.248 dev eth0

    Signed-off-by: Emanuele Giuseppe Esposito <eesposit@redhat.com>

    RHBZ: #2003231

Conflicts:
    cloudinit/net/tests/test_init.py: a mock call in
    test_ephemeral_ipv4_network_with_rfc3442_static_routes is not
    present downstream.

Signed-off-by: Emanuele Giuseppe Esposito <eesposit@redhat.com>

Merge request reports