From 87da57d1a2efa8cd11d23c7372dbbafd1622503e Mon Sep 17 00:00:00 2001 From: Jonathon Anderson Date: Fri, 7 Feb 2025 18:05:38 -0700 Subject: [PATCH] Return "" when NetDev.IpCIDR is empty Signed-off-by: Jonathon Anderson --- CHANGELOG.md | 3 ++ internal/pkg/node/mergo.go | 2 +- internal/pkg/node/methods.go | 2 +- internal/pkg/node/methods_test.go | 38 +++++++++++++++++++ .../internal/networkmanager_test.go | 2 - overlays/wicked/internal/wicked_test.go | 4 +- 6 files changed, 45 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3199442a..78a57294 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Removed - Removed partial support for regex searches in node and profile lists. #1635 +### Fixed + +- Return "" when NetDev.IpCIDR is empty. ## v4.6.0rc2, 2025-02-07 diff --git a/internal/pkg/node/mergo.go b/internal/pkg/node/mergo.go index cb92c5e9..efeefc29 100644 --- a/internal/pkg/node/mergo.go +++ b/internal/pkg/node/mergo.go @@ -71,7 +71,7 @@ type Transformer struct{} func (t Transformer) Transformer(typ reflect.Type) func(dst, src reflect.Value) error { if typ == reflect.TypeOf(net.IP{}) { return func(dst, src reflect.Value) error { - if !src.IsValid() || src.IsZero() { + if !src.IsValid() || src.IsNil() { return nil } dst.Set(src) diff --git a/internal/pkg/node/methods.go b/internal/pkg/node/methods.go index 0ad950ad..a7b28cc3 100644 --- a/internal/pkg/node/methods.go +++ b/internal/pkg/node/methods.go @@ -412,7 +412,7 @@ Return the ipv4 address and mask in CIDR format. Aimed for the use in templates. */ func (netdev *NetDev) IpCIDR() string { - if netdev.Ipaddr.IsUnspecified() || netdev.Netmask.IsUnspecified() { + if netdev.Ipaddr == nil || netdev.Ipaddr.IsUnspecified() || netdev.Netmask == nil || netdev.Netmask.IsUnspecified() { return "" } ipCIDR := net.IPNet{ diff --git a/internal/pkg/node/methods_test.go b/internal/pkg/node/methods_test.go index 978c7260..9a4fb29d 100644 --- a/internal/pkg/node/methods_test.go +++ b/internal/pkg/node/methods_test.go @@ -7,6 +7,44 @@ import ( "github.com/stretchr/testify/assert" ) +func Test_IpCIDR(t *testing.T) { + tests := map[string]struct { + ipaddr net.IP + netmask net.IP + cidr string + }{ + "nil": { + ipaddr: nil, + netmask: nil, + cidr: "", + }, + "ip only": { + ipaddr: net.ParseIP("192.168.1.1"), + netmask: nil, + cidr: "", + }, + "netmask only": { + ipaddr: nil, + netmask: net.ParseIP("255.255.255.0"), + cidr: "", + }, + "working": { + ipaddr: net.ParseIP("192.168.1.1"), + netmask: net.ParseIP("255.255.255.0"), + cidr: "192.168.1.1/24", + }, + } + + for name, tt := range tests { + t.Run(name, func(t *testing.T) { + n := new(NetDev) + n.Ipaddr = tt.ipaddr + n.Netmask = tt.netmask + assert.Equal(t, tt.cidr, n.IpCIDR()) + }) + } +} + func Test_Empty(t *testing.T) { var netdev NetDev var netdevPtr *NetDev diff --git a/overlays/NetworkManager/internal/networkmanager_test.go b/overlays/NetworkManager/internal/networkmanager_test.go index d1714669..f21a2158 100644 --- a/overlays/NetworkManager/internal/networkmanager_test.go +++ b/overlays/NetworkManager/internal/networkmanager_test.go @@ -152,7 +152,6 @@ autoconnect=true [ethernet] [ipv4] method=manual -address= route1=192.168.1.0/24,192.168.2.254 [vlan] interface-name=eth0.902 @@ -176,7 +175,6 @@ autoconnect=true [ethernet] [ipv4] method=manual -address= [ipv6] addr-gen-mode=stable-privacy diff --git a/overlays/wicked/internal/wicked_test.go b/overlays/wicked/internal/wicked_test.go index 1963780f..c3cc7c46 100644 --- a/overlays/wicked/internal/wicked_test.go +++ b/overlays/wicked/internal/wicked_test.go @@ -153,7 +153,7 @@ This file is autogenerated by warewulf
- +
192.168.1.0/24 @@ -189,7 +189,7 @@ This file is autogenerated by warewulf
- +