- Closes: #1482 - Closes: #1280 This also corrects poor handling of whitespace around the "file" function throughout the templates, given experiences with the network templates while implementing the bond behavior. Since the file function actually does produce output (that is parsed by Warewulf itself) it should not collaps prefix whitespace. Signed-off-by: Jonathon Anderson <janderson@ciq.com>
186 lines
4.5 KiB
Go
186 lines
4.5 KiB
Go
package networkmanager
|
|
|
|
import (
|
|
"bytes"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/warewulf/warewulf/internal/app/wwctl/overlay/show"
|
|
"github.com/warewulf/warewulf/internal/pkg/testenv"
|
|
"github.com/warewulf/warewulf/internal/pkg/wwlog"
|
|
)
|
|
|
|
func Test_networkmanagerOverlay(t *testing.T) {
|
|
env := testenv.New(t)
|
|
defer env.RemoveAll()
|
|
env.ImportFile("var/lib/warewulf/overlays/NetworkManager/rootfs/etc/NetworkManager/conf.d/ww4-unmanaged.ww", "../rootfs/etc/NetworkManager/conf.d/ww4-unmanaged.ww")
|
|
env.ImportFile("var/lib/warewulf/overlays/NetworkManager/rootfs/etc/NetworkManager/system-connections/ww4-managed.ww", "../rootfs/etc/NetworkManager/system-connections/ww4-managed.ww")
|
|
|
|
tests := []struct {
|
|
name string
|
|
nodes_conf string
|
|
args []string
|
|
log string
|
|
}{
|
|
{
|
|
name: "NetworkManager:ww4-unmanaged.ww",
|
|
nodes_conf: "nodes.conf",
|
|
args: []string{"--render", "node1", "NetworkManager", "etc/NetworkManager/conf.d/ww4-unmanaged.ww"},
|
|
log: networkmanager_unmanaged,
|
|
},
|
|
{
|
|
name: "NetworkManager:ww4-managed.ww",
|
|
nodes_conf: "nodes.conf",
|
|
args: []string{"--render", "node1", "NetworkManager", "etc/NetworkManager/system-connections/ww4-managed.ww"},
|
|
log: networkmanager_managed,
|
|
},
|
|
{
|
|
name: "NetworkManager:ww4-unmanaged.ww with empty mac address",
|
|
nodes_conf: "nodes_empty_mac.conf",
|
|
args: []string{"--render", "node1", "NetworkManager", "etc/NetworkManager/conf.d/ww4-unmanaged.ww"},
|
|
log: networkmanager_unmanaged_with_empty_mac,
|
|
},
|
|
{
|
|
name: "NetworkManager:ww4-managed.ww with vlan",
|
|
nodes_conf: "nodes.conf-vlan",
|
|
args: []string{"--render", "node1", "NetworkManager", "etc/NetworkManager/system-connections/ww4-managed.ww"},
|
|
log: networkmanager_managed_with_vlan,
|
|
},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
env.ImportFile("etc/warewulf/nodes.conf", tt.nodes_conf)
|
|
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:interface-name:wwnet0,except:mac:9a:77:29:73:14:f1,except:interface-name:wwnet1,
|
|
`
|
|
|
|
const networkmanager_unmanaged string = `backupFile: true
|
|
writeFile: true
|
|
Filename: warewulf-unmanaged.conf
|
|
# This file is autogenerated by warewulf
|
|
|
|
[main]
|
|
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,
|
|
`
|
|
|
|
const networkmanager_managed string = `backupFile: true
|
|
writeFile: true
|
|
Filename: warewulf-default.conf
|
|
|
|
# This file is autogenerated by warewulf
|
|
|
|
[connection]
|
|
id=default
|
|
interface-name=wwnet0
|
|
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
|
|
interface-name=wwnet1
|
|
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;
|
|
|
|
[ipv6]
|
|
addr-gen-mode=stable-privacy
|
|
method=ignore
|
|
never-default=true
|
|
`
|
|
|
|
const networkmanager_managed_with_vlan string = `backupFile: true
|
|
writeFile: true
|
|
Filename: warewulf-tagged.conf
|
|
|
|
# This file is autogenerated by warewulf
|
|
|
|
[connection]
|
|
id=tagged
|
|
interface-name=eth0.902
|
|
type=vlan
|
|
autoconnect=true
|
|
[ethernet]
|
|
[ipv4]
|
|
method=manual
|
|
address=<nil>
|
|
route1=192.168.1.0/24,192.168.2.254
|
|
[vlan]
|
|
interface-name=eth0.902
|
|
parent=eth0
|
|
id=902
|
|
|
|
[ipv6]
|
|
addr-gen-mode=stable-privacy
|
|
method=ignore
|
|
never-default=true
|
|
backupFile: true
|
|
writeFile: true
|
|
Filename: warewulf-untagged.conf
|
|
# This file is autogenerated by warewulf
|
|
|
|
[connection]
|
|
id=untagged
|
|
interface-name=eth0
|
|
type=ethernet
|
|
autoconnect=true
|
|
[ethernet]
|
|
[ipv4]
|
|
method=manual
|
|
address=<nil>
|
|
|
|
[ipv6]
|
|
addr-gen-mode=stable-privacy
|
|
method=ignore
|
|
never-default=true
|
|
`
|