Blob Blame History Raw
From c2f1a99104dbe0003080e64ef8300ba421414d66 Mon Sep 17 00:00:00 2001
From: Jan Chaloupka <jchaloup@redhat.com>
Date: Tue, 8 Mar 2016 18:48:06 +0100
Subject: [PATCH] hyperkube.server: don't parse args for any command

---
 cmd/hyperkube/hyperkube.go               | 16 +++++++++-------
 cmd/hyperkube/kube-controller-manager.go |  1 +
 cmd/hyperkube/kube-proxy.go              |  1 +
 cmd/hyperkube/kube-scheduler.go          |  1 +
 cmd/hyperkube/kubectl.go                 |  1 +
 cmd/hyperkube/kubelet.go                 |  1 +
 cmd/hyperkube/server.go                  |  1 +
 7 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/cmd/hyperkube/hyperkube.go b/cmd/hyperkube/hyperkube.go
index 5272c5d..fda068a 100644
--- a/cmd/hyperkube/hyperkube.go
+++ b/cmd/hyperkube/hyperkube.go
@@ -154,14 +154,16 @@ func (hk *HyperKube) Run(args []string) error {
 		return err
 	}
 
-	s.Flags().AddFlagSet(hk.Flags())
-	err = s.Flags().Parse(args)
-	if err != nil || hk.helpFlagVal {
-		if err != nil {
-			hk.Printf("Error: %v\n\n", err)
+	if !s.NoParse {
+		s.Flags().AddFlagSet(hk.Flags())
+		err = s.Flags().Parse(args)
+		if err != nil || hk.helpFlagVal {
+			if err != nil {
+				hk.Printf("Error: %v\n\n", err)
+			}
+			s.Usage()
+			return err
 		}
-		s.Usage()
-		return err
 	}
 
 	verflag.PrintAndExitIfRequested()
diff --git a/cmd/hyperkube/kube-controller-manager.go b/cmd/hyperkube/kube-controller-manager.go
index 1fc5107..5b3c4a8 100644
--- a/cmd/hyperkube/kube-controller-manager.go
+++ b/cmd/hyperkube/kube-controller-manager.go
@@ -34,6 +34,7 @@ func NewKubeControllerManager() *Server {
 		Run: func(_ *Server, args []string) error {
 			return app.Run(s)
 		},
+		NoParse: false,
 	}
 	s.AddFlags(hks.Flags())
 	return &hks
diff --git a/cmd/hyperkube/kube-proxy.go b/cmd/hyperkube/kube-proxy.go
index 0a010d8..86dbb95 100644
--- a/cmd/hyperkube/kube-proxy.go
+++ b/cmd/hyperkube/kube-proxy.go
@@ -34,6 +34,7 @@ func NewKubeProxy() *Server {
 		services and forwarding it to the appropriate pods. It generally runs on
 		nodes next to the Kubelet and proxies traffic from local pods to remote pods.
 		It is also used when handling incoming external traffic.`,
+		NoParse: false,
 	}
 
 	config.AddFlags(hks.Flags())
diff --git a/cmd/hyperkube/kube-scheduler.go b/cmd/hyperkube/kube-scheduler.go
index 4be08e1..5efdf42 100644
--- a/cmd/hyperkube/kube-scheduler.go
+++ b/cmd/hyperkube/kube-scheduler.go
@@ -34,6 +34,7 @@ func NewScheduler() *Server {
 		Run: func(_ *Server, _ []string) error {
 			return app.Run(s)
 		},
+		NoParse: false,
 	}
 	s.AddFlags(hks.Flags())
 	return &hks
diff --git a/cmd/hyperkube/kubectl.go b/cmd/hyperkube/kubectl.go
index 954422d..f35c75c 100644
--- a/cmd/hyperkube/kubectl.go
+++ b/cmd/hyperkube/kubectl.go
@@ -34,5 +34,6 @@ func NewKubectlServer() *Server {
 			os.Exit(0)
 			return nil
 		},
+		NoParse: true,
 	}
 }
diff --git a/cmd/hyperkube/kubelet.go b/cmd/hyperkube/kubelet.go
index 0c2f616..a0a1037 100644
--- a/cmd/hyperkube/kubelet.go
+++ b/cmd/hyperkube/kubelet.go
@@ -36,6 +36,7 @@ func NewKubelet() *Server {
 		Run: func(_ *Server, _ []string) error {
 			return app.Run(s, nil)
 		},
+		NoParse: false,
 	}
 	s.AddFlags(hks.Flags())
 	return &hks
diff --git a/cmd/hyperkube/server.go b/cmd/hyperkube/server.go
index 6b6e5ce..0baa814 100644
--- a/cmd/hyperkube/server.go
+++ b/cmd/hyperkube/server.go
@@ -34,6 +34,7 @@ type Server struct {
 	SimpleUsage string        // One line description of the server.
 	Long        string        // Longer free form description of the server
 	Run         serverRunFunc // Run the server.  This is not expected to return.
+	NoParse     bool          // Don't parse options. Some commands do it on their own.
 
 	flags *pflag.FlagSet // Flags for the command (and all dependents)
 	name  string
-- 
1.9.3