From d146f3db5f5812a2387342dd37d502bf27cf025e Mon Sep 17 00:00:00 2001 From: Diogo Mendes Matsubara Date: Wed, 26 Jul 2023 12:14:29 +0200 Subject: [PATCH 1/6] Use fw uuids passed via CLI in fw-set removal --- cmd/edit/firmware_set.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/edit/firmware_set.go b/cmd/edit/firmware_set.go index 67c8869c..d8851417 100644 --- a/cmd/edit/firmware_set.go +++ b/cmd/edit/firmware_set.go @@ -54,7 +54,7 @@ var editFirmwareSet = &cobra.Command{ } } - if len(payload.ComponentFirmwareUUIDs) > 0 { + if len(editFWSetFlags.FirmwareUUIDs) > 0 { for _, id := range strings.Split(editFWSetFlags.FirmwareUUIDs, ",") { _, err = uuid.Parse(id) if err != nil { From 6a53a22afc9fd945636da730dcfb4467df17052c Mon Sep 17 00:00:00 2001 From: Diogo Mendes Matsubara Date: Wed, 26 Jul 2023 13:05:23 +0200 Subject: [PATCH 2/6] Add flag to add fw to fw-set Separate the flags for add/remove individual fw in a fw-set and update the call sites to use the appropriate flag --- cmd/create/firmware_set.go | 4 ++-- cmd/edit/firmware_set.go | 31 ++++++++++++++++++++++++++----- cmd/types.go | 6 ++++-- 3 files changed, 32 insertions(+), 9 deletions(-) diff --git a/cmd/create/firmware_set.go b/cmd/create/firmware_set.go index 7772f77b..ecde7e8d 100644 --- a/cmd/create/firmware_set.go +++ b/cmd/create/firmware_set.go @@ -44,7 +44,7 @@ var createFirmwareSet = &cobra.Command{ payload.Attributes = []ss.Attributes{*attrs} } - for _, id := range strings.Split(definedfirmwareSetFlags.FirmwareUUIDs, ",") { + for _, id := range strings.Split(definedfirmwareSetFlags.AddFirmwareUUIDs, ",") { _, err = uuid.Parse(id) if err != nil { log.Println(err.Error()) @@ -70,7 +70,7 @@ var createFirmwareSet = &cobra.Command{ func init() { definedfirmwareSetFlags = &mctl.FirmwareSetFlags{} - createFirmwareSet.PersistentFlags().StringVar(&definedfirmwareSetFlags.FirmwareUUIDs, "firmware-uuids", "", "comma separated list of UUIDs of firmware to be included in the set to be created") + createFirmwareSet.PersistentFlags().StringVar(&definedfirmwareSetFlags.AddFirmwareUUIDs, "firmware-uuids", "", "comma separated list of UUIDs of firmware to be included in the set to be created") createFirmwareSet.PersistentFlags().StringVar(&definedfirmwareSetFlags.FirmwareSetName, "name", "", "A name for the firmware set") createFirmwareSet.PersistentFlags().StringToStringVar(&definedfirmwareSetFlags.Labels, "labels", nil, "Labels to assign to the firmware set - 'vendor=foo,model=bar'") diff --git a/cmd/edit/firmware_set.go b/cmd/edit/firmware_set.go index d8851417..a7782b9d 100644 --- a/cmd/edit/firmware_set.go +++ b/cmd/edit/firmware_set.go @@ -40,6 +40,8 @@ var editFirmwareSet = &cobra.Command{ } var attrs *ss.Attributes + var payloadUpdated bool + if len(editFWSetFlags.Labels) > 0 { attrs, err = mctl.AttributeFromLabels(model.AttributeNSFirmwareSetLabels, editFWSetFlags.Labels) if err != nil { @@ -47,15 +49,34 @@ var editFirmwareSet = &cobra.Command{ } payload.Attributes = []ss.Attributes{*attrs} + payloadUpdated = true + + } + if len(editFWSetFlags.AddFirmwareUUIDs) > 0 { + for _, id := range strings.Split(editFWSetFlags.AddFirmwareUUIDs, ",") { + _, err = uuid.Parse(id) + if err != nil { + log.Println(err.Error()) + os.Exit(1) + } + + payload.ComponentFirmwareUUIDs = append(payload.ComponentFirmwareUUIDs, id) + payloadUpdated = true + } + } + + + if payloadUpdated { _, err = client.UpdateComponentFirmwareSetRequest(cmd.Context(), id, payload) if err != nil { log.Fatal(err) } + fmt.Println("firmware set updated: " + id.String()) } - if len(editFWSetFlags.FirmwareUUIDs) > 0 { - for _, id := range strings.Split(editFWSetFlags.FirmwareUUIDs, ",") { + if len(editFWSetFlags.RemoveFirmwareUUIDs) > 0 { + for _, id := range strings.Split(editFWSetFlags.RemoveFirmwareUUIDs, ",") { _, err = uuid.Parse(id) if err != nil { log.Println(err.Error()) @@ -69,9 +90,8 @@ var editFirmwareSet = &cobra.Command{ if err != nil { log.Fatal(err) } + fmt.Println("firmware set uuids removed: " + id.String()) } - - fmt.Println("firmware set updated: " + id.String()) }, } @@ -85,6 +105,7 @@ func init() { log.Fatal(err) } - cmdFlags.StringVar(&editFWSetFlags.FirmwareUUIDs, "remove-firmware-uuids", "", "UUIDs of firmware to be removed from the set") + cmdFlags.StringVar(&editFWSetFlags.RemoveFirmwareUUIDs, "remove-firmware-uuids", "", "UUIDs of firmware to be removed from the set") + cmdFlags.StringVar(&editFWSetFlags.AddFirmwareUUIDs, "add-firmware-uuids", "", "UUIDs of firmware to be added to the set") } diff --git a/cmd/types.go b/cmd/types.go index cf91cddb..7b10625e 100644 --- a/cmd/types.go +++ b/cmd/types.go @@ -6,8 +6,10 @@ type FirmwareSetFlags struct { Labels map[string]string // id is the firmware set id ID string - // comma separated list of firmware UUIDs - FirmwareUUIDs string + // comma separated list of firmware UUIDs to be added to the set + AddFirmwareUUIDs string + // comma separated list of firmware UUIDs to be removed from the set + RemoveFirmwareUUIDs string // name for the firmware set to be created/edited FirmwareSetName string } From d47c79ddeb97610c63c7bc8c565d27a09ed2c079 Mon Sep 17 00:00:00 2001 From: Diogo Mendes Matsubara Date: Wed, 26 Jul 2023 13:06:32 +0200 Subject: [PATCH 3/6] Fix no-op for fw-set name update --- cmd/edit/firmware_set.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cmd/edit/firmware_set.go b/cmd/edit/firmware_set.go index a7782b9d..1fb72f15 100644 --- a/cmd/edit/firmware_set.go +++ b/cmd/edit/firmware_set.go @@ -66,6 +66,10 @@ var editFirmwareSet = &cobra.Command{ } } + if len(editFWSetFlags.FirmwareSetName) > 0 { + payload.Name = editFWSetFlags.FirmwareSetName + payloadUpdated = true + } if payloadUpdated { _, err = client.UpdateComponentFirmwareSetRequest(cmd.Context(), id, payload) From aa7c44c3752f01e240310a6039b4547bc5c799d5 Mon Sep 17 00:00:00 2001 From: Diogo Mendes Matsubara Date: Mon, 31 Jul 2023 12:26:28 +0200 Subject: [PATCH 4/6] Use log.Fatal() instead of log.Println() --- cmd/edit/firmware_set.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/edit/firmware_set.go b/cmd/edit/firmware_set.go index 1fb72f15..d743ab16 100644 --- a/cmd/edit/firmware_set.go +++ b/cmd/edit/firmware_set.go @@ -57,7 +57,7 @@ var editFirmwareSet = &cobra.Command{ for _, id := range strings.Split(editFWSetFlags.AddFirmwareUUIDs, ",") { _, err = uuid.Parse(id) if err != nil { - log.Println(err.Error()) + log.Fatal(err) os.Exit(1) } @@ -83,7 +83,7 @@ var editFirmwareSet = &cobra.Command{ for _, id := range strings.Split(editFWSetFlags.RemoveFirmwareUUIDs, ",") { _, err = uuid.Parse(id) if err != nil { - log.Println(err.Error()) + log.Fatal(err) os.Exit(1) } From 4e3ec2e92d03187f8d351b99af644992bc386514 Mon Sep 17 00:00:00 2001 From: Diogo Mendes Matsubara Date: Mon, 31 Jul 2023 12:34:23 +0200 Subject: [PATCH 5/6] Use StringSliceVar for list of firmware commands This way we use the CLI processor to parse the given comma separated list of fw UUIDs into a []string --- cmd/create/firmware_set.go | 5 ++--- cmd/edit/firmware_set.go | 9 ++++----- cmd/types.go | 8 ++++---- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/cmd/create/firmware_set.go b/cmd/create/firmware_set.go index ecde7e8d..e1482df3 100644 --- a/cmd/create/firmware_set.go +++ b/cmd/create/firmware_set.go @@ -4,7 +4,6 @@ import ( "fmt" "log" "os" - "strings" "github.com/google/uuid" mctl "github.com/metal-toolbox/mctl/cmd" @@ -44,7 +43,7 @@ var createFirmwareSet = &cobra.Command{ payload.Attributes = []ss.Attributes{*attrs} } - for _, id := range strings.Split(definedfirmwareSetFlags.AddFirmwareUUIDs, ",") { + for _, id := range definedfirmwareSetFlags.AddFirmwareUUIDs { _, err = uuid.Parse(id) if err != nil { log.Println(err.Error()) @@ -70,7 +69,7 @@ var createFirmwareSet = &cobra.Command{ func init() { definedfirmwareSetFlags = &mctl.FirmwareSetFlags{} - createFirmwareSet.PersistentFlags().StringVar(&definedfirmwareSetFlags.AddFirmwareUUIDs, "firmware-uuids", "", "comma separated list of UUIDs of firmware to be included in the set to be created") + createFirmwareSet.PersistentFlags().StringSliceVar(&definedfirmwareSetFlags.AddFirmwareUUIDs, "firmware-uuids", []string{}, "comma separated list of UUIDs of firmware to be included in the set to be created") createFirmwareSet.PersistentFlags().StringVar(&definedfirmwareSetFlags.FirmwareSetName, "name", "", "A name for the firmware set") createFirmwareSet.PersistentFlags().StringToStringVar(&definedfirmwareSetFlags.Labels, "labels", nil, "Labels to assign to the firmware set - 'vendor=foo,model=bar'") diff --git a/cmd/edit/firmware_set.go b/cmd/edit/firmware_set.go index d743ab16..6837efcf 100644 --- a/cmd/edit/firmware_set.go +++ b/cmd/edit/firmware_set.go @@ -4,7 +4,6 @@ import ( "fmt" "log" "os" - "strings" "github.com/google/uuid" mctl "github.com/metal-toolbox/mctl/cmd" @@ -54,7 +53,7 @@ var editFirmwareSet = &cobra.Command{ } if len(editFWSetFlags.AddFirmwareUUIDs) > 0 { - for _, id := range strings.Split(editFWSetFlags.AddFirmwareUUIDs, ",") { + for _, id := range editFWSetFlags.AddFirmwareUUIDs { _, err = uuid.Parse(id) if err != nil { log.Fatal(err) @@ -80,7 +79,7 @@ var editFirmwareSet = &cobra.Command{ } if len(editFWSetFlags.RemoveFirmwareUUIDs) > 0 { - for _, id := range strings.Split(editFWSetFlags.RemoveFirmwareUUIDs, ",") { + for _, id := range editFWSetFlags.RemoveFirmwareUUIDs { _, err = uuid.Parse(id) if err != nil { log.Fatal(err) @@ -109,7 +108,7 @@ func init() { log.Fatal(err) } - cmdFlags.StringVar(&editFWSetFlags.RemoveFirmwareUUIDs, "remove-firmware-uuids", "", "UUIDs of firmware to be removed from the set") - cmdFlags.StringVar(&editFWSetFlags.AddFirmwareUUIDs, "add-firmware-uuids", "", "UUIDs of firmware to be added to the set") + cmdFlags.StringSliceVar(&editFWSetFlags.RemoveFirmwareUUIDs, "remove-firmware-uuids", []string{}, "UUIDs of firmware to be removed from the set") + cmdFlags.StringSliceVar(&editFWSetFlags.AddFirmwareUUIDs, "add-firmware-uuids", []string{}, "UUIDs of firmware to be added to the set") } diff --git a/cmd/types.go b/cmd/types.go index 7b10625e..18d6705f 100644 --- a/cmd/types.go +++ b/cmd/types.go @@ -6,10 +6,10 @@ type FirmwareSetFlags struct { Labels map[string]string // id is the firmware set id ID string - // comma separated list of firmware UUIDs to be added to the set - AddFirmwareUUIDs string - // comma separated list of firmware UUIDs to be removed from the set - RemoveFirmwareUUIDs string + // list of firmware UUIDs to be added to the set + AddFirmwareUUIDs []string + // list of firmware UUIDs to be removed from the set + RemoveFirmwareUUIDs []string // name for the firmware set to be created/edited FirmwareSetName string } From 866a47ed63f0eb03f1fec1d2f09e6c79cb3f4048 Mon Sep 17 00:00:00 2001 From: Diogo Mendes Matsubara Date: Mon, 31 Jul 2023 14:04:20 +0200 Subject: [PATCH 6/6] log.Fatal() doesn't require os.Exit() afterwards --- cmd/create/firmware_set.go | 4 +--- cmd/edit/firmware_set.go | 3 --- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/cmd/create/firmware_set.go b/cmd/create/firmware_set.go index e1482df3..b6e291a0 100644 --- a/cmd/create/firmware_set.go +++ b/cmd/create/firmware_set.go @@ -3,7 +3,6 @@ package create import ( "fmt" "log" - "os" "github.com/google/uuid" mctl "github.com/metal-toolbox/mctl/cmd" @@ -46,8 +45,7 @@ var createFirmwareSet = &cobra.Command{ for _, id := range definedfirmwareSetFlags.AddFirmwareUUIDs { _, err = uuid.Parse(id) if err != nil { - log.Println(err.Error()) - os.Exit(1) + log.Fatal(err) } payload.ComponentFirmwareUUIDs = append(payload.ComponentFirmwareUUIDs, id) diff --git a/cmd/edit/firmware_set.go b/cmd/edit/firmware_set.go index 6837efcf..3ff1b175 100644 --- a/cmd/edit/firmware_set.go +++ b/cmd/edit/firmware_set.go @@ -3,7 +3,6 @@ package edit import ( "fmt" "log" - "os" "github.com/google/uuid" mctl "github.com/metal-toolbox/mctl/cmd" @@ -57,7 +56,6 @@ var editFirmwareSet = &cobra.Command{ _, err = uuid.Parse(id) if err != nil { log.Fatal(err) - os.Exit(1) } payload.ComponentFirmwareUUIDs = append(payload.ComponentFirmwareUUIDs, id) @@ -83,7 +81,6 @@ var editFirmwareSet = &cobra.Command{ _, err = uuid.Parse(id) if err != nil { log.Fatal(err) - os.Exit(1) } payload.ComponentFirmwareUUIDs = append(payload.ComponentFirmwareUUIDs, id)