Simpler names for overlay methods

Signed-off-by: Jonathon Anderson <janderson@ciq.com>
This commit is contained in:
Jonathon Anderson
2025-08-27 22:21:16 -06:00
parent 6fd858899d
commit 66450a7dcd
20 changed files with 72 additions and 75 deletions

View File

@@ -14,9 +14,9 @@ import (
"github.com/warewulf/warewulf/internal/pkg/wwlog"
)
// GetOverlay returns the filesystem path of an overlay identified by its name,
func GetOverlay(name string) (overlay Overlay, err error) {
overlay = getSiteOverlayName(name)
// Get returns the filesystem path of an overlay identified by its name,
func Get(name string) (overlay Overlay, err error) {
overlay = getSiteOverlay(name)
if overlay.Exists() {
return overlay, nil
}
@@ -31,38 +31,39 @@ func GetOverlay(name string) (overlay Overlay, err error) {
//
// Returns an error if the overlay already exists or if directory creation fails.
func Create(name string) (overlay Overlay, err error) {
overlay = getSiteOverlayName(name)
if util.IsDir(overlay.Path()) {
overlay = getSiteOverlay(name)
if overlay.Exists() {
return overlay, fmt.Errorf("overlay already exists: %s", name)
}
wwlog.Verbose("created site overlay under: %s", overlay.Path())
return overlay, os.MkdirAll(path.Join(overlay.Path(), "rootfs"), 0o755)
}
// GetDistributionOverlay returns the filesystem path of a distribution overlay
// identified by the given name.
// GetDistributionOverlay returns a distribution overlay identified by the given
// name.
func getDistributionOverlay(name string) Overlay {
return Overlay(path.Join(config.Get().Paths.DistributionOverlaydir(), name))
}
// GetSiteOverlay returns the filesystem path of a site-specific overlay
// identified by the given name.
func getSiteOverlayName(name string) (overlay Overlay) {
// getSiteOverlay returns a site-specific overlay identified by the given name.
func getSiteOverlay(name string) (overlay Overlay) {
return Overlay(path.Join(config.Get().Paths.SiteOverlaydir(), name))
}
// Creates a site overlay from an existing distribution overlay.
// CloneToSite creates a site overlay from an existing distribution overlay.
//
// If the distribution overlay doesn't exist, return an error.
func (overlay Overlay) CloneSiteOverlay() (siteOverlay Overlay, err error) {
wwlog.Verbose("Creating site overlay: %s", overlay.Name())
siteOverlay = getSiteOverlayName(overlay.Name())
if !util.IsDir(overlay.Path()) {
return siteOverlay, fmt.Errorf("source overlay does not exist: %s", overlay.Name())
}
func (overlay Overlay) CloneToSite() (siteOverlay Overlay, err error) {
wwlog.Verbose("Cloning to site overlay: %s", overlay.Name())
siteOverlay = getSiteOverlay(overlay.Name())
if siteOverlay.Exists() {
return siteOverlay, nil
}
if !overlay.Exists() {
return siteOverlay, fmt.Errorf("source overlay does not exist: %s", overlay.Name())
}
if !util.IsDir(filepath.Dir(siteOverlay.Path())) {
if err := os.MkdirAll(filepath.Dir(siteOverlay.Path()), 0o755); err != nil {
return siteOverlay, err
@@ -72,7 +73,7 @@ func (overlay Overlay) CloneSiteOverlay() (siteOverlay Overlay, err error) {
return siteOverlay, err
}
// OverlayImage returns the full path to an overlay image based on the
// Image returns the full path to an overlay image based on the
// context and the overlays contained in it.
//
// If a context is provided, the image file name is based on that
@@ -83,7 +84,7 @@ func (overlay Overlay) CloneSiteOverlay() (siteOverlay Overlay, err error) {
//
// If the context is empty and no overlays are specified, the empty
// string is returned.
func OverlayImage(nodeName string, context string, overlayNames []string) string {
func Image(nodeName string, context string, overlayNames []string) string {
var name string
if context != "" {
if len(overlayNames) > 0 {
@@ -101,8 +102,8 @@ func OverlayImage(nodeName string, context string, overlayNames []string) string
return path.Join(config.Get().Paths.OverlayProvisiondir(), nodeName, name)
}
func ClearOverlayImage(nodeName string, context string, overlayNames []string) error {
imagePath := OverlayImage(nodeName, context, overlayNames)
func RemoveImage(nodeName string, context string, overlayNames []string) error {
imagePath := Image(nodeName, context, overlayNames)
if util.IsFile(imagePath) {
if err := os.Remove(imagePath); err != nil {
return fmt.Errorf("failed to remove overlay image: %w", err)

View File

@@ -30,7 +30,7 @@ func Test_OverlayImage(t *testing.T) {
conf.Paths.WWProvisiondir = "p"
for _, tt := range overlayImageTests {
t.Run(tt.description, func(t *testing.T) {
out := OverlayImage(tt.node, tt.context, tt.overlays)
out := Image(tt.node, tt.context, tt.overlays)
if tt.image != out {
t.Errorf("got %q, want %q", out, tt.image)
}

View File

@@ -129,17 +129,14 @@ func (overlay Overlay) IsDistributionOverlay() bool {
func (overlay Overlay) AddFile(filePath string, content []byte, parents bool, force bool) error {
wwlog.Info("Creating file %s in overlay %s, force: %v", filePath, overlay.Name(), force)
if overlay.IsDistributionOverlay() {
siteOverlay, err := overlay.CloneSiteOverlay()
if !overlay.IsSiteOverlay() {
siteOverlay, err := overlay.CloneToSite()
if err != nil {
return fmt.Errorf("failed to clone distribution overlay '%s' to site overlay: %w", overlay.Name(), err)
}
// replace the overlay with newly created siteOverlay
overlay = siteOverlay
}
if !overlay.IsSiteOverlay() {
return fmt.Errorf("cloning of site overlay failed")
}
fullPath := overlay.File(filePath)
// create necessary parent directories
if parents {
@@ -192,7 +189,7 @@ func (overlay Overlay) DeleteFile(filePath string, force, cleanup bool) (err err
return fmt.Errorf("file %s does not exist in overlay %s", filePath, overlay.Name())
}
if overlay.IsDistributionOverlay() {
siteOverlay, err := overlay.CloneSiteOverlay()
siteOverlay, err := overlay.CloneToSite()
if err != nil {
return fmt.Errorf("failed to clone distribution overlay '%s' to site overlay: %w", overlay.Name(), err)
}
@@ -230,10 +227,10 @@ func (overlay Overlay) DeleteFile(filePath string, force, cleanup bool) (err err
return nil
}
// chmod for the given oppath in the overlay
// chmod for the given path in the overlay
func (overlay Overlay) Chmod(path string, mode uint64) (err error) {
if !overlay.IsSiteOverlay() {
overlay, err = overlay.CloneSiteOverlay()
overlay, err = overlay.CloneToSite()
if err != nil {
return err
}
@@ -249,7 +246,7 @@ func (overlay Overlay) Chmod(path string, mode uint64) (err error) {
// chown file or dir in overlay
func (overlay Overlay) Chown(path string, uid, gid int) (err error) {
if !overlay.IsSiteOverlay() {
overlay, err = overlay.CloneSiteOverlay()
overlay, err = overlay.CloneToSite()
if err != nil {
return err
}
@@ -263,7 +260,7 @@ func (overlay Overlay) Chown(path string, uid, gid int) (err error) {
func (overlay Overlay) Mkdir(path string, mode int32) (err error) {
if !overlay.IsSiteOverlay() {
overlay, err = overlay.CloneSiteOverlay()
overlay, err = overlay.CloneToSite()
if err != nil {
return err
}
@@ -364,7 +361,7 @@ func BuildHostOverlay() error {
hostname, _ := os.Hostname()
hostData := node.NewNode(hostname)
wwlog.Info("Building overlay for %s: host", hostname)
hostdir, err := GetOverlay("host")
hostdir, err := Get("host")
if err != nil {
return err
}
@@ -430,7 +427,7 @@ func BuildOverlay(nodeConf node.Node, allNodes []node.Node, context string, over
} else {
name = fmt.Sprintf("%s overlay/%v", nodeConf.Id(), overlayNames)
}
overlayImage := OverlayImage(nodeConf.Id(), context, overlayNames)
overlayImage := Image(nodeConf.Id(), context, overlayNames)
overlayImageDir := path.Dir(overlayImage)
err := os.MkdirAll(overlayImageDir, 0o750)
@@ -494,7 +491,7 @@ func BuildOverlayIndir(nodeData node.Node, allNodes []node.Node, overlayNames []
wwlog.Verbose("Processing node/overlays: %s/%s", nodeData.Id(), strings.Join(overlayNames, ","))
for _, overlayName := range overlayNames {
wwlog.Verbose("Building overlay %s for node %s in %s", overlayName, nodeData.Id(), outputDir)
overlayRootfs, err := GetOverlay(overlayName)
overlayRootfs, err := Get(overlayName)
if err != nil {
return err
}

View File

@@ -139,7 +139,7 @@ func Test_OverlayMethods(t *testing.T) {
for name, tt := range tests {
t.Run(name, func(t *testing.T) {
overlay, err := GetOverlay(tt.name)
overlay, err := Get(tt.name)
if tt.exists {
assert.NoError(t, err)
assert.Equal(t, tt.name, overlay.Name())
@@ -734,7 +734,7 @@ func Test_CreateOverlayFile(t *testing.T) {
conf.Paths.Datadir = "/dev/null"
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
newOverlay, err := GetOverlay(tt.overlayName)
newOverlay, err := Get(tt.overlayName)
if err != nil {
newOverlay, err = Create(tt.overlayName)
}