diff --git a/cmd/kubemark/BUILD b/cmd/kubemark/BUILD index 1948949aa07..9b588bf0d7e 100644 --- a/cmd/kubemark/BUILD +++ b/cmd/kubemark/BUILD @@ -28,11 +28,14 @@ go_library( "//pkg/util/iptables/testing:go_default_library", "//pkg/util/sysctl/testing:go_default_library", "//pkg/version/prometheus: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", "//vendor/github.com/spf13/pflag:go_default_library", "//vendor/k8s.io/api/core/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets: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/client-go/kubernetes:go_default_library", "//vendor/k8s.io/client-go/rest:go_default_library", "//vendor/k8s.io/client-go/tools/clientcmd:go_default_library", diff --git a/cmd/kubemark/hollow-node.go b/cmd/kubemark/hollow-node.go index ffcbac533db..fd08daa5e80 100644 --- a/cmd/kubemark/hollow-node.go +++ b/cmd/kubemark/hollow-node.go @@ -17,11 +17,20 @@ limitations under the License. package main import ( + goflag "flag" "fmt" + "math/rand" + "os" + "time" + + "github.com/golang/glog" + "github.com/spf13/cobra" + "github.com/spf13/pflag" "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/util/sets" - "k8s.io/apiserver/pkg/util/flag" + utilflag "k8s.io/apiserver/pkg/util/flag" + "k8s.io/apiserver/pkg/util/logs" clientset "k8s.io/client-go/kubernetes" restclient "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" @@ -37,10 +46,8 @@ import ( fakeiptables "k8s.io/kubernetes/pkg/util/iptables/testing" fakesysctl "k8s.io/kubernetes/pkg/util/sysctl/testing" _ "k8s.io/kubernetes/pkg/version/prometheus" // for version metric registration + "k8s.io/kubernetes/pkg/version/verflag" fakeexec "k8s.io/utils/exec/testing" - - "github.com/golang/glog" - "github.com/spf13/pflag" ) type HollowNodeConfig struct { @@ -88,10 +95,43 @@ func (c *HollowNodeConfig) createClientConfigFromFile() (*restclient.Config, err } func main() { - config := HollowNodeConfig{} - config.addFlags(pflag.CommandLine) - flag.InitFlags() + rand.Seed(time.Now().UTC().UnixNano()) + command := newHollowNodeCommand() + + // 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 { + fmt.Fprintf(os.Stderr, "%v\n", err) + os.Exit(1) + } +} + +// newControllerManagerCommand creates a *cobra.Command object with default parameters +func newHollowNodeCommand() *cobra.Command { + s := &HollowNodeConfig{} + + cmd := &cobra.Command{ + Use: "kubemark", + Long: "kubemark", + Run: func(cmd *cobra.Command, args []string) { + verflag.PrintAndExitIfRequested() + run(s) + }, + } + s.addFlags(cmd.Flags()) + + return cmd +} + +func run(config *HollowNodeConfig) { if !knownMorphs.Has(config.Morph) { glog.Fatalf("Unknown morph: %v. Allowed values: %v", config.Morph, knownMorphs.List()) }