diff --git a/CHANGELOG.md b/CHANGELOG.md index a5ff074c..0e6acbd3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -91,6 +91,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). - Return non-zero exit code on overlay sub-commands #1423 - Simplify passing of arguments to commands through `wwctl container exec`. #253 - Don't update IPMI if password isn't set. #638 +- Fix issue that `--nettagdel` does not work properly. #1503 ## v4.5.8, 2024-10-01 diff --git a/internal/app/wwctl/node/list/main_test.go b/internal/app/wwctl/node/list/main_test.go index a821d626..f0a24793 100644 --- a/internal/app/wwctl/node/list/main_test.go +++ b/internal/app/wwctl/node/list/main_test.go @@ -4,7 +4,6 @@ import ( "bytes" "os" "strings" - "testing" warewulfconf "github.com/warewulf/warewulf/internal/pkg/config" @@ -157,7 +156,8 @@ nodes: n01: profiles: - default -`}, +`, + }, { name: "node list profile with comment", args: []string{"-a"}, @@ -176,7 +176,8 @@ nodes: n01: profiles: - default -`}, +`, + }, { name: "node list profile with comment superseded", args: []string{"-a"}, @@ -196,7 +197,8 @@ nodes: comment: nodecomment profiles: - default -`}, +`, + }, { name: "node list profile with ipmi user", args: []string{"-i"}, @@ -215,7 +217,8 @@ nodes: n01: profiles: - default -`}, +`, + }, { name: "node list profile with ipmi user superseded", args: []string{"-i"}, @@ -236,7 +239,8 @@ nodes: username: user profiles: - default -`}, +`, + }, { name: "multiple profiles list", args: []string{}, @@ -255,7 +259,8 @@ nodes: profiles: - p1 - p2 -`}, +`, + }, { name: "multiple profiles list all", args: []string{"-a"}, @@ -274,7 +279,8 @@ nodes: profiles: - p1 - p2 -`}, +`, + }, { name: "multiple overlays list long with negation", args: []string{"-l"}, @@ -294,7 +300,8 @@ nodes: n01: profiles: - p1 -`}, +`, + }, { name: "multiple overlays list long", args: []string{"-l"}, @@ -319,7 +326,8 @@ nodes: runtime overlay: - nop1 - ~rop1 -`}, +`, + }, { name: "multiple overlays list all with negation", args: []string{"-a"}, @@ -346,7 +354,8 @@ nodes: runtime overlay: - nop1 - ~rop1 -`}, +`, + }, { name: "multiple overlays list all", args: []string{"-a"}, @@ -369,7 +378,8 @@ nodes: - p1 runtime overlay: - nop1 -`}, +`, + }, { name: "network onboot", args: []string{"-a"}, @@ -385,7 +395,8 @@ nodes: network devices: default: onboot: true -`}, +`, + }, { name: "empty network device", args: []string{"-a"}, @@ -399,7 +410,8 @@ nodes: wwnode1: network devices: default: {} -`}, +`, + }, } conf_yml := `WW_INTERNAL: 0` @@ -437,7 +449,6 @@ nodes: err := baseCmd.Execute() assert.NoError(t, err) assert.Equal(t, strings.TrimSpace(tt.stdout), strings.TrimSpace(buf.String())) - }) } } @@ -496,6 +507,7 @@ nodes: "Interface": "", "EscapeChar": "", "Write": "", + "Template": "", "Tags": {} }, "Init": "", @@ -545,6 +557,7 @@ nodes: "Interface": "", "EscapeChar": "", "Write": "", + "Template": "", "Tags": {} }, "Init": "", @@ -578,6 +591,7 @@ nodes: "Interface": "", "EscapeChar": "", "Write": "", + "Template": "", "Tags": {} }, "Init": "", diff --git a/internal/app/wwctl/node/set/main.go b/internal/app/wwctl/node/set/main.go index 1d9bebe7..228152fc 100644 --- a/internal/app/wwctl/node/set/main.go +++ b/internal/app/wwctl/node/set/main.go @@ -66,6 +66,7 @@ func CobraRunE(vars *variables) func(cmd *cobra.Command, args []string) (err err NetTagDel: vars.nodeDel.NetTagsDel, IpmiTagAdd: vars.nodeAdd.IpmiTagsAdd, IpmiTagDel: vars.nodeDel.IpmiTagsDel, + Netdev: vars.nodeAdd.Net, AllConfs: vars.setNodeAll, Force: vars.setForce, ConfList: args, diff --git a/internal/app/wwctl/node/set/main_test.go b/internal/app/wwctl/node/set/main_test.go index 6d099a61..1c8fbc14 100644 --- a/internal/app/wwctl/node/set/main_test.go +++ b/internal/app/wwctl/node/set/main_test.go @@ -72,7 +72,8 @@ nodes: n01: profiles: - foo -`} +`, + } run_test(t, test) } @@ -94,7 +95,8 @@ nodes: n01: profiles: - default -`} +`, + } run_test(t, test) } @@ -114,9 +116,11 @@ nodes: n01: ipmi: write: "true" -`} +`, + } run_test(t, test) } + func Test_Set_Ipmi_Write_Implicit(t *testing.T) { test := test_description{ args: []string{"--ipmiwrite", "n01"}, @@ -133,7 +137,8 @@ nodes: n01: ipmi: write: "true" -`} +`, + } run_test(t, test) } @@ -153,9 +158,11 @@ nodes: nodeprofiles: {} nodes: n01: {} -`} +`, + } run_test(t, test) } + func Test_Unset_Ipmi_Write_False(t *testing.T) { test := test_description{ args: []string{"--ipmiwrite=UNDEF", "n01"}, @@ -172,9 +179,11 @@ nodes: nodeprofiles: {} nodes: n01: {} -`} +`, + } run_test(t, test) } + func Test_Ipmi_Hidden_False(t *testing.T) { test := test_description{ args: []string{"--ipmiwrite=false", "n01"}, @@ -201,13 +210,62 @@ nodes: - default ipmi: write: "false" -`} +`, + } + run_test(t, test) +} + +func Test_Add_NetTags(t *testing.T) { + test := test_description{ + args: []string{"--nettagadd=dns=1.1.1.1", "n01"}, + wantErr: false, + stdout: "", + inDB: `WW_INTERNAL: 43 +nodeprofiles: {} +nodes: + n01: {} +`, + outDb: `WW_INTERNAL: 43 +nodeprofiles: {} +nodes: + n01: + network devices: + default: + tags: + dns: 1.1.1.1 +`, + } + run_test(t, test) +} + +func Test_Del_NetTags(t *testing.T) { + test := test_description{ + args: []string{"--netname=default", "--nettagdel=dns1,dns2", "n01"}, + wantErr: false, + stdout: "", + inDB: `WW_INTERNAL: 43 +nodeprofiles: {} +nodes: + n01: + network devices: + default: + tags: + dns1: 1.1.1.1 + dns2: 2.2.2.2 +`, + outDb: `WW_INTERNAL: 43 +nodeprofiles: {} +nodes: + n01: {} +`, + } run_test(t, test) } func Test_Multiple_Set_Tests(t *testing.T) { tests := []test_description{ - {name: "single node change profile", + { + name: "single node change profile", args: []string{"--profile=foo", "n01"}, wantErr: false, stdout: "", @@ -227,8 +285,10 @@ nodes: n01: profiles: - foo -`}, - {name: "multiple nodes change profile", +`, + }, + { + name: "multiple nodes change profile", args: []string{"--profile=foo", "n0[1-2]"}, wantErr: false, stdout: "", @@ -254,8 +314,10 @@ nodes: n02: profiles: - foo -`}, - {name: "single node set ipmitag", +`, + }, + { + name: "single node set ipmitag", args: []string{"--ipmitagadd", "foo=baar", "n01"}, wantErr: false, stdout: "", @@ -278,8 +340,10 @@ nodes: ipmi: tags: foo: baar -`}, - {name: "single node delete tag", +`, + }, + { + name: "single node delete tag", args: []string{"--tagdel", "tag1", "n01"}, wantErr: false, stdout: "", @@ -304,8 +368,10 @@ nodes: - default tags: tag2: value2 -`}, - {name: "single node set fs,part and disk", +`, + }, + { + name: "single node set fs,part and disk", args: []string{"--fsname=var", "--fspath=/var", "--fsformat=btrfs", "--partname=var", "--partnumber=1", "--diskname=/dev/vda", "n01"}, wantErr: false, stdout: "", @@ -335,8 +401,10 @@ nodes: /dev/disk/by-partlabel/var: format: btrfs path: /var -`}, - {name: "single delete not existing fs", +`, + }, + { + name: "single delete not existing fs", args: []string{"--fsdel=foo", "n01"}, wantErr: true, stdout: "", @@ -376,8 +444,10 @@ nodes: /dev/disk/by-partlabel/var: format: btrfs path: /var -`}, - {name: "single node delete existing fs", +`, + }, + { + name: "single node delete existing fs", args: []string{"--fsdel=/dev/disk/by-partlabel/var", "n01"}, wantErr: false, stdout: "", @@ -413,8 +483,10 @@ nodes: partitions: var: number: "1" -`}, - {name: "single node delete existing partition", +`, + }, + { + name: "single node delete existing partition", args: []string{"--partdel=var", "n01"}, wantErr: false, stdout: "", @@ -449,8 +521,10 @@ nodes: /dev/disk/by-partlabel/var: format: btrfs path: /var -`}, - {name: "single node delete existing disk", +`, + }, + { + name: "single node delete existing disk", args: []string{"--diskdel=/dev/vda", "n01"}, wantErr: false, stdout: "", @@ -484,8 +558,10 @@ nodes: /dev/disk/by-partlabel/var: format: btrfs path: /var -`}, - {name: "single node set mtu", +`, + }, + { + name: "single node set mtu", args: []string{"--mtu", "1234", "--netname=mynet", "n01"}, wantErr: false, stdout: "", @@ -508,8 +584,10 @@ nodes: network devices: mynet: mtu: "1234" -`}, - {name: "single node set ipmitag", +`, + }, + { + name: "single node set ipmitag", args: []string{"--tagadd", "nodetag1=nodevalue1", "n01"}, wantErr: false, stdout: "", @@ -545,8 +623,10 @@ nodes: - p2 tags: nodetag1: nodevalue1 -`}, - {name: "single node set comma in comment", +`, + }, + { + name: "single node set comma in comment", args: []string{"n01", "--comment", "This is a , comment"}, wantErr: false, stdout: "", @@ -560,7 +640,8 @@ nodeprofiles: {} nodes: n01: comment: This is a , comment -`}, +`, + }, } conf_yml := `WW_INTERNAL: 0` @@ -610,7 +691,8 @@ nodes: - default tags: email: node -`}, +`, + }, { args: []string{"--tagadd=newtag=newval", "n01"}, wantErr: false, @@ -640,7 +722,8 @@ nodes: tags: email: node newtag: newval -`}, +`, + }, } for _, tt := range tests {