Merge pull request #1844 from anderbubble/rename-image-update-nodes

Update nodes and profiles when renaming an image
This commit is contained in:
Xu YANG
2025-03-25 13:46:33 +09:00
committed by GitHub
3 changed files with 30 additions and 19 deletions

View File

@@ -19,6 +19,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Properly configure a default IPMI template during `wwctl upgrade nodes --add-defaults`.
- Fixed display of dotted field names. #1825
- Add single quote around escapechar in ipmitool template #1830
- Update nodes and profiles when renaming an image. #1637
### Changed

View File

@@ -16,6 +16,13 @@ import (
func Test_Rename(t *testing.T) {
env := testenv.New(t)
env.WriteFile(path.Join(testenv.WWChrootdir, "test-image/rootfs/file"), `test`)
env.WriteFile("etc/warewulf/nodes.conf", `
nodeprofiles:
default:
image name: test-image
nodes:
n1:
image name: test-image`)
defer env.RemoveAll()
warewulfd.SetNoDaemon()
@@ -38,6 +45,14 @@ func Test_Rename(t *testing.T) {
t.Run("Image list", func(t *testing.T) {
verifyImageListOutput(t, "test-image-rename")
})
assert.YAMLEq(t, `
nodeprofiles:
default:
image name: test-image-rename
nodes:
n1:
image name: test-image-rename`, env.ReadFile("etc/warewulf/nodes.conf"))
}
func verifyImageListOutput(t *testing.T, content string) {

View File

@@ -90,18 +90,19 @@ func ImageDelete(cdp *wwapiv1.ImageDeleteParameter) (err error) {
return fmt.Errorf("could not open nodeDB: %s", err)
}
nodes, err := nodeDB.FindAllNodes()
if err != nil {
return
}
ARG_LOOP:
for i := 0; i < len(cdp.ImageNames); i++ {
//_, arg := range args {
imageName := cdp.ImageNames[i]
for _, n := range nodes {
for _, n := range nodeDB.Nodes {
if n.ImageName == imageName {
wwlog.Error("image is configured for nodes, skipping: %s", imageName)
wwlog.Error("image %s is in use by node %s, skipping", imageName, n.Id())
continue ARG_LOOP
}
}
for _, p := range nodeDB.NodeProfiles {
if p.ImageName == imageName {
wwlog.Error("image %s is in use by profile %s, skipping", imageName, p.Id())
continue ARG_LOOP
}
}
@@ -355,23 +356,17 @@ func ImageRename(crp *wwapiv1.ImageRenameParameter) (err error) {
return err
}
nodes, err := nodeDB.FindAllNodes()
if err != nil {
return err
}
for _, node := range nodes {
for nodeId, node := range nodeDB.Nodes {
if node.ImageName == crp.ImageName {
node.ImageName = crp.TargetName
wwlog.Debug("updating node %s image to %s", nodeId, crp.TargetName)
nodeDB.Nodes[nodeId].ImageName = crp.TargetName
}
}
profiles, err := nodeDB.FindAllProfiles()
if err != nil {
return err
}
for _, profile := range profiles {
for profileId, profile := range nodeDB.NodeProfiles {
if profile.ImageName == crp.ImageName {
profile.ImageName = crp.TargetName
wwlog.Debug("updating profile %s image to %s", profileId, crp.TargetName)
nodeDB.NodeProfiles[profileId].ImageName = crp.TargetName
}
}