diff --git a/cmd/crawl.go b/cmd/crawl.go index 4707999..4d086ec 100644 --- a/cmd/crawl.go +++ b/cmd/crawl.go @@ -3,17 +3,29 @@ package cmd import ( "encoding/json" "fmt" + "net/url" "github.com/OpenCHAMI/magellan/pkg/crawler" "github.com/spf13/cobra" ) var crawlCmd = &cobra.Command{ - Use: "crawl", + Use: "crawl [uri]", Short: "Crawl a single BMC for inventory information", + Args: func(cmd *cobra.Command, args []string) error { + // Validate that the only argument is a valid URI + if err := cobra.ExactArgs(1)(cmd, args); err != nil { + return err + } + _, err := url.ParseRequestURI(args[0]) + if err != nil { + return fmt.Errorf("invalid URI specified: %s", args[0]) + } + return nil + }, Run: func(cmd *cobra.Command, args []string) { systems, err := crawler.CrawlBMC(crawler.CrawlerConfig{ - URI: cmd.Flag("uri").Value.String(), + URI: args[0], Username: cmd.Flag("username").Value.String(), Password: cmd.Flag("password").Value.String(), Insecure: cmd.Flag("insecure").Value.String() == "true", @@ -34,8 +46,7 @@ var crawlCmd = &cobra.Command{ } func init() { - crawlCmd.Flags().StringP("uri", "u", "", "URI of the BMC") - crawlCmd.Flags().StringP("username", "n", "", "Username for the BMC") + crawlCmd.Flags().StringP("username", "u", "", "Username for the BMC") crawlCmd.Flags().StringP("password", "p", "", "Password for the BMC") crawlCmd.Flags().BoolP("insecure", "i", false, "Ignore SSL errors")