diff --git a/cmd/cloud-controller-manager/BUILD b/cmd/cloud-controller-manager/BUILD index 7ab8666cab0..2415007ca0e 100644 --- a/cmd/cloud-controller-manager/BUILD +++ b/cmd/cloud-controller-manager/BUILD @@ -21,11 +21,9 @@ go_library( importpath = "k8s.io/kubernetes/cmd/cloud-controller-manager", deps = [ "//cmd/cloud-controller-manager/app:go_default_library", - "//cmd/cloud-controller-manager/app/options:go_default_library", "//pkg/client/metrics/prometheus:go_default_library", "//pkg/cloudprovider/providers:go_default_library", "//pkg/version/prometheus:go_default_library", - "//pkg/version/verflag:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", "//vendor/k8s.io/apiserver/pkg/util/flag:go_default_library", "//vendor/k8s.io/apiserver/pkg/util/logs:go_default_library", diff --git a/cmd/cloud-controller-manager/app/BUILD b/cmd/cloud-controller-manager/app/BUILD index f378d945812..ff97e0cdd83 100644 --- a/cmd/cloud-controller-manager/app/BUILD +++ b/cmd/cloud-controller-manager/app/BUILD @@ -18,10 +18,10 @@ go_library( "//pkg/controller/route:go_default_library", "//pkg/controller/service:go_default_library", "//pkg/util/configz:go_default_library", + "//pkg/version/verflag:go_default_library", "//vendor/github.com/golang/glog:go_default_library", "//vendor/github.com/prometheus/client_golang/prometheus:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", - "//vendor/github.com/spf13/pflag:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//vendor/k8s.io/apiserver/pkg/server/healthz:go_default_library", diff --git a/cmd/cloud-controller-manager/app/controllermanager.go b/cmd/cloud-controller-manager/app/controllermanager.go index de8005224ad..f48c69d4c2b 100644 --- a/cmd/cloud-controller-manager/app/controllermanager.go +++ b/cmd/cloud-controller-manager/app/controllermanager.go @@ -17,6 +17,7 @@ limitations under the License. package app import ( + "fmt" "math/rand" "net" "net/http" @@ -27,6 +28,10 @@ import ( "strings" "time" + "github.com/golang/glog" + "github.com/prometheus/client_golang/prometheus" + "github.com/spf13/cobra" + "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/util/wait" "k8s.io/apiserver/pkg/server/healthz" @@ -46,11 +51,7 @@ import ( routecontroller "k8s.io/kubernetes/pkg/controller/route" servicecontroller "k8s.io/kubernetes/pkg/controller/service" "k8s.io/kubernetes/pkg/util/configz" - - "github.com/golang/glog" - "github.com/prometheus/client_golang/prometheus" - "github.com/spf13/cobra" - "github.com/spf13/pflag" + "k8s.io/kubernetes/pkg/version/verflag" ) const ( @@ -61,14 +62,21 @@ const ( // NewCloudControllerManagerCommand creates a *cobra.Command object with default parameters func NewCloudControllerManagerCommand() *cobra.Command { s := options.NewCloudControllerManagerServer() - s.AddFlags(pflag.CommandLine) cmd := &cobra.Command{ Use: "cloud-controller-manager", Long: `The Cloud controller manager is a daemon that embeds the cloud specific control loops shipped with Kubernetes.`, Run: func(cmd *cobra.Command, args []string) { + verflag.PrintAndExitIfRequested() + + if err := Run(s); err != nil { + fmt.Fprintf(os.Stderr, "%v\n", err) + os.Exit(1) + } + }, } + s.AddFlags(cmd.Flags()) return cmd } diff --git a/cmd/cloud-controller-manager/controller-manager.go b/cmd/cloud-controller-manager/controller-manager.go index 1d8b498fbf1..edac325fa5c 100644 --- a/cmd/cloud-controller-manager/controller-manager.go +++ b/cmd/cloud-controller-manager/controller-manager.go @@ -20,35 +20,40 @@ limitations under the License. package main import ( + goflag "flag" "fmt" + "math/rand" "os" + "time" - "k8s.io/apiserver/pkg/util/flag" + utilflag "k8s.io/apiserver/pkg/util/flag" "k8s.io/apiserver/pkg/util/logs" "k8s.io/kubernetes/cmd/cloud-controller-manager/app" - "k8s.io/kubernetes/cmd/cloud-controller-manager/app/options" _ "k8s.io/kubernetes/pkg/client/metrics/prometheus" // for client metric registration // NOTE: Importing all in-tree cloud-providers is not required when // implementing an out-of-tree cloud-provider. _ "k8s.io/kubernetes/pkg/cloudprovider/providers" _ "k8s.io/kubernetes/pkg/version/prometheus" // for version metric registration - "k8s.io/kubernetes/pkg/version/verflag" "github.com/spf13/pflag" ) func main() { - s := options.NewCloudControllerManagerServer() - s.AddFlags(pflag.CommandLine) + rand.Seed(time.Now().UTC().UnixNano()) - flag.InitFlags() + command := app.NewCloudControllerManagerCommand() + + // TODO: once we switch everything over to Cobra commands, we can go back to calling + // utilflag.InitFlags() (by removing its pflag.Parse() call). For now, we have to set the + // normalize func and add the go flag set by hand. + pflag.CommandLine.SetNormalizeFunc(utilflag.WordSepNormalizeFunc) + pflag.CommandLine.AddGoFlagSet(goflag.CommandLine) + // utilflag.InitFlags() logs.InitLogs() defer logs.FlushLogs() - verflag.PrintAndExitIfRequested() - - if err := app.Run(s); err != nil { - fmt.Fprintf(os.Stderr, "%v\n", err) + if err := command.Execute(); err != nil { + fmt.Fprintf(os.Stderr, "error: %v\n", err) os.Exit(1) } } diff --git a/cmd/hyperkube/BUILD b/cmd/hyperkube/BUILD index 09ce16626f5..f4974ef0d78 100644 --- a/cmd/hyperkube/BUILD +++ b/cmd/hyperkube/BUILD @@ -32,7 +32,6 @@ go_library( srcs = [ "cloud-controller-manager.go", "hyperkube.go", - "kube-aggregator.go", "kube-apiserver.go", "kube-controller-manager.go", "kube-proxy.go", @@ -66,7 +65,6 @@ go_library( "//vendor/k8s.io/apiserver/pkg/server/healthz:go_default_library", "//vendor/k8s.io/apiserver/pkg/util/flag:go_default_library", "//vendor/k8s.io/apiserver/pkg/util/logs:go_default_library", - "//vendor/k8s.io/kube-aggregator/pkg/cmd/server:go_default_library", ], ) diff --git a/cmd/hyperkube/kube-aggregator.go b/cmd/hyperkube/kube-aggregator.go deleted file mode 100644 index 6f1b022d394..00000000000 --- a/cmd/hyperkube/kube-aggregator.go +++ /dev/null @@ -1,52 +0,0 @@ -/* -Copyright 2017 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package main - -import ( - "os" - - "k8s.io/kube-aggregator/pkg/cmd/server" -) - -// NewKubeAggregator creates a new hyperkube Server object that includes the -// description and flags. -func NewKubeAggregator() *Server { - o := server.NewDefaultOptions(os.Stdout, os.Stderr) - - hks := Server{ - name: "aggregator", - AlternativeName: "kube-aggregator", - SimpleUsage: "aggregator", - Long: "Aggregator for Kubernetes-style API servers: dynamic registration, discovery summarization, secure proxy.", - Run: func(_ *Server, args []string, stopCh <-chan struct{}) error { - if err := o.Complete(); err != nil { - return err - } - if err := o.Validate(args); err != nil { - return err - } - if err := o.RunAggregator(stopCh); err != nil { - return err - } - return nil - }, - RespectsStopCh: true, - } - - o.AddFlags(hks.Flags()) - return &hks -} diff --git a/cmd/hyperkube/main.go b/cmd/hyperkube/main.go index 123f040a87b..0bdd55f9a45 100644 --- a/cmd/hyperkube/main.go +++ b/cmd/hyperkube/main.go @@ -44,7 +44,6 @@ func main() { hk.AddServer(kubelet) } hk.AddServer(NewKubeProxy()) - hk.AddServer(NewKubeAggregator()) // Alpha servers hk.AddAlphaServer(NewCloudControllerManager()) diff --git a/cmd/kube-apiserver/BUILD b/cmd/kube-apiserver/BUILD index 29a454f06e0..ced176fabee 100644 --- a/cmd/kube-apiserver/BUILD +++ b/cmd/kube-apiserver/BUILD @@ -21,12 +21,9 @@ go_library( importpath = "k8s.io/kubernetes/cmd/kube-apiserver", deps = [ "//cmd/kube-apiserver/app:go_default_library", - "//cmd/kube-apiserver/app/options:go_default_library", "//pkg/client/metrics/prometheus:go_default_library", "//pkg/version/prometheus:go_default_library", - "//pkg/version/verflag:go_default_library", "//vendor/github.com/spf13/pflag:go_default_library", - "//vendor/k8s.io/apiserver/pkg/server:go_default_library", "//vendor/k8s.io/apiserver/pkg/util/flag:go_default_library", "//vendor/k8s.io/apiserver/pkg/util/logs:go_default_library", ], diff --git a/cmd/kube-apiserver/apiserver.go b/cmd/kube-apiserver/apiserver.go index 5ed248f155f..9d3ce436db8 100644 --- a/cmd/kube-apiserver/apiserver.go +++ b/cmd/kube-apiserver/apiserver.go @@ -19,6 +19,7 @@ limitations under the License. package main import ( + goflag "flag" "fmt" "math/rand" "os" @@ -26,31 +27,29 @@ import ( "github.com/spf13/pflag" - "k8s.io/apiserver/pkg/server" - "k8s.io/apiserver/pkg/util/flag" + utilflag "k8s.io/apiserver/pkg/util/flag" "k8s.io/apiserver/pkg/util/logs" "k8s.io/kubernetes/cmd/kube-apiserver/app" - "k8s.io/kubernetes/cmd/kube-apiserver/app/options" _ "k8s.io/kubernetes/pkg/client/metrics/prometheus" // for client metric registration _ "k8s.io/kubernetes/pkg/version/prometheus" // for version metric registration - "k8s.io/kubernetes/pkg/version/verflag" ) func main() { rand.Seed(time.Now().UTC().UnixNano()) - s := options.NewServerRunOptions() - s.AddFlags(pflag.CommandLine) + command := app.NewAPIServerCommand() - flag.InitFlags() + // TODO: once we switch everything over to Cobra commands, we can go back to calling + // utilflag.InitFlags() (by removing its pflag.Parse() call). For now, we have to set the + // normalize func and add the go flag set by hand. + pflag.CommandLine.SetNormalizeFunc(utilflag.WordSepNormalizeFunc) + pflag.CommandLine.AddGoFlagSet(goflag.CommandLine) + // utilflag.InitFlags() logs.InitLogs() defer logs.FlushLogs() - verflag.PrintAndExitIfRequested() - - stopCh := server.SetupSignalHandler() - if err := app.Run(s, stopCh); err != nil { - fmt.Fprintf(os.Stderr, "%v\n", err) + if err := command.Execute(); err != nil { + fmt.Fprintf(os.Stderr, "error: %v\n", err) os.Exit(1) } } diff --git a/cmd/kube-apiserver/app/BUILD b/cmd/kube-apiserver/app/BUILD index 6f2497a161a..e0402ec4d3f 100644 --- a/cmd/kube-apiserver/app/BUILD +++ b/cmd/kube-apiserver/app/BUILD @@ -46,11 +46,11 @@ go_library( "//pkg/util/reflector/prometheus:go_default_library", "//pkg/util/workqueue/prometheus:go_default_library", "//pkg/version:go_default_library", + "//pkg/version/verflag:go_default_library", "//plugin/pkg/auth/authenticator/token/bootstrap:go_default_library", "//vendor/github.com/go-openapi/spec:go_default_library", "//vendor/github.com/golang/glog:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", - "//vendor/github.com/spf13/pflag:go_default_library", "//vendor/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1:go_default_library", "//vendor/k8s.io/apiextensions-apiserver/pkg/apiserver:go_default_library", "//vendor/k8s.io/apiextensions-apiserver/pkg/client/informers/internalversion:go_default_library", diff --git a/cmd/kube-apiserver/app/server.go b/cmd/kube-apiserver/app/server.go index 51f4bfd2162..f93be39feb5 100644 --- a/cmd/kube-apiserver/app/server.go +++ b/cmd/kube-apiserver/app/server.go @@ -35,7 +35,6 @@ import ( "github.com/go-openapi/spec" "github.com/golang/glog" "github.com/spf13/cobra" - "github.com/spf13/pflag" "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" @@ -56,6 +55,7 @@ import ( openapi "k8s.io/kube-openapi/pkg/common" webhookinit "k8s.io/apiserver/pkg/admission/plugin/webhook/initializer" + "k8s.io/apiserver/pkg/server" "k8s.io/apiserver/pkg/storage/etcd3/preflight" clientgoinformers "k8s.io/client-go/informers" clientgoclientset "k8s.io/client-go/kubernetes" @@ -93,6 +93,7 @@ import ( _ "k8s.io/kubernetes/pkg/util/reflector/prometheus" // for reflector metric registration _ "k8s.io/kubernetes/pkg/util/workqueue/prometheus" // for workqueue metric registration + "k8s.io/kubernetes/pkg/version/verflag" ) const etcdRetryLimit = 60 @@ -101,7 +102,6 @@ const etcdRetryInterval = 1 * time.Second // NewAPIServerCommand creates a *cobra.Command object with default parameters func NewAPIServerCommand() *cobra.Command { s := options.NewServerRunOptions() - s.AddFlags(pflag.CommandLine) cmd := &cobra.Command{ Use: "kube-apiserver", Long: `The Kubernetes API server validates and configures data @@ -109,8 +109,16 @@ for the api objects which include pods, services, replicationcontrollers, and others. The API Server services REST operations and provides the frontend to the cluster's shared state through which all other components interact.`, Run: func(cmd *cobra.Command, args []string) { + verflag.PrintAndExitIfRequested() + + stopCh := server.SetupSignalHandler() + if err := Run(s, stopCh); err != nil { + fmt.Fprintf(os.Stderr, "%v\n", err) + os.Exit(1) + } }, } + s.AddFlags(cmd.Flags()) return cmd } diff --git a/cmd/kube-controller-manager/controller-manager.go b/cmd/kube-controller-manager/controller-manager.go index 495a5734f45..6618dae3327 100644 --- a/cmd/kube-controller-manager/controller-manager.go +++ b/cmd/kube-controller-manager/controller-manager.go @@ -22,7 +22,9 @@ package main import ( "fmt" + "math/rand" "os" + "time" "k8s.io/apiserver/pkg/util/flag" "k8s.io/apiserver/pkg/util/logs" @@ -38,6 +40,8 @@ import ( ) func main() { + rand.Seed(time.Now().UTC().UnixNano()) + s := options.NewCMServer() s.AddFlags(pflag.CommandLine, app.KnownControllers(), app.ControllersDisabledByDefault.List()) diff --git a/cmd/kube-proxy/proxy.go b/cmd/kube-proxy/proxy.go index a9c958d6b2d..092491e3376 100644 --- a/cmd/kube-proxy/proxy.go +++ b/cmd/kube-proxy/proxy.go @@ -19,7 +19,9 @@ package main import ( goflag "flag" "fmt" + "math/rand" "os" + "time" "github.com/spf13/pflag" @@ -31,6 +33,8 @@ import ( ) func main() { + rand.Seed(time.Now().UTC().UnixNano()) + command := app.NewProxyCommand() // TODO: once we switch everything over to Cobra commands, we can go back to calling diff --git a/cmd/kube-scheduler/BUILD b/cmd/kube-scheduler/BUILD index 88e75f4e819..58142589ea5 100644 --- a/cmd/kube-scheduler/BUILD +++ b/cmd/kube-scheduler/BUILD @@ -23,6 +23,7 @@ go_library( "//cmd/kube-scheduler/app:go_default_library", "//pkg/client/metrics/prometheus:go_default_library", "//pkg/version/prometheus:go_default_library", + "//vendor/github.com/spf13/pflag:go_default_library", "//vendor/k8s.io/apiserver/pkg/util/flag:go_default_library", "//vendor/k8s.io/apiserver/pkg/util/logs:go_default_library", ], diff --git a/cmd/kube-scheduler/app/server.go b/cmd/kube-scheduler/app/server.go index a80a376f9f3..0f0e1bf25e1 100644 --- a/cmd/kube-scheduler/app/server.go +++ b/cmd/kube-scheduler/app/server.go @@ -341,8 +341,7 @@ through the API as necessary.`, glog.Fatalf("unable to apply config defaults: %v", err) } - opts.AddFlags(pflag.CommandLine) - + opts.AddFlags(cmd.Flags()) cmd.MarkFlagFilename("config", "yaml", "yml", "json") return cmd diff --git a/cmd/kube-scheduler/scheduler.go b/cmd/kube-scheduler/scheduler.go index 1f6fcf7d608..a925ced3734 100644 --- a/cmd/kube-scheduler/scheduler.go +++ b/cmd/kube-scheduler/scheduler.go @@ -17,8 +17,12 @@ limitations under the License. package main import ( + goflag "flag" + "math/rand" "os" + "time" + "github.com/spf13/pflag" utilflag "k8s.io/apiserver/pkg/util/flag" "k8s.io/apiserver/pkg/util/logs" "k8s.io/kubernetes/cmd/kube-scheduler/app" @@ -27,9 +31,16 @@ import ( ) func main() { + rand.Seed(time.Now().UTC().UnixNano()) + command := app.NewSchedulerCommand() - utilflag.InitFlags() + // TODO: once we switch everything over to Cobra commands, we can go back to calling + // utilflag.InitFlags() (by removing its pflag.Parse() call). For now, we have to set the + // normalize func and add the go flag set by hand. + pflag.CommandLine.SetNormalizeFunc(utilflag.WordSepNormalizeFunc) + pflag.CommandLine.AddGoFlagSet(goflag.CommandLine) + // utilflag.InitFlags() logs.InitLogs() defer logs.FlushLogs() diff --git a/cmd/kubectl/BUILD b/cmd/kubectl/BUILD index 74501eed97b..f611640950a 100644 --- a/cmd/kubectl/BUILD +++ b/cmd/kubectl/BUILD @@ -19,7 +19,12 @@ go_library( srcs = ["kubectl.go"], importpath = "k8s.io/kubernetes/cmd/kubectl", visibility = ["//visibility:private"], - deps = ["//cmd/kubectl/app:go_default_library"], + deps = [ + "//pkg/kubectl/cmd:go_default_library", + "//vendor/github.com/spf13/pflag:go_default_library", + "//vendor/k8s.io/apiserver/pkg/util/flag:go_default_library", + "//vendor/k8s.io/apiserver/pkg/util/logs:go_default_library", + ], ) filegroup( diff --git a/cmd/kubectl/kubectl.go b/cmd/kubectl/kubectl.go index 5864a5ae68a..4802021b543 100644 --- a/cmd/kubectl/kubectl.go +++ b/cmd/kubectl/kubectl.go @@ -17,16 +17,33 @@ limitations under the License. package main import ( - "fmt" + goflag "flag" + "math/rand" "os" + "time" - "k8s.io/kubernetes/cmd/kubectl/app" + "github.com/spf13/pflag" + + utilflag "k8s.io/apiserver/pkg/util/flag" + "k8s.io/apiserver/pkg/util/logs" + "k8s.io/kubernetes/pkg/kubectl/cmd" ) func main() { - if err := app.Run(); err != nil { - fmt.Fprintf(os.Stderr, "error: %v\n", err) + rand.Seed(time.Now().UTC().UnixNano()) + + command := cmd.NewDefaultKubectlCommand() + + // TODO: once we switch everything over to Cobra commands, we can go back to calling + // utilflag.InitFlags() (by removing its pflag.Parse() call). For now, we have to set the + // normalize func and add the go flag set by hand. + pflag.CommandLine.SetNormalizeFunc(utilflag.WordSepNormalizeFunc) + pflag.CommandLine.AddGoFlagSet(goflag.CommandLine) + // utilflag.InitFlags() + logs.InitLogs() + defer logs.FlushLogs() + + if err := command.Execute(); err != nil { os.Exit(1) } - os.Exit(0) } diff --git a/cmd/kubelet/kubelet.go b/cmd/kubelet/kubelet.go index 76b86233dc6..382976863f5 100644 --- a/cmd/kubelet/kubelet.go +++ b/cmd/kubelet/kubelet.go @@ -22,7 +22,9 @@ package main import ( "fmt" + "math/rand" "os" + "time" "github.com/golang/glog" "github.com/spf13/pflag" @@ -53,6 +55,8 @@ func die(err error) { } func main() { + rand.Seed(time.Now().UTC().UnixNano()) + fs := pflag.NewFlagSet(os.Args[0], pflag.ExitOnError) // set the normalize func, similar to k8s.io/apiserver/pkg/util/flag/flags.go:InitFlags fs.SetNormalizeFunc(flag.WordSepNormalizeFunc) diff --git a/pkg/kubectl/cmd/cmd.go b/pkg/kubectl/cmd/cmd.go index 04429a76b4e..8ab38ac0b7c 100644 --- a/pkg/kubectl/cmd/cmd.go +++ b/pkg/kubectl/cmd/cmd.go @@ -19,6 +19,7 @@ package cmd import ( "fmt" "io" + "os" "k8s.io/apiserver/pkg/util/flag" "k8s.io/client-go/tools/clientcmd" @@ -212,6 +213,10 @@ var ( } ) +func NewDefaultKubectlCommand() *cobra.Command { + return NewKubectlCommand(cmdutil.NewFactory(nil), os.Stdin, os.Stdout, os.Stderr) +} + // NewKubectlCommand creates the `kubectl` command and its nested children. func NewKubectlCommand(f cmdutil.Factory, in io.Reader, out, err io.Writer) *cobra.Command { // Parent command to which all subcommands are added.