refactored overlay class
overlay.GetOverlay(name) returns now an error if the overlay doesn't exist. This is the most canonical way to act if there is no overlay.
This commit is contained in:
committed by
Jonathon Anderson
parent
c17fe8d512
commit
6f4fd60d8f
@@ -1,36 +1,15 @@
|
||||
package mkdir
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/warewulf/warewulf/internal/pkg/overlay"
|
||||
"github.com/warewulf/warewulf/internal/pkg/wwlog"
|
||||
)
|
||||
|
||||
func CobraRunE(cmd *cobra.Command, args []string) (err error) {
|
||||
overlayName := args[0]
|
||||
dirName := args[1]
|
||||
|
||||
overlay_ := overlay.GetOverlay(overlayName)
|
||||
if !overlay_.IsSiteOverlay() {
|
||||
overlay_, err = overlay_.CloneSiteOverlay()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
if !overlay_.Exists() {
|
||||
return fmt.Errorf("overlay does not exist: %s", overlayName)
|
||||
}
|
||||
|
||||
overlayDir := overlay_.File(dirName)
|
||||
wwlog.Debug("Will create directory in overlay: %s:%s", overlayName, dirName)
|
||||
err = os.MkdirAll(overlayDir, os.FileMode(PermMode))
|
||||
myOverlay, err := overlay.GetOverlay(args[0])
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not create directory: %s", overlayDir)
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
return myOverlay.Mkdir(args[1], PermMode)
|
||||
}
|
||||
|
||||
89
internal/app/wwctl/overlay/mkdir/main_test.go
Normal file
89
internal/app/wwctl/overlay/mkdir/main_test.go
Normal file
@@ -0,0 +1,89 @@
|
||||
package mkdir
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"io/fs"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/warewulf/warewulf/internal/pkg/testenv"
|
||||
"github.com/warewulf/warewulf/internal/pkg/warewulfd"
|
||||
)
|
||||
|
||||
func Test_OverlayMkdir(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
overlayName string
|
||||
dirName string
|
||||
perm string
|
||||
wantErr bool
|
||||
system bool
|
||||
}{
|
||||
{
|
||||
name: "simple mkdir",
|
||||
overlayName: "test-overlay",
|
||||
dirName: "testdir",
|
||||
perm: "0755",
|
||||
wantErr: false,
|
||||
system: false,
|
||||
},
|
||||
{
|
||||
name: "system overlay mkdir",
|
||||
overlayName: "wwinit", // A known system overlay
|
||||
dirName: "init.d",
|
||||
perm: "0700",
|
||||
wantErr: false,
|
||||
system: true,
|
||||
},
|
||||
}
|
||||
|
||||
warewulfd.SetNoDaemon()
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
env := testenv.New(t)
|
||||
conf := env.Configure()
|
||||
|
||||
// Setup overlay
|
||||
var overlayDir string
|
||||
if tt.system {
|
||||
overlayDir = filepath.Join(conf.Paths.DistributionOverlaydir(), tt.overlayName)
|
||||
err := os.MkdirAll(overlayDir, 0755)
|
||||
assert.NoError(t, err)
|
||||
} else {
|
||||
overlayDir = filepath.Join(conf.Paths.WWOverlaydir, tt.overlayName)
|
||||
err := os.MkdirAll(overlayDir, 0755)
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
baseCmd := GetCommand()
|
||||
baseCmd.SetArgs([]string{"-m", tt.perm, tt.overlayName, tt.dirName})
|
||||
buf := new(bytes.Buffer)
|
||||
baseCmd.SetOut(buf)
|
||||
baseCmd.SetErr(buf)
|
||||
err := baseCmd.Execute()
|
||||
|
||||
if tt.wantErr {
|
||||
assert.Error(t, err)
|
||||
} else {
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
// Check permissions
|
||||
// for system overlays, the file is copied to a site overlay
|
||||
if tt.system {
|
||||
overlayDir = filepath.Join(conf.Paths.WWOverlaydir, tt.overlayName)
|
||||
}
|
||||
dirPath := filepath.Join(overlayDir, tt.dirName)
|
||||
stat, err := os.Stat(dirPath)
|
||||
assert.NoError(t, err)
|
||||
if !tt.wantErr {
|
||||
mode, err := strconv.ParseUint(tt.perm, 8, 32)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, fs.FileMode(mode), stat.Mode().Perm())
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
package mkdir
|
||||
|
||||
import (
|
||||
"testing"
|
||||
)
|
||||
|
||||
// TestArgsOverlayMkdir is a regression test for 248.
|
||||
// One argument should fail, two should succeed.
|
||||
func TestArgsOverlayMkdir(t *testing.T) {
|
||||
command := GetCommand()
|
||||
|
||||
err := command.Args(command, []string{"overlay_name"})
|
||||
if err == nil {
|
||||
t.Errorf("one argument to overlay mkdir should fail")
|
||||
}
|
||||
|
||||
err = command.Args(command, []string{"overlay_name", "directory"})
|
||||
if err != nil {
|
||||
t.Errorf("two arguments to overlay mkdir should succeed")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user