- Closes #987 To make the overlays testable in isolation, and after discussion with the TSC, removed host/time/source from overlay files. Signed-off-by: Jonathon Anderson <janderson@ciq.com>
198 lines
4.8 KiB
Go
198 lines
4.8 KiB
Go
package show
|
|
|
|
import (
|
|
"bytes"
|
|
"os"
|
|
"path"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/warewulf/warewulf/internal/pkg/testenv"
|
|
"github.com/warewulf/warewulf/internal/pkg/warewulfd"
|
|
"github.com/warewulf/warewulf/internal/pkg/wwlog"
|
|
)
|
|
|
|
var (
|
|
overlayEmail = `
|
|
{{ if .Tags.email }}eMail: {{ .Tags.email }}{{else}} noMail{{- end }}
|
|
`
|
|
overlayOverlay = `
|
|
overlay name {{ .Overlay }}
|
|
`
|
|
)
|
|
|
|
func Test_Overlay_List(t *testing.T) {
|
|
env := testenv.New(t)
|
|
env.WriteFile(t, "etc/warewulf/warewulf.conf", `WW_INTERNAL: 43
|
|
ipaddr: 192.168.0.1/24
|
|
netmask: 255.255.255.0
|
|
network: 192.168.0.0
|
|
warewulf:
|
|
port: 9873
|
|
secure: false
|
|
update interval: 60
|
|
autobuild overlays: true
|
|
host overlay: true
|
|
syslog: true
|
|
dhcp:
|
|
enabled: true
|
|
range start: 192.168.0.100
|
|
range end: 192.168.0.199
|
|
tftp:
|
|
enabled: false
|
|
nfs:
|
|
enabled: true
|
|
export paths:
|
|
- path: /home
|
|
export options: rw,sync
|
|
mount options: defaults
|
|
mount: true
|
|
- path: /opt
|
|
export options: ro,sync,no_root_squash
|
|
mount options: defaults
|
|
mount: false`)
|
|
|
|
env.WriteFile(t, "etc/warewulf/nodes.conf",
|
|
`WW_INTERNAL: 45
|
|
nodeprofiles:
|
|
default:
|
|
tags:
|
|
email: admin@localhost
|
|
empty: {}
|
|
nodes:
|
|
node1:
|
|
tags:
|
|
email: admin@node1
|
|
node2: {}
|
|
node3:
|
|
profiles:
|
|
- empty
|
|
`)
|
|
|
|
env.WriteFile(t, path.Join(testenv.WWOverlaydir, "testoverlay/email.ww"), overlayEmail)
|
|
env.WriteFile(t, path.Join(testenv.WWOverlaydir, "testoverlay/overlay.ww"), overlayOverlay)
|
|
defer env.RemoveAll(t)
|
|
warewulfd.SetNoDaemon()
|
|
t.Run("overlay show raw", func(t *testing.T) {
|
|
baseCmd.SetArgs([]string{"testoverlay", "email.ww"})
|
|
baseCmd := GetCommand()
|
|
buf := new(bytes.Buffer)
|
|
baseCmd.SetOut(buf)
|
|
baseCmd.SetErr(buf)
|
|
wwlog.SetLogWriter(buf)
|
|
err := baseCmd.Execute()
|
|
assert.NoError(t, err)
|
|
assert.Contains(t, buf.String(), overlayEmail)
|
|
})
|
|
t.Run("overlay show rendered node tag", func(t *testing.T) {
|
|
baseCmd.SetArgs([]string{"-r", "node1", "testoverlay", "email.ww"})
|
|
baseCmd := GetCommand()
|
|
buf := new(bytes.Buffer)
|
|
baseCmd.SetOut(buf)
|
|
baseCmd.SetErr(buf)
|
|
wwlog.SetLogWriter(buf)
|
|
err := baseCmd.Execute()
|
|
assert.NoError(t, err)
|
|
assert.Contains(t, buf.String(), "admin@node1")
|
|
})
|
|
t.Run("overlay show rendered profile tag", func(t *testing.T) {
|
|
baseCmd.SetArgs([]string{"-r", "node2", "testoverlay", "email.ww"})
|
|
baseCmd := GetCommand()
|
|
buf := new(bytes.Buffer)
|
|
baseCmd.SetOut(buf)
|
|
baseCmd.SetErr(buf)
|
|
wwlog.SetLogWriter(buf)
|
|
err := baseCmd.Execute()
|
|
assert.NoError(t, err)
|
|
assert.Contains(t, buf.String(), "admin@localhost")
|
|
})
|
|
t.Run("overlay show no tag", func(t *testing.T) {
|
|
baseCmd.SetArgs([]string{"-r", "node3", "testoverlay", "email.ww"})
|
|
baseCmd := GetCommand()
|
|
buf := new(bytes.Buffer)
|
|
baseCmd.SetOut(buf)
|
|
baseCmd.SetErr(buf)
|
|
wwlog.SetLogWriter(buf)
|
|
err := baseCmd.Execute()
|
|
assert.NoError(t, err)
|
|
assert.Contains(t, buf.String(), "noMail")
|
|
})
|
|
t.Run("overlay shows overlay", func(t *testing.T) {
|
|
baseCmd.SetArgs([]string{"-r", "node1", "testoverlay", "overlay.ww"})
|
|
baseCmd := GetCommand()
|
|
buf := new(bytes.Buffer)
|
|
baseCmd.SetOut(buf)
|
|
baseCmd.SetErr(buf)
|
|
wwlog.SetLogWriter(buf)
|
|
err := baseCmd.Execute()
|
|
assert.NoError(t, err)
|
|
assert.Contains(t, buf.String(), "testoverlay")
|
|
})
|
|
}
|
|
|
|
func TestShowServerTemplate(t *testing.T) {
|
|
const template = `
|
|
Id: {{.Id}}
|
|
ClusterName: {{.ClusterName}}
|
|
BuildHost: {{.BuildHost}}
|
|
`
|
|
|
|
env := testenv.New(t)
|
|
env.WriteFile(t, "etc/warewulf/nodes.conf",
|
|
`WW_INTERNAL: 45
|
|
nodeprofiles:
|
|
default:
|
|
tags:
|
|
email: admin@localhost
|
|
empty: {}
|
|
nodes:
|
|
node1:
|
|
tags:
|
|
email: admin@node1
|
|
node2: {}
|
|
node3:
|
|
profiles:
|
|
- empty
|
|
`)
|
|
|
|
env.WriteFile(t, path.Join(testenv.WWOverlaydir, "testoverlay/template.ww"), template)
|
|
defer env.RemoveAll(t)
|
|
warewulfd.SetNoDaemon()
|
|
|
|
host, err := os.Hostname()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
t.Run("overlay render host template using 'host' value", func(t *testing.T) {
|
|
baseCmd.SetArgs([]string{"-r", "host", "testoverlay", "template.ww"})
|
|
baseCmd := GetCommand()
|
|
buf := new(bytes.Buffer)
|
|
baseCmd.SetOut(buf)
|
|
baseCmd.SetErr(buf)
|
|
wwlog.SetLogWriter(buf)
|
|
err := baseCmd.Execute()
|
|
assert.NoError(t, err)
|
|
assert.Contains(t, buf.String(), "Id: "+host)
|
|
assert.Contains(t, buf.String(), "ClusterName: "+host)
|
|
assert.Contains(t, buf.String(), "BuildHost: "+host)
|
|
})
|
|
|
|
t.Run("overlay render host template using host domain value", func(t *testing.T) {
|
|
host, err := os.Hostname()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
baseCmd.SetArgs([]string{"-r", host, "testoverlay", "template.ww"})
|
|
baseCmd := GetCommand()
|
|
buf := new(bytes.Buffer)
|
|
baseCmd.SetOut(buf)
|
|
baseCmd.SetErr(buf)
|
|
wwlog.SetLogWriter(buf)
|
|
err = baseCmd.Execute()
|
|
assert.NoError(t, err)
|
|
assert.Contains(t, buf.String(), "Id: "+host)
|
|
assert.Contains(t, buf.String(), "ClusterName: "+host)
|
|
assert.Contains(t, buf.String(), "BuildHost: "+host)
|
|
})
|
|
}
|