From f4f23715cf22f06b7fb3b7663d054c20d220ce13 Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Sun, 9 Jan 2022 23:05:11 -0800 Subject: cli: support required args --- cli/annotated_config.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/cli/annotated_config.go b/cli/annotated_config.go index feb9c6e..074f8ac 100644 --- a/cli/annotated_config.go +++ b/cli/annotated_config.go @@ -31,12 +31,18 @@ func GetConfig(cmd *cobra.Command, out interface{}) error { continue } + // Pretty much only string and struct can be tested + req := tf.Tag.Get("flag-required") == "true" + switch f.Type().Kind() { case reflect.Bool: v, _ := cmd.Flags().GetBool(name) f.Set(reflect.ValueOf(v)) case reflect.String: v, _ := cmd.Flags().GetString(name) + if req && v == "" { + log.Fatalf("Flag %s is required but not provided", name) + } f.Set(reflect.ValueOf(v)) case reflect.Int: v, _ := cmd.Flags().GetInt(name) @@ -96,6 +102,9 @@ func GetConfig(cmd *cobra.Command, out interface{}) error { case reflect.Struct: if tf.Type.AssignableTo(reflect.TypeOf(VaultCredential{})) { // cli.VaultCredential v, _ := cmd.Flags().GetString(name) + if req && v == "" { + log.Fatalf("Flag %s is required but not provided", name) + } vk, err := vault.GetVaultKey(v) if err != nil { return fmt.Errorf("Error getting %s from vault: %w", name, err) -- cgit v1.2.3