added wwctl clean to remove cache/dead overlays

Signed-off-by: Christian Goll <cgoll@suse.com>
This commit is contained in:
Christian Goll
2024-10-21 11:44:46 +02:00
committed by Jonathon Anderson
parent 511938ac5c
commit ff84974506
7 changed files with 142 additions and 0 deletions

View File

@@ -0,0 +1,47 @@
package clean
import (
"os"
"path"
_ "golang.org/x/exp/slices"
warewulfconf "github.com/warewulf/warewulf/internal/pkg/config"
"github.com/warewulf/warewulf/internal/pkg/node"
"github.com/warewulf/warewulf/internal/pkg/util"
"github.com/warewulf/warewulf/internal/pkg/wwlog"
)
/*
Cleans up the OCI cache and remains of deleted nodes
*/
func Clean() (err error) {
warewulfconf := warewulfconf.Get()
wwlog.Verbose("removing oci cache dir: %s", path.Join(warewulfconf.Paths.Cachedir+"/warewulf"))
err = os.RemoveAll(path.Join(warewulfconf.Paths.Cachedir + "/warewulf"))
if err != nil {
return err
}
nodeDB, err := node.New()
if err != nil {
return err
}
nodes := nodeDB.ListAllNodes()
dirList, err := os.ReadDir(path.Join(warewulfconf.Paths.WWProvisiondir, "overlays/"))
if err != nil {
return err
}
for _, item := range dirList {
if !item.IsDir() {
continue
}
if !util.InSlice(nodes, item.Name()) {
wwlog.Verbose("removing overlays of delete node: %s", item.Name())
err = os.RemoveAll(path.Join(warewulfconf.Paths.WWProvisiondir, "overlays/", item.Name()))
if err != nil {
return err
}
}
}
return
}