1 package flag
2
3 import (
4 "time"
5
6 charts "github.com/linkerd/linkerd2/pkg/charts/linkerd2"
7 "github.com/spf13/pflag"
8 )
9
10 type (
11
12
13
14
15 Flag interface {
16 Apply(values *charts.Values) error
17 IsSet() bool
18 Name() string
19 }
20
21
22 UintFlag struct {
23 name string
24 Value uint
25 flagSet *pflag.FlagSet
26 apply func(values *charts.Values, value uint) error
27 }
28
29
30 Int64Flag struct {
31 name string
32 Value int64
33 flagSet *pflag.FlagSet
34 apply func(values *charts.Values, value int64) error
35 }
36
37
38 StringFlag struct {
39 name string
40 Value string
41 flagSet *pflag.FlagSet
42 apply func(values *charts.Values, value string) error
43 }
44
45
46 StringSliceFlag struct {
47 name string
48 Value []string
49 flagSet *pflag.FlagSet
50 apply func(values *charts.Values, value []string) error
51 }
52
53
54 BoolFlag struct {
55 name string
56 Value bool
57 flagSet *pflag.FlagSet
58 apply func(values *charts.Values, value bool) error
59 }
60
61
62 DurationFlag struct {
63 name string
64 Value time.Duration
65 flagSet *pflag.FlagSet
66 apply func(values *charts.Values, value time.Duration) error
67 }
68 )
69
70
71
72 func NewUintFlag(flagSet *pflag.FlagSet, name string, defaultValue uint, description string, apply func(values *charts.Values, value uint) error) *UintFlag {
73 flag := UintFlag{
74 name: name,
75 flagSet: flagSet,
76 apply: apply,
77 }
78 flagSet.UintVar(&flag.Value, name, defaultValue, description)
79 return &flag
80 }
81
82
83
84 func NewInt64Flag(flagSet *pflag.FlagSet, name string, defaultValue int64, description string, apply func(values *charts.Values, value int64) error) *Int64Flag {
85 flag := Int64Flag{
86 name: name,
87 flagSet: flagSet,
88 apply: apply,
89 }
90 flagSet.Int64Var(&flag.Value, name, defaultValue, description)
91 return &flag
92 }
93
94
95
96 func NewStringFlag(flagSet *pflag.FlagSet, name string, defaultValue string, description string, apply func(values *charts.Values, value string) error) *StringFlag {
97 flag := StringFlag{
98 name: name,
99 flagSet: flagSet,
100 apply: apply,
101 }
102 flagSet.StringVar(&flag.Value, name, defaultValue, description)
103 return &flag
104 }
105
106
107
108 func NewStringSliceFlag(flagSet *pflag.FlagSet, name string, defaultValue []string, description string, apply func(values *charts.Values, value []string) error) *StringSliceFlag {
109 flag := StringSliceFlag{
110 name: name,
111 flagSet: flagSet,
112 apply: apply,
113 }
114 flagSet.StringSliceVar(&flag.Value, name, defaultValue, description)
115 return &flag
116 }
117
118
119
120 func NewStringFlagP(flagSet *pflag.FlagSet, name string, short string, defaultValue string, description string, apply func(values *charts.Values, value string) error) *StringFlag {
121 flag := StringFlag{
122 name: name,
123 flagSet: flagSet,
124 apply: apply,
125 }
126 flagSet.StringVarP(&flag.Value, name, short, defaultValue, description)
127 return &flag
128 }
129
130
131
132 func NewBoolFlag(flagSet *pflag.FlagSet, name string, defaultValue bool, description string, apply func(values *charts.Values, value bool) error) *BoolFlag {
133 flag := BoolFlag{
134 name: name,
135 flagSet: flagSet,
136 apply: apply,
137 }
138 flagSet.BoolVar(&flag.Value, name, defaultValue, description)
139 return &flag
140 }
141
142
143
144 func NewDurationFlag(flagSet *pflag.FlagSet, name string, defaultValue time.Duration, description string, apply func(values *charts.Values, value time.Duration) error) *DurationFlag {
145 flag := DurationFlag{
146 name: name,
147 flagSet: flagSet,
148 apply: apply,
149 }
150 flagSet.DurationVar(&flag.Value, name, defaultValue, description)
151 return &flag
152 }
153
154
155 func (flag *UintFlag) Apply(values *charts.Values) error {
156 return flag.apply(values, flag.Value)
157 }
158
159
160 func (flag *UintFlag) IsSet() bool {
161 return flag.flagSet.Changed(flag.name)
162 }
163
164
165 func (flag *UintFlag) Name() string {
166 return flag.name
167 }
168
169
170 func (flag *Int64Flag) Apply(values *charts.Values) error {
171 return flag.apply(values, flag.Value)
172 }
173
174
175 func (flag *Int64Flag) IsSet() bool {
176 return flag.flagSet.Changed(flag.name)
177 }
178
179
180 func (flag *Int64Flag) Name() string {
181 return flag.name
182 }
183
184
185 func (flag *StringFlag) Apply(values *charts.Values) error {
186 return flag.apply(values, flag.Value)
187 }
188
189
190 func (flag *StringFlag) Set(value string) error {
191 return flag.flagSet.Set(flag.name, value)
192 }
193
194
195 func (flag *StringFlag) IsSet() bool {
196 return flag.flagSet.Changed(flag.name)
197 }
198
199
200 func (flag *StringFlag) Name() string {
201 return flag.name
202 }
203
204
205 func (flag *StringSliceFlag) Apply(values *charts.Values) error {
206 return flag.apply(values, flag.Value)
207 }
208
209
210 func (flag *StringSliceFlag) IsSet() bool {
211 return flag.flagSet.Changed(flag.name)
212 }
213
214
215 func (flag *StringSliceFlag) Name() string {
216 return flag.name
217 }
218
219
220 func (flag *BoolFlag) Apply(values *charts.Values) error {
221 return flag.apply(values, flag.Value)
222 }
223
224
225 func (flag *BoolFlag) IsSet() bool {
226 return flag.flagSet.Changed(flag.name)
227 }
228
229
230 func (flag *BoolFlag) Name() string {
231 return flag.name
232 }
233
234
235 func (flag *DurationFlag) Apply(values *charts.Values) error {
236 return flag.apply(values, flag.Value)
237 }
238
239
240 func (flag *DurationFlag) IsSet() bool {
241 return flag.flagSet.Changed(flag.name)
242 }
243
244
245 func (flag *DurationFlag) Name() string {
246 return flag.name
247 }
248
249
250
251
252 func ApplySetFlags(values *charts.Values, flags []Flag) error {
253 for _, flag := range flags {
254 if flag.IsSet() {
255 err := flag.Apply(values)
256 if err != nil {
257 return err
258 }
259 }
260 }
261 return nil
262 }
263
View as plain text