Simpler names for overlay methods
Signed-off-by: Jonathon Anderson <janderson@ciq.com>
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user