Update linter for golang v1.25 compatibility

Signed-off-by: Jonathon Anderson <janderson@ciq.com>
This commit is contained in:
Jonathon Anderson
2026-03-10 19:55:51 -06:00
committed by Christian Goll
parent 019408d076
commit 081d2ec61e
48 changed files with 156 additions and 115 deletions

View File

@@ -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

View File

@@ -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 {

View File

@@ -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())

View File

@@ -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 {

View File

@@ -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)

View File

@@ -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)

View File

@@ -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

View File

@@ -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)

View File

@@ -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)

View File

@@ -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")

View File

@@ -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)

View File

@@ -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)
}

View File

@@ -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)

View File

@@ -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

View File

@@ -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)

View File

@@ -119,7 +119,7 @@ nodes:
_, _ = io.Copy(&buf, stdoutR)
stdoutC <- buf.String()
}()
stdoutW.Close()
_ = stdoutW.Close()
os.Stdout = oriout
stdout := <-stdoutC

View File

@@ -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
}

View File

@@ -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

View File

@@ -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

View File

@@ -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())

View File

@@ -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
}

View File

@@ -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

View File

@@ -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))

View File

@@ -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
}
}

View File

@@ -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")

View File

@@ -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

View File

@@ -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
}
}

View File

@@ -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
}

View File

@@ -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

View File

@@ -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)
}
})

View File

@@ -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")

View File

@@ -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

View File

@@ -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)

View File

@@ -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
}

View File

@@ -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)

View File

@@ -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),

View File

@@ -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 {

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)

View File

@@ -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)
}

View File

@@ -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()

View File

@@ -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)
}
}

View File

@@ -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 {

View File

@@ -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"))
})
}
}

View File

@@ -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)
})
}
}

View File

@@ -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())
})
}
}