From 9f10e90fdb54bf9942ae38d7a86f12caee6a87eb Mon Sep 17 00:00:00 2001 From: xu yang Date: Mon, 21 Oct 2024 04:41:12 +0000 Subject: [PATCH 1/2] fix unmanaged issue Signed-off-by: xu yang --- CHANGELOG.md | 2 + .../internal/networkmanager_test.go | 50 ++++++++++++++++++- .../internal/nodes_empty_mac.conf | 21 ++++++++ .../NetworkManager/conf.d/ww4-unmanaged.ww | 2 +- 4 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 overlays/NetworkManager/internal/nodes_empty_mac.conf diff --git a/CHANGELOG.md b/CHANGELOG.md index 352b6ef1..53e6e3ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -69,6 +69,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Fix overlay permissions in /root/ and /root/.ssh/. #1452 - Return non-zero exit code on container sub-commands #1437 - Return non-zero exit code on profile sub-commands #1435 +- Fix issue that NetworkManager marks managed interfaces "unmanaged" if they do + not have a device specified. #1154 ## v4.5.8, 2024-10-01 diff --git a/overlays/NetworkManager/internal/networkmanager_test.go b/overlays/NetworkManager/internal/networkmanager_test.go index 581006d2..9576a202 100644 --- a/overlays/NetworkManager/internal/networkmanager_test.go +++ b/overlays/NetworkManager/internal/networkmanager_test.go @@ -53,6 +53,54 @@ func Test_networkmanagerOverlay(t *testing.T) { } } +func Test_unmanaged_networkmanagerOverlay_with_empty_mac(t *testing.T) { + env := testenv.New(t) + defer env.RemoveAll(t) + env.ImportFile(t, "etc/warewulf/nodes.conf", "nodes_empty_mac.conf") + env.ImportFile(t, "var/lib/warewulf/overlays/NetworkManager/rootfs/etc/NetworkManager/conf.d/ww4-unmanaged.ww", "../rootfs/etc/NetworkManager/conf.d/ww4-unmanaged.ww") + + tests := []struct { + name string + args []string + log string + }{ + { + name: "NetworkManager:ww4-unmanaged.ww", + args: []string{"--render", "node1", "NetworkManager", "etc/NetworkManager/conf.d/ww4-unmanaged.ww"}, + log: networkmanager_unmanaged_with_empty_mac, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + cmd := show.GetCommand() + cmd.SetArgs(tt.args) + stdout := bytes.NewBufferString("") + stderr := bytes.NewBufferString("") + logbuf := bytes.NewBufferString("") + cmd.SetOut(stdout) + cmd.SetErr(stderr) + wwlog.SetLogWriter(logbuf) + err := cmd.Execute() + assert.NoError(t, err) + assert.Empty(t, stdout.String()) + assert.Empty(t, stderr.String()) + assert.Equal(t, tt.log, logbuf.String()) + }) + } +} + +const networkmanager_unmanaged_with_empty_mac string = `backupFile: true +writeFile: true +Filename: warewulf-unmanaged.conf +# This file is autogenerated by warewulf +[main] +plugins=keyfile + +[keyfile] +unmanaged-devices=except:mac:9a:77:29:73:14:f1, +` + const networkmanager_unmanaged string = `backupFile: true writeFile: true Filename: warewulf-unmanaged.conf @@ -61,7 +109,7 @@ Filename: warewulf-unmanaged.conf plugins=keyfile [keyfile] -unmanaged-devices=except:interface-name:wwnet0,except:interface-name:wwnet1, +unmanaged-devices=except:mac:e6:92:39:49:7b:03,except:mac:9a:77:29:73:14:f1, ` const networkmanager_managed string = `backupFile: true diff --git a/overlays/NetworkManager/internal/nodes_empty_mac.conf b/overlays/NetworkManager/internal/nodes_empty_mac.conf new file mode 100644 index 00000000..7f95f690 --- /dev/null +++ b/overlays/NetworkManager/internal/nodes_empty_mac.conf @@ -0,0 +1,21 @@ +WW_INTERNAL: 45 +nodes: + node1: + network devices: + default: + device: wwnet0 + onboot: true + hwaddr: + ipaddr: 192.168.3.21 + netmask: 255.255.255.0 + gateway: 192.168.3.1 + secondary: + device: wwnet1 + 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 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 d77b8ece..578aab71 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,4 @@ plugins=keyfile [keyfile] -unmanaged-devices={{ range $connection_id, $netdev := .NetDevs }}except:interface-name:{{- $netdev.Device -}},{{ end }} +unmanaged-devices={{ range $connection_id, $netdev := .NetDevs }}{{ if $netdev.Hwaddr }}except:mac:{{- $netdev.Hwaddr -}},{{ end }}{{ end }} From 36d6ea1b7bd232212b2b0c37c76eb3d35837837c Mon Sep 17 00:00:00 2001 From: Jonathon Anderson Date: Mon, 28 Oct 2024 15:37:02 -0600 Subject: [PATCH 2/2] NetworkManager manages any known device or mac Signed-off-by: Jonathon Anderson --- overlays/NetworkManager/internal/networkmanager_test.go | 4 ++-- .../rootfs/etc/NetworkManager/conf.d/ww4-unmanaged.ww | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/overlays/NetworkManager/internal/networkmanager_test.go b/overlays/NetworkManager/internal/networkmanager_test.go index 9576a202..64e12940 100644 --- a/overlays/NetworkManager/internal/networkmanager_test.go +++ b/overlays/NetworkManager/internal/networkmanager_test.go @@ -98,7 +98,7 @@ Filename: warewulf-unmanaged.conf plugins=keyfile [keyfile] -unmanaged-devices=except:mac:9a:77:29:73:14:f1, +unmanaged-devices=except:interface-name:wwnet0,except:mac:9a:77:29:73:14:f1,except:interface-name:wwnet1, ` const networkmanager_unmanaged string = `backupFile: true @@ -109,7 +109,7 @@ Filename: warewulf-unmanaged.conf plugins=keyfile [keyfile] -unmanaged-devices=except:mac:e6:92:39:49:7b:03,except:mac:9a:77:29:73:14:f1, +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, ` const networkmanager_managed string = `backupFile: true 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 578aab71..be8a9cbb 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,4 @@ plugins=keyfile [keyfile] -unmanaged-devices={{ range $connection_id, $netdev := .NetDevs }}{{ if $netdev.Hwaddr }}except:mac:{{- $netdev.Hwaddr -}},{{ end }}{{ end }} +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 }}