Merge pull request #1891 from mslacken/DiskProfile

fix wwctl profile set for disk/fs/part
This commit is contained in:
Jonathon Anderson
2025-06-03 01:41:29 -06:00
committed by GitHub
4 changed files with 80 additions and 26 deletions

View File

@@ -14,6 +14,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
- Updated 70-persistent-net.rules.ww to use `(lower $netdev.Type)` for case-insensitive comparison of "infiniband".
- Fixed a regression in SELinux support by restoring the `/run` mount during wwinit. #1910
- Fixed `wwctl profile set` for disks, partitions and file systems. #1883
### Changed

View File

@@ -24,26 +24,26 @@ func CobraRunE(vars *variables) func(cmd *cobra.Command, args []string) (err err
vars.profileConf.NetDevs[vars.profileAdd.Net].Tags = vars.profileAdd.NetTagsAdd
}
delete(vars.profileConf.NetDevs, "UNDEF")
if vars.fsName != "" {
if !strings.HasPrefix(vars.fsName, "/dev") {
if vars.fsName == vars.partName {
vars.fsName = "/dev/disk/by-partlabel/" + vars.partName
if vars.profileAdd.FsName != "" {
if !strings.HasPrefix(vars.profileAdd.FsName, "/dev") {
if vars.profileAdd.FsName == vars.profileAdd.PartName {
vars.profileAdd.FsName = "/dev/disk/by-partlabel/" + vars.profileAdd.PartName
} else {
return fmt.Errorf("filesystems need to have a underlying blockdev")
}
}
fs := *vars.profileConf.FileSystems["UNDEF"]
vars.profileConf.FileSystems[vars.fsName] = &fs
vars.profileConf.FileSystems[vars.profileAdd.FsName] = &fs
}
delete(vars.profileConf.FileSystems, "UNDEF")
if vars.diskName != "" && vars.partName != "" {
if vars.profileAdd.DiskName != "" && vars.profileAdd.PartName != "" {
prt := *vars.profileConf.Disks["UNDEF"].Partitions["UNDEF"]
vars.profileConf.Disks["UNDEF"].Partitions[vars.partName] = &prt
vars.profileConf.Disks["UNDEF"].Partitions[vars.profileAdd.PartName] = &prt
delete(vars.profileConf.Disks["UNDEF"].Partitions, "UNDEF")
dsk := *vars.profileConf.Disks["UNDEF"]
vars.profileConf.Disks[vars.diskName] = &dsk
vars.profileConf.Disks[vars.profileAdd.DiskName] = &dsk
}
if (vars.diskName != "") != (vars.partName != "") {
if (vars.profileAdd.DiskName != "") != (vars.profileAdd.PartName != "") {
return fmt.Errorf("partition and disk must be specified")
}
delete(vars.profileConf.Disks, "UNDEF")
@@ -55,10 +55,10 @@ func CobraRunE(vars *variables) func(cmd *cobra.Command, args []string) (err err
wwlog.Debug("sending following values: %s", string(buffer))
set := wwapiv1.ConfSetParameter{
NodeConfYaml: string(buffer[:]),
NetdevDelete: vars.setNetDevDel,
PartitionDelete: vars.setPartDel,
DiskDelete: vars.setDiskDel,
FilesystemDelete: vars.setFsDel,
NetdevDelete: vars.profileDel.NetDel,
PartitionDelete: vars.profileDel.PartDel,
DiskDelete: vars.profileDel.DiskDel,
FilesystemDelete: vars.profileDel.FsDel,
TagAdd: vars.profileAdd.TagsAdd,
TagDel: vars.profileDel.TagsDel,
NetTagAdd: vars.profileAdd.NetTagsAdd,

View File

@@ -104,6 +104,66 @@ nodeprofiles:
default:
tags:
mytag: 0.0.0.0
nodes: {}`,
},
"set fs,part and disk": {
args: []string{"--fsname=var", "--fspath=/var", "--fsformat=btrfs", "--partname=var", "--partnumber=1", "--diskname=/dev/vda", "default"},
inDB: `
nodeprofiles:
default: {}
nodes: {}`,
outDb: `
nodeprofiles:
default:
disks:
/dev/vda:
partitions:
var:
number: "1"
filesystems:
/dev/disk/by-partlabel/var:
format: btrfs
path: /var
nodes: {}`,
},
"single delete not existing fs": {
args: []string{"--fsdel=foo", "default"},
wantErr: true,
inDB: `
nodeprofiles:
default: {}
nodes: {} `,
outDb: `
nodeprofiles:
default: {}
nodes: {}`,
},
"single node delete existing partition": {
args: []string{"--partdel=var", "default"},
wantErr: false,
inDB: `
nodeprofiles:
default:
disks:
/dev/vda:
partitions:
var:
number: "1"
path: /var
filesystems:
/dev/disk/by-partlabel/var:
format: btrfs
path: /var
nodes: {}
`,
outDb: `
nodeprofiles:
default:
filesystems:
/dev/disk/by-partlabel/var:
format: btrfs
path: /var
nodes: {}`,
},
}

View File

@@ -8,19 +8,12 @@ import (
)
type variables struct {
setNetDevDel string
setDiskDel string
setPartDel string
setFsDel string
setNodeAll bool
setYes bool
setForce bool
partName string
diskName string
fsName string
profileConf node.Profile
profileDel node.NodeConfDel
profileAdd node.NodeConfAdd
setNodeAll bool
setYes bool
setForce bool
profileConf node.Profile
profileDel node.NodeConfDel
profileAdd node.NodeConfAdd
}
func GetCommand() *cobra.Command {