Skip to content

Commit 9a4a443

Browse files
CharlieR-o-o-tSiarhei Rasiukevich
authored and
Siarhei Rasiukevich
committed
fix: set correct IP address type for machine
Signed-off-by: Siarhei Rasiukevich <[email protected]>
1 parent 82542dc commit 9a4a443

File tree

2 files changed

+44
-4
lines changed

2 files changed

+44
-4
lines changed

pkg/services/vimmachine.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -289,8 +289,13 @@ func (v *VimMachineService) reconcileNetwork(ctx context.Context, vimMachineCtx
289289
addresses := vm.Status.Addresses
290290
machineAddresses := make([]clusterv1.MachineAddress, 0, len(addresses))
291291
for _, addr := range addresses {
292+
var addrType = clusterv1.MachineInternalIP
293+
if !infrautilv1.IsInternalIP(addr) {
294+
addrType = clusterv1.MachineExternalIP
295+
}
296+
292297
machineAddresses = append(machineAddresses, clusterv1.MachineAddress{
293-
Type: clusterv1.MachineExternalIP,
298+
Type: addrType,
294299
Address: addr,
295300
})
296301
}

pkg/util/machines.go

+38-3
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,6 @@ func GetMachinePreferredIPAddress(machine *infrav1.VSphereMachine) (string, erro
6666
}
6767

6868
for _, machineAddr := range machine.Status.Addresses {
69-
if machineAddr.Type != clusterv1.MachineExternalIP {
70-
continue
71-
}
7269
if cidr == nil {
7370
return machineAddr.Address, nil
7471
}
@@ -258,3 +255,41 @@ func MachinesAsString(machines []*clusterv1.Machine) string {
258255
}
259256
return message
260257
}
258+
259+
// IsInternalIP checks if the IP is private/internal
260+
func IsInternalIP(ip string) bool {
261+
netIP := net.ParseIP(ip)
262+
if netIP == nil {
263+
return false
264+
}
265+
266+
privateBlocks := []*net.IPNet{
267+
{IP: net.IPv4(10, 0, 0, 0), Mask: net.CIDRMask(8, 32)}, // 10.0.0.0/8
268+
{IP: net.IPv4(172, 16, 0, 0), Mask: net.CIDRMask(12, 32)}, // 172.16.0.0/12
269+
{IP: net.IPv4(192, 168, 0, 0), Mask: net.CIDRMask(16, 32)}, // 192.168.0.0/16
270+
{IP: net.IPv4(127, 0, 0, 1), Mask: net.CIDRMask(8, 32)}, // 127.0.0.0/8 (loopback)
271+
{IP: net.IPv4(169, 254, 0, 0), Mask: net.CIDRMask(16, 32)}, // 169.254.0.0/16 (link-local)
272+
}
273+
274+
// Check IPv4 private ranges
275+
for _, block := range privateBlocks {
276+
if block.Contains(netIP) {
277+
return true
278+
}
279+
}
280+
281+
// Check IPv6 private ranges
282+
privateIPv6Blocks := []*net.IPNet{
283+
{IP: net.ParseIP("::1"), Mask: net.CIDRMask(128, 128)}, // Loopback
284+
{IP: net.ParseIP("fc00::"), Mask: net.CIDRMask(7, 128)}, // Unique Local Addresses (ULA)
285+
{IP: net.ParseIP("fe80::"), Mask: net.CIDRMask(10, 128)}, // Link-local
286+
}
287+
288+
for _, block := range privateIPv6Blocks {
289+
if block.Contains(netIP) {
290+
return true
291+
}
292+
}
293+
294+
return false
295+
}

0 commit comments

Comments
 (0)