introduce site overlays

site overlays are place in sysconfdir/overlays and take
precedence over distribution overlays with the same name.

Every `wwctl overlay` command changing overlays will create
an site overlay. distribution overlays can't be deleted or
modified with wwctl.

Signed-off-by: Christian Goll <cgoll@suse.com>
This commit is contained in:
Christian Goll
2024-11-21 14:52:46 +01:00
parent e8f7c01283
commit d5fc7e9320
12 changed files with 106 additions and 64 deletions

View File

@@ -30,16 +30,20 @@ const initialTemplate = `# This is a Warewulf Template file.
# Keep the following for better reference:
# ---
# This file is autogenerated by warewulf
# Host: {{.BuildHost}}
# Time: {{.BuildTime}}
# Source: {{.BuildSource}}
`
func CobraRunE(cmd *cobra.Command, args []string) error {
func CobraRunE(cmd *cobra.Command, args []string) (err error) {
overlayName := args[0]
fileName := args[1]
overlaySourceDir := overlay.OverlaySourceDir(overlayName)
createdSite := false
overlaySourceDir, isSite := overlay.OverlaySourceDir(overlayName)
if !isSite {
err = overlay.CreateSiteOverlay(overlayName)
if err != nil {
return err
}
createdSite = true
}
if !util.IsDir(overlaySourceDir) {
return fmt.Errorf("overlay does not exist: %s", overlayName)
}
@@ -102,12 +106,15 @@ func CobraRunE(cmd *cobra.Command, args []string) error {
} else {
if startTime == fileInfo.ModTime() {
wwlog.Debug("No change detected. Not updating overlay.")
os.Exit(0)
if createdSite {
os.Remove(overlaySourceDir)
}
return nil
}
}
// try renaming the tempfile to overlayfile first
err := os.Rename(tempFile.Name(), overlayFile)
err = os.Rename(tempFile.Name(), overlayFile)
if err != nil {
// if it fails, which probably means that they exists on different partitions
// fallback to data copy