diff --git a/CHANGELOG.md b/CHANGELOG.md index 93b7700a..576f170b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ### Fixed - Fix nightly builds. +- Better handling for missing NetDev.Device. #1777 ## v4.6.0rc3, 2025-02-23 diff --git a/overlays/NetworkManager/internal/networkmanager_test.go b/overlays/NetworkManager/internal/networkmanager_test.go index 3d106194..f9db63e0 100644 --- a/overlays/NetworkManager/internal/networkmanager_test.go +++ b/overlays/NetworkManager/internal/networkmanager_test.go @@ -50,7 +50,7 @@ Filename: warewulf-unmanaged.conf plugins=keyfile [keyfile] -unmanaged-devices=except:mac:e6:92:39:49:7b:03,except:interface-name:wwnet0,except:mac:9a:77:29:73:14:f1,except:interface-name:wwnet1, +unmanaged-devices=except:mac:e6:92:39:49:7b:03,except:interface-name:wwnet0,except:mac:9a:77:29:73:14:f1,except:interface-name:wwnet1 `, }, "NetworkManager:ww4-managed.ww": { @@ -119,6 +119,74 @@ gateway=192.168.3.1 dns=8.8.8.8;8.8.4.4; dns-search=example.com;example.net; +[ipv6] +addr-gen-mode=stable-privacy +method=ignore +never-default=true +`, + }, + "NetworkManager:ww4-managed.ww without device": { + nodes_conf: ` +nodes: + node1: + network devices: + default: + onboot: true + hwaddr: e6:92:39:49:7b:03 + ipaddr: 192.168.3.21 + netmask: 255.255.255.0 + gateway: 192.168.3.1 + secondary: + onboot: true + hwaddr: 9a:77:29:73:14:f1 + ipaddr: 192.168.3.22 + netmask: 255.255.255.0 + gateway: 192.168.3.1 + tags: + DNS1: 8.8.8.8 + DNS2: 8.8.4.4 + DNSSEARCH: "example.com;example.net;" +`, + args: []string{"--render", "node1", "NetworkManager", "etc/NetworkManager/system-connections/ww4-managed.ww"}, + log: `backupFile: true +writeFile: true +Filename: warewulf-default.conf + +# This file is autogenerated by warewulf + +[connection] +id=default +type=ethernet +autoconnect=true +[ethernet] +mac-address=e6:92:39:49:7b:03 +[ipv4] +method=manual +address=192.168.3.21/24 +gateway=192.168.3.1 + +[ipv6] +addr-gen-mode=stable-privacy +method=ignore +never-default=true +backupFile: true +writeFile: true +Filename: warewulf-secondary.conf +# This file is autogenerated by warewulf + +[connection] +id=secondary +type=ethernet +autoconnect=true +[ethernet] +mac-address=9a:77:29:73:14:f1 +[ipv4] +method=manual +address=192.168.3.22/24 +gateway=192.168.3.1 +dns=8.8.8.8;8.8.4.4; +dns-search=example.com;example.net; + [ipv6] addr-gen-mode=stable-privacy method=ignore @@ -158,7 +226,7 @@ Filename: warewulf-unmanaged.conf plugins=keyfile [keyfile] -unmanaged-devices=except:interface-name:wwnet0,except:mac:9a:77:29:73:14:f1,except:interface-name:wwnet1, +unmanaged-devices=except:interface-name:wwnet0,except:mac:9a:77:29:73:14:f1,except:interface-name:wwnet1 `, }, "NetworkManager:ww4-managed.ww with vlan": { diff --git a/overlays/NetworkManager/rootfs/etc/NetworkManager/conf.d/ww4-unmanaged.ww b/overlays/NetworkManager/rootfs/etc/NetworkManager/conf.d/ww4-unmanaged.ww index 1afa9491..4b66b892 100644 --- a/overlays/NetworkManager/rootfs/etc/NetworkManager/conf.d/ww4-unmanaged.ww +++ b/overlays/NetworkManager/rootfs/etc/NetworkManager/conf.d/ww4-unmanaged.ww @@ -5,4 +5,15 @@ plugins=keyfile [keyfile] -unmanaged-devices={{ range $connection_id, $netdev := .NetDevs }}{{ if $netdev.Hwaddr }}except:mac:{{ $netdev.Hwaddr }},{{ end }}{{ if $netdev.Device }}except:interface-name:{{ $netdev.Device }},{{ end }}{{ end }} +{{- $unmanaged := list }} +{{- range $_, $netdev := .NetDevs }} +{{- if $netdev.Hwaddr }} +{{- $unmanaged = append $unmanaged (printf "except:mac:%s" $netdev.Hwaddr) }} +{{- end }} +{{- if $netdev.Device }} +{{- $unmanaged = append $unmanaged (printf "except:interface-name:%s" $netdev.Device) }} +{{- end }} +{{- end }} +{{- if $unmanaged }} +unmanaged-devices={{ join "," $unmanaged }} +{{- end }} diff --git a/overlays/NetworkManager/rootfs/etc/NetworkManager/system-connections/ww4-managed.ww b/overlays/NetworkManager/rootfs/etc/NetworkManager/system-connections/ww4-managed.ww index ae70f38b..2586837b 100644 --- a/overlays/NetworkManager/rootfs/etc/NetworkManager/system-connections/ww4-managed.ww +++ b/overlays/NetworkManager/rootfs/etc/NetworkManager/system-connections/ww4-managed.ww @@ -4,7 +4,9 @@ [connection] id={{ $devname }} +{{- if $netdev.Device }} interface-name={{ $netdev.Device }} +{{- end }} type={{ default "ethernet" (lower $netdev.Type) }} {{- if $netdev.Tags.master }} master={{ $netdev.Tags.master }} @@ -78,7 +80,9 @@ ipaddr="{{ $netdev.Ipaddr6 }}" {{- if eq $netdev.Type "vlan" }} [vlan] +{{- if $netdev.Device }} interface-name={{ $netdev.Device }} +{{- end }} parent={{ $netdev.Tags.parent_device }} id={{ $netdev.Tags.vlan_id }} {{- end }} diff --git a/overlays/ifcfg/internal/ifcfg_test.go b/overlays/ifcfg/internal/ifcfg_test.go index 654ec2d4..164349d9 100644 --- a/overlays/ifcfg/internal/ifcfg_test.go +++ b/overlays/ifcfg/internal/ifcfg_test.go @@ -86,6 +86,74 @@ IPV6_FAILURE_FATAL=no DNS1=8.8.8.8 DNS2=8.8.4.4 DOMAIN="example.net example.com" +`, + }, + "ifcfg:ifcfg.ww without device": { + nodes_conf: ` +nodes: + node1: + network devices: + default: + hwaddr: e6:92:39:49:7b:03 + ipaddr: 192.168.3.21 + netmask: 255.255.255.0 + gateway: 192.168.3.1 + tags: + DNS1: 1.1.1.1 + DNS2: 1.0.0.1 + DNSSEARCH: "example.com example.net" + secondary: + hwaddr: 9a:77:29:73:14:f1 + ipaddr: 192.168.3.22 + netmask: 255.255.255.0 + gateway: 192.168.3.1 + tags: + DNS1: 8.8.8.8 + DNS2: 8.8.4.4 + DNSSEARCH: "example.net;example.com;" +`, + args: []string{"--render", "node1", "ifcfg", "etc/sysconfig/network-scripts/ifcfg.ww"}, + log: `backupFile: true +writeFile: true +Filename: ifcfg-default.conf + +# This file is autogenerated by warewulf +TYPE=Ethernet +NAME=default +BOOTPROTO=static +DEVTIMEOUT=10 +IPADDR=192.168.3.21 +NETMASK=255.255.255.0 +GATEWAY=192.168.3.1 +HWADDR=e6:92:39:49:7b:03 +ONBOOT=true +IPV6INIT=yes +IPV6_AUTOCONF=yes +IPV6_DEFROUTE=yes +IPV6_FAILURE_FATAL=no +DNS1=1.1.1.1 +DNS2=1.0.0.1 +DOMAIN="example.com example.net" +backupFile: true +writeFile: true +Filename: ifcfg-secondary.conf +# This file is autogenerated by warewulf +TYPE=Ethernet +NAME=secondary +BOOTPROTO=static +DEVTIMEOUT=10 +IPADDR=192.168.3.22 +NETMASK=255.255.255.0 +GATEWAY=192.168.3.1 +HWADDR=9a:77:29:73:14:f1 +ONBOOT=true +IPV6INIT=yes +IPV6_AUTOCONF=yes +IPV6_DEFROUTE=yes +IPV6_FAILURE_FATAL=no +DNS1=8.8.8.8 +DNS2=8.8.4.4 +DOMAIN="example.net example.com" `, }, "ifcfg:network.ww": { diff --git a/overlays/ifcfg/rootfs/etc/sysconfig/network-scripts/ifcfg.ww b/overlays/ifcfg/rootfs/etc/sysconfig/network-scripts/ifcfg.ww index 7086ff5e..f29a7bd0 100644 --- a/overlays/ifcfg/rootfs/etc/sysconfig/network-scripts/ifcfg.ww +++ b/overlays/ifcfg/rootfs/etc/sysconfig/network-scripts/ifcfg.ww @@ -9,7 +9,9 @@ TYPE={{ default "Ethernet" $netdev.Type }} {{- if $netdev.Tags.master }} MASTER={{ $netdev.Tags.master }} {{- end }} +{{- if $netdev.Device }} DEVICE={{ $netdev.Device }} +{{- end }} NAME={{ $devname }} {{- if $netdev.MTU }} MTU={{ $netdev.MTU }}