@@ -30,9 +30,11 @@ import (
3030 "syscall"
3131 "time"
3232
33+ apivalidation "k8s.io/apimachinery/pkg/util/validation"
3334 cloudprovider "k8s.io/cloud-provider"
3435 "k8s.io/cloud-provider-vsphere/pkg/cloudprovider/vsphere"
3536 "k8s.io/cloud-provider-vsphere/pkg/cloudprovider/vsphere/loadbalancer"
37+ voptions "k8s.io/cloud-provider-vsphere/pkg/cloudprovider/vsphere/options"
3638 "k8s.io/cloud-provider-vsphere/pkg/cloudprovider/vsphereparavirtual"
3739 pvconfig "k8s.io/cloud-provider-vsphere/pkg/cloudprovider/vsphereparavirtual/config"
3840 "k8s.io/cloud-provider/app"
@@ -98,6 +100,8 @@ func main() {
98100 globalflag .Register (namedFlagSets .FlagSet ("generic" ), "is-legacy-paravirtual" )
99101 }
100102
103+ voptions .AddFlags (namedFlagSets .FlagSet ("cloud-node-controller" ))
104+
101105 for _ , f := range namedFlagSets .FlagSets {
102106 fs .AddFlagSet (f )
103107 }
@@ -158,6 +162,14 @@ func main() {
158162 verflag .PrintAndExitIfRequested ()
159163 cliflag .PrintFlags (cmd .Flags ())
160164
165+ // Validate --node-labels keys follow Kubernetes label key formatting
166+ for key := range vsphere .AdditionalLabels {
167+ errList := apivalidation .IsQualifiedName (key )
168+ if len (errList ) > 0 {
169+ klog .Fatalf ("invalid --node-labels key %q: %s" , key , strings .Join (errList , "; " ))
170+ }
171+ }
172+
161173 c , err := ccmOptions .Config (app .ControllerNames (app .DefaultInitFuncConstructors ), app .ControllersDisabledByDefault .List (), names .CCMControllerAliases (), app .AllWebhooks , app .DisabledByDefaultWebhooks )
162174 if err != nil {
163175 // explicitly ignore the error by Fprintf, exiting anyway
0 commit comments