package netplan 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_netplanOverlay(t *testing.T) { env := testenv.New(t) defer env.RemoveAll() env.ImportFile("var/lib/warewulf/overlays/netplan/rootfs/etc/netplan/warewulf.yaml.ww", "../rootfs/etc/netplan/warewulf.yaml.ww") tests := []struct { name string args []string nodesConf string log string }{ { name: "one interface", args: []string{"--render", "node1", "netplan", "etc/netplan/warewulf.yaml.ww"}, nodesConf: ` nodes: node1: network devices: default: device: wwnet0 hwaddr: e6:92:39:49:7b:03 ipaddr: 192.168.3.21 netmask: 255.255.255.0 gateway: 192.168.3.1 mtu: 1500 `, log: `backupFile: true writeFile: true Filename: etc/netplan/warewulf.yaml # This file is autogenerated by warewulf network: version: 2 renderer: networkd ethernets: wwnet0: dhcp4: no optional: true addresses: - 192.168.3.21/24 mtu: 1500 `, }, { name: "two interfaces", args: []string{"--render", "node1", "netplan", "etc/netplan/warewulf.yaml.ww"}, nodesConf: ` nodes: node1: network devices: default: device: wwnet0 hwaddr: e6:92:39:49:7b:03 ipaddr: 192.168.3.21 netmask: 255.255.255.0 gateway: 192.168.3.1 mtu: 1500 secondary: device: wwnet1 hwaddr: 9a:77:29:73:14:f1 ipaddr: 192.168.3.22 netmask: 255.255.255.0 gateway: 192.168.3.1 mtu: 9000 `, log: `backupFile: true writeFile: true Filename: etc/netplan/warewulf.yaml # This file is autogenerated by warewulf network: version: 2 renderer: networkd ethernets: wwnet0: dhcp4: no optional: true addresses: - 192.168.3.21/24 mtu: 1500 wwnet1: dhcp4: no optional: true addresses: - 192.168.3.22/24 mtu: 9000 `, }, { name: "bond", args: []string{"--render", "node1", "netplan", "etc/netplan/warewulf.yaml.ww"}, nodesConf: ` nodes: node1: network devices: bond0: type: Bond device: bond0 ipaddr: 192.168.3.100 netmask: 255.255.255.0 primary: device: en1 hwaddr: e6:92:39:49:7b:03 tags: master: bond0 secondary: device: en2 hwaddr: 9a:77:29:73:14:f1 tags: master: bond0 `, log: `backupFile: true writeFile: true Filename: etc/netplan/warewulf.yaml # This file is autogenerated by warewulf network: version: 2 renderer: networkd ethernets: en1: dhcp4: no optional: true en2: dhcp4: no optional: true bonds: bond0: dhcp4: no optional: true addresses: - 192.168.3.100/24 parameters: mode: balance-rr mii-monitor-interval: 100 interfaces: - en1 - en2 `}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { env.WriteFile("etc/warewulf/nodes.conf", tt.nodesConf) 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()) }) } }