-
Notifications
You must be signed in to change notification settings - Fork 37
Expand file tree
/
Copy pathglobal_flags.go
More file actions
92 lines (76 loc) · 3.13 KB
/
global_flags.go
File metadata and controls
92 lines (76 loc) · 3.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package globalflags
import (
"fmt"
"github.com/stackitcloud/stackit-cli/internal/pkg/config"
"github.com/stackitcloud/stackit-cli/internal/pkg/flags"
"github.com/stackitcloud/stackit-cli/internal/pkg/print"
"github.com/spf13/cobra"
"github.com/spf13/pflag"
"github.com/spf13/viper"
)
const (
AsyncFlag = "async"
AssumeYesFlag = "assume-yes"
OutputFormatFlag = "output-format"
ProjectIdFlag = "project-id"
RegionFlag = "region"
VerbosityFlag = "verbosity"
DebugVerbosity = string(print.DebugLevel)
InfoVerbosity = string(print.InfoLevel)
WarningVerbosity = string(print.WarningLevel)
ErrorVerbosity = string(print.ErrorLevel)
VerbosityDefault = InfoVerbosity
)
var outputFormatFlagOptions = []string{print.JSONOutputFormat, print.PrettyOutputFormat, print.NoneOutputFormat, print.YAMLOutputFormat}
var verbosityFlagOptions = []string{DebugVerbosity, InfoVerbosity, WarningVerbosity, ErrorVerbosity}
type GlobalFlagModel struct {
Async bool
AssumeYes bool
OutputFormat string
ProjectId string
Region string
Verbosity string
}
func Configure(flagSet *pflag.FlagSet) error {
flagSet.VarP(flags.UUIDFlag(), ProjectIdFlag, "p", "Project ID")
err := viper.BindPFlag(config.ProjectIdKey, flagSet.Lookup(ProjectIdFlag))
if err != nil {
return fmt.Errorf("bind --%s flag to config: %w", ProjectIdFlag, err)
}
flagSet.VarP(flags.EnumFlag(true, "", outputFormatFlagOptions...), OutputFormatFlag, "o", fmt.Sprintf("Output format, one of %q", outputFormatFlagOptions))
err = viper.BindPFlag(config.OutputFormatKey, flagSet.Lookup(OutputFormatFlag))
if err != nil {
return fmt.Errorf("bind --%s flag to config: %w", OutputFormatFlag, err)
}
flagSet.Bool(AsyncFlag, false, "If set, runs the command asynchronously")
err = viper.BindPFlag(config.AsyncKey, flagSet.Lookup(AsyncFlag))
if err != nil {
return fmt.Errorf("bind --%s flag to config: %w", AsyncFlag, err)
}
flagSet.BoolP(AssumeYesFlag, "y", false, "If set, skips all confirmation prompts")
err = viper.BindPFlag(config.AssumeYesKey, flagSet.Lookup(AssumeYesFlag))
if err != nil {
return fmt.Errorf("bind --%s flag to config: %w", AssumeYesFlag, err)
}
flagSet.Var(flags.EnumFlag(true, VerbosityDefault, verbosityFlagOptions...), VerbosityFlag, fmt.Sprintf("Verbosity of the CLI, one of %q", verbosityFlagOptions))
err = viper.BindPFlag(config.VerbosityKey, flagSet.Lookup(VerbosityFlag))
if err != nil {
return fmt.Errorf("bind --%s flag to config: %w", VerbosityFlag, err)
}
flagSet.String(RegionFlag, "", "Target region for region-specific requests")
err = viper.BindPFlag(config.RegionKey, flagSet.Lookup(RegionFlag))
if err != nil {
return fmt.Errorf("bind --%s flag to config: %w", RegionFlag, err)
}
return nil
}
func Parse(_ *print.Printer, _ *cobra.Command) *GlobalFlagModel {
return &GlobalFlagModel{
Async: viper.GetBool(config.AsyncKey),
AssumeYes: viper.GetBool(config.AssumeYesKey),
OutputFormat: viper.GetString(config.OutputFormatKey),
ProjectId: viper.GetString(config.ProjectIdKey),
Region: viper.GetString(config.RegionKey),
Verbosity: viper.GetString(config.VerbosityKey),
}
}