Skip to content

Commit 17deecc

Browse files
committed
Move flag parsing to commands
1 parent 402d2a0 commit 17deecc

File tree

8 files changed

+218
-189
lines changed

8 files changed

+218
-189
lines changed

.goreleaser.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ builds:
1515
asmflags:
1616
- all=-trimpath={{.Env.GOPATH}}
1717
ldflags:
18-
- -s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}} -X main.telemetryReportPeriod=15s
18+
- -s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}} -X main.telemetryReportPeriod=24h
1919
main: ./cmd/gateway/
2020
binary: gateway
2121

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ NGINX_CONF_DIR = internal/mode/static/nginx/conf
88
NJS_DIR = internal/mode/static/nginx/modules/src
99
NGINX_DOCKER_BUILD_PLUS_ARGS = --secret id=nginx-repo.crt,src=nginx-repo.crt --secret id=nginx-repo.key,src=nginx-repo.key
1010
BUILD_AGENT=local
11-
TELEMETRY_REPORT_PERIOD = 15s # also configured in goreleaser.yml
11+
TELEMETRY_REPORT_PERIOD = 24h # also configured in goreleaser.yml
1212
GW_API_VERSION = 1.0.0
1313
INSTALL_WEBHOOK = false
1414

cmd/gateway/commands.go

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"time"
88

99
"github.com/spf13/cobra"
10+
"github.com/spf13/pflag"
1011
"go.uber.org/zap"
1112
"k8s.io/apimachinery/pkg/types"
1213
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
@@ -178,6 +179,8 @@ func createStaticModeCommand() *cobra.Command {
178179
}
179180
}
180181

182+
flagKeys, flagValues := parseFlagKeysAndValues(cmd.Flags())
183+
181184
conf := config.Config{
182185
GatewayCtlrName: gatewayCtlrName.value,
183186
ConfigName: configName.String(),
@@ -215,7 +218,10 @@ func createStaticModeCommand() *cobra.Command {
215218
Version: version,
216219
ExperimentalFeatures: gwExperimentalFeatures,
217220
ImageSource: imageSource,
218-
Flags: cmd.Flags(),
221+
FlagKeyValues: config.FlagKeyValues{
222+
FlagKeys: flagKeys,
223+
FlagValues: flagValues,
224+
},
219225
}
220226

221227
if err := static.StartManager(conf); err != nil {
@@ -451,3 +457,29 @@ func createSleepCommand() *cobra.Command {
451457

452458
return cmd
453459
}
460+
461+
func parseFlagKeysAndValues(flags *pflag.FlagSet) (flagKeys, flagValues []string) {
462+
flagKeys = []string{}
463+
flagValues = []string{}
464+
465+
flags.VisitAll(
466+
func(flag *pflag.Flag) {
467+
flagKeys = append(flagKeys, flag.Name)
468+
switch flag.Value.Type() {
469+
case "bool":
470+
flagValues = append(flagValues, flag.Value.String())
471+
default:
472+
var val string
473+
if flag.Value.String() == flag.DefValue {
474+
val = "default"
475+
} else {
476+
val = "user-defined"
477+
}
478+
479+
flagValues = append(flagValues, val)
480+
}
481+
},
482+
)
483+
484+
return flagKeys, flagValues
485+
}

cmd/gateway/commands_test.go

Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import (
66

77
. "github.com/onsi/gomega"
88
"github.com/spf13/cobra"
9+
"github.com/spf13/pflag"
10+
"k8s.io/apimachinery/pkg/types"
911
)
1012

1113
type flagTestCase struct {
@@ -454,3 +456,134 @@ func TestSleepCmdFlagValidation(t *testing.T) {
454456
})
455457
}
456458
}
459+
460+
func TestParseFlagKeysAndValues(t *testing.T) {
461+
g := NewWithT(t)
462+
463+
flagSet := pflag.NewFlagSet("flagSet", 0)
464+
// set SortFlags to false for testing purposes so when parseFlagKeysAndValues loops over the flagSet it
465+
// goes off of primordial order.
466+
flagSet.SortFlags = false
467+
468+
var boolFlagTrue bool
469+
flagSet.BoolVar(
470+
&boolFlagTrue,
471+
"boolFlagTrue",
472+
true,
473+
"boolean true test flag",
474+
)
475+
476+
var boolFlagFalse bool
477+
flagSet.BoolVar(
478+
&boolFlagFalse,
479+
"boolFlagFalse",
480+
false,
481+
"boolean false test flag",
482+
)
483+
484+
intFlagDefault := intValidatingValue{
485+
validator: validatePort,
486+
value: 8080,
487+
}
488+
flagSet.Var(
489+
&intFlagDefault,
490+
"intFlagDefault",
491+
"default int test flag",
492+
)
493+
494+
intFlagUserDefined := intValidatingValue{
495+
validator: validatePort,
496+
value: 8080,
497+
}
498+
flagSet.Var(
499+
&intFlagUserDefined,
500+
"intFlagUserDefined",
501+
"user defined int test flag",
502+
)
503+
err := flagSet.Set("intFlagUserDefined", "8081")
504+
g.Expect(err).To(Not(HaveOccurred()))
505+
506+
stringFlagDefault := stringValidatingValue{
507+
validator: validateResourceName,
508+
value: "default-string-test-flag",
509+
}
510+
flagSet.Var(
511+
&stringFlagDefault,
512+
"stringFlagDefault",
513+
"default string test flag",
514+
)
515+
516+
stringFlagUserDefined := stringValidatingValue{
517+
validator: validateResourceName,
518+
value: "user-defined-string-test-flag",
519+
}
520+
flagSet.Var(
521+
&stringFlagUserDefined,
522+
"stringFlagUserDefined",
523+
"user defined string test flag",
524+
)
525+
err = flagSet.Set("stringFlagUserDefined", "changed-test-flag-value")
526+
g.Expect(err).To(Not(HaveOccurred()))
527+
528+
namespacedNameFlagDefault := namespacedNameValue{
529+
value: types.NamespacedName{
530+
Namespace: "test",
531+
Name: "test-flag",
532+
},
533+
}
534+
flagSet.Var(
535+
&namespacedNameFlagDefault,
536+
"namespacedNameFlagDefault",
537+
"default namespacedName test flag",
538+
)
539+
540+
namespacedNameFlagUserDefined := namespacedNameValue{
541+
value: types.NamespacedName{
542+
Namespace: "test",
543+
Name: "test-flag",
544+
},
545+
}
546+
flagSet.Var(
547+
&namespacedNameFlagUserDefined,
548+
"namespacedNameFlagUserDefined",
549+
"user defined namespacedName test flag",
550+
)
551+
userDefinedNamespacedName := types.NamespacedName{
552+
Namespace: "changed-namespace",
553+
Name: "changed-name",
554+
}
555+
err = flagSet.Set("namespacedNameFlagUserDefined", userDefinedNamespacedName.String())
556+
g.Expect(err).To(Not(HaveOccurred()))
557+
558+
expectedKeys := []string{
559+
"boolFlagTrue",
560+
"boolFlagFalse",
561+
562+
"intFlagDefault",
563+
"intFlagUserDefined",
564+
565+
"stringFlagDefault",
566+
"stringFlagUserDefined",
567+
568+
"namespacedNameFlagDefault",
569+
"namespacedNameFlagUserDefined",
570+
}
571+
expectedValues := []string{
572+
"true",
573+
"false",
574+
575+
"default",
576+
"user-defined",
577+
578+
"default",
579+
"user-defined",
580+
581+
"default",
582+
"user-defined",
583+
}
584+
585+
flagKeys, flagValues := parseFlagKeysAndValues(flagSet)
586+
587+
g.Expect(flagKeys).Should(Equal(expectedKeys))
588+
g.Expect(flagValues).Should(Equal(expectedValues))
589+
}

internal/mode/static/config/config.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"time"
55

66
"github.com/go-logr/logr"
7-
"github.com/spf13/pflag"
87
"go.uber.org/zap"
98
"k8s.io/apimachinery/pkg/types"
109
)
@@ -16,8 +15,8 @@ type Config struct {
1615
ImageSource string
1716
// AtomicLevel is an atomically changeable, dynamic logging level.
1817
AtomicLevel zap.AtomicLevel
19-
// Flags are all the NGF flags.
20-
Flags *pflag.FlagSet
18+
// FlagKeyValues holds the parsed NGF flag keys and values.
19+
FlagKeyValues FlagKeyValues
2120
// GatewayNsName is the namespaced name of a Gateway resource that the Gateway will use.
2221
// The Gateway will ignore all other Gateway resources.
2322
GatewayNsName *types.NamespacedName
@@ -108,3 +107,13 @@ type UsageReportConfig struct {
108107
// InsecureSkipVerify controls whether the client verifies the server cert.
109108
InsecureSkipVerify bool
110109
}
110+
111+
// FlagKeyValues holds the parsed NGF flag keys and values.
112+
// Flag Key and Value are paired based off of index in slice.
113+
type FlagKeyValues struct {
114+
// FlagKeys holds the name of the flag.
115+
FlagKeys []string
116+
// FlagValues holds the value of the flag in string form.
117+
// Value will be either true or false for boolean flags and default or user-defined for non-boolean flags.
118+
FlagValues []string
119+
}

internal/mode/static/manager.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -252,8 +252,8 @@ func StartManager(cfg config.Config) error {
252252
Namespace: cfg.GatewayPodConfig.Namespace,
253253
Name: cfg.GatewayPodConfig.Name,
254254
},
255-
ImageSource: cfg.ImageSource,
256-
Flags: cfg.Flags,
255+
ImageSource: cfg.ImageSource,
256+
FlagKeyValues: cfg.FlagKeyValues,
257257
})
258258
if err = mgr.Add(createTelemetryJob(cfg, dataCollector, nginxChecker.getReadyCh())); err != nil {
259259
return fmt.Errorf("cannot register telemetry job: %w", err)

0 commit comments

Comments
 (0)