Blob Blame History Raw
From b123592e8315d15c068adf67fd9aef44d6fc7c55 Mon Sep 17 00:00:00 2001
From: Jan Chaloupka <jchaloup@redhat.com>
Date: Tue, 8 Mar 2016 19:22:24 +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 009b14a..8c9fd98 100644
--- a/cmd/hyperkube/kube-controller-manager.go
+++ b/cmd/hyperkube/kube-controller-manager.go
@@ -33,6 +33,7 @@ func NewKubeControllerManager() *Server {
 		Run: func(_ *Server, args []string) error {
 			return s.Run(args)
 		},
+		NoParse: false,
 	}
 	s.AddFlags(hks.Flags())
 	return &hks
diff --git a/cmd/hyperkube/kube-proxy.go b/cmd/hyperkube/kube-proxy.go
index cf3b12a..69ea610 100644
--- a/cmd/hyperkube/kube-proxy.go
+++ b/cmd/hyperkube/kube-proxy.go
@@ -33,6 +33,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 aba7c4f..7a272de 100644
--- a/cmd/hyperkube/kube-scheduler.go
+++ b/cmd/hyperkube/kube-scheduler.go
@@ -33,6 +33,7 @@ func NewScheduler() *Server {
 		Run: func(_ *Server, args []string) error {
 			return s.Run(args)
 		},
+		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 e12b20d..40d9ef1 100644
--- a/cmd/hyperkube/kubelet.go
+++ b/cmd/hyperkube/kubelet.go
@@ -35,6 +35,7 @@ func NewKubelet() *Server {
 		Run: func(_ *Server, _ []string) error {
 			return s.Run(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