diff --git a/CHANGELOG.md b/CHANGELOG.md index 51c8311f..b6bfdc10 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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 diff --git a/internal/app/wwctl/profile/set/main.go b/internal/app/wwctl/profile/set/main.go index ab2698a8..6214f060 100644 --- a/internal/app/wwctl/profile/set/main.go +++ b/internal/app/wwctl/profile/set/main.go @@ -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, diff --git a/internal/app/wwctl/profile/set/main_test.go b/internal/app/wwctl/profile/set/main_test.go index d1fc15fa..4a697143 100644 --- a/internal/app/wwctl/profile/set/main_test.go +++ b/internal/app/wwctl/profile/set/main_test.go @@ -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: {}`, }, } diff --git a/internal/app/wwctl/profile/set/root.go b/internal/app/wwctl/profile/set/root.go index 6627ff21..d40f4a34 100644 --- a/internal/app/wwctl/profile/set/root.go +++ b/internal/app/wwctl/profile/set/root.go @@ -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 {