In your debug above, we are adding both IPv6 and IPv4 subnets to the router, on two different interfaces - qr-8c8b4c01-40 and qr-7dc17e0a-97. The IPv6 (first vip) of each succeeds since the link-local is based on the MAC address. The IPv4 (second) of each fails because it matches an existing vip - this is because of this in the KeepalivedVipAddress() class:
def __eq__(self, other):
return (isinstance(other, KeepalivedVipAddress) and self.ip_address == other.ip_address)
Only the address is checked for uniqueness and not the interface or scope.
But checking the interface name in addition doesn't seem correct, since you can then have two interfaces with the same IP. Trying to do this manually on a non-HA router seems to blow-up early with an overlapping address error from the API.
Is it possible to create a list of commands we can run from the client to reproduce this? If we really are trying to add a subnet with the same cidr to two router interfaces then that might be a bug on the server not detecting the overlap.
I'm a little confused by this bug.
In your debug above, we are adding both IPv6 and IPv4 subnets to the router, on two different interfaces - qr-8c8b4c01-40 and qr-7dc17e0a-97. The IPv6 (first vip) of each succeeds since the link-local is based on the MAC address. The IPv4 (second) of each fails because it matches an existing vip - this is because of this in the KeepalivedVipAd dress() class:
def __eq__(self, other): dress) and
self. ip_address == other.ip_address)
return (isinstance(other, KeepalivedVipAd
Only the address is checked for uniqueness and not the interface or scope.
But checking the interface name in addition doesn't seem correct, since you can then have two interfaces with the same IP. Trying to do this manually on a non-HA router seems to blow-up early with an overlapping address error from the API.
Is it possible to create a list of commands we can run from the client to reproduce this? If we really are trying to add a subnet with the same cidr to two router interfaces then that might be a bug on the server not detecting the overlap.