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

@@ -89,7 +89,7 @@ func OverlayList(cmd *cobra.Command, args []string, toComplete string) ([]string
}
func OverlayFiles(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
myOverlay, _ := overlay.GetOverlay(args[0])
myOverlay, _ := overlay.Get(args[0])
ret, _ := myOverlay.GetFiles()
return ret, cobra.ShellCompDirectiveNoFileComp
}

View File

@@ -9,7 +9,7 @@ import (
)
func CobraRunE(cmd *cobra.Command, args []string) error {
myOverlay, err := overlay.GetOverlay(args[0])
myOverlay, err := overlay.Get(args[0])
if err != nil {
return err
}

View File

@@ -37,7 +37,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
}
}
myOverlay, err := overlay.GetOverlay(args[0])
myOverlay, err := overlay.Get(args[0])
if err != nil {
return err
}

View File

@@ -12,7 +12,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
fileName = args[1]
}
myOverlay, err := overlay.GetOverlay(args[0])
myOverlay, err := overlay.Get(args[0])
if err != nil {
return err
}

View File

@@ -35,7 +35,7 @@ func CobraRunE(cmd *cobra.Command, args []string) (err error) {
overlayName := args[0]
fileName := args[1]
myOverlay, err := overlay.GetOverlay(overlayName)
myOverlay, err := overlay.Get(overlayName)
if err != nil {
return err
}
@@ -104,14 +104,13 @@ func CobraRunE(cmd *cobra.Command, args []string) (err error) {
}
if !myOverlay.IsSiteOverlay() {
myOverlay, err = myOverlay.CloneSiteOverlay()
myOverlay, err = myOverlay.CloneToSite()
if err != nil {
return err
}
overlayFile = myOverlay.File(fileName)
overlayFileDir = path.Dir(overlayFile)
}
// re-generate because overlay_ may have changed
overlayFile = myOverlay.File(fileName)
overlayFileDir = path.Dir(overlayFile)
if CreateDirs {
if err := os.MkdirAll(overlayFileDir, 0755); err != nil {

View File

@@ -22,12 +22,12 @@ func CobraRunE(cmd *cobra.Command, args []string) (err error) {
} else {
dest = source
}
overlay_, err := overlay.GetOverlay(args[0])
overlay_, err := overlay.Get(args[0])
if err != nil {
return err
}
if !overlay_.IsSiteOverlay() {
overlay_, err = overlay_.CloneSiteOverlay()
overlay_, err = overlay_.CloneToSite()
if err != nil {
return err
}

View File

@@ -39,7 +39,7 @@ func CobraRunE(vars *variables) func(cmd *cobra.Command, args []string) error {
}
for _, name := range overlays {
overlay_, err := overlay.GetOverlay(name)
overlay_, err := overlay.Get(name)
if err != nil {
wwlog.Error("%s:%s", name, err)

View File

@@ -7,7 +7,7 @@ import (
func CobraRunE(cmd *cobra.Command, args []string) (err error) {
myOverlay, err := overlay.GetOverlay(args[0])
myOverlay, err := overlay.Get(args[0])
if err != nil {
return err
}

View File

@@ -20,7 +20,7 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
overlayName := args[0]
fileName := args[1]
overlay_, err := overlay.GetOverlay(overlayName)
overlay_, err := overlay.Get(overlayName)
if err != nil {
return err
}

View File

@@ -14,7 +14,7 @@ import (
Creates '/etc/hosts' from the host template.
*/
func Hostfile() (err error) {
overlay_, err := overlay.GetOverlay("host")
overlay_, err := overlay.Get("host")
if err != nil {
return err
}

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

View File

@@ -70,13 +70,13 @@ func getNodeOverlayInfo() usecase.Interactor {
Overlays: node_.RuntimeOverlay,
},
}
sysImagePath := overlay.OverlayImage(input.ID, "system", node_.SystemOverlay)
sysImagePath := overlay.Image(input.ID, "system", node_.SystemOverlay)
if sysImageStat, err := os.Stat(sysImagePath); err == nil {
mtime := sysImageStat.ModTime()
out.SystemOverlay.MTime = &mtime
}
runtimeImagePath := overlay.OverlayImage(input.ID, "runtime", node_.RuntimeOverlay)
runtimeImagePath := overlay.Image(input.ID, "runtime", node_.RuntimeOverlay)
if runtimeImageStat, err := os.Stat(runtimeImagePath); err == nil {
mtime := runtimeImageStat.ModTime()
out.RuntimeOverlay.MTime = &mtime
@@ -194,12 +194,12 @@ func addNode() usecase.Interactor {
return status.Wrap(fmt.Errorf("image '%s' does not exist", input.Node.ImageName), status.InvalidArgument)
}
for _, overlay_ := range input.Node.SystemOverlay {
if _, err = overlay.GetOverlay(overlay_); err != nil {
if _, err = overlay.Get(overlay_); err != nil {
return status.Wrap(fmt.Errorf("overlay '%s' does not exist", overlay_), status.InvalidArgument)
}
}
for _, overlay_ := range input.Node.RuntimeOverlay {
if _, err = overlay.GetOverlay(overlay_); err != nil {
if _, err = overlay.Get(overlay_); err != nil {
return status.Wrap(fmt.Errorf("overlay '%s' does not exist", overlay_), status.InvalidArgument)
}
}
@@ -269,12 +269,12 @@ func updateNode() usecase.Interactor {
return status.Wrap(fmt.Errorf("image '%s' does not exist", input.Node.ImageName), status.InvalidArgument)
}
for _, overlay_ := range input.Node.SystemOverlay {
if _, err = overlay.GetOverlay(overlay_); err != nil {
if _, err = overlay.Get(overlay_); err != nil {
return status.Wrap(fmt.Errorf("overlay '%s' does not exist", overlay_), status.InvalidArgument)
}
}
for _, overlay_ := range input.Node.RuntimeOverlay {
if _, err = overlay.GetOverlay(overlay_); err != nil {
if _, err = overlay.Get(overlay_); err != nil {
return status.Wrap(fmt.Errorf("overlay '%s' does not exist", overlay_), status.InvalidArgument)
}
}

View File

@@ -24,7 +24,7 @@ type OverlayResponse struct {
func NewOverlayResponse(name string) *OverlayResponse {
o := new(OverlayResponse)
o.Files = []string{}
myOverlay, err := overlay.GetOverlay(name)
myOverlay, err := overlay.Get(name)
if err == nil {
if files, err := myOverlay.GetFiles(); err == nil {
o.Files = files
@@ -58,7 +58,7 @@ func getOverlayByName() usecase.Interactor {
u := usecase.NewInteractor(func(ctx context.Context, input getOverlayByNameInput, output *OverlayResponse) error {
wwlog.Debug("api.getOverlayByName(Name:%v)", input.Name)
if _, err := overlay.GetOverlay(input.Name); err != nil {
if _, err := overlay.Get(input.Name); err != nil {
return status.Wrap(fmt.Errorf("overlay not found: %v", input.Name), status.NotFound)
} else {
*output = *NewOverlayResponse(input.Name)
@@ -82,7 +82,7 @@ type OverlayFile struct {
}
func (of *OverlayFile) FullPath() string {
if myOverlay, err := overlay.GetOverlay(of.Overlay); err != nil {
if myOverlay, err := overlay.Get(of.Overlay); err != nil {
return ""
} else {
return myOverlay.File(of.Path)
@@ -90,7 +90,7 @@ func (of *OverlayFile) FullPath() string {
}
func (of *OverlayFile) Exists() bool {
if myOverlay, err := overlay.GetOverlay(of.Overlay); err != nil {
if myOverlay, err := overlay.Get(of.Overlay); err != nil {
return false
} else {
return myOverlay.Exists() && util.IsFile(of.FullPath())
@@ -213,7 +213,7 @@ func createOverlay() usecase.Interactor {
u := usecase.NewInteractor(func(ctx context.Context, input createOverlayInput, output *OverlayResponse) error {
wwlog.Debug("api.createOverlay(Name:%v)", input.Name)
newOverlay, err := overlay.GetOverlay(input.Name)
newOverlay, err := overlay.Get(input.Name)
if err != nil {
newOverlay, err = overlay.Create(input.Name)
if err != nil {
@@ -237,7 +237,7 @@ func deleteOverlay() usecase.Interactor {
u := usecase.NewInteractor(func(ctx context.Context, input deleteOverlayInput, output *OverlayResponse) error {
wwlog.Debug("api.deleteOverlay(Name:%v, Force:%v)", input.Name, input.Force)
overlay_, err := overlay.GetOverlay(input.Name)
overlay_, err := overlay.Get(input.Name)
if err != nil {
return err
}
@@ -289,7 +289,7 @@ func deleteOverlayFile() usecase.Interactor {
if relPath, err := url.QueryUnescape(input.Path); err != nil {
return fmt.Errorf("failed to decode path: %v: %w", input.Path, err)
} else {
if overlay_, err := overlay.GetOverlay(input.Name); err != nil {
if overlay_, err := overlay.Get(input.Name); err != nil {
return err
} else {
if err := overlay_.DeleteFile(relPath, input.Force, input.Cleanup); err != nil {
@@ -322,7 +322,7 @@ func addOverlayFile() usecase.Interactor {
if relPath, err := url.QueryUnescape(input.Path); err != nil {
return fmt.Errorf("failed to decode path: %v: %w", input.Path, err)
} else {
overlay_, err := overlay.GetOverlay(input.Name)
overlay_, err := overlay.Get(input.Name)
if err != nil {
if _, err := overlay.Create(input.Name); err != nil {
return err

View File

@@ -81,12 +81,12 @@ func addProfile() usecase.Interactor {
return status.Wrap(fmt.Errorf("image '%s' does not exist", input.Profile.ImageName), status.InvalidArgument)
}
for _, overlay_ := range input.Profile.SystemOverlay {
if _, err = overlay.GetOverlay(overlay_); err != nil {
if _, err = overlay.Get(overlay_); err != nil {
return status.Wrap(fmt.Errorf("overlay '%s' does not exist", overlay_), status.InvalidArgument)
}
}
for _, overlay_ := range input.Profile.RuntimeOverlay {
if _, err = overlay.GetOverlay(overlay_); err != nil {
if _, err = overlay.Get(overlay_); err != nil {
return status.Wrap(fmt.Errorf("overlay '%s' does not exist", overlay_), status.InvalidArgument)
}
}
@@ -126,12 +126,12 @@ func updateProfile() usecase.Interactor {
return status.Wrap(fmt.Errorf("image '%s' does not exist", input.Profile.ImageName), status.InvalidArgument)
}
for _, overlay_ := range input.Profile.SystemOverlay {
if _, err = overlay.GetOverlay(overlay_); err != nil {
if _, err = overlay.Get(overlay_); err != nil {
return status.Wrap(fmt.Errorf("overlay '%s' does not exist", overlay_), status.InvalidArgument)
}
}
for _, overlay_ := range input.Profile.RuntimeOverlay {
if _, err = overlay.GetOverlay(overlay_); err != nil {
if _, err = overlay.Get(overlay_); err != nil {
return status.Wrap(fmt.Errorf("overlay '%s' does not exist", overlay_), status.InvalidArgument)
}
}

View File

@@ -99,10 +99,10 @@ func GetNodeOrSetDiscoverable(hwaddr string, autobuildOverlays bool) (node.Node,
return nodeFound, fmt.Errorf("%s (failed to reload configuration) %w", hwaddr, err)
}
if autobuildOverlays {
if err := overlay.ClearOverlayImage(nodeFound.Id(), "system", []string{}); err != nil {
if err := overlay.RemoveImage(nodeFound.Id(), "system", []string{}); err != nil {
wwlog.Warn("Failed to clear system overlay image: %s: %s", nodeFound.Id(), err)
}
if err := overlay.ClearOverlayImage(nodeFound.Id(), "runtime", []string{}); err != nil {
if err := overlay.RemoveImage(nodeFound.Id(), "runtime", []string{}); err != nil {
wwlog.Warn("Failed to clear runtime overlay image: %s: %s", nodeFound.Id(), err)
}
}

View File

@@ -25,7 +25,7 @@ func OverlaySend(w http.ResponseWriter, req *http.Request) {
return
}
myOverlay, err := overlay.GetOverlay(rinfo.overlay)
myOverlay, err := overlay.Get(rinfo.overlay)
if err != nil {
message := "overlay not found: %s"
wwlog.Error(message, rinfo.overlay)

View File

@@ -45,14 +45,14 @@ func sendFile(
}
func getOverlayFile(n node.Node, context string, stage_overlays []string, autobuild bool) (stage_file string, err error) {
stage_file = overlay.OverlayImage(n.Id(), context, stage_overlays)
stage_file = overlay.Image(n.Id(), context, stage_overlays)
build := !util.IsFile(stage_file)
wwlog.Verbose("stage file: %s", stage_file)
if !build && autobuild {
build = util.PathIsNewer(stage_file, config.Get().Paths.NodesConf())
for _, overlayname := range stage_overlays {
if myOverlay, err := overlay.GetOverlay(overlayname); err == nil {
if myOverlay, err := overlay.Get(overlayname); err == nil {
build = build || util.PathIsNewer(stage_file, myOverlay.Rootfs())
}
}