1 package flags
2
3 import (
4 "flag"
5 "fmt"
6 "os"
7
8 "github.com/linkerd/linkerd2/pkg/version"
9
10 "github.com/bombsimon/logrusr/v4"
11 log "github.com/sirupsen/logrus"
12 "github.com/spf13/pflag"
13 "helm.sh/helm/v3/pkg/cli/values"
14 klog "k8s.io/klog/v2"
15 )
16
17 const (
18
19
20
21 EnvOverrideNamespace = "LINKERD_NAMESPACE"
22
23
24
25
26 EnvOverrideDockerRegistry = "LINKERD_DOCKER_REGISTRY"
27 )
28
29
30
31
32 func ConfigureAndParse(cmd *flag.FlagSet, args []string) {
33 logLevel := cmd.String("log-level", log.InfoLevel.String(),
34 "log level, must be one of: panic, fatal, error, warn, info, debug, trace")
35 logFormat := cmd.String("log-format", "plain",
36 "log format, must be one of: plain, json")
37 printVersion := cmd.Bool("version", false, "print version and exit")
38
39
40
41
42 cmd.Parse(args)
43
44 log.SetFormatter(getFormatter(*logFormat))
45
46 klog.InitFlags(nil)
47 klog.SetLogger(logrusr.New(log.StandardLogger()))
48
49 setLogLevel(*logLevel)
50 maybePrintVersionAndExit(*printVersion)
51 }
52
53
54
55 func AddTraceFlags(cmd *flag.FlagSet) *string {
56 traceCollector := cmd.String("trace-collector", "", "Enables OC Tracing with the specified endpoint as collector")
57
58 return traceCollector
59 }
60
61 func setLogLevel(logLevel string) {
62 level, err := log.ParseLevel(logLevel)
63 if err != nil {
64 log.Fatalf("invalid log-level: %s", logLevel)
65 }
66 log.SetLevel(level)
67
68
69
70
71
72
73 switch level {
74 case log.PanicLevel:
75 flag.Set("v", "0")
76 case log.FatalLevel:
77 flag.Set("v", "0")
78 case log.ErrorLevel:
79 flag.Set("v", "0")
80 case log.WarnLevel:
81 flag.Set("v", "0")
82 case log.InfoLevel:
83 flag.Set("v", "2")
84 case log.DebugLevel:
85 flag.Set("v", "6")
86 case log.TraceLevel:
87 flag.Set("v", "10")
88 }
89 }
90
91 func maybePrintVersionAndExit(printVersion bool) {
92 if printVersion {
93 fmt.Println(version.Version)
94 os.Exit(0)
95 }
96 log.Infof("running version %s", version.Version)
97 }
98
99 func getFormatter(format string) log.Formatter {
100 switch format {
101 case "json":
102 return &log.JSONFormatter{}
103 default:
104 return &log.TextFormatter{FullTimestamp: true}
105 }
106 }
107
108
109 func AddValueOptionsFlags(f *pflag.FlagSet, v *values.Options) {
110 f.StringSliceVarP(&v.ValueFiles, "values", "f", []string{}, "specify values in a YAML file or a URL (can specify multiple)")
111 f.StringArrayVar(&v.Values, "set", []string{}, "set values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2)")
112 f.StringArrayVar(&v.StringValues, "set-string", []string{}, "set STRING values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2)")
113 f.StringArrayVar(&v.FileValues, "set-file", []string{}, "set values from respective files specified via the command line (can specify multiple or separate values with commas: key1=path1,key2=path2)")
114 }
115
View as plain text