From 51e24e2eddd343f8dd109e4b6fe0bfff3c724b76 Mon Sep 17 00:00:00 2001 From: "David J. Allen" Date: Sun, 11 Aug 2024 14:21:56 -0600 Subject: [PATCH] Changed how arguments are passed to update command --- cmd/update.go | 68 ++++++++++++++++++++++++++------------------------- 1 file changed, 35 insertions(+), 33 deletions(-) diff --git a/cmd/update.go b/cmd/update.go index 67bba16..82e3106 100644 --- a/cmd/update.go +++ b/cmd/update.go @@ -1,6 +1,9 @@ package cmd import ( + "os" + "strings" + magellan "github.com/OpenCHAMI/magellan/internal" "github.com/rs/zerolog/log" "github.com/spf13/cobra" @@ -14,76 +17,75 @@ var ( firmwareVersion string component string transferProtocol string - status bool + showStatus bool ) // The `update` command provides an interface to easily update firmware // using Redfish. It also provides a simple way to check the status of // an update in-progress. var updateCmd = &cobra.Command{ - Use: "update", + Use: "update hosts...", Short: "Update BMC node firmware", Long: "Perform an firmware update using Redfish by providing a remote firmware URL and component.\n" + "Examples:\n" + " magellan update --bmc.host 172.16.0.108 --bmc.port 443 --username bmc_username --password bmc_password --firmware-url http://172.16.0.200:8005/firmware/bios/image.RBU --component BIOS\n" + " magellan update --status --bmc.host 172.16.0.108 --bmc.port 443 --username bmc_username --password bmc_password", Run: func(cmd *cobra.Command, args []string) { - // check if required params are set - if host == "" || username == "" || password == "" { - log.Error().Msg("requires host, user, and pass to be set") + // check that we have at least one host + if len(args) <= 0 { + log.Error().Msg("update requires at least one host") + os.Exit(1) } // get status if flag is set and exit - if status { - err := magellan.GetUpdateStatus(&magellan.UpdateParams{ + for _, arg := range args { + if showStatus { + err := magellan.GetUpdateStatus(&magellan.UpdateParams{ + FirmwarePath: firmwareUrl, + FirmwareVersion: firmwareVersion, + Component: component, + TransferProtocol: transferProtocol, + CollectParams: magellan.CollectParams{ + URI: arg, + Username: username, + Password: password, + Timeout: timeout, + }, + }) + if err != nil { + log.Error().Err(err).Msgf("failed to get update status") + } + return + } + + // initiate a remote update + err := magellan.UpdateFirmwareRemote(&magellan.UpdateParams{ FirmwarePath: firmwareUrl, FirmwareVersion: firmwareVersion, Component: component, - TransferProtocol: transferProtocol, + TransferProtocol: strings.ToUpper(transferProtocol), CollectParams: magellan.CollectParams{ - Host: host, + URI: host, Username: username, Password: password, Timeout: timeout, - Port: port, }, }) if err != nil { - log.Error().Err(err).Msgf("failed to get update status") + log.Error().Err(err).Msgf("failed to update firmware") } - return - } - - // initiate a remote update - err := magellan.UpdateFirmwareRemote(&magellan.UpdateParams{ - FirmwarePath: firmwareUrl, - FirmwareVersion: firmwareVersion, - Component: component, - TransferProtocol: transferProtocol, - CollectParams: magellan.CollectParams{ - Host: host, - Username: username, - Password: password, - Timeout: timeout, - Port: port, - }, - }) - if err != nil { - log.Error().Err(err).Msgf("failed to update firmware") } }, } func init() { - updateCmd.Flags().StringVar(&host, "bmc.host", "", "set the BMC host") - updateCmd.Flags().IntVar(&port, "bmc.port", 443, "set the BMC port") updateCmd.Flags().StringVar(&username, "username", "", "set the BMC user") updateCmd.Flags().StringVar(&password, "password", "", "set the BMC password") updateCmd.Flags().StringVar(&transferProtocol, "transfer-protocol", "HTTP", "set the transfer protocol") updateCmd.Flags().StringVar(&firmwareUrl, "firmware.url", "", "set the path to the firmware") updateCmd.Flags().StringVar(&firmwareVersion, "firmware.version", "", "set the version of firmware to be installed") updateCmd.Flags().StringVar(&component, "component", "", "set the component to upgrade") - updateCmd.Flags().BoolVar(&status, "status", false, "get the status of the update") + updateCmd.Flags().BoolVar(&showStatus, "status", false, "get the status of the update") viper.BindPFlag("update.bmc.host", updateCmd.Flags().Lookup("bmc.host")) viper.BindPFlag("update.bmc.port", updateCmd.Flags().Lookup("bmc.port"))