diff --git a/cmd/hyperkube/hyperkube.go b/cmd/hyperkube/hyperkube.go index 556711d5d8..488dcd3f6a 100644 --- a/cmd/hyperkube/hyperkube.go +++ b/cmd/hyperkube/hyperkube.go @@ -42,6 +42,7 @@ type HyperKube struct { Long string // A long description of the binary. It will be world wrapped before output. servers []Server + alphaServers []Server baseFlags *pflag.FlagSet out io.Writer helpFlagVal bool @@ -54,9 +55,24 @@ func (hk *HyperKube) AddServer(s *Server) { hk.servers[len(hk.servers)-1].hk = hk } +// AddServer adds an alpha server to the HyperKube object. +func (hk *HyperKube) AddAlphaServer(s *Server) { + hk.alphaServers = append(hk.alphaServers, *s) + hk.alphaServers[len(hk.alphaServers)-1].hk = hk +} + // FindServer will find a specific server named name. func (hk *HyperKube) FindServer(name string) (*Server, error) { - for _, s := range hk.servers { + return findServer(name, hk.servers) +} + +// FindServer will find a specific alpha server named name. +func (hk *HyperKube) FindAlphaServer(name string) (*Server, error) { + return findServer(name, hk.alphaServers) +} + +func findServer(name string, servers []Server) (*Server, error) { + for _, s := range servers { if s.Name() == name || s.AlternativeName == name { return &s, nil } @@ -154,7 +170,23 @@ func (hk *HyperKube) Run(args []string, stopCh <-chan struct{}) error { } } - s, err := hk.FindServer(serverName) + var s *Server + var err error + if serverName == "alpha" { + if len(args) > 0 && len(args[0]) > 0 { + serverName = args[0] + args = args[1:] + hk.Printf("Warning: alpha command syntax is unable!\n\n") + } else { + err = errors.New("no alpha server specified") + hk.Printf("Error: %v\n\n", err) + hk.Usage() + return err + } + s, err = hk.FindAlphaServer(serverName) + } else { + s, err = hk.FindServer(serverName) + } if err != nil { hk.Printf("Error: %v\n\n", err) hk.Usage() diff --git a/cmd/hyperkube/hyperkube_test.go b/cmd/hyperkube/hyperkube_test.go index 5a4459b2a9..5676181201 100644 --- a/cmd/hyperkube/hyperkube_test.go +++ b/cmd/hyperkube/hyperkube_test.go @@ -151,6 +151,7 @@ func runFull(t *testing.T, args string, stopCh <-chan struct{}) *result { hk.AddServer(testServer("test1")) hk.AddServer(testServer("test2")) hk.AddServer(testServer("test3")) + hk.AddAlphaServer(testServer("testAlpha1")) hk.AddServer(testServerError("test-error")) hk.AddServer(testStopChIgnoringServer("test-stop-ch-ignoring")) hk.AddServer(testStopChRespectingServer("test-stop-ch-respecting")) @@ -236,6 +237,22 @@ func TestServerError(t *testing.T) { assert.EqualError(t, x.err, "server returning error") } +func TestAlphaRun(t *testing.T) { + x := runFull(t, "hyperkube alpha testAlpha1", wait.NeverStop) + assert.NoError(t, x.err) +} + +func TestAlphaNoArgs(t *testing.T) { + x := runFull(t, "hyperkube alpha", wait.NeverStop) + assert.EqualError(t, x.err, "no alpha server specified") +} + +func TestAlphaBadServer(t *testing.T) { + x := runFull(t, "hyperkube alpha bad-server", wait.NeverStop) + assert.EqualError(t, x.err, "Server not found: bad-server") + assert.Contains(t, x.output, "Usage") +} + func TestStopChIgnoringServer(t *testing.T) { stopCh := make(chan struct{}) returnedCh := make(chan struct{}) diff --git a/cmd/hyperkube/main.go b/cmd/hyperkube/main.go index af159dc328..35e3b569b8 100644 --- a/cmd/hyperkube/main.go +++ b/cmd/hyperkube/main.go @@ -36,7 +36,6 @@ func main() { hk.AddServer(NewKubectlServer()) hk.AddServer(NewKubeAPIServer()) hk.AddServer(NewKubeControllerManager()) - hk.AddServer(NewCloudControllerManager()) hk.AddServer(NewScheduler()) if kubelet, err := NewKubelet(); err != nil { fmt.Fprintf(os.Stderr, "error: %v\n", err) @@ -47,5 +46,11 @@ func main() { hk.AddServer(NewKubeProxy()) hk.AddServer(NewKubeAggregator()) + // Alpha servers + hk.AddAlphaServer(NewCloudControllerManager()) + + // Alpha servers + hk.AddAlphaServer(NewCloudControllerManager()) + hk.RunToExit(os.Args) }