60 lines
1.8 KiB
Go
60 lines
1.8 KiB
Go
package overlay
|
|
|
|
import (
|
|
"os"
|
|
"path"
|
|
"strings"
|
|
|
|
warewulfconf "github.com/hpcng/warewulf/internal/pkg/config"
|
|
"github.com/hpcng/warewulf/internal/pkg/wwlog"
|
|
)
|
|
|
|
func OverlaySourceTopDir() string {
|
|
conf := warewulfconf.Get()
|
|
return conf.Paths.WWOverlaydir
|
|
}
|
|
|
|
/*
|
|
Return the path for the base of the overlay, strips rootfs
|
|
prefix in the overlay dir if this it exists
|
|
*/
|
|
func OverlaySourceDir(overlayName string) string {
|
|
/* Assume using old style overlay dir without rootfs */
|
|
var overlaypath = path.Join(OverlaySourceTopDir(), overlayName)
|
|
if _, err := os.Stat(path.Join(overlaypath, "rootfs")); err == nil {
|
|
/* rootfs exists, use it. */
|
|
overlaypath = path.Join(overlaypath, "rootfs")
|
|
}
|
|
return overlaypath
|
|
}
|
|
|
|
// OverlayImage 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
|
|
// context name, in the form __{CONTEXT}__.
|
|
//
|
|
// If the context is empty ("") the image file name is a concatenated
|
|
// list of the contained overlays joined by "-".
|
|
//
|
|
// If the context is empty and no overlays are specified, the empty
|
|
// string is returned.
|
|
func OverlayImage(nodeName string, context string, overlayNames []string) string {
|
|
var name string
|
|
if context != "" {
|
|
if len(overlayNames) > 0 {
|
|
wwlog.Debug("context(%v) and overlays(%v) specified: prioritizing context(%v)",
|
|
context, overlayNames, context)
|
|
}
|
|
name = "__" + strings.ToUpper(context) + "__.img"
|
|
} else if len(overlayNames) > 0 {
|
|
name = strings.Join(overlayNames, "-") + ".img"
|
|
} else {
|
|
wwlog.Warn("unable to generate overlay image path: no context or overlays specified")
|
|
return ""
|
|
}
|
|
|
|
conf := warewulfconf.Get()
|
|
return path.Join(conf.Paths.WWProvisiondir, "overlays/", nodeName, name)
|
|
}
|