Skip to content

Commit de98f82

Browse files
committed
DRY up the validation of common flags
1 parent 39d8025 commit de98f82

File tree

6 files changed

+50
-27
lines changed

6 files changed

+50
-27
lines changed

vertical-pod-autoscaler/pkg/admission-controller/config/config.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,16 @@ import (
2020
"flag"
2121
"os"
2222

23+
<<<<<<< HEAD
2324
"k8s.io/apimachinery/pkg/api/resource"
25+
=======
26+
"github.com/spf13/pflag"
27+
kube_flag "k8s.io/component-base/cli/flag"
28+
"k8s.io/klog/v2"
29+
30+
>>>>>>> cee795bd3 (DRY up the validation of common flags)
2431
"k8s.io/autoscaler/vertical-pod-autoscaler/common"
32+
"k8s.io/autoscaler/vertical-pod-autoscaler/pkg/features"
2533
)
2634

2735
// CertsConfig holds configuration related to TLS certificates
@@ -109,6 +117,16 @@ func InitAdmissionControllerFlags() *AdmissionControllerConfig {
109117

110118
flag.Var(&config.MaxAllowedCPUBoost, "max-allowed-cpu-boost", "Maximum amount of CPU that will be applied for a container with boost.")
111119

120+
// These need to happen last. kube_flag.InitFlags() synchronizes and parses
121+
// flags from the flag package to pflag, so feature gates must be added to
122+
// pflag before InitFlags() is called.
123+
klog.InitFlags(nil)
124+
common.InitLoggingFlags()
125+
features.MutableFeatureGate.AddFlag(pflag.CommandLine)
126+
kube_flag.InitFlags()
127+
128+
ValidateAdmissionControllerConfig(config)
129+
112130
return config
113131
}
114132

vertical-pod-autoscaler/pkg/admission-controller/main.go

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,9 @@ import (
2323
"strings"
2424
"time"
2525

26-
"github.com/spf13/pflag"
2726
"k8s.io/client-go/informers"
2827
kube_client "k8s.io/client-go/kubernetes"
2928
typedadmregv1 "k8s.io/client-go/kubernetes/typed/admissionregistration/v1"
30-
kube_flag "k8s.io/component-base/cli/flag"
3129
"k8s.io/klog/v2"
3230

3331
"k8s.io/autoscaler/vertical-pod-autoscaler/common"
@@ -38,7 +36,6 @@ import (
3836
"k8s.io/autoscaler/vertical-pod-autoscaler/pkg/admission-controller/resource/pod/recommendation"
3937
"k8s.io/autoscaler/vertical-pod-autoscaler/pkg/admission-controller/resource/vpa"
4038
vpa_clientset "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/clientset/versioned"
41-
"k8s.io/autoscaler/vertical-pod-autoscaler/pkg/features"
4239
"k8s.io/autoscaler/vertical-pod-autoscaler/pkg/target"
4340
controllerfetcher "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/target/controller_fetcher"
4441
"k8s.io/autoscaler/vertical-pod-autoscaler/pkg/utils/limitrange"
@@ -60,12 +57,7 @@ const (
6057

6158
func main() {
6259
config := admissioncontroller_config.InitAdmissionControllerFlags()
63-
klog.InitFlags(nil)
64-
common.InitLoggingFlags()
65-
features.MutableFeatureGate.AddFlag(pflag.CommandLine)
66-
kube_flag.InitFlags()
6760

68-
admissioncontroller_config.ValidateAdmissionControllerConfig(config)
6961
klog.V(1).InfoS("Starting Vertical Pod Autoscaler Admission Controller", "version", common.VerticalPodAutoscalerVersion())
7062

7163
healthCheck := metrics.NewHealthCheck(time.Minute)

vertical-pod-autoscaler/pkg/recommender/config/config.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,13 @@ import (
2222
"strings"
2323
"time"
2424

25+
"github.com/spf13/pflag"
2526
"k8s.io/apimachinery/pkg/api/resource"
27+
kube_flag "k8s.io/component-base/cli/flag"
2628
"k8s.io/klog/v2"
2729

2830
"k8s.io/autoscaler/vertical-pod-autoscaler/common"
31+
"k8s.io/autoscaler/vertical-pod-autoscaler/pkg/features"
2932
"k8s.io/autoscaler/vertical-pod-autoscaler/pkg/recommender/input"
3033
"k8s.io/autoscaler/vertical-pod-autoscaler/pkg/recommender/model"
3134
)
@@ -241,6 +244,16 @@ func InitRecommenderFlags() *RecommenderConfig {
241244
flag.Var(&config.MaxAllowedCPU, "container-recommendation-max-allowed-cpu", "Maximum amount of CPU that will be recommended for a container. VerticalPodAutoscaler-level maximum allowed takes precedence over the global maximum allowed.")
242245
flag.Var(&config.MaxAllowedMemory, "container-recommendation-max-allowed-memory", "Maximum amount of memory that will be recommended for a container. VerticalPodAutoscaler-level maximum allowed takes precedence over the global maximum allowed.")
243246

247+
// These need to happen last. kube_flag.InitFlags() synchronizes and parses
248+
// flags from the flag package to pflag, so feature gates must be added to
249+
// pflag before InitFlags() is called.
250+
klog.InitFlags(nil)
251+
common.InitLoggingFlags()
252+
features.MutableFeatureGate.AddFlag(pflag.CommandLine)
253+
kube_flag.InitFlags()
254+
255+
ValidateRecommenderConfig(config)
256+
244257
return config
245258
}
246259

vertical-pod-autoscaler/pkg/recommender/main.go

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,13 @@ import (
3131
kube_client "k8s.io/client-go/kubernetes"
3232
"k8s.io/client-go/tools/leaderelection"
3333
"k8s.io/client-go/tools/leaderelection/resourcelock"
34-
kube_flag "k8s.io/component-base/cli/flag"
3534
componentbaseconfig "k8s.io/component-base/config"
3635
componentbaseoptions "k8s.io/component-base/config/options"
3736
"k8s.io/klog/v2"
3837
resourceclient "k8s.io/metrics/pkg/client/clientset/versioned/typed/metrics/v1beta1"
3938

4039
"k8s.io/autoscaler/vertical-pod-autoscaler/common"
4140
vpa_clientset "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/clientset/versioned"
42-
"k8s.io/autoscaler/vertical-pod-autoscaler/pkg/features"
4341
"k8s.io/autoscaler/vertical-pod-autoscaler/pkg/recommender/checkpoint"
4442
recommender_config "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/recommender/config"
4543
"k8s.io/autoscaler/vertical-pod-autoscaler/pkg/recommender/input"
@@ -71,17 +69,12 @@ const (
7169
var config *recommender_config.RecommenderConfig
7270

7371
func main() {
74-
config = recommender_config.InitRecommenderFlags()
75-
klog.InitFlags(nil)
76-
common.InitLoggingFlags()
77-
features.MutableFeatureGate.AddFlag(pflag.CommandLine)
78-
72+
// Leader election needs to be initialized before any other flag, because it may be used in other flag's validation.
7973
leaderElection := defaultLeaderElectionConfiguration()
8074
componentbaseoptions.BindLeaderElectionFlags(&leaderElection, pflag.CommandLine)
8175

82-
kube_flag.InitFlags()
76+
config = recommender_config.InitRecommenderFlags()
8377

84-
recommender_config.ValidateRecommenderConfig(config)
8578
klog.V(1).InfoS("Vertical Pod Autoscaler Recommender", "version", common.VerticalPodAutoscalerVersion(), "recommenderName", config.RecommenderName)
8679

8780
ctx := context.Background()

vertical-pod-autoscaler/pkg/updater/config/config.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,12 @@ import (
2121
"os"
2222
"time"
2323

24+
"github.com/spf13/pflag"
25+
kube_flag "k8s.io/component-base/cli/flag"
26+
"k8s.io/klog/v2"
27+
2428
"k8s.io/autoscaler/vertical-pod-autoscaler/common"
29+
"k8s.io/autoscaler/vertical-pod-autoscaler/pkg/features"
2530
)
2631

2732
// UpdaterConfig holds all configuration for the admission controller component
@@ -82,6 +87,16 @@ func InitUpdaterFlags() *UpdaterConfig {
8287
flag.DurationVar(&config.PodLifetimeUpdateThreshold, "in-recommendation-bounds-eviction-lifetime-threshold", config.PodLifetimeUpdateThreshold, "Pods that live for at least that long can be evicted even if their request is within the [MinRecommended...MaxRecommended] range")
8388
flag.DurationVar(&config.EvictAfterOOMThreshold, "evict-after-oom-threshold", config.EvictAfterOOMThreshold, `The default duration to evict pods that have OOMed in less than evict-after-oom-threshold since start.`)
8489

90+
// These need to happen last. kube_flag.InitFlags() synchronizes and parses
91+
// flags from the flag package to pflag, so feature gates must be added to
92+
// pflag before InitFlags() is called.
93+
klog.InitFlags(nil)
94+
common.InitLoggingFlags()
95+
features.MutableFeatureGate.AddFlag(pflag.CommandLine)
96+
kube_flag.InitFlags()
97+
98+
ValidateUpdaterConfig(config)
99+
85100
return config
86101
}
87102

vertical-pod-autoscaler/pkg/updater/main.go

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import (
3030
kube_client "k8s.io/client-go/kubernetes"
3131
"k8s.io/client-go/tools/leaderelection"
3232
"k8s.io/client-go/tools/leaderelection/resourcelock"
33-
kube_flag "k8s.io/component-base/cli/flag"
3433
componentbaseconfig "k8s.io/component-base/config"
3534
componentbaseoptions "k8s.io/component-base/config/options"
3635
"k8s.io/klog/v2"
@@ -39,7 +38,6 @@ import (
3938
"k8s.io/autoscaler/vertical-pod-autoscaler/pkg/admission-controller/resource/pod/patch"
4039
"k8s.io/autoscaler/vertical-pod-autoscaler/pkg/admission-controller/resource/pod/recommendation"
4140
vpa_clientset "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/client/clientset/versioned"
42-
"k8s.io/autoscaler/vertical-pod-autoscaler/pkg/features"
4341
"k8s.io/autoscaler/vertical-pod-autoscaler/pkg/target"
4442
controllerfetcher "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/target/controller_fetcher"
4543
updater_config "k8s.io/autoscaler/vertical-pod-autoscaler/pkg/updater/config"
@@ -64,18 +62,12 @@ const (
6462
var config *updater_config.UpdaterConfig
6563

6664
func main() {
67-
config = updater_config.InitUpdaterFlags()
68-
klog.InitFlags(nil)
69-
common.InitLoggingFlags()
70-
65+
// Leader election needs to be initialized before any other flag, because it may be used in other flag's validation.
7166
leaderElection := defaultLeaderElectionConfiguration()
7267
componentbaseoptions.BindLeaderElectionFlags(&leaderElection, pflag.CommandLine)
7368

74-
features.MutableFeatureGate.AddFlag(pflag.CommandLine)
75-
76-
kube_flag.InitFlags()
69+
config = updater_config.InitUpdaterFlags()
7770

78-
updater_config.ValidateUpdaterConfig(config)
7971
klog.V(1).InfoS("Vertical Pod Autoscaler Updater", "version", common.VerticalPodAutoscalerVersion())
8072

8173
healthCheck := metrics.NewHealthCheck(config.UpdaterInterval * 5)

0 commit comments

Comments
 (0)