From 39707eaccfcd6c9e9bfcac382487646f404d0cb9 Mon Sep 17 00:00:00 2001 From: Jonathon Anderson Date: Fri, 15 Nov 2024 15:10:17 -0700 Subject: [PATCH] Add tests for localtime overlay and make configurable localtime overlay can now be configured with a "localtime" tag. Signed-off-by: Jonathon Anderson --- CHANGELOG.md | 2 + overlays/localtime/internal/localtime_test.go | 56 +++++++++++++++++++ overlays/localtime/internal/nodes.conf | 4 ++ overlays/localtime/rootfs/etc/localtime.ww | 2 +- 4 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 overlays/localtime/internal/localtime_test.go create mode 100644 overlays/localtime/internal/nodes.conf diff --git a/CHANGELOG.md b/CHANGELOG.md index bc34d92d..0640f122 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -30,6 +30,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Add `wwctl --kernelversion` to specify the desired kernel version or path. #1556 - Add `wwctl container kernels` to list discovered kernels from containers. #1556 - Add possibility to define a softlink target with an overlay template +- Support defining a symlink with an overlay template. #1303 +- New "localtime" overlay to define the system time zone. #1303 ### Changed diff --git a/overlays/localtime/internal/localtime_test.go b/overlays/localtime/internal/localtime_test.go new file mode 100644 index 00000000..36557553 --- /dev/null +++ b/overlays/localtime/internal/localtime_test.go @@ -0,0 +1,56 @@ +package localtime + +import ( + "bytes" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/warewulf/warewulf/internal/app/wwctl/overlay/show" + "github.com/warewulf/warewulf/internal/pkg/config" + "github.com/warewulf/warewulf/internal/pkg/testenv" + "github.com/warewulf/warewulf/internal/pkg/wwlog" +) + +func Test_localtimeOverlay(t *testing.T) { + env := testenv.New(t) + defer env.RemoveAll(t) + env.ImportFile(t, "etc/warewulf/nodes.conf", "nodes.conf") + assert.NoError(t, config.Get().Read(env.GetPath("etc/warewulf/warewulf.conf"))) + env.ImportFile(t, "var/lib/warewulf/overlays/localtime/rootfs/etc/localtime.ww", "../rootfs/etc/localtime.ww") + + tests := []struct { + name string + args []string + log string + }{ + { + name: "/etc/localtime", + args: []string{"--render", "node1", "localtime", "etc/localtime.ww"}, + log: localtime, + }, + } + + 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 localtime string = `backupFile: true +writeFile: true +Filename: etc/localtime +{{ /* softlink "/usr/share/zoneinfo/GMT" */ }} +` diff --git a/overlays/localtime/internal/nodes.conf b/overlays/localtime/internal/nodes.conf new file mode 100644 index 00000000..e89e9c56 --- /dev/null +++ b/overlays/localtime/internal/nodes.conf @@ -0,0 +1,4 @@ +nodes: + node1: + tags: + localtime: "GMT" diff --git a/overlays/localtime/rootfs/etc/localtime.ww b/overlays/localtime/rootfs/etc/localtime.ww index 2545ef80..ccba4480 100644 --- a/overlays/localtime/rootfs/etc/localtime.ww +++ b/overlays/localtime/rootfs/etc/localtime.ww @@ -1 +1 @@ -{{ ImportLink "/etc/localtime" }} \ No newline at end of file +{{ if .Tags.localtime }}{{ printf "%s/%s" "/usr/share/zoneinfo" .Tags.localtime | softlink }}{{ else }}{{ ImportLink "/etc/localtime" }}{{ end }} \ No newline at end of file