diff --git a/Tools.mk b/Tools.mk index 016c7fc8..9d978003 100644 --- a/Tools.mk +++ b/Tools.mk @@ -5,7 +5,7 @@ GO_TOOLS_BIN := $(addprefix $(TOOLS_BIN)/, $(notdir $(GO_TOOLS))) GO_TOOLS_VENDOR := $(addprefix vendor/, $(GO_TOOLS)) GOLANGCI_LINT := $(TOOLS_BIN)/golangci-lint -GOLANGCI_LINT_VERSION := v1.64.8 +GOLANGCI_LINT_VERSION := v2.11.3 GOLANG_DEADCODE := $(TOOLS_BIN)/deadcode diff --git a/internal/app/wwclient/root.go b/internal/app/wwclient/root.go index 444725e0..f444ac23 100644 --- a/internal/app/wwclient/root.go +++ b/internal/app/wwclient/root.go @@ -246,7 +246,7 @@ func CobraRunE(cmd *cobra.Command, args []string) (err error) { } } }() - var finishedInitialSync bool = false + finishedInitialSync := false ipaddr := os.Getenv("WW_IPADDR") if ipaddr == "" { if conf.Ipaddr6 != "" { @@ -361,7 +361,11 @@ func updateSystem(target string, ipaddr string, port int, wwid string, tag strin wwlog.Error("failed to create temp directory: %s", err) return nil } - defer os.RemoveAll(tempDir) + defer func() { + if err := os.RemoveAll(tempDir); err != nil { + wwlog.Warn("failed to remove temp directory %s: %s", tempDir, err) + } + }() wwlog.Debug("unpacking runtime overlay to %s", tempDir) command := exec.Command("/bin/sh", "-c", fmt.Sprintf("gzip -dc | cpio -imu --directory=%s", tempDir)) command.Stdin = resp.Body @@ -469,7 +473,7 @@ func atomicApplyOverlay(srcDir, destDir string) error { wwlog.Debug("moving symlink %s to %s", tempPath, destPath) err = os.Rename(tempPath, destPath) if err != nil { - os.Remove(tempPath) + _ = os.Remove(tempPath) return fmt.Errorf("failed to atomically move symlink %s to %s: %w", tempPath, destPath, err) } @@ -508,7 +512,7 @@ func atomicApplyOverlay(srcDir, destDir string) error { wwlog.Debug("copying file from %s to temp location %s", srcPath, tempPath) err = copyFile(srcPath, tempPath, info) if err != nil { - os.Remove(tempPath) + _ = os.Remove(tempPath) return fmt.Errorf("failed to copy %s to temp location: %w", srcPath, err) } @@ -523,7 +527,7 @@ func atomicApplyOverlay(srcDir, destDir string) error { wwlog.Debug("moving %s to %s", tempPath, destPath) err = os.Rename(tempPath, destPath) if err != nil { - os.Remove(tempPath) + _ = os.Remove(tempPath) return fmt.Errorf("failed to atomically move %s to %s: %w", tempPath, destPath, err) } } @@ -532,18 +536,22 @@ func atomicApplyOverlay(srcDir, destDir string) error { }) } -func copyFile(src, dst string, srcInfo os.FileInfo) error { +func copyFile(src, dst string, srcInfo os.FileInfo) (err error) { srcFile, err := os.Open(src) if err != nil { return err } - defer srcFile.Close() + defer func() { _ = srcFile.Close() }() dstFile, err := os.OpenFile(dst, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, srcInfo.Mode()) if err != nil { return err } - defer dstFile.Close() + defer func() { + if cerr := dstFile.Close(); cerr != nil && err == nil { + err = cerr + } + }() _, err = io.Copy(dstFile, srcFile) if err != nil { diff --git a/internal/app/wwctl/image/exec/child/main.go b/internal/app/wwctl/image/exec/child/main.go index c3fe9d8f..bf1f0390 100644 --- a/internal/app/wwctl/image/exec/child/main.go +++ b/internal/app/wwctl/image/exec/child/main.go @@ -67,7 +67,7 @@ func CobraRunE(cmd *cobra.Command, args []string) (err error) { if err != nil { wwlog.Warn("couldn't create directory for mounts: %s", err) } - defer desc.Close() + defer func() { _ = desc.Close() }() } } imagePath := image.RootFsDir(imageName) @@ -170,25 +170,25 @@ func CobraRunE(cmd *cobra.Command, args []string) (err error) { return fmt.Errorf("failed to mount /run: %w", err) } - os.Setenv("PATH", "/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin") + _ = os.Setenv("PATH", "/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin") var ps1Base string if v, ok := os.LookupEnv("WW_PS1"); ok { ps1Base = v } else { ps1Base = `\w\$ ` - os.Setenv("WW_PS1", ps1Base) + _ = os.Setenv("WW_PS1", ps1Base) } - os.Setenv("PS1", fmt.Sprintf("%s %s", ps1Prefix, ps1Base)) + _ = os.Setenv("PS1", fmt.Sprintf("%s %s", ps1Prefix, ps1Base)) var histfile string if v, ok := os.LookupEnv("WW_HISTFILE"); ok { histfile = v } else { histfile = "/dev/null" - os.Setenv("WW_HISTFILE", histfile) + _ = os.Setenv("WW_HISTFILE", histfile) } - os.Setenv("HISTFILE", histfile) + _ = os.Setenv("HISTFILE", histfile) wwlog.Debug("Exec: %s %s", args[1], args[1:]) return syscall.Exec(args[1], args[1:], os.Environ()) diff --git a/internal/app/wwctl/image/exec/main.go b/internal/app/wwctl/image/exec/main.go index 586d3cd4..4e021b94 100644 --- a/internal/app/wwctl/image/exec/main.go +++ b/internal/app/wwctl/image/exec/main.go @@ -99,8 +99,8 @@ func CobraRunE(cmd *cobra.Command, args []string) error { if !image.ValidSource(imageName) { return fmt.Errorf("unknown Warewulf image: %s", imageName) } - os.Setenv("WW_CONTAINER_SHELL", imageName) - os.Setenv("WW_IMAGE_SHELL", imageName) + _ = os.Setenv("WW_CONTAINER_SHELL", imageName) + _ = os.Setenv("WW_IMAGE_SHELL", imageName) imagePath := image.RootFsDir(imageName) @@ -213,7 +213,7 @@ func (cf *copyFile) shouldRemoveFromImage(imageName string) bool { } else if destStat, err := os.Stat(imageDest); err != nil { wwlog.Verbose("file is no longer present: %s (%s)", cf.fileName, err) return false - } else if destStat.ModTime() == cf.modTime { + } else if destStat.ModTime().Equal(cf.modTime) { wwlog.Verbose("don't remove modified file:", cf.fileName) return false } else { diff --git a/internal/app/wwctl/image/exec/main_test.go b/internal/app/wwctl/image/exec/main_test.go index ef863f6f..e1ed7716 100644 --- a/internal/app/wwctl/image/exec/main_test.go +++ b/internal/app/wwctl/image/exec/main_test.go @@ -82,8 +82,8 @@ func Test_Exec(t *testing.T) { nodeName = "" Build = true SyncUser = false - os.Remove(env.GetPath("/srv/warewulf/images/test.img")) - os.Remove(env.GetPath("/srv/warewulf/images/test.img.gz")) + _ = os.Remove(env.GetPath("/srv/warewulf/images/test.img")) + _ = os.Remove(env.GetPath("/srv/warewulf/images/test.img.gz")) }() cmd := GetCommand() cmd.SetArgs(tt.args) diff --git a/internal/app/wwctl/image/imprt/main_test.go b/internal/app/wwctl/image/imprt/main_test.go index 0161f3d4..5f5020f2 100644 --- a/internal/app/wwctl/image/imprt/main_test.go +++ b/internal/app/wwctl/image/imprt/main_test.go @@ -108,7 +108,7 @@ func createDummyDockerArchive(t *testing.T, path string) { if err != nil { t.Fatal(err) } - defer f.Close() + defer func() { _ = f.Close() }() archiveTw := tar.NewWriter(f) diff --git a/internal/app/wwctl/node/add/root.go b/internal/app/wwctl/node/add/root.go index 05c5ad85..8404a33a 100644 --- a/internal/app/wwctl/node/add/root.go +++ b/internal/app/wwctl/node/add/root.go @@ -29,7 +29,7 @@ func GetCommand() *cobra.Command { } vars.nodeConf.CreateFlags(baseCmd) vars.nodeAdd.CreateAddFlags(baseCmd) - flags.AddContainer(baseCmd, &(vars.nodeConf.Profile.ImageName)) + flags.AddContainer(baseCmd, &(vars.nodeConf.ImageName)) flags.AddWwinit(baseCmd, &(vars.nodeConf.SystemOverlay)) flags.AddRuntime(baseCmd, &(vars.nodeConf.RuntimeOverlay)) // register the command line completions diff --git a/internal/app/wwctl/node/edit/main.go b/internal/app/wwctl/node/edit/main.go index bca4f818..60513060 100644 --- a/internal/app/wwctl/node/edit/main.go +++ b/internal/app/wwctl/node/edit/main.go @@ -44,7 +44,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error { if tempErr != nil { return fmt.Errorf("could not create temp file: %s", tempErr) } - defer os.Remove(tempFile.Name()) + defer func() { _ = os.Remove(tempFile.Name()) }() if !NoHeader { yamlTemplate := node.ConfToYaml(node.Node{}, nil) diff --git a/internal/app/wwctl/node/imprt/main.go b/internal/app/wwctl/node/imprt/main.go index 67ab62de..0e73699b 100644 --- a/internal/app/wwctl/node/imprt/main.go +++ b/internal/app/wwctl/node/imprt/main.go @@ -18,7 +18,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error { if err != nil { return fmt.Errorf("could not open file: %s", err) } - defer file.Close() + defer func() { _ = file.Close() }() importMap := make(map[string]*node.Node) buffer, err := io.ReadAll(file) diff --git a/internal/app/wwctl/node/set/root.go b/internal/app/wwctl/node/set/root.go index c4188c10..96b3aafd 100644 --- a/internal/app/wwctl/node/set/root.go +++ b/internal/app/wwctl/node/set/root.go @@ -34,7 +34,7 @@ func GetCommand() *cobra.Command { vars.nodeConf.CreateFlags(baseCmd) vars.nodeAdd.CreateAddFlags(baseCmd) vars.nodeDel.CreateDelFlags(baseCmd) - flags.AddContainer(baseCmd, &(vars.nodeConf.Profile.ImageName)) + flags.AddContainer(baseCmd, &(vars.nodeConf.ImageName)) flags.AddWwinit(baseCmd, &(vars.nodeConf.SystemOverlay)) flags.AddRuntime(baseCmd, &(vars.nodeConf.RuntimeOverlay)) baseCmd.PersistentFlags().BoolVarP(&vars.setNodeAll, "all", "a", false, "Set all nodes") diff --git a/internal/app/wwctl/overlay/chown/main_test.go b/internal/app/wwctl/overlay/chown/main_test.go index 39545613..d50ad0d3 100644 --- a/internal/app/wwctl/overlay/chown/main_test.go +++ b/internal/app/wwctl/overlay/chown/main_test.go @@ -97,7 +97,7 @@ func Test_OverlayChown(t *testing.T) { filePath := filepath.Join(overlayDir, tt.fileName) f, err := os.Create(filePath) assert.NoError(t, err) - f.Close() + _ = f.Close() // get initial owner stat, err := os.Stat(filePath) assert.NoError(t, err) diff --git a/internal/app/wwctl/overlay/edit/main.go b/internal/app/wwctl/overlay/edit/main.go index 3bcf3b32..6025df27 100644 --- a/internal/app/wwctl/overlay/edit/main.go +++ b/internal/app/wwctl/overlay/edit/main.go @@ -43,7 +43,7 @@ func CobraRunE(cmd *cobra.Command, args []string) (err error) { overlayFile := myOverlay.File(fileName) wwlog.Debug("Will edit overlay file: %s", overlayFile) overlayFileDir := path.Dir(overlayFile) - if !(util.IsDir(overlayFileDir) || CreateDirs) { + if !util.IsDir(overlayFileDir) && !CreateDirs { return fmt.Errorf("%s does not exist. Use '--parents' option to create automatically", overlayFileDir) } @@ -51,7 +51,7 @@ func CobraRunE(cmd *cobra.Command, args []string) (err error) { if tempFileErr != nil { return fmt.Errorf("unable to create temporary file for editing: %s", tempFileErr) } - defer os.Remove(tempFile.Name()) + defer func() { _ = os.Remove(tempFile.Name()) }() wwlog.Debug("Using temporary file %s", tempFile.Name()) if util.IsFile(overlayFile) { @@ -62,20 +62,22 @@ func CobraRunE(cmd *cobra.Command, args []string) (err error) { if _, err := io.Copy(tempFile, originalFile); err != nil { return fmt.Errorf("unable to copy %s to %s for editing: %s", originalFile.Name(), tempFile.Name(), err) } - originalFile.Close() + _ = originalFile.Close() } else if filepath.Ext(overlayFile) == ".ww" { if _, err := tempFile.Write([]byte(initialTemplate)); err != nil { return fmt.Errorf("unable to write to %s: %s", tempFile.Name(), err) } } - tempFile.Close() + if err := tempFile.Close(); err != nil { + return fmt.Errorf("failed to close temp file %s: %w", tempFile.Name(), err) + } initialFile, err := os.Open(tempFile.Name()) if err != nil { return fmt.Errorf("unable to open temp file for hashing: %s", err) } initialHash, err := util.HashFile(initialFile) - initialFile.Close() + _ = initialFile.Close() if err != nil { return fmt.Errorf("unable to calculate initial hash of %s: %s", tempFile.Name(), err) } @@ -93,7 +95,7 @@ func CobraRunE(cmd *cobra.Command, args []string) (err error) { return fmt.Errorf("unable to open temp file for final hashing: %s", err) } finalHash, err := util.HashFile(finalFile) - finalFile.Close() + _ = finalFile.Close() if err != nil { return fmt.Errorf("unable to calculate final hash of %s: %s", tempFile.Name(), err) } diff --git a/internal/app/wwctl/overlay/imprt/main_test.go b/internal/app/wwctl/overlay/imprt/main_test.go index 0918caf5..2c444dbe 100644 --- a/internal/app/wwctl/overlay/imprt/main_test.go +++ b/internal/app/wwctl/overlay/imprt/main_test.go @@ -19,7 +19,7 @@ func Test_List(t *testing.T) { t.Errorf("Could not create temp folder: %v", err) t.FailNow() } - defer os.RemoveAll(tmpdir) + defer func() { _ = os.RemoveAll(tmpdir) }() overlayDir := fmt.Sprintf("%s/overlay", tmpdir) err = os.MkdirAll(overlayDir, 0o755) @@ -40,7 +40,7 @@ func Test_List(t *testing.T) { t.Errorf("Could not create tempfile") t.FailNow() } - file.Close() + _ = file.Close() err = os.Chmod(file.Name(), 0o755) if err != nil { t.Errorf("Could not change the file %s mode: %v", file.Name(), err) diff --git a/internal/app/wwctl/overlay/info/main.go b/internal/app/wwctl/overlay/info/main.go index e92bc4f7..23cbd64b 100644 --- a/internal/app/wwctl/overlay/info/main.go +++ b/internal/app/wwctl/overlay/info/main.go @@ -42,7 +42,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error { // Add newline after wwdoc lines if they exist if hasWwdoc { - fmt.Fprintln(cmd.OutOrStdout()) + _, _ = fmt.Fprintln(cmd.OutOrStdout()) } // Sort variables by name for consistent output diff --git a/internal/app/wwctl/profile/edit/main.go b/internal/app/wwctl/profile/edit/main.go index f5e0c079..671bb052 100644 --- a/internal/app/wwctl/profile/edit/main.go +++ b/internal/app/wwctl/profile/edit/main.go @@ -41,7 +41,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error { if tempErr != nil { return fmt.Errorf("could not create temp file: %s", tempErr) } - defer os.Remove(tempFile.Name()) + defer func() { _ = os.Remove(tempFile.Name()) }() if !NoHeader { yamlTemplate := node.ConfToYaml(node.Profile{}, nil) diff --git a/internal/app/wwctl/profile/list/main_test.go b/internal/app/wwctl/profile/list/main_test.go index 4d053fd8..7d0c3122 100644 --- a/internal/app/wwctl/profile/list/main_test.go +++ b/internal/app/wwctl/profile/list/main_test.go @@ -119,7 +119,7 @@ nodes: _, _ = io.Copy(&buf, stdoutR) stdoutC <- buf.String() }() - stdoutW.Close() + _ = stdoutW.Close() os.Stdout = oriout stdout := <-stdoutC diff --git a/internal/app/wwctl/version/main.go b/internal/app/wwctl/version/main.go index 974a60e7..34ed9bc2 100644 --- a/internal/app/wwctl/version/main.go +++ b/internal/app/wwctl/version/main.go @@ -4,7 +4,6 @@ import ( "fmt" "github.com/spf13/cobra" - "github.com/warewulf/warewulf/internal/pkg/api/routes/wwapiv1" "github.com/warewulf/warewulf/internal/pkg/version" ) @@ -12,7 +11,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error { fmt.Println("wwctl version:\t", version.GetVersion()) - var wwVersionResponse *wwapiv1.VersionResponse = version.Version() + wwVersionResponse := version.Version() fmt.Println("rpc version:", wwVersionResponse.String()) return nil } diff --git a/internal/pkg/api/node/status.go b/internal/pkg/api/node/status.go index babffc2c..3bbb2bdd 100644 --- a/internal/pkg/api/node/status.go +++ b/internal/pkg/api/node/status.go @@ -47,7 +47,7 @@ func NodeStatus(nodeNames []string) (nodeStatusResponse *wwapiv1.NodeStatusRespo wwlog.Error("Could not connect to Warewulf server: %s", err) return } - defer resp.Body.Close() + defer func() { _ = resp.Body.Close() }() decoder := json.NewDecoder(resp.Body) var wwNodeStatus allStatus diff --git a/internal/pkg/config/root.go b/internal/pkg/config/root.go index 3d3f374c..24510b85 100644 --- a/internal/pkg/config/root.go +++ b/internal/pkg/config/root.go @@ -234,7 +234,7 @@ func (config *WarewulfYaml) Dump() ([]byte, error) { return buf.Bytes(), err } -func (config *WarewulfYaml) PersistToFile(configFile string) error { +func (config *WarewulfYaml) PersistToFile(configFile string) (err error) { out, dumpErr := config.Dump() if dumpErr != nil { wwlog.Error("%s", dumpErr) @@ -245,7 +245,11 @@ func (config *WarewulfYaml) PersistToFile(configFile string) error { wwlog.Error("%s", err) return err } - defer file.Close() + defer func() { + if cerr := file.Close(); cerr != nil && err == nil { + err = cerr + } + }() _, err = file.WriteString(string(out)) if err != nil { return err diff --git a/internal/pkg/config/root_test.go b/internal/pkg/config/root_test.go index 0c21b945..175846a1 100644 --- a/internal/pkg/config/root_test.go +++ b/internal/pkg/config/root_test.go @@ -305,7 +305,7 @@ func TestInitializedFromFile(t *testing.T) { example_warewulf_conf := "" tempWarewulfConf, warewulfConfErr := os.CreateTemp("", "warewulf.conf-") assert.NoError(t, warewulfConfErr) - defer os.Remove(tempWarewulfConf.Name()) + defer func() { _ = os.Remove(tempWarewulfConf.Name()) }() _, warewulfConfErr = tempWarewulfConf.Write([]byte(example_warewulf_conf)) assert.NoError(t, warewulfConfErr) assert.NoError(t, tempWarewulfConf.Sync()) diff --git a/internal/pkg/config/util.go b/internal/pkg/config/util.go index 5c277651..878fe89f 100644 --- a/internal/pkg/config/util.go +++ b/internal/pkg/config/util.go @@ -10,7 +10,7 @@ func GetOutboundIP() net.IP { if err != nil { return nil } - defer conn.Close() + defer func() { _ = conn.Close() }() localAddr := conn.LocalAddr().(*net.UDPAddr) return localAddr.IP } diff --git a/internal/pkg/configure/tftp.go b/internal/pkg/configure/tftp.go index 0f19b326..768238fe 100644 --- a/internal/pkg/configure/tftp.go +++ b/internal/pkg/configure/tftp.go @@ -29,7 +29,7 @@ func TFTP() (err error) { } // Create tftpdir if needed - var tftpdir string = path.Join(controller.TFTP.TftpRoot, "warewulf") + tftpdir := path.Join(controller.TFTP.TftpRoot, "warewulf") err = os.MkdirAll(tftpdir, 0755) if err != nil { return diff --git a/internal/pkg/image/initramfs_test.go b/internal/pkg/image/initramfs_test.go index 0f4f680d..d6e82d5e 100644 --- a/internal/pkg/image/initramfs_test.go +++ b/internal/pkg/image/initramfs_test.go @@ -14,7 +14,7 @@ func TestFindInitramfs(t *testing.T) { conf := warewulfconf.Get() temp, err := os.MkdirTemp(os.TempDir(), "ww-conf-*") assert.NoError(t, err) - defer os.RemoveAll(temp) + defer func() { _ = os.RemoveAll(temp) }() conf.Paths.WWChrootdir = temp assert.NoError(t, os.MkdirAll(filepath.Join(RootFsDir("image"), "boot"), 0700)) diff --git a/internal/pkg/image/mountpoints.go b/internal/pkg/image/mountpoints.go index cc78affc..16d89362 100644 --- a/internal/pkg/image/mountpoints.go +++ b/internal/pkg/image/mountpoints.go @@ -23,9 +23,10 @@ func InitMountPnts(binds []string) (mounts []*warewulfconf.MountEntry) { readonly := false copy_ := false if len(bind) >= 3 { - if bind[2] == "ro" { + switch bind[2] { + case "ro": readonly = true - } else if bind[2] == "copy" { + case "copy": copy_ = true } } diff --git a/internal/pkg/image/syncuids_test.go b/internal/pkg/image/syncuids_test.go index 16fb07a9..203323f7 100644 --- a/internal/pkg/image/syncuids_test.go +++ b/internal/pkg/image/syncuids_test.go @@ -20,9 +20,9 @@ func writeTempFile(t *testing.T, input string) string { func makeSyncDB(t *testing.T, hostInput string, imageInput string) syncDB { hostFileName := writeTempFile(t, hostInput) - defer os.Remove(hostFileName) + defer func() { _ = os.Remove(hostFileName) }() imageFileName := writeTempFile(t, imageInput) - defer os.Remove(imageFileName) + defer func() { _ = os.Remove(imageFileName) }() db := make(syncDB) var err error err = db.readFromHost(hostFileName) @@ -34,7 +34,7 @@ func makeSyncDB(t *testing.T, hostInput string, imageInput string) syncDB { func Test_readFromHost_single(t *testing.T) { hostFileName := writeTempFile(t, `testuser:x:1001:1001::/home/testuser:/bin/bash`) - defer os.Remove(hostFileName) + defer func() { _ = os.Remove(hostFileName) }() db := make(syncDB) err := db.readFromHost(hostFileName) @@ -50,7 +50,7 @@ func Test_readFromHost_multiple(t *testing.T) { testuser1:x:1001:1001::/home/testuser:/bin/bash testuser2:x:1002:1002::/home/testuser:/bin/bash `) - defer os.Remove(hostFileName) + defer func() { _ = os.Remove(hostFileName) }() db := make(syncDB) err := db.readFromHost(hostFileName) @@ -65,7 +65,7 @@ testuser2:x:1002:1002::/home/testuser:/bin/bash func Test_readFromimage_single(t *testing.T) { imageFileName := writeTempFile(t, `testuser:x:1001:1001::/home/testuser:/bin/bash`) - defer os.Remove(imageFileName) + defer func() { _ = os.Remove(imageFileName) }() db := make(syncDB) err := db.readFromimage(imageFileName) @@ -81,7 +81,7 @@ func Test_readFromimage_multiple(t *testing.T) { testuser1:x:1001:1001::/home/testuser:/bin/bash testuser2:x:1002:1002::/home/testuser:/bin/bash `) - defer os.Remove(imageFileName) + defer func() { _ = os.Remove(imageFileName) }() db := make(syncDB) err := db.readFromimage(imageFileName) @@ -98,13 +98,13 @@ func Test_readFromBoth_multiple(t *testing.T) { testuser1:x:1001:1001::/home/testuser:/bin/bash testuser2:x:1002:1002::/home/testuser:/bin/bash `) - defer os.Remove(imageFileName) + defer func() { _ = os.Remove(imageFileName) }() hostFileName := writeTempFile(t, ` testuser1:x:2001:2001::/home/testuser:/bin/bash testuser3:x:2003:2003::/home/testuser:/bin/bash `) - defer os.Remove(hostFileName) + defer func() { _ = os.Remove(hostFileName) }() db := make(syncDB) var err error @@ -150,13 +150,13 @@ func Test_getOnlyimageLines(t *testing.T) { testuser1:x:1001:1001::/home/testuser:/bin/bash testuser2:x:1002:1002::/home/testuser:/bin/bash `) - defer os.Remove(imageFileName) + defer func() { _ = os.Remove(imageFileName) }() hostFileName := writeTempFile(t, ` testuser1:x:2001:2001::/home/testuser:/bin/bash testuser3:x:2003:2003::/home/testuser:/bin/bash `) - defer os.Remove(hostFileName) + defer func() { _ = os.Remove(hostFileName) }() db := make(syncDB) var err error @@ -265,7 +265,7 @@ func Test_malformed_passwd(t *testing.T) { hostInput := `"testuser1:x:1001:1001::/home/testuser:/bin/bash" asdf` hostFileName := writeTempFile(t, hostInput) - defer os.Remove(hostFileName) + defer func() { _ = os.Remove(hostFileName) }() db := make(syncDB) err := db.readFromHost(hostFileName) assert.NoError(t, err) @@ -278,7 +278,7 @@ func Test_network_passwd(t *testing.T) { +:::::: -::::::` hostFileName := writeTempFile(t, hostInput) - defer os.Remove(hostFileName) + defer func() { _ = os.Remove(hostFileName) }() db := make(syncDB) err := db.readFromHost(hostFileName) assert.NotContains(t, buf.String(), "parse error") diff --git a/internal/pkg/image/syncuser.go b/internal/pkg/image/syncuser.go index 372a30a1..d994ef8b 100644 --- a/internal/pkg/image/syncuser.go +++ b/internal/pkg/image/syncuser.go @@ -160,7 +160,7 @@ func (db syncDB) read(fileName string, fromimage bool) error { if file, err := os.Open(fileName); err != nil { return err } else { - defer file.Close() + defer func() { _ = file.Close() }() fileScanner := bufio.NewScanner(file) for fileScanner.Scan() { line := fileScanner.Text() @@ -293,7 +293,7 @@ func (db syncDB) getOnlyimageLines(fileName string) ([]string, error) { if err != nil { return nil, err } - defer file.Close() + defer func() { _ = file.Close() }() fileScanner := bufio.NewScanner(file) var lines []string diff --git a/internal/pkg/kernel/kernel.go b/internal/pkg/kernel/kernel.go index 7fb26199..f8af8230 100644 --- a/internal/pkg/kernel/kernel.go +++ b/internal/pkg/kernel/kernel.go @@ -48,7 +48,7 @@ func (k collection) Default() *Kernel { nk := append(collection{}, k...) sort.Sort(sort.Reverse(nk)) for _, kernel := range nk { - if !(kernel.IsDebug() || kernel.IsRescue()) { + if !kernel.IsDebug() && !kernel.IsRescue() { return kernel } } diff --git a/internal/pkg/node/mergo.go b/internal/pkg/node/mergo.go index bd07a17b..4e62dade 100644 --- a/internal/pkg/node/mergo.go +++ b/internal/pkg/node/mergo.go @@ -179,7 +179,7 @@ func (config *NodesYaml) MergeNode(id string) (node Node, fields fieldMap, err e node.setIds(id) node.valid = true node.updatePrimaryNetDev() - node.Profile.cleanLists() + node.cleanLists() return node, fields, nil } diff --git a/internal/pkg/node/modifiers.go b/internal/pkg/node/modifiers.go index e8967c97..8379cf08 100644 --- a/internal/pkg/node/modifiers.go +++ b/internal/pkg/node/modifiers.go @@ -113,7 +113,7 @@ func (config *NodesYaml) Persist() error { return config.PersistToFile(warewulfconf.Get().Paths.NodesConf()) } -func (config *NodesYaml) PersistToFile(configFile string) error { +func (config *NodesYaml) PersistToFile(configFile string) (err error) { if configFile == "" { configFile = warewulfconf.Get().Paths.NodesConf() } @@ -127,7 +127,11 @@ func (config *NodesYaml) PersistToFile(configFile string) error { wwlog.Error("%s", err) return err } - defer file.Close() + defer func() { + if cerr := file.Close(); cerr != nil && err == nil { + err = cerr + } + }() _, err = file.WriteString(string(out)) if err != nil { return err diff --git a/internal/pkg/node/util_test.go b/internal/pkg/node/util_test.go index eb804453..87c142f2 100644 --- a/internal/pkg/node/util_test.go +++ b/internal/pkg/node/util_test.go @@ -83,7 +83,7 @@ func Test_nodeYaml_FindByHwaddr(t *testing.T) { t.Errorf("FindByHwaddr() error = %v, wantErr %v", err, tt.wantErr) return } - if !(got.id == tt.want) { + if got.id != tt.want { t.Errorf("FindByHwaddr() got = %v, want %v", got, tt.want) } }) @@ -121,7 +121,7 @@ func Test_nodeYaml_FindByIpaddr(t *testing.T) { t.Errorf("FindByIpaddr() error = %v, wantErr %v", err, tt.wantErr) return } - if !(got.id == tt.want) { + if got.id != tt.want { t.Errorf("FindByHwaddr() got = %v, want %v", got, tt.want) } }) diff --git a/internal/pkg/oci/puller.go b/internal/pkg/oci/puller.go index b7388370..3747c66b 100644 --- a/internal/pkg/oci/puller.go +++ b/internal/pkg/oci/puller.go @@ -20,6 +20,7 @@ import ( "github.com/opencontainers/umoci" "github.com/opencontainers/umoci/oci/layer" "github.com/warewulf/warewulf/internal/pkg/util" + "github.com/warewulf/warewulf/internal/pkg/wwlog" ) type pullerOpt func(*puller) error @@ -140,7 +141,11 @@ func (p *puller) Pull(ctx context.Context, uri, dst string) (err error) { if err != nil { return err } - defer os.RemoveAll(tmpDir) + defer func() { + if err := os.RemoveAll(tmpDir); err != nil { + wwlog.Warn("failed to remove temporary directory %s: %s", tmpDir, err) + } + }() // create an oci bundle our tmpdir to avoid issues with umoci.UnpackRootfs() tmpRef, err := layout.ParseReference(tmpDir + ":" + "tmp") diff --git a/internal/pkg/oci/puller_test.go b/internal/pkg/oci/puller_test.go index 44f18b81..4ab8f7a9 100644 --- a/internal/pkg/oci/puller_test.go +++ b/internal/pkg/oci/puller_test.go @@ -13,7 +13,7 @@ import ( func TestGetReference(t *testing.T) { temp, err := os.MkdirTemp(os.TempDir(), "ww-archive-*") assert.NoError(t, err) - defer os.RemoveAll(temp) + defer func() { _ = os.RemoveAll(temp) }() tests := []struct { name string diff --git a/internal/pkg/overlay/funcmap.go b/internal/pkg/overlay/funcmap.go index 06a0c1a0..040858d7 100644 --- a/internal/pkg/overlay/funcmap.go +++ b/internal/pkg/overlay/funcmap.go @@ -45,7 +45,7 @@ func templateFileBlock(inc string, abortStr string) (string, error) { wwlog.Info("couldn't read block %s: %s", inc, err) return abortStr, nil } - defer readFile.Close() + defer func() { _ = readFile.Close() }() var cont string fileScanner := bufio.NewScanner(readFile) fileScanner.Split(bufio.ScanLines) diff --git a/internal/pkg/overlay/overlay.go b/internal/pkg/overlay/overlay.go index 47cae81f..dd5eae18 100644 --- a/internal/pkg/overlay/overlay.go +++ b/internal/pkg/overlay/overlay.go @@ -238,7 +238,7 @@ func (overlay Overlay) Chmod(path string, mode uint64) (err error) { } } fullPath := overlay.File(path) - if !(util.IsFile(fullPath) || util.IsDir(fullPath)) { + if !util.IsFile(fullPath) && !util.IsDir(fullPath) { return fmt.Errorf("file does not exist within overlay: %s:%s", overlay.Name(), fullPath) } @@ -254,7 +254,7 @@ func (overlay Overlay) Chown(path string, uid, gid int) (err error) { } } fullPath := overlay.File(path) - if !(util.IsFile(fullPath) || util.IsDir(fullPath)) { + if !util.IsFile(fullPath) && !util.IsDir(fullPath) { return fmt.Errorf("file does not exist within overlay: %s:%s", overlay.Name(), fullPath) } return os.Chown(fullPath, uid, gid) @@ -309,8 +309,8 @@ func (overlay Overlay) ParseVarFields(file string) map[string]FieldInfo { // Initialize $ to refer to the root template context rangeVars["$"] = rootType - if tmpl.Tree != nil && tmpl.Tree.Root != nil { - walkParseTree(tmpl.Tree.Root, rootType, "", rangeVars, result) + if tmpl.Tree != nil && tmpl.Root != nil { + walkParseTree(tmpl.Root, rootType, "", rangeVars, result) } return result @@ -846,7 +846,7 @@ func BuildHostOverlay() error { if err != nil { return fmt.Errorf("could not build host overlay: %w ", err) } - if !(stats.Mode() == os.FileMode(0o750|os.ModeDir) || stats.Mode() == os.FileMode(0o700|os.ModeDir)) { + if stats.Mode() != os.FileMode(0o750|os.ModeDir) && stats.Mode() != os.FileMode(0o700|os.ModeDir) { wwlog.SecWarn("Permissions of host overlay dir %s are %s (750 is considered as secure)", hostdir.Rootfs(), stats.Mode()) } registry, err := node.New() @@ -918,7 +918,11 @@ func BuildOverlay(nodeConf node.Node, allNodes []node.Node, context string, over if err != nil { return fmt.Errorf("failed to create temporary directory for %s: %w", name, err) } - defer os.RemoveAll(buildDir) + defer func() { + if err := os.RemoveAll(buildDir); err != nil { + wwlog.Warn("failed to remove temporary build directory %s: %s", buildDir, err) + } + }() wwlog.Debug("Created temporary directory for %s: %s", name, buildDir) @@ -1126,7 +1130,7 @@ func BuildOverlayIndir(nodeData node.Node, allNodes []node.Node, overlayNames [] /* Writes buffer to the destination file. If wwbackup is set a wwbackup will be created. */ -func CarefulWriteBuffer(destFile string, buffer bytes.Buffer, backupFile bool, perm fs.FileMode) error { +func CarefulWriteBuffer(destFile string, buffer bytes.Buffer, backupFile bool, perm fs.FileMode) (err error) { wwlog.Debug("Trying to careful write file (%d bytes): %s", buffer.Len(), destFile) if backupFile { if !util.IsFile(destFile+".wwbackup") && util.IsFile(destFile) { @@ -1140,7 +1144,11 @@ func CarefulWriteBuffer(destFile string, buffer bytes.Buffer, backupFile bool, p if err != nil { return fmt.Errorf("could not open new file for template %w", err) } - defer w.Close() + defer func() { + if cerr := w.Close(); cerr != nil && err == nil { + err = fmt.Errorf("failed to close file %s: %w", destFile, cerr) + } + }() _, err = buffer.WriteTo(w) return err } diff --git a/internal/pkg/overlay/overlay_test.go b/internal/pkg/overlay/overlay_test.go index 14ba0301..dd3485dc 100644 --- a/internal/pkg/overlay/overlay_test.go +++ b/internal/pkg/overlay/overlay_test.go @@ -586,7 +586,7 @@ func Test_BuildAllOverlays(t *testing.T) { conf := warewulfconf.Get() overlayDir, overlayDirErr := os.MkdirTemp(os.TempDir(), "ww-test-overlay-*") assert.NoError(t, overlayDirErr) - defer os.RemoveAll(overlayDir) + defer func() { _ = os.RemoveAll(overlayDir) }() conf.Paths.WWOverlaydir = overlayDir assert.NoError(t, os.Mkdir(path.Join(overlayDir, "o1"), 0o700)) assert.NoError(t, os.Mkdir(path.Join(overlayDir, "o2"), 0o700)) @@ -595,7 +595,7 @@ func Test_BuildAllOverlays(t *testing.T) { t.Run(tt.description, func(t *testing.T) { provisionDir, provisionDirErr := os.MkdirTemp(os.TempDir(), "ww-test-provision-*") assert.NoError(t, provisionDirErr) - defer os.RemoveAll(provisionDir) + defer func() { _ = os.RemoveAll(provisionDir) }() conf.Paths.WWProvisiondir = provisionDir var nodes []node.Node @@ -684,7 +684,7 @@ func Test_BuildSpecificOverlays(t *testing.T) { conf := warewulfconf.Get() overlayDir, overlayDirErr := os.MkdirTemp(os.TempDir(), "ww-test-overlay-*") assert.NoError(t, overlayDirErr) - defer os.RemoveAll(overlayDir) + defer func() { _ = os.RemoveAll(overlayDir) }() conf.Paths.WWOverlaydir = overlayDir assert.NoError(t, os.Mkdir(path.Join(overlayDir, "o1"), 0o700)) assert.NoError(t, os.Mkdir(path.Join(overlayDir, "o2"), 0o700)) @@ -693,7 +693,7 @@ func Test_BuildSpecificOverlays(t *testing.T) { t.Run(tt.description, func(t *testing.T) { provisionDir, provisionDirErr := os.MkdirTemp(os.TempDir(), "ww-test-provision-*") assert.NoError(t, provisionDirErr) - defer os.RemoveAll(provisionDir) + defer func() { _ = os.RemoveAll(provisionDir) }() conf.Paths.WWProvisiondir = provisionDir var nodes []node.Node @@ -729,7 +729,7 @@ func Test_CreateOverlayFile(t *testing.T) { conf := warewulfconf.Get() overlayDir, overlayDirErr := os.MkdirTemp(os.TempDir(), "ww-test-overlay-*") assert.NoError(t, overlayDirErr) - defer os.RemoveAll(overlayDir) + defer func() { _ = os.RemoveAll(overlayDir) }() conf.Paths.WWOverlaydir = overlayDir conf.Paths.Datadir = "/dev/null" for _, tt := range tests { @@ -757,7 +757,7 @@ func dirIsEmpty(t *testing.T, name string) bool { t.Log(err) return true } - defer f.Close() + defer func() { _ = f.Close() }() dirnames, err2 := f.Readdirnames(1) if err2 == io.EOF { @@ -773,7 +773,7 @@ func readCpio(name string) (headers map[string]*cpio.Header, err error) { if err != nil { return headers, err } - defer f.Close() + defer func() { _ = f.Close() }() reader := cpio.NewReader(f) headers = make(map[string]*cpio.Header) diff --git a/internal/pkg/testenv/testenv.go b/internal/pkg/testenv/testenv.go index d6dca4c2..5e8d1dcd 100644 --- a/internal/pkg/testenv/testenv.go +++ b/internal/pkg/testenv/testenv.go @@ -175,7 +175,7 @@ func (env *TestEnv) WriteFile(fileName string, content string) { f, err := os.Create(env.GetPath(fileName)) env.assertNoError(err) - defer f.Close() + defer func() { _ = f.Close() }() _, err = f.WriteString(content) env.assertNoError(err) err = os.Chtimes(env.GetPath(fileName), diff --git a/internal/pkg/util/copyfile.go b/internal/pkg/util/copyfile.go index 7f1a984b..2624059d 100644 --- a/internal/pkg/util/copyfile.go +++ b/internal/pkg/util/copyfile.go @@ -7,7 +7,7 @@ import ( "github.com/warewulf/warewulf/internal/pkg/wwlog" ) -func CopyFile(src string, dst string) error { +func CopyFile(src string, dst string) (err error) { wwlog.Debug("Copying '%s' to '%s'", src, dst) @@ -17,7 +17,7 @@ func CopyFile(src string, dst string) error { wwlog.Debug("Could not open source file %s: %s", src, err) return err } - defer srcFD.Close() + defer func() { _ = srcFD.Close() }() srcInfo, err := srcFD.Stat() if err != nil { @@ -30,7 +30,11 @@ func CopyFile(src string, dst string) error { wwlog.Debug("Could not create destination file %s: %s", dst, err) return err } - defer dstFD.Close() + defer func() { + if cerr := dstFD.Close(); cerr != nil && err == nil { + err = cerr + } + }() bytes, err := io.Copy(dstFD, srcFD) if err != nil { diff --git a/internal/pkg/util/util.go b/internal/pkg/util/util.go index a999c195..4f7db2c4 100644 --- a/internal/pkg/util/util.go +++ b/internal/pkg/util/util.go @@ -125,7 +125,7 @@ func ReadFile(path string) ([]string, error) { for scanner.Scan() { lines = append(lines, scanner.Text()) } - f.Close() + _ = f.Close() return lines, nil } @@ -319,8 +319,8 @@ func CopyUIDGID(source string, dest string) error { } // root is always good, if we failt to get UID/GID of a file - var UID int = 0 - var GID int = 0 + var UID = 0 + var GID = 0 if stat, ok := info.Sys().(*syscall.Stat_t); ok { UID = int(stat.Uid) GID = int(stat.Gid) @@ -345,16 +345,20 @@ func IncrementIPv4(start net.IP, inc uint) net.IP { /* Appending the lines to the given file */ -func AppendLines(fileName string, lines []string) error { +func AppendLines(fileName string, lines []string) (err error) { wwlog.Verbose("appending %v lines to %s", len(lines), fileName) file, err := os.OpenFile(fileName, os.O_APPEND|os.O_WRONLY, 0o644) if err != nil { return fmt.Errorf("can't open file: %s: %w", fileName, err) } - defer file.Close() + defer func() { + if cerr := file.Close(); cerr != nil && err == nil { + err = cerr + } + }() for _, line := range lines { wwlog.Debug("Appending '%s' to %s", line, fileName) - if _, err := file.WriteString(fmt.Sprintf("%s\n", line)); err != nil { + if _, err := fmt.Fprintf(file, "%s\n", line); err != nil { return fmt.Errorf("can't write to file: %s: %w", fileName, err) } @@ -393,7 +397,7 @@ func CpioCreate( err_in := make(chan error, 1) go func() { - defer stdin.Close() + defer func() { _ = stdin.Close() }() _, err := io.WriteString(stdin, strings.Join(ifiles, "\n")) err_in <- err }() @@ -475,14 +479,16 @@ func FileGz( err = proc.Start() if err != nil { _ = proc.Wait() - gzippedFile.Close() - os.Remove(file_gz) + _ = gzippedFile.Close() + _ = os.Remove(file_gz) err = fmt.Errorf("unable to successfully execute compression program: %s: %w", compressor, err) } else { err = proc.Wait() - gzippedFile.Close() + if cerr := gzippedFile.Close(); cerr != nil { + wwlog.Warn("failed to close compressed image file %s: %s", file_gz, cerr) + } if err != nil { - os.Remove(file_gz) + _ = os.Remove(file_gz) err = fmt.Errorf("unable to successfully create compressed image file: %s: %w", file_gz, err) } else { wwlog.Verbose("Successfully compressed image file: %s", file_gz) diff --git a/internal/pkg/warewulfd/api/overlay.go b/internal/pkg/warewulfd/api/overlay.go index 46db6705..1e09067e 100644 --- a/internal/pkg/warewulfd/api/overlay.go +++ b/internal/pkg/warewulfd/api/overlay.go @@ -119,7 +119,7 @@ func (of *OverlayFile) readContents() (string, error) { } func (of *OverlayFile) renderContents(nodeName string) (string, error) { - if !(path.Ext(of.Path) == ".ww") { + if path.Ext(of.Path) != ".ww" { return "", fmt.Errorf("'%s' does not end with '.ww'", of.Path) } @@ -329,7 +329,7 @@ func addOverlayFile() usecase.Interactor { return err } } - if err := overlay_.AddFile(relPath, []byte(input.Content), true, !(input.IfNoneMatch == "*")); err != nil { + if err := overlay_.AddFile(relPath, []byte(input.Content), true, input.IfNoneMatch != "*"); err != nil { return fmt.Errorf("unable to add overlay file %v: %v: %w", input.Name, relPath, err) } *output = *NewOverlayResponse(input.Name) diff --git a/internal/pkg/warewulfd/overlay_test.go b/internal/pkg/warewulfd/overlay_test.go index 17d28dfb..5bd76d1d 100644 --- a/internal/pkg/warewulfd/overlay_test.go +++ b/internal/pkg/warewulfd/overlay_test.go @@ -186,7 +186,7 @@ nodes: w := httptest.NewRecorder() HandleRuntimeOverlay(w, req) res := w.Result() - defer res.Body.Close() + defer func() { _ = res.Body.Close() }() data, readErr := io.ReadAll(res.Body) assert.NoError(t, readErr) diff --git a/internal/pkg/warewulfd/provision_test.go b/internal/pkg/warewulfd/provision_test.go index 03ae754e..73cc56dd 100644 --- a/internal/pkg/warewulfd/provision_test.go +++ b/internal/pkg/warewulfd/provision_test.go @@ -99,7 +99,7 @@ nodes: w := httptest.NewRecorder() HandleProvision(w, req) res := w.Result() - defer res.Body.Close() + defer func() { _ = res.Body.Close() }() data, readErr := io.ReadAll(res.Body) assert.NoError(t, readErr) diff --git a/internal/pkg/warewulfd/server/server.go b/internal/pkg/warewulfd/server/server.go index f3661f62..4b4f30e6 100644 --- a/internal/pkg/warewulfd/server/server.go +++ b/internal/pkg/warewulfd/server/server.go @@ -37,7 +37,7 @@ type slashFix struct { Filter out the '//' */ func (h *slashFix) ServeHTTP(w http.ResponseWriter, r *http.Request) { - r.URL.Path = strings.Replace(r.URL.Path, "//", "/", -1) + r.URL.Path = strings.ReplaceAll(r.URL.Path, "//", "/") h.mux.ServeHTTP(w, r) } diff --git a/internal/pkg/warewulfd/util.go b/internal/pkg/warewulfd/util.go index ea6b0964..cb09d656 100644 --- a/internal/pkg/warewulfd/util.go +++ b/internal/pkg/warewulfd/util.go @@ -24,7 +24,7 @@ func sendFile( w.WriteHeader(http.StatusInternalServerError) return err } - defer fd.Close() + defer func() { _ = fd.Close() }() stat, err := fd.Stat() if err != nil { @@ -40,7 +40,7 @@ func sendFile( fd) wwlog.Info("send %s -> %s", filename, sendto) - req.Body.Close() + _ = req.Body.Close() return nil } @@ -100,7 +100,7 @@ func ArpFind(ip string) (mac string) { if err != nil { return } - defer arpCache.Close() + defer func() { _ = arpCache.Close() }() scanner := bufio.NewScanner(arpCache) scanner.Scan() diff --git a/internal/pkg/wwlog/wwlog.go b/internal/pkg/wwlog/wwlog.go index 284c2950..ddb0bf60 100644 --- a/internal/pkg/wwlog/wwlog.go +++ b/internal/pkg/wwlog/wwlog.go @@ -205,9 +205,9 @@ func LogCaller(level int, skip int, err error, message string, a ...interface{}) message = logFormatter(logLevel, &rec) if level == INFO || level == OUT { - fmt.Fprint(logOut, message) + _, _ = fmt.Fprint(logOut, message) } else { - fmt.Fprint(logErr, message) + _, _ = fmt.Fprint(logErr, message) } } diff --git a/internal/pkg/wwlog/wwlog_test.go b/internal/pkg/wwlog/wwlog_test.go index 1c0ed4ed..8c900d36 100644 --- a/internal/pkg/wwlog/wwlog_test.go +++ b/internal/pkg/wwlog/wwlog_test.go @@ -250,7 +250,7 @@ func Test_Log(t *testing.T) { outCh <- string(out) }() - w.Close() + _ = w.Close() os.Stderr = oldErr out := <-outCh if tt.exactMatch { diff --git a/overlays/debug/internal/debug_test.go b/overlays/debug/internal/debug_test.go index ff1dde93..f09fc768 100644 --- a/overlays/debug/internal/debug_test.go +++ b/overlays/debug/internal/debug_test.go @@ -50,7 +50,7 @@ func Test_debugOverlay(t *testing.T) { assert.NoError(t, err) assert.Empty(t, stdout.String()) assert.Empty(t, stderr.String()) - assert.Equal(t, strings.Replace(tt.log, "%HOSTNAME%", hostname, -1), variableData.ReplaceAllString(logbuf.String(), "${1}: REMOVED_BY_TEST")) + assert.Equal(t, strings.ReplaceAll(tt.log, "%HOSTNAME%", hostname), variableData.ReplaceAllString(logbuf.String(), "${1}: REMOVED_BY_TEST")) }) } } diff --git a/overlays/host/internal/host_test.go b/overlays/host/internal/host_test.go index 19b46e7c..1877617f 100644 --- a/overlays/host/internal/host_test.go +++ b/overlays/host/internal/host_test.go @@ -113,7 +113,7 @@ func Test_hostOverlay(t *testing.T) { } else { log = logbuf.String() } - assert.Equal(t, strings.Replace(tt.log, "%HOSTNAME%", hostname, -1), log) + assert.Equal(t, strings.ReplaceAll(tt.log, "%HOSTNAME%", hostname), log) }) } } diff --git a/overlays/hosts/internal/hosts_test.go b/overlays/hosts/internal/hosts_test.go index da26cd68..71e34553 100644 --- a/overlays/hosts/internal/hosts_test.go +++ b/overlays/hosts/internal/hosts_test.go @@ -49,7 +49,7 @@ func Test_hostsOverlay(t *testing.T) { assert.NoError(t, err) assert.Empty(t, stdout.String()) assert.Empty(t, stderr.String()) - assert.Equal(t, strings.Replace(tt.log, "%HOSTNAME%", hostname, -1), logbuf.String()) + assert.Equal(t, strings.ReplaceAll(tt.log, "%HOSTNAME%", hostname), logbuf.String()) }) } }