diff --git a/cmd/cloud-controller-manager/app/BUILD b/cmd/cloud-controller-manager/app/BUILD index 64cae62d6f1..9f2eca3efa9 100644 --- a/cmd/cloud-controller-manager/app/BUILD +++ b/cmd/cloud-controller-manager/app/BUILD @@ -19,6 +19,7 @@ go_library( "//pkg/controller/route:go_default_library", "//pkg/controller/service:go_default_library", "//pkg/util/configz:go_default_library", + "//pkg/util/flag:go_default_library", "//pkg/version/verflag:go_default_library", "//vendor/github.com/golang/glog:go_default_library", "//vendor/github.com/spf13/cobra:go_default_library", diff --git a/cmd/cloud-controller-manager/app/controllermanager.go b/cmd/cloud-controller-manager/app/controllermanager.go index 879035c175f..5f7c4575cb1 100644 --- a/cmd/cloud-controller-manager/app/controllermanager.go +++ b/cmd/cloud-controller-manager/app/controllermanager.go @@ -44,6 +44,7 @@ import ( routecontroller "k8s.io/kubernetes/pkg/controller/route" servicecontroller "k8s.io/kubernetes/pkg/controller/service" "k8s.io/kubernetes/pkg/util/configz" + utilflag "k8s.io/kubernetes/pkg/util/flag" "k8s.io/kubernetes/pkg/version/verflag" ) @@ -61,6 +62,7 @@ func NewCloudControllerManagerCommand() *cobra.Command { the cloud specific control loops shipped with Kubernetes.`, Run: func(cmd *cobra.Command, args []string) { verflag.PrintAndExitIfRequested() + utilflag.PrintFlags(cmd.Flags()) c, err := s.Config() if err != nil { diff --git a/cmd/kube-apiserver/app/BUILD b/cmd/kube-apiserver/app/BUILD index 2e48b70b633..ba7fa92a038 100644 --- a/cmd/kube-apiserver/app/BUILD +++ b/cmd/kube-apiserver/app/BUILD @@ -43,6 +43,7 @@ go_library( "//pkg/quota/install:go_default_library", "//pkg/registry/cachesize:go_default_library", "//pkg/registry/rbac/rest:go_default_library", + "//pkg/util/flag:go_default_library", "//pkg/util/reflector/prometheus:go_default_library", "//pkg/util/workqueue/prometheus:go_default_library", "//pkg/version:go_default_library", diff --git a/cmd/kube-apiserver/app/server.go b/cmd/kube-apiserver/app/server.go index 206e512e7a4..be44798d9b7 100644 --- a/cmd/kube-apiserver/app/server.go +++ b/cmd/kube-apiserver/app/server.go @@ -91,6 +91,7 @@ import ( "k8s.io/kubernetes/pkg/version" "k8s.io/kubernetes/plugin/pkg/auth/authenticator/token/bootstrap" + utilflag "k8s.io/kubernetes/pkg/util/flag" _ "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" @@ -110,6 +111,7 @@ 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() + utilflag.PrintFlags(cmd.Flags()) stopCh := server.SetupSignalHandler() if err := Run(s, stopCh); err != nil { diff --git a/cmd/kube-controller-manager/app/BUILD b/cmd/kube-controller-manager/app/BUILD index 7df78fa24c6..709331de8ee 100644 --- a/cmd/kube-controller-manager/app/BUILD +++ b/cmd/kube-controller-manager/app/BUILD @@ -85,6 +85,7 @@ go_library( "//pkg/quota/install:go_default_library", "//pkg/serviceaccount:go_default_library", "//pkg/util/configz:go_default_library", + "//pkg/util/flag:go_default_library", "//pkg/util/metrics:go_default_library", "//pkg/version:go_default_library", "//pkg/version/verflag:go_default_library", diff --git a/cmd/kube-controller-manager/app/controllermanager.go b/cmd/kube-controller-manager/app/controllermanager.go index 5bc5260f0c4..00dbe3d1b00 100644 --- a/cmd/kube-controller-manager/app/controllermanager.go +++ b/cmd/kube-controller-manager/app/controllermanager.go @@ -51,6 +51,7 @@ import ( serviceaccountcontroller "k8s.io/kubernetes/pkg/controller/serviceaccount" "k8s.io/kubernetes/pkg/serviceaccount" "k8s.io/kubernetes/pkg/util/configz" + utilflag "k8s.io/kubernetes/pkg/util/flag" "k8s.io/kubernetes/pkg/version" "k8s.io/kubernetes/pkg/version/verflag" ) @@ -82,6 +83,7 @@ Kubernetes today are the replication controller, endpoints controller, namespace controller, and serviceaccounts controller.`, Run: func(cmd *cobra.Command, args []string) { verflag.PrintAndExitIfRequested() + utilflag.PrintFlags(cmd.Flags()) c, err := s.Config(KnownControllers(), ControllersDisabledByDefault.List()) if err != nil { diff --git a/cmd/kube-proxy/app/BUILD b/cmd/kube-proxy/app/BUILD index 6a785fa8114..8f389dd6453 100644 --- a/cmd/kube-proxy/app/BUILD +++ b/cmd/kube-proxy/app/BUILD @@ -67,6 +67,7 @@ go_library( "//pkg/proxy/ipvs:go_default_library", "//pkg/proxy/userspace:go_default_library", "//pkg/util/configz:go_default_library", + "//pkg/util/flag:go_default_library", "//pkg/util/ipset:go_default_library", "//pkg/util/iptables:go_default_library", "//pkg/util/ipvs:go_default_library", diff --git a/cmd/kube-proxy/app/server.go b/cmd/kube-proxy/app/server.go index 3337dcdaa62..442fd3cd817 100644 --- a/cmd/kube-proxy/app/server.go +++ b/cmd/kube-proxy/app/server.go @@ -63,6 +63,7 @@ import ( "k8s.io/kubernetes/pkg/proxy/ipvs" "k8s.io/kubernetes/pkg/proxy/userspace" "k8s.io/kubernetes/pkg/util/configz" + utilflag "k8s.io/kubernetes/pkg/util/flag" utilipset "k8s.io/kubernetes/pkg/util/ipset" utiliptables "k8s.io/kubernetes/pkg/util/iptables" utilipvs "k8s.io/kubernetes/pkg/util/ipvs" @@ -333,6 +334,8 @@ addon that provides cluster DNS for these cluster IPs. The user must create a se with the apiserver API to configure the proxy.`, Run: func(cmd *cobra.Command, args []string) { verflag.PrintAndExitIfRequested() + utilflag.PrintFlags(cmd.Flags()) + cmdutil.CheckErr(opts.Complete()) cmdutil.CheckErr(opts.Validate(args)) cmdutil.CheckErr(opts.Run()) diff --git a/cmd/kube-scheduler/app/BUILD b/cmd/kube-scheduler/app/BUILD index 4e2f786dc37..aac41e86d09 100644 --- a/cmd/kube-scheduler/app/BUILD +++ b/cmd/kube-scheduler/app/BUILD @@ -24,6 +24,7 @@ go_library( "//pkg/scheduler/api/latest:go_default_library", "//pkg/scheduler/factory:go_default_library", "//pkg/util/configz:go_default_library", + "//pkg/util/flag:go_default_library", "//pkg/version:go_default_library", "//pkg/version/verflag:go_default_library", "//vendor/github.com/golang/glog:go_default_library", diff --git a/cmd/kube-scheduler/app/server.go b/cmd/kube-scheduler/app/server.go index 139249b19e6..98b042713eb 100644 --- a/cmd/kube-scheduler/app/server.go +++ b/cmd/kube-scheduler/app/server.go @@ -64,6 +64,7 @@ import ( latestschedulerapi "k8s.io/kubernetes/pkg/scheduler/api/latest" "k8s.io/kubernetes/pkg/scheduler/factory" "k8s.io/kubernetes/pkg/util/configz" + utilflag "k8s.io/kubernetes/pkg/util/flag" "k8s.io/kubernetes/pkg/version" "k8s.io/kubernetes/pkg/version/verflag" @@ -331,6 +332,8 @@ interference, deadlines, and so on. Workload-specific requirements will be expos through the API as necessary.`, Run: func(cmd *cobra.Command, args []string) { verflag.PrintAndExitIfRequested() + utilflag.PrintFlags(cmd.Flags()) + cmdutil.CheckErr(opts.Complete()) cmdutil.CheckErr(opts.Validate(args)) cmdutil.CheckErr(opts.Run()) diff --git a/cmd/kubelet/app/BUILD b/cmd/kubelet/app/BUILD index 814a7ce430c..b3108e5e291 100644 --- a/cmd/kubelet/app/BUILD +++ b/cmd/kubelet/app/BUILD @@ -94,6 +94,7 @@ go_library( "//pkg/kubelet/types:go_default_library", "//pkg/util/configz:go_default_library", "//pkg/util/filesystem:go_default_library", + "//pkg/util/flag:go_default_library", "//pkg/util/flock:go_default_library", "//pkg/util/io:go_default_library", "//pkg/util/mount:go_default_library", diff --git a/cmd/kubelet/app/server.go b/cmd/kubelet/app/server.go index 21347dba652..b09b9c871a4 100644 --- a/cmd/kubelet/app/server.go +++ b/cmd/kubelet/app/server.go @@ -31,7 +31,6 @@ import ( "path" "path/filepath" "strconv" - "strings" "time" "github.com/golang/glog" @@ -84,6 +83,7 @@ import ( kubetypes "k8s.io/kubernetes/pkg/kubelet/types" "k8s.io/kubernetes/pkg/util/configz" utilfs "k8s.io/kubernetes/pkg/util/filesystem" + utilflag "k8s.io/kubernetes/pkg/util/flag" "k8s.io/kubernetes/pkg/util/flock" kubeio "k8s.io/kubernetes/pkg/util/io" "k8s.io/kubernetes/pkg/util/mount" @@ -154,9 +154,7 @@ HTTP server: The kubelet can also listen for HTTP and respond to a simple API // short-circuit on verflag verflag.PrintAndExitIfRequested() - - // log args (separate lines, so we don't overflow line-length limits in logging infrastructure) - glog.V(2).Infof("kubelet flags: %s", strings.Join(args, "\n")) + utilflag.PrintFlags(cleanFlagSet) // set feature gates from initial flags-based config if err := utilfeature.DefaultFeatureGate.SetFromMap(kubeletConfig.FeatureGates); err != nil { diff --git a/cmd/kubelet/kubelet.go b/cmd/kubelet/kubelet.go index fea34cd64fe..3f5b2937779 100644 --- a/cmd/kubelet/kubelet.go +++ b/cmd/kubelet/kubelet.go @@ -36,7 +36,6 @@ func main() { rand.Seed(time.Now().UTC().UnixNano()) command := app.NewKubeletCommand() - logs.InitLogs() defer logs.FlushLogs() diff --git a/pkg/util/BUILD b/pkg/util/BUILD index 362af715259..67d1d92a46f 100644 --- a/pkg/util/BUILD +++ b/pkg/util/BUILD @@ -20,6 +20,7 @@ filegroup( "//pkg/util/env:all-srcs", "//pkg/util/file:all-srcs", "//pkg/util/filesystem:all-srcs", + "//pkg/util/flag:all-srcs", "//pkg/util/flock:all-srcs", "//pkg/util/goroutinemap:all-srcs", "//pkg/util/hash:all-srcs", diff --git a/pkg/util/flag/BUILD b/pkg/util/flag/BUILD new file mode 100644 index 00000000000..2295ae5fb04 --- /dev/null +++ b/pkg/util/flag/BUILD @@ -0,0 +1,29 @@ +package(default_visibility = ["//visibility:public"]) + +load( + "@io_bazel_rules_go//go:def.bzl", + "go_library", +) + +go_library( + name = "go_default_library", + srcs = ["flags.go"], + importpath = "k8s.io/kubernetes/pkg/util/flag", + deps = [ + "//vendor/github.com/golang/glog:go_default_library", + "//vendor/github.com/spf13/pflag:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], +) diff --git a/pkg/util/flag/flags.go b/pkg/util/flag/flags.go new file mode 100644 index 00000000000..e55bac1121c --- /dev/null +++ b/pkg/util/flag/flags.go @@ -0,0 +1,29 @@ +/* +Copyright 2018 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 flag + +import ( + "github.com/golang/glog" + "github.com/spf13/pflag" +) + +// PrintFlags logs the flags in the flagset +func PrintFlags(flags *pflag.FlagSet) { + flags.VisitAll(func(flag *pflag.Flag) { + glog.V(1).Infof("FLAG: --%s=%q", flag.Name, flag.Value) + }) +}