61 lines
1.3 KiB
Go
61 lines
1.3 KiB
Go
package image
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/warewulf/warewulf/internal/pkg/node"
|
|
"github.com/warewulf/warewulf/internal/pkg/wwlog"
|
|
)
|
|
|
|
func Rename(name string, targetName string, build bool) error {
|
|
if !ValidSource(name) {
|
|
return fmt.Errorf("image source does not exist: %s", name)
|
|
}
|
|
if !ValidName(targetName) {
|
|
return fmt.Errorf("invalid image name: %s", targetName)
|
|
}
|
|
|
|
// rename the image source folder
|
|
sourceDir := SourceDir(name)
|
|
destDir := SourceDir(targetName)
|
|
err := os.Rename(sourceDir, destDir)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
err = DeleteImage(name)
|
|
if err != nil {
|
|
wwlog.Warn("Could not remove image files for %s: %s", name, err)
|
|
}
|
|
|
|
if build {
|
|
err = Build(targetName, true)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
// update the nodes profiles image name
|
|
nodeDB, err := node.New()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
for nodeId, node := range nodeDB.Nodes {
|
|
if node.ImageName == name {
|
|
wwlog.Debug("updating node %s image to %s", nodeId, targetName)
|
|
nodeDB.Nodes[nodeId].ImageName = targetName
|
|
}
|
|
}
|
|
|
|
for profileId, profile := range nodeDB.NodeProfiles {
|
|
if profile.ImageName == name {
|
|
wwlog.Debug("updating profile %s image to %s", profileId, targetName)
|
|
nodeDB.NodeProfiles[profileId].ImageName = targetName
|
|
}
|
|
}
|
|
|
|
return nodeDB.Persist()
|
|
}
|